]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
FIX OnixCoin Correct BIP44 Code 174
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
26dd39fd
IC
7 * Bootstrap v3.3.7 (http://getbootstrap.com)
8 * Copyright 2011-2016 Twitter, Inc.
ebd8d4e8 9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26dd39fd
IC
10 */
11/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
12html {
13 font-family: sans-serif;
14 -webkit-text-size-adjust: 100%;
15 -ms-text-size-adjust: 100%;
16}
17body {
18 margin: 0;
19}
20article,
21aside,
22details,
23figcaption,
24figure,
25footer,
26header,
27hgroup,
28main,
29menu,
30nav,
31section,
32summary {
33 display: block;
34}
35audio,
36canvas,
37progress,
38video {
39 display: inline-block;
40 vertical-align: baseline;
41}
42audio:not([controls]) {
43 display: none;
44 height: 0;
45}
46[hidden],
47template {
48 display: none;
49}
50a {
51 background-color: transparent;
52}
53a:active,
54a:hover {
55 outline: 0;
56}
57abbr[title] {
58 border-bottom: 1px dotted;
59}
60b,
61strong {
62 font-weight: bold;
63}
64dfn {
65 font-style: italic;
66}
67h1 {
68 margin: .67em 0;
69 font-size: 2em;
70}
71mark {
72 color: #000;
73 background: #ff0;
74}
75small {
76 font-size: 80%;
77}
78sub,
79sup {
80 position: relative;
81 font-size: 75%;
82 line-height: 0;
83 vertical-align: baseline;
84}
85sup {
86 top: -.5em;
87}
88sub {
89 bottom: -.25em;
90}
91img {
92 border: 0;
93}
94svg:not(:root) {
95 overflow: hidden;
96}
97figure {
98 margin: 1em 40px;
99}
100hr {
101 height: 0;
102 -webkit-box-sizing: content-box;
103 -moz-box-sizing: content-box;
104 box-sizing: content-box;
105}
106pre {
107 overflow: auto;
108}
109code,
110kbd,
111pre,
112samp {
113 font-family: monospace, monospace;
114 font-size: 1em;
115}
116button,
117input,
118optgroup,
119select,
120textarea {
121 margin: 0;
122 font: inherit;
123 color: inherit;
124}
125button {
126 overflow: visible;
127}
128button,
129select {
130 text-transform: none;
131}
132button,
133html input[type="button"],
134input[type="reset"],
135input[type="submit"] {
136 -webkit-appearance: button;
137 cursor: pointer;
138}
139button[disabled],
140html input[disabled] {
141 cursor: default;
142}
143button::-moz-focus-inner,
144input::-moz-focus-inner {
145 padding: 0;
146 border: 0;
147}
148input {
149 line-height: normal;
150}
151input[type="checkbox"],
152input[type="radio"] {
153 -webkit-box-sizing: border-box;
154 -moz-box-sizing: border-box;
155 box-sizing: border-box;
156 padding: 0;
157}
158input[type="number"]::-webkit-inner-spin-button,
159input[type="number"]::-webkit-outer-spin-button {
160 height: auto;
161}
162input[type="search"] {
163 -webkit-box-sizing: content-box;
164 -moz-box-sizing: content-box;
165 box-sizing: content-box;
166 -webkit-appearance: textfield;
167}
168input[type="search"]::-webkit-search-cancel-button,
169input[type="search"]::-webkit-search-decoration {
170 -webkit-appearance: none;
171}
172fieldset {
173 padding: .35em .625em .75em;
174 margin: 0 2px;
175 border: 1px solid #c0c0c0;
176}
177legend {
178 padding: 0;
179 border: 0;
180}
181textarea {
182 overflow: auto;
183}
184optgroup {
185 font-weight: bold;
186}
187table {
188 border-spacing: 0;
189 border-collapse: collapse;
190}
191td,
192th {
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}
1084html {
1085 font-size: 10px;
1086
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1088}
1089body {
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}
1096input,
1097button,
1098select,
1099textarea {
1100 font-family: inherit;
1101 font-size: inherit;
1102 line-height: inherit;
1103}
1104a {
1105 color: #337ab7;
1106 text-decoration: none;
1107}
1108a:hover,
1109a:focus {
1110 color: #23527c;
1111 text-decoration: underline;
1112}
1113a:focus {
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1116}
1117figure {
1118 margin: 0;
1119}
1120img {
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}
1151hr {
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}
1179h1,
1180h2,
1181h3,
1182h4,
1183h5,
1184h6,
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}
1196h1 small,
1197h2 small,
1198h3 small,
1199h4 small,
1200h5 small,
1201h6 small,
1202.h1 small,
1203.h2 small,
1204.h3 small,
1205.h4 small,
1206.h5 small,
1207.h6 small,
1208h1 .small,
1209h2 .small,
1210h3 .small,
1211h4 .small,
1212h5 .small,
1213h6 .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}
1224h1,
1225.h1,
1226h2,
1227.h2,
1228h3,
1229.h3 {
1230 margin-top: 20px;
1231 margin-bottom: 10px;
1232}
1233h1 small,
1234.h1 small,
1235h2 small,
1236.h2 small,
1237h3 small,
1238.h3 small,
1239h1 .small,
1240.h1 .small,
1241h2 .small,
1242.h2 .small,
1243h3 .small,
1244.h3 .small {
1245 font-size: 65%;
1246}
1247h4,
1248.h4,
1249h5,
1250.h5,
1251h6,
1252.h6 {
1253 margin-top: 10px;
1254 margin-bottom: 10px;
1255}
1256h4 small,
1257.h4 small,
1258h5 small,
1259.h5 small,
1260h6 small,
1261.h6 small,
1262h4 .small,
1263.h4 .small,
1264h5 .small,
1265.h5 .small,
1266h6 .small,
1267.h6 .small {
1268 font-size: 75%;
1269}
1270h1,
1271.h1 {
1272 font-size: 36px;
1273}
1274h2,
1275.h2 {
1276 font-size: 30px;
1277}
1278h3,
1279.h3 {
1280 font-size: 24px;
1281}
1282h4,
1283.h4 {
1284 font-size: 18px;
1285}
1286h5,
1287.h5 {
1288 font-size: 14px;
1289}
1290h6,
1291.h6 {
1292 font-size: 12px;
1293}
1294p {
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}
1308small,
1309.small {
1310 font-size: 85%;
1311}
1312mark,
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}
1347a.text-primary:hover,
1348a.text-primary:focus {
1349 color: #286090;
1350}
1351.text-success {
1352 color: #3c763d;
1353}
1354a.text-success:hover,
1355a.text-success:focus {
1356 color: #2b542c;
1357}
1358.text-info {
1359 color: #31708f;
1360}
1361a.text-info:hover,
1362a.text-info:focus {
1363 color: #245269;
1364}
1365.text-warning {
1366 color: #8a6d3b;
1367}
1368a.text-warning:hover,
1369a.text-warning:focus {
1370 color: #66512c;
1371}
1372.text-danger {
1373 color: #a94442;
1374}
1375a.text-danger:hover,
1376a.text-danger:focus {
1377 color: #843534;
1378}
1379.bg-primary {
1380 color: #fff;
1381 background-color: #337ab7;
1382}
1383a.bg-primary:hover,
1384a.bg-primary:focus {
1385 background-color: #286090;
1386}
1387.bg-success {
1388 background-color: #dff0d8;
1389}
1390a.bg-success:hover,
1391a.bg-success:focus {
1392 background-color: #c1e2b3;
1393}
1394.bg-info {
1395 background-color: #d9edf7;
1396}
1397a.bg-info:hover,
1398a.bg-info:focus {
1399 background-color: #afd9ee;
1400}
1401.bg-warning {
1402 background-color: #fcf8e3;
1403}
1404a.bg-warning:hover,
1405a.bg-warning:focus {
1406 background-color: #f7ecb5;
1407}
1408.bg-danger {
1409 background-color: #f2dede;
1410}
1411a.bg-danger:hover,
1412a.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}
1420ul,
1421ol {
1422 margin-top: 0;
1423 margin-bottom: 10px;
1424}
1425ul ul,
1426ol ul,
1427ul ol,
1428ol 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}
1445dl {
1446 margin-top: 0;
1447 margin-bottom: 20px;
1448}
1449dt,
1450dd {
1451 line-height: 1.42857143;
1452}
1453dt {
1454 font-weight: bold;
1455}
1456dd {
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}
1473abbr[title],
1474abbr[data-original-title] {
1475 cursor: help;
1476 border-bottom: 1px dotted #777;
1477}
1478.initialism {
1479 font-size: 90%;
1480 text-transform: uppercase;
1481}
1482blockquote {
1483 padding: 10px 20px;
1484 margin: 0 0 20px;
1485 font-size: 17.5px;
1486 border-left: 5px solid #eee;
1487}
1488blockquote p:last-child,
1489blockquote ul:last-child,
1490blockquote ol:last-child {
1491 margin-bottom: 0;
1492}
1493blockquote footer,
1494blockquote small,
1495blockquote .small {
1496 display: block;
1497 font-size: 80%;
1498 line-height: 1.42857143;
1499 color: #777;
1500}
1501blockquote footer:before,
1502blockquote small:before,
1503blockquote .small:before {
1504 content: '\2014 \00A0';
1505}
1506.blockquote-reverse,
1507blockquote.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,
1515blockquote.pull-right footer:before,
1516.blockquote-reverse small:before,
1517blockquote.pull-right small:before,
1518.blockquote-reverse .small:before,
1519blockquote.pull-right .small:before {
1520 content: '';
1521}
1522.blockquote-reverse footer:after,
1523blockquote.pull-right footer:after,
1524.blockquote-reverse small:after,
1525blockquote.pull-right small:after,
1526.blockquote-reverse .small:after,
1527blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1529}
1530address {
1531 margin-bottom: 20px;
1532 font-style: normal;
1533 line-height: 1.42857143;
1534}
1535code,
1536kbd,
1537pre,
1538samp {
1539 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1540}
1541code {
1542 padding: 2px 4px;
1543 font-size: 90%;
1544 color: #c7254e;
1545 background-color: #f9f2f4;
1546 border-radius: 4px;
1547}
1548kbd {
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}
1557kbd kbd {
1558 padding: 0;
1559 font-size: 100%;
1560 font-weight: bold;
1561 -webkit-box-shadow: none;
1562 box-shadow: none;
1563}
1564pre {
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}
1577pre 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}
2256table {
2257 background-color: transparent;
2258}
2259caption {
2260 padding-top: 8px;
2261 padding-bottom: 8px;
2262 color: #777;
2263 text-align: left;
2264}
2265th {
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}
2331table col[class*="col-"] {
2332 position: static;
2333 display: table-column;
2334 float: none;
2335}
2336table td[class*="col-"],
2337table 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}
2496fieldset {
2497 min-width: 0;
2498 padding: 0;
2499 margin: 0;
2500 border: 0;
2501}
2502legend {
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}
2513label {
2514 display: inline-block;
2515 max-width: 100%;
2516 margin-bottom: 5px;
2517 font-weight: bold;
2518}
2519input[type="search"] {
2520 -webkit-box-sizing: border-box;
2521 -moz-box-sizing: border-box;
2522 box-sizing: border-box;
2523}
2524input[type="radio"],
2525input[type="checkbox"] {
2526 margin: 4px 0 0;
2527 margin-top: 1px \9;
2528 line-height: normal;
2529}
2530input[type="file"] {
2531 display: block;
2532}
2533input[type="range"] {
2534 display: block;
2535 width: 100%;
2536}
2537select[multiple],
2538select[size] {
2539 height: auto;
2540}
2541input[type="file"]:focus,
2542input[type="radio"]:focus,
2543input[type="checkbox"]:focus {
2544 outline: 5px auto -webkit-focus-ring-color;
2545 outline-offset: -2px;
2546}
2547output {
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],
2594fieldset[disabled] .form-control {
2595 background-color: #eee;
2596 opacity: 1;
2597}
2598.form-control[disabled],
2599fieldset[disabled] .form-control {
2600 cursor: not-allowed;
2601}
2602textarea.form-control {
2603 height: auto;
2604}
2605input[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}
2681input[type="radio"][disabled],
2682input[type="checkbox"][disabled],
2683input[type="radio"].disabled,
2684input[type="checkbox"].disabled,
2685fieldset[disabled] input[type="radio"],
2686fieldset[disabled] input[type="checkbox"] {
2687 cursor: not-allowed;
2688}
2689.radio-inline.disabled,
2690.checkbox-inline.disabled,
2691fieldset[disabled] .radio-inline,
2692fieldset[disabled] .checkbox-inline {
2693 cursor: not-allowed;
2694}
2695.radio.disabled label,
2696.checkbox.disabled label,
2697fieldset[disabled] .radio label,
2698fieldset[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}
2719select.input-sm {
2720 height: 30px;
2721 line-height: 30px;
2722}
2723textarea.input-sm,
2724select[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}
2756select.input-lg {
2757 height: 46px;
2758 line-height: 46px;
2759}
2760textarea.input-lg,
2761select[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],
3053fieldset[disabled] .btn {
3054 cursor: not-allowed;
3055 filter: alpha(opacity=65);
3056 -webkit-box-shadow: none;
3057 box-shadow: none;
3058 opacity: .65;
3059}
3060a.btn.disabled,
3061fieldset[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,
3107fieldset[disabled] .btn-default:hover,
3108.btn-default.disabled:focus,
3109.btn-default[disabled]:focus,
3110fieldset[disabled] .btn-default:focus,
3111.btn-default.disabled.focus,
3112.btn-default[disabled].focus,
3113fieldset[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,
3164fieldset[disabled] .btn-primary:hover,
3165.btn-primary.disabled:focus,
3166.btn-primary[disabled]:focus,
3167fieldset[disabled] .btn-primary:focus,
3168.btn-primary.disabled.focus,
3169.btn-primary[disabled].focus,
3170fieldset[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,
3221fieldset[disabled] .btn-success:hover,
3222.btn-success.disabled:focus,
3223.btn-success[disabled]:focus,
3224fieldset[disabled] .btn-success:focus,
3225.btn-success.disabled.focus,
3226.btn-success[disabled].focus,
3227fieldset[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,
3278fieldset[disabled] .btn-info:hover,
3279.btn-info.disabled:focus,
3280.btn-info[disabled]:focus,
3281fieldset[disabled] .btn-info:focus,
3282.btn-info.disabled.focus,
3283.btn-info[disabled].focus,
3284fieldset[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,
3335fieldset[disabled] .btn-warning:hover,
3336.btn-warning.disabled:focus,
3337.btn-warning[disabled]:focus,
3338fieldset[disabled] .btn-warning:focus,
3339.btn-warning.disabled.focus,
3340.btn-warning[disabled].focus,
3341fieldset[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,
3392fieldset[disabled] .btn-danger:hover,
3393.btn-danger.disabled:focus,
3394.btn-danger[disabled]:focus,
3395fieldset[disabled] .btn-danger:focus,
3396.btn-danger.disabled.focus,
3397.btn-danger[disabled].focus,
3398fieldset[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],
3415fieldset[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,
3433fieldset[disabled] .btn-link:hover,
3434.btn-link[disabled]:focus,
3435fieldset[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}
3467input[type="submit"].btn-block,
3468input[type="reset"].btn-block,
3469input[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}
3487tr.collapse.in {
3488 display: table-row;
3489}
3490tbody.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}
3850select.input-group-lg > .form-control,
3851select.input-group-lg > .input-group-addon,
3852select.input-group-lg > .input-group-btn > .btn {
3853 height: 46px;
3854 line-height: 46px;
3855}
3856textarea.input-group-lg > .form-control,
3857textarea.input-group-lg > .input-group-addon,
3858textarea.input-group-lg > .input-group-btn > .btn,
3859select[multiple].input-group-lg > .form-control,
3860select[multiple].input-group-lg > .input-group-addon,
3861select[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}
3873select.input-group-sm > .form-control,
3874select.input-group-sm > .input-group-addon,
3875select.input-group-sm > .input-group-btn > .btn {
3876 height: 30px;
3877 line-height: 30px;
3878}
3879textarea.input-group-sm > .form-control,
3880textarea.input-group-sm > .input-group-addon,
3881textarea.input-group-sm > .input-group-btn > .btn,
3882select[multiple].input-group-sm > .form-control,
3883select[multiple].input-group-sm > .input-group-addon,
3884select[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,
4591fieldset[disabled] .navbar-default .btn-link:hover,
4592.navbar-default .btn-link[disabled]:focus,
4593fieldset[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,
4693fieldset[disabled] .navbar-inverse .btn-link:hover,
4694.navbar-inverse .btn-link[disabled]:focus,
4695fieldset[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}
4862a.label:hover,
4863a.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}
4943a.badge:hover,
4944a.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}
5023a.thumbnail:hover,
5024a.thumbnail:focus,
5025a.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}
5270a.list-group-item,
5271button.list-group-item {
5272 color: #555;
5273}
5274a.list-group-item .list-group-item-heading,
5275button.list-group-item .list-group-item-heading {
5276 color: #333;
5277}
5278a.list-group-item:hover,
5279button.list-group-item:hover,
5280a.list-group-item:focus,
5281button.list-group-item:focus {
5282 color: #555;
5283 text-decoration: none;
5284 background-color: #f5f5f5;
5285}
5286button.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}
5335a.list-group-item-success,
5336button.list-group-item-success {
5337 color: #3c763d;
5338}
5339a.list-group-item-success .list-group-item-heading,
5340button.list-group-item-success .list-group-item-heading {
5341 color: inherit;
5342}
5343a.list-group-item-success:hover,
5344button.list-group-item-success:hover,
5345a.list-group-item-success:focus,
5346button.list-group-item-success:focus {
5347 color: #3c763d;
5348 background-color: #d0e9c6;
5349}
5350a.list-group-item-success.active,
5351button.list-group-item-success.active,
5352a.list-group-item-success.active:hover,
5353button.list-group-item-success.active:hover,
5354a.list-group-item-success.active:focus,
5355button.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}
5364a.list-group-item-info,
5365button.list-group-item-info {
5366 color: #31708f;
5367}
5368a.list-group-item-info .list-group-item-heading,
5369button.list-group-item-info .list-group-item-heading {
5370 color: inherit;
5371}
5372a.list-group-item-info:hover,
5373button.list-group-item-info:hover,
5374a.list-group-item-info:focus,
5375button.list-group-item-info:focus {
5376 color: #31708f;
5377 background-color: #c4e3f3;
5378}
5379a.list-group-item-info.active,
5380button.list-group-item-info.active,
5381a.list-group-item-info.active:hover,
5382button.list-group-item-info.active:hover,
5383a.list-group-item-info.active:focus,
5384button.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}
5393a.list-group-item-warning,
5394button.list-group-item-warning {
5395 color: #8a6d3b;
5396}
5397a.list-group-item-warning .list-group-item-heading,
5398button.list-group-item-warning .list-group-item-heading {
5399 color: inherit;
5400}
5401a.list-group-item-warning:hover,
5402button.list-group-item-warning:hover,
5403a.list-group-item-warning:focus,
5404button.list-group-item-warning:focus {
5405 color: #8a6d3b;
5406 background-color: #faf2cc;
5407}
5408a.list-group-item-warning.active,
5409button.list-group-item-warning.active,
5410a.list-group-item-warning.active:hover,
5411button.list-group-item-warning.active:hover,
5412a.list-group-item-warning.active:focus,
5413button.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}
5422a.list-group-item-danger,
5423button.list-group-item-danger {
5424 color: #a94442;
5425}
5426a.list-group-item-danger .list-group-item-heading,
5427button.list-group-item-danger .list-group-item-heading {
5428 color: inherit;
5429}
5430a.list-group-item-danger:hover,
5431button.list-group-item-danger:hover,
5432a.list-group-item-danger:focus,
5433button.list-group-item-danger:focus {
5434 color: #a94442;
5435 background-color: #ebcccc;
5436}
5437a.list-group-item-danger.active,
5438button.list-group-item-danger.active,
5439a.list-group-item-danger.active:hover,
5440button.list-group-item-danger.active:hover,
5441a.list-group-item-danger.active:focus,
5442button.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}
5864button.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</style>
ab78acc6
IC
6862 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6863 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6864 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 6865 <meta content="Ian Coleman" name="author" />
18f16009 6866 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
26dd39fd
IC
6867 </head>
6868 <body>
6869 <div class="container">
6870
6871 <h1 class="text-center">Mnemonic Code Converter</h1>
6872 <p class="version">v0.3.1</p>
6873 <hr>
6874 <div class="row">
6875 <div class="col-md-12">
6876 <h2>Mnemonic</h2>
6877 <form class="form-horizontal" role="form">
6878 <div class="form-group">
6879 <div class="col-sm-2"></div>
6880 <div class="col-sm-10">
6881 <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>
6882 <p>
6883 For more info see the
6884 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6885 </p>
6886 </div>
6887 </div>
6888 <div class="form-group generate-container">
6889 <label class="col-sm-2 control-label"></label>
6890 <div class="col-sm-10">
6891 <div class="form-inline">
6892 <div class="input-group-inline">
6893 <span>Generate a random mnemonic, or enter your own below</span>:
6894 <button class="btn generate">Generate</button>
6895 <select id="strength" class="strength form-control">
6896 <option value="3">3</option>
6897 <option value="6">6</option>
6898 <option value="9">9</option>
6899 <option value="12">12</option>
6900 <option value="15" selected>15</option>
6901 <option value="18">18</option>
6902 <option value="21">21</option>
6903 <option value="24">24</option>
6904 </select>
6905 <span>words</span>
6906 </div>
6907 </div>
6908 </div>
6909 </div>
6910 <div class="entropy-container hidden">
6911 <div class="form-group text-danger">
6912 <label class="col-sm-2 control-label">Warning</label>
6913 <div class="col-sm-10 form-control-static">
6914 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6915 <a href="#entropy-notes">Read more</a>
6916 </div>
6917 </div>
6918 <div class="form-group">
6919 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6920 <div class="col-sm-7">
6921 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6922 <div class="row filter-warning text-danger hidden">
6923 <p class="col-sm-12">
6924 <strong>
6925 Some characters have been discarded
6926 </strong>
6927 </p>
6928 </div>
6929 <div class="row">
6930 <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>
6931 <div class="crack-time col-sm-3 form-control-static"></div>
6932 <label class="col-sm-3 control-label">Event Count</label>
6933 <div class="event-count col-sm-3 form-control-static"></div>
6934 </div>
6935 <div class="row">
6936 <label class="col-sm-3 control-label">Entropy Type</label>
6937 <div class="type col-sm-3 form-control-static"></div>
6938 <label class="col-sm-3 control-label">Bits Per Event</label>
6939 <div class="bits-per-event col-sm-3 form-control-static"></div>
6940 </div>
6941 <div class="row">
6942 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6943 <div class="word-count col-sm-3 form-control-static"></div>
6944 <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>
6945 <div class="bits col-sm-3 form-control-static"></div>
6946 </div>
6947 <label class="col-sm-3 control-label">Filtered Entropy</label>
6948 <div class="filtered col-sm-9 form-control-static"></div>
6949 <label class="col-sm-3 control-label">Raw Binary</label>
6950 <div class="binary col-sm-9 form-control-static"></div>
6951 <label class="col-sm-3 control-label">Word Indexes</label>
6952 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6953 <label class="col-sm-3 control-label">Mnemonic Length</label>
6954 <div class="col-sm-9">
6955 <select class="mnemonic-length form-control">
6956 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6957 <option value="12">12 <span>Words</span></option>
6958 <option value="15">15 <span>Words</option>
6959 <option value="18">18 <span>Words</span></option>
6960 <option value="21">21 <span>Words</span></option>
6961 <option value="24">24 <span>Words</span></option>
6962 </select>
6963 </div>
6964 </div>
6965 <div class="col-sm-3">
6966 <p>Valid entropy values include:</p>
6967 <ul>
6968 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6969 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6970 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6971 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6972 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6973 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6974 </ul>
6975 </div>
6976 </div>
6977 </div>
6978 <div class="form-group">
6979 <div class="col-sm-2"></div>
6980 <div class="col-sm-10 checkbox">
6981 <label>
6982 <input type="checkbox" class="use-entropy">
6983 <span>Show entropy details</span>
6984 </label>
6985 </div>
6986 </div>
6987 <div class="form-group">
6988 <label class="col-sm-2 control-label">Mnemonic Language</label>
6989 <div class="col-sm-10 languages">
6990 <div class="form-control no-border">
6991 <a href="#english">English</a>
6992 <a href="#japanese" title="Japanese">日本語</a>
6993 <a href="#spanish" title="Spanish">Español</a>
6994 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
6995 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
6996 <a href="#french" title="French">Français</a>
6997 <a href="#italian" title="Italian">Italiano</a>
6998 </div>
6999 </div>
7000 </div>
7001 <div class="form-group">
7002 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7003 <div class="col-sm-10">
7004 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7005 </div>
7006 </div>
7007 <div class="form-group">
7008 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7009 <div class="col-sm-10">
7010 <textarea id="passphrase" class="passphrase form-control"></textarea>
7011 </div>
7012 </div>
7013 <div class="form-group">
7014 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7015 <div class="col-sm-10">
7016 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7017 </div>
7018 </div>
7019 <div class="form-group">
7020 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7021 <div class="col-sm-10">
7022 <select id="network-phrase" class="network form-control">
7023 <!-- populated by javascript -->
7024 </select>
7025 </div>
7026 </div>
7027 <div class="form-group">
7028 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7029 <div class="col-sm-10">
7030 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7031 </div>
7032 </div>
7033 <div class="form-group litecoin-ltub-container hidden">
7034 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7035 <div class="col-sm-10 checkbox">
7036 <label>
7037 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7038 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7039 </label>
7040 </div>
7041 </div>
7042 </form>
7043 </div>
7044 </div>
7045
7046 <hr>
7047
7048 <div class="row">
7049 <div class="col-md-12">
7050 <h2>Derivation Path</h2>
7051 <ul class="derivation-type nav nav-tabs" role="tablist">
7052 <li id="bip32-tab">
7053 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7054 </li>
7055 <li id="bip44-tab" class="active">
7056 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7057 </li>
7058 <li id="bip49-tab">
7059 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7060 </li>
7061 <li id="bip141-tab">
7062 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7063 </li>
7064 </ul>
7065 <div class="derivation-type tab-content">
7066 <div id="bip44" class="tab-pane active">
7067 <form class="form-horizontal" role="form">
7068 <br>
7069 <div class="col-sm-2"></div>
7070 <div class="col-sm-10">
7071 <p>
7072 For more info see the
7073 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7074 </p>
7075 </div>
7076 <div class="form-group">
7077 <label for="purpose" class="col-sm-2 control-label">
7078 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7079 </label>
7080 <div class="col-sm-10">
7081 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7082 </div>
7083 </div>
7084 <div class="form-group">
7085 <label for="coin" class="col-sm-2 control-label">
7086 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7087 </label>
7088 <div class="col-sm-10">
7089 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7090 </div>
7091 </div>
7092 <div class="form-group">
7093 <label for="account" class="col-sm-2 control-label">
7094 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7095 </label>
7096 <div class="col-sm-10">
7097 <input id="account" type="text" class="account form-control" value="0">
7098 </div>
7099 </div>
7100 <div class="form-group">
7101 <label for="change" class="col-sm-2 control-label">
7102 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7103 </label>
7104 <div class="col-sm-10">
7105 <input id="change" type="text" class="change form-control" value="0">
7106 </div>
7107 </div>
7108 <div class="form-group">
7109 <label class="col-sm-2 control-label">
7110 </label>
7111 <div class="col-sm-10">
7112 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7113 </div>
7114 </div>
7115 <div class="form-group">
7116 <label for="account-xprv" class="col-sm-2 control-label">
7117 <span>Account Extended Private Key</span>
7118 </label>
7119 <div class="col-sm-10">
7120 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7121 </div>
7122 </div>
7123 <div class="form-group">
7124 <label for="account-xpub" class="col-sm-2 control-label">
7125 <span>Account Extended Public Key</span>
7126 </label>
7127 <div class="col-sm-10">
7128 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7129 </div>
7130 </div>
7131 <div class="form-group">
7132 <label class="col-sm-2 control-label">
7133 </label>
7134 <div class="col-sm-10">
7135 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7136 </div>
7137 </div>
7138 <div class="form-group">
7139 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7140 <div class="col-sm-10">
7141 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7142 </div>
7143 </div>
7144 </form>
7145 </div>
7146 <div id="bip32" class="tab-pane">
7147 <form class="form-horizontal" role="form">
7148 <br>
7149 <div class="col-sm-2"></div>
7150 <div class="col-sm-10">
7151 <p>
7152 For more info see the
7153 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7154 </p>
7155 </div>
7156 <div class="form-group">
7157 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7158 <div class="col-sm-10">
7159 <select id="bip32-client" class="client form-control">
7160 <option value="custom">Custom derivation path</option>
7161 <!-- populated by javascript -->
7162 </select>
7163 </div>
7164 </div>
7165 <div class="form-group">
7166 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7167 <div class="col-sm-10">
7168 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7169 </div>
7170 </div>
7171 <div class="form-group">
7172 <div class="col-sm-2"></div>
7173 <label class="col-sm-10">
7174 <input class="hardened-addresses" type="checkbox">
7175 <span>Use hardened addresses</span>
7176 </label>
7177 </div>
7178 <div class="form-group">
7179 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7180 <div class="col-sm-10">
7181 <p class="form-control no-border">
7182 Use path <code>m/0'/0'</code> with hardened addresses.
7183 </p>
7184 <p class="form-control no-border">
7185 For more info see the
7186 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7187 </p>
7188 </div>
7189 </div>
7190 <div class="form-group">
7191 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7192 <div class="col-sm-10">
7193 <p class="form-control no-border">
7194 <span>Use path <code>m/0'/0</code>.</span>
7195 </p>
7196 <p class="form-control no-border">
7197 <span>For more info see</span>
7198 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7199 </p>
7200 </div>
7201 </div>
7202 <div class="form-group">
7203 <label class="col-sm-2 control-label">Block Explorers</label>
7204 <div class="col-sm-10">
7205 <p class="form-control no-border">
7206 <span>Use path <code>m/44'/0'/0'</code>.</span>
7207 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7208 </p>
7209 <p class="form-control no-border">
7210 <span>Can be used with</span>:
7211 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7212 </p>
7213 </div>
7214 </div>
7215 </form>
7216 </div>
7217 <div id="bip49" class="tab-pane">
7218 <form class="form-horizontal" role="form">
7219 <br>
7220 <div class="unavailable hidden">
7221 <div class="form-group">
7222 <div class="col-sm-2"></div>
7223 <div class="col-sm-10">
7224 <p>BIP49 is unavailable for this coin.</p>
7225 </div>
7226 </div>
7227 </div>
7228 <div class="available">
7229 <div class="col-sm-2"></div>
7230 <div class="col-sm-10">
7231 <p>
7232 For more info see the
7233 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7234 </p>
7235 </div>
7236 <div class="form-group">
7237 <label for="purpose" class="col-sm-2 control-label">
7238 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7239 </label>
7240 <div class="col-sm-10">
7241 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7242 </div>
7243 </div>
7244 <div class="form-group">
7245 <label for="coin" class="col-sm-2 control-label">
7246 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7247 </label>
7248 <div class="col-sm-10">
7249 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7250 </div>
7251 </div>
7252 <div class="form-group">
7253 <label for="account" class="col-sm-2 control-label">
7254 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7255 </label>
7256 <div class="col-sm-10">
7257 <input id="account" type="text" class="account form-control" value="0">
7258 </div>
7259 </div>
7260 <div class="form-group">
7261 <label for="change" class="col-sm-2 control-label">
7262 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7263 </label>
7264 <div class="col-sm-10">
7265 <input id="change" type="text" class="change form-control" value="0">
7266 </div>
7267 </div>
7268 <div class="form-group">
7269 <label class="col-sm-2 control-label">
7270 </label>
7271 <div class="col-sm-10">
7272 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7273 </div>
7274 </div>
7275 <div class="form-group">
7276 <label for="account-xprv" class="col-sm-2 control-label">
7277 <span>Account Extended Private Key</span>
7278 </label>
7279 <div class="col-sm-10">
7280 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7281 </div>
7282 </div>
7283 <div class="form-group">
7284 <label for="account-xpub" class="col-sm-2 control-label">
7285 <span>Account Extended Public Key</span>
7286 </label>
7287 <div class="col-sm-10">
7288 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7289 </div>
7290 </div>
7291 <div class="form-group">
7292 <label class="col-sm-2 control-label">
7293 </label>
7294 <div class="col-sm-10">
7295 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7296 </div>
7297 </div>
7298 <div class="form-group">
7299 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7300 <div class="col-sm-10">
7301 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7302 </div>
7303 </div>
7304 </div>
7305 </form>
7306 </div>
7307 <div id="bip141" class="tab-pane">
7308 <form class="form-horizontal" role="form">
7309 <br>
7310 <div class="unavailable hidden">
7311 <div class="form-group">
7312 <div class="col-sm-2"></div>
7313 <div class="col-sm-10">
7314 <p>BIP141 is unavailable for this coin.</p>
7315 </div>
7316 </div>
7317 </div>
7318 <div class="available">
7319 <div class="col-sm-2"></div>
7320 <div class="col-sm-10">
7321 <p>
7322 For more info see the
7323 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7324 </p>
7325 </div>
7326 <div class="form-group">
7327 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7328 <div class="col-sm-10">
7329 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7330 </div>
7331 </div>
7332 <div class="form-group">
7333 <label class="col-sm-2 control-label">Script Semantics</label>
7334 <div class="col-sm-10">
7335 <select class="form-control bip141-semantics">
7336 <option value="p2wpkh">P2WPKH</option>
7337 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7338 </select>
7339 </div>
7340 </div>
7341 </div>
7342 </form>
7343 </div>
7344 </div>
7345 <form class="form-horizontal" role="form">
7346 <div class="form-group">
7347 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7348 <div class="col-sm-10">
7349 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7350 </div>
7351 </div>
7352 <div class="form-group">
7353 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7354 <div class="col-sm-10">
7355 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7356 </div>
7357 </div>
7358 </form>
7359 </div>
7360 </div>
7361
7362 <hr>
7363
7364 <div class="row">
7365 <div class="col-md-12">
7366 <h2>Derived Addresses</h2>
7367 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7368 </div>
7369 <div class="col-md-12 use-bitpay-addresses-container hidden">
7370 <div class="checkbox">
7371 <label>
7372 <input type="checkbox" class="use-bitpay-addresses">
7373 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7374 </label>
7375 </div>
7376 </div>
7377 <div class="col-md-12">
7378 <table class="table table-striped">
7379 <thead>
7380 <th>
7381 <div class="input-group">
7382 <span>Path</span>&nbsp;&nbsp;
7383 <button class="index-toggle">Toggle</button>
7384 </div>
7385 </th>
7386 <th>
7387 <div class="input-group">
7388 <span>Address</span>&nbsp;&nbsp;
7389 <button class="address-toggle">Toggle</button>
7390 </div>
7391 </th>
7392 <th>
7393 <div class="input-group">
7394 <span>Public Key</span>&nbsp;&nbsp;
7395 <button class="public-key-toggle">Toggle</button>
7396 </div>
7397 </th>
7398 <th>
7399 <div class="input-group">
7400 <span>Private Key</span>&nbsp;&nbsp;
7401 <button class="private-key-toggle">Toggle</button>
7402 </div>
7403 </th>
7404 </thead>
7405 <tbody class="addresses monospace">
7406 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7407 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7408 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7409 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7410 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7411 </tbody>
7412 </table>
7413 </div>
7414 </div>
7415 <span>Show</span>
7416 <input type="number" class="rows-to-add" value="20">
7417 <button class="more">more rows</button>
7418 <span>starting from index</span>
7419 <input type="number" class="more-rows-start-index">
7420 <span>(leave blank to generate from next index)</span>
7421
7422 <hr>
7423
7424 <div class="row">
7425 <div class="col-md-12">
7426 <h2>More info</h2>
7427 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7428 <p>
7429 Read more at the
7430 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7431 </p>
7432 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7433 <p>
7434 Read more at the
7435 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7436 </p>
7437 <p>
7438 See the demo at
7439 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7440 </p>
7441 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7442 <p>
7443 Read more at the
7444 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7445 </p>
7446 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7447 <p>
7448 Read more at the
7449 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7450 </p>
7451 <h3>Private Keys</h3>
7452 <p>
7453 <span>
7454 Use private keys at
7455 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7456 </span>
7457 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7458 </p>
7459 <h3 id="entropy-notes">Entropy</h3>
7460 <p>
7461 <span>
7462 Entropy values must be sourced from a
7463 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7464 </span>
7465 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7466 <span>
7467 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7468 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7469 random enough for the needs of this tool.
7470 </span>
7471 </p>
7472 <p>
7473 <strong><span>Do not store entropy.</span></strong>
7474 </p>
7475 <p>
7476 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7477 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7478 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7479 </p>
7480 <p>
7481 <span>
7482 The random mnemonic generator on this page uses a
7483 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7484 </span>
7485 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7486 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7487 <span>In that case you might choose to use your own source of entropy.</span>
7488 </p>
7489 <p>
7490 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7491 </p>
7492 <h3>License</h3>
7493 <p>
7494 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7495 </span>
7496 </p>
7497 <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>
7498 </div>
7499 </div>
7500
7501 <hr>
7502
7503 <div class="row">
7504 <div class="col-md-12">
7505 <h2>Alternative Tools</h2>
7506 <p>This tool is interoperable with any BIP39 wallet.</p>
7507 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7508 <p>
7509 <a href="https://bip32jp.github.io/english/">
7510 https://bip32jp.github.io/english/
7511 </a>
7512 </p>
7513 </div>
7514 </div>
7515
7516 <hr>
7517
7518 <div class="row">
7519 <div class="col-md-12">
7520
7521 <h2>Offline Usage</h2>
7522
7523 <p>
7524 You can use this tool without having to be online.
7525 </p>
7526 <p>
7527 In your browser, select file save-as, and save this page
7528 as a file.
7529 </p>
7530 <p>
7531 Double-click that file to open it in a browser
7532 on any offline computer.
7533 </p>
7534 <p>
7535 <span>Alternatively, download the file from the repository</span>
7536 -
7537 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7538 </p>
7539
7540 </div>
7541 </div>
7542
7543 <hr>
7544
7545 <div class="row">
7546 <div class="col-md-12">
7547
7548 <h2>This project is 100% open-source code</h2>
7549
7550 <p>
7551 <span>Get the source code from the repository</span>
7552 -
7553 <a href="https://github.com/iancoleman/bip39" target="_blank">
7554 https://github.com/iancoleman/bip39
7555 </a>
7556 </p>
7557
7558 <h3>Libraries</h3>
7559
7560 <p>
7561 <span>BitcoinJS - </span>
7562 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7563 https://github.com/bitcoinjs/bitcoinjs-lib
7564 </a>
7565 </p>
7566
7567 <p>
7568 <span>jsBIP39 - </span>
7569 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7570 https://github.com/iancoleman/jsbip39
7571 </a>
7572 </p>
7573
7574 <p>
7575 <span>sjcl - </span>
7576 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7577 https://github.com/bitwiseshiftleft/sjcl
7578 </a>
7579 </p>
7580
7581 <p>
7582 <span>jQuery - </span>
7583 <a href="https://jquery.com/" target="_blank">
7584 https://jquery.com/
7585 </a>
7586 </p>
7587
7588 <p>
7589 <span>Twitter Bootstrap - </span>
7590 <a href="http://getbootstrap.com/" target="_blank">
7591 http://getbootstrap.com/
7592 </a>
7593 </p>
7594
7595 </div>
7596 </div>
7597
7598 </div>
7599
7600 <div class="qr-container hidden">
7601 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7602 <div class="qr-hint bg-primary">Click field to show QR</div>
7603 <div class="qr-hider hidden">
7604 <div class="qr-image"></div>
7605 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7606 </div>
7607 </div>
7608
7609 <div class="feedback-container">
7610 <div class="feedback">Loading...</div>
7611 </div>
7612
7613 <script type="text/template" id="address-row-template">
7614 <tr>
7615 <td class="index"><span></span></td>
7616 <td class="address"><span data-show-qr></span></td>
7617 <td class="pubkey"><span data-show-qr></span></td>
7618 <td class="privkey"><span data-show-qr></span></td>
7619 </tr>
7620 </script>
7621 <script>// From
7622// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7623// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7624// but is not required in any modern browsers.
7625// For more information, see
7626// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7627
7628//----------------------------------------------------------------------
7629//
7630// ECMAScript 2015 Polyfills
7631//
7632//----------------------------------------------------------------------
7633
7634(function (global) {
7635 "use strict";
7636
7637 // Set this to always override native implementations, for testing
7638 // the polyfill in browsers with partial/full ES2015 support.
7639 var OVERRIDE_NATIVE_FOR_TESTING = false;
7640
7641 var undefined = (void 0); // Paranoia
7642
7643 // Helpers
7644
7645 function strict(o) {
7646 return o === global ? undefined : o;
7647 }
7648
7649 function hook(o, p, f) {
7650 var op = o[p];
7651 console.assert(typeof op === 'function', 'Hooking a non-function');
7652 o[p] = function() {
7653 var o = strict(this);
7654 var r = f.apply(o, arguments);
7655 return r !== undefined ? r : op.apply(o, arguments);
7656 };
7657 }
7658
7659 function isSymbol(s) {
7660 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7661 }
7662
7663 function getPropertyDescriptor(target, name) {
7664 var desc = Object.getOwnPropertyDescriptor(target, name);
7665 var proto = Object.getPrototypeOf(target);
7666 while (!desc && proto) {
7667 desc = Object.getOwnPropertyDescriptor(proto, name);
7668 proto = Object.getPrototypeOf(proto);
7669 }
7670 return desc;
7671 }
7672
7673 var enqueue = (function(nativePromise, nativeSetImmediate) {
7674 if (nativePromise)
7675 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7676 if (nativeSetImmediate)
7677 return function(job) { nativeSetImmediate(job); };
7678 return function(job) { setTimeout(job, 0); };
7679 }(global['Promise'], global['setImmediate']));
7680
7681 function define(o, p, v, override) {
7682 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7683 return;
7684
7685 if (typeof v === 'function') {
7686 // Sanity check that functions are appropriately named (where possible)
7687 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7688 Object.defineProperty(o, p, {
7689 value: v,
7690 configurable: true,
7691 enumerable: false,
7692 writable: true
7693 });
7694 } else {
7695 Object.defineProperty(o, p, {
7696 value: v,
7697 configurable: false,
7698 enumerable: false,
7699 writable: false
7700 });
7701 }
7702 }
7703
7704 function set_internal(o, p, v) {
7705 Object.defineProperty(o, p, {
7706 value: v,
7707 configurable: false,
7708 enumerable: false,
7709 writable: true
7710 });
7711 }
7712
7713 // Snapshot intrinsic functions
7714 var $isNaN = global.isNaN,
7715 $parseInt = global.parseInt,
7716 $parseFloat = global.parseFloat;
7717
7718 var E = Math.E,
7719 LOG10E = Math.LOG10E,
7720 LOG2E = Math.LOG2E,
7721 abs = Math.abs,
7722 ceil = Math.ceil,
7723 exp = Math.exp,
7724 floor = Math.floor,
7725 log = Math.log,
7726 max = Math.max,
7727 min = Math.min,
7728 pow = Math.pow,
7729 random = Math.random,
7730 sqrt = Math.sqrt;
7731
7732 var orig_match = String.prototype.match,
7733 orig_replace = String.prototype.replace,
7734 orig_search = String.prototype.search,
7735 orig_split = String.prototype.split;
7736
7737 // These are used for implementing the polyfills, but not exported.
7738
7739 // Inspired by https://gist.github.com/1638059
7740 /** @constructor */
7741 function EphemeronTable() {
7742 var secretKey = ObjectCreate(null);
7743
7744 function conceal(o) {
7745 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7746 Object.defineProperty(o, 'valueOf', {
7747 value: (function(secretKey) {
7748 return function (k) {
7749 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7750 };
7751 }(secretKey)),
7752 configurable: true,
7753 writeable: true,
7754 enumerable: false
7755 });
7756 return secrets;
7757 }
7758
7759 function reveal(o) {
7760 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7761 return v === o ? null : v;
7762 }
7763
7764 return {
7765 clear: function() {
7766 secretKey = ObjectCreate(null);
7767 },
7768 remove: function(key) {
7769 var secrets = reveal(key);
7770 if (secrets && HasOwnProperty(secrets, 'value')) {
7771 delete secrets.value;
7772 return true;
7773 }
7774 return false;
7775 },
7776 get: function(key, defaultValue) {
7777 var secrets = reveal(key);
7778 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7779 },
7780 has: function(key) {
7781 var secrets = reveal(key);
7782 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7783 },
7784 set: function(key, value) {
7785 var secrets = reveal(key) || conceal(key);
7786 secrets.value = value;
7787 }
7788 };
7789 }
7790
7791 var empty = Object.create(null);
7792
7793 //----------------------------------------------------------------------
7794 //
7795 // ECMAScript 2015
7796 // http://www.ecma-international.org/ecma-262/6.0/
7797 //
7798 //----------------------------------------------------------------------
7799
7800 // ---------------------------------------
7801 // 19.4 Symbol Objects
7802 // ---------------------------------------
7803
7804 // NOTE: Symbols are defined here - out of spec order - since we need the
7805 // properties and prototype to be populated for other polyfills.
7806
7807 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7808
7809 var symbolForKey;
7810 (function() {
7811 var secret = Object.create(null);
7812 var symbolMap = {};
7813 symbolForKey = function(k) {
7814 return symbolMap[k];
7815 };
7816
7817 var GlobalSymbolRegistry = [];
7818
7819 function unique(bits) {
7820 return Array(bits + 1).join('x').replace(/x/g, function() {
7821 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7822 });
7823 }
7824
7825 // 19.4.1 The Symbol Constructor
7826 // 19.4.1.1 Symbol ( description=undefined )
7827 function Symbol(description) {
7828 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7829 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7830
7831 var descString = description === undefined ? undefined : String(description);
7832
7833 set_internal(this, '[[SymbolData]]', unique(128));
7834 set_internal(this, '[[Description]]', descString);
7835
7836 symbolMap[this] = this;
7837 return this;
7838 }
7839
7840 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7841 global.Symbol = Symbol;
7842
7843 // 19.4.2 Properties of the Symbol Constructor
7844
7845 // 19.4.2.1 Symbol.for (key)
7846 define(Symbol, 'for', function for_(key) {
7847 var stringKey = String(key);
7848 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7849 var e = GlobalSymbolRegistry[i];
7850 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7851 }
7852 var newSymbol = Symbol(key);
7853 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7854 return newSymbol;
7855 });
7856
7857 // 19.4.2.2 Symbol.hasInstance
7858 // 19.4.2.3 Symbol.isConcatSpreadable
7859
7860 // 19.4.2.4 Symbol.iterator
7861 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7862
7863 // 19.4.2.5 Symbol.keyFor (sym)
7864 define(Symbol, 'keyFor', function keyFor(sym) {
7865 if (!(sym instanceof Symbol)) throw TypeError();
7866 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7867 var e = GlobalSymbolRegistry[i];
7868 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
7869 }
7870 return undefined;
7871 });
7872
7873 // 19.4.2.6 Symbol.match
7874 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
7875
7876 // 19.4.2.7 Symbol.prototype
7877
7878 // 19.4.2.8 Symbol.replace
7879 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
7880
7881 // 19.4.2.9 Symbol.search
7882 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
7883
7884 // 19.4.2.10 Symbol.species
7885
7886 // 19.4.2.11 Symbol.search
7887 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
7888
7889 // 19.4.2.12 Symbol.toPrimitive
7890
7891 // 19.4.2.13 Symbol.toStringTag
7892 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
7893
7894 // 19.4.2.14 Symbol.unscopables
7895
7896 // 19.4.3 Properties of the Symbol Prototype Object
7897 // 19.4.3.1 Symbol.prototype.constructor
7898
7899 // 19.4.3.2 Symbol.prototype.toString ( )
7900 Object.defineProperty(Symbol.prototype, 'toString', {
7901 value: function toString() {
7902 var s = strict(this);
7903 var desc = s['[[Description]]'];
7904 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
7905 },
7906 configurable: true, writeable: true, enumerable: false });
7907
7908 // 19.4.3.3 Symbol.prototype.valueOf ( )
7909 Object.defineProperty(Symbol.prototype, 'valueOf', {
7910 value: function valueOf() {
7911 // To prevent automatic string conversion:
7912 throw TypeError();
7913
7914 // Spec has approximately the following:
7915 //var s = strict(this);
7916 //if (Type(s) === 'symbol') return s;
7917 //if (Type(s) !== 'object') throw TypeError();
7918 //if (!('[[SymbolData]]' in s)) throw TypeError();
7919 //return s['[[SymbolData]]'];
7920 },
7921 configurable: true, writeable: true, enumerable: false });
7922
7923 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
7924 // (Done later to polyfill partial implementations)
7925
7926 // 19.4.4 Properties of Symbol Instances
7927 }());
7928
7929 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
7930
7931 // Defined here so that other prototypes can reference it
7932 // 25.1.2 The %IteratorPrototype% Object
7933 var $IteratorPrototype$ = {};
7934
7935 //----------------------------------------
7936 // 6 ECMAScript Data Types and Values
7937 //----------------------------------------
7938
7939 // 6.1 ECMAScript Language Types
7940
7941 // "Type(x)" is used as shorthand for "the type of x"...
7942 function Type(v) {
7943 switch (typeof v) {
7944 case 'undefined': return 'undefined';
7945 case 'boolean': return 'boolean';
7946 case 'number': return 'number';
7947 case 'string': return 'string';
7948 case 'symbol': return 'symbol';
7949 default:
7950 if (v === null) return 'null';
7951 if (v instanceof global.Symbol) return 'symbol';
7952 return 'object';
7953 }
7954 }
7955
7956 // 6.1.5.1 Well-Known Symbols
7957 var $$iterator = global.Symbol.iterator,
7958 $$match = global.Symbol.match,
7959 $$replace = global.Symbol.replace,
7960 $$search = global.Symbol.search,
7961 $$split = global.Symbol.split,
7962 $$toStringTag = global.Symbol.toStringTag;
7963
7964 //----------------------------------------
7965 // 7 Abstract Operations
7966 //----------------------------------------
7967
7968 //----------------------------------------
7969 // 7.1 Type Conversion
7970 //----------------------------------------
7971
7972 // 7.1.1 ToPrimitive ( input [, PreferredType] )
7973 // just use valueOf()
7974
7975 // 7.1.2 ToBoolean ( argument )
7976 // just use Boolean()
7977
7978 // 7.1.3 ToNumber ( argument )
7979 // just use Number()
7980
7981 // 7.1.4 ToInteger ( argument )
7982 function ToInteger(n) {
7983 n = Number(n);
7984 if ($isNaN(n)) return 0;
7985 if (n === 0 || n === Infinity || n === -Infinity) return n;
7986 return ((n < 0) ? -1 : 1) * floor(abs(n));
7987 }
7988
7989 // 7.1.5 ToInt32 ( argument )
7990 function ToInt32(v) { return v >> 0; }
7991
7992 // 7.1.6 ToUint32 ( argument )
7993 function ToUint32(v) { return v >>> 0; }
7994
7995 // 7.1.7 ToInt16 ( argument )
7996 function ToInt16(v) { return (v << 16) >> 16; }
7997
7998 // 7.1.8 ToUint16 ( argument )
7999 function ToUint16(v) { return v & 0xFFFF; }
8000
8001 // 7.1.9 ToInt8 ( argument )
8002 function ToInt8(v) { return (v << 24) >> 24; }
8003
8004 // 7.1.10 ToUint8 ( argument )
8005 function ToUint8(v) { return v & 0xFF; }
8006
8007 // 7.1.11 ToUint8Clamp ( argument )
8008 function ToUint8Clamp(argument) {
8009 var number = Number(argument);
8010 if ($isNaN(number)) return 0;
8011 if (number <= 0) return 0;
8012 if (number >= 255) return 255;
8013 var f = floor(number);
8014 if ((f + 0.5) < number) return f + 1;
8015 if (number < (f + 0.5)) return f;
8016 if (f % 2) return f + 1;
8017 return f;
8018 }
8019
8020 // 7.1.12 ToString ( argument )
8021 // just use String()
8022
8023 // 7.1.13 ToObject ( argument )
8024 function ToObject(v) {
8025 if (v === null || v === undefined) throw TypeError();
8026 return Object(v);
8027 }
8028
8029 // 7.1.14 ToPropertyKey ( argument )
8030 function ToPropertyKey(v) {
8031 return String(v);
8032 }
8033
8034 // 7.1.15 ToLength ( argument )
8035 function ToLength(v) {
8036 var len = ToInteger(v);
8037 if (len <= 0) return 0;
8038 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8039 return min(len, 0x20000000000000 - 1); // 2^53-1
8040 }
8041
8042 // 7.1.16 CanonicalNumericIndexString ( argument )
8043
8044 //----------------------------------------
8045 // 7.2 Testing and Comparison Operations
8046 //----------------------------------------
8047
8048 // 7.2.1 RequireObjectCoercible ( argument )
8049 // 7.2.2 IsArray ( argument )
8050
8051 // 7.2.3 IsCallable ( argument )
8052 function IsCallable(o) { return typeof o === 'function'; }
8053
8054 // 7.2.4 IsConstructor ( argument )
8055 function IsConstructor(o) {
8056 // Hacks for Safari 7 TypedArray XXXConstructor objects
8057 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8058 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8059 // TODO: Can this be improved on?
8060 return typeof o === 'function';
8061 }
8062
8063 // 7.2.5 IsExtensible (O)
8064 // 7.2.6 IsInteger ( argument )
8065
8066 // 7.2.7 IsPropertyKey ( argument )
8067 function IsPropertyKey(argument) {
8068 if (Type(argument) === 'string') return true;
8069 if (Type(argument) === 'symbol') return true;
8070 return false;
8071 }
8072
8073 // 7.2.8 IsRegExp ( argument )
8074 // 7.2.5 IsConstructor ( argument )
8075
8076 // 7.2.9 SameValue(x, y)
8077 function SameValue(x, y) {
8078 if (typeof x !== typeof y) return false;
8079 switch (typeof x) {
8080 case 'undefined':
8081 return true;
8082 case 'number':
8083 if (x !== x && y !== y) return true;
8084 if (x === 0 && y === 0) return 1/x === 1/y;
8085 return x === y;
8086 case 'boolean':
8087 case 'string':
8088 case 'object':
8089 default:
8090 return x === y;
8091 }
8092 }
8093
8094 // 7.2.10 SameValueZero(x, y)
8095 function SameValueZero(x, y) {
8096 if (typeof x !== typeof y) return false;
8097 switch (typeof x) {
8098 case 'undefined':
8099 return true;
8100 case 'number':
8101 if (x !== x && y !== y) return true;
8102 return x === y;
8103 case 'boolean':
8104 case 'string':
8105 case 'object':
8106 default:
8107 return x === y;
8108 }
8109 }
8110
8111 //----------------------------------------
8112 // 7.3 Operations on Objects
8113 //----------------------------------------
8114
8115 // 7.3.1 Get (O, P)
8116 // - just use o.p or o[p]
8117
8118 // 7.3.2 GetV (V, P)
8119 function GetV(v, p) {
8120 var o = ToObject(v);
8121 return o[p];
8122 }
8123
8124 // 7.3.3 Set (O, P, V, Throw)
8125 // - just use o.p = v or o[p] = v
8126
8127
8128
8129
8130 // 7.3.9 GetMethod (O, P)
8131 function GetMethod(o, p) {
8132 var func = GetV(o, p);
8133 if (func === undefined || func === null) return undefined;
8134 if (!IsCallable(func)) throw TypeError();
8135 return func;
8136 }
8137
8138 // 7.3.10 HasProperty (O, P)
8139 function HasProperty(o, p) {
8140 while (o) {
8141 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8142 if (Type(o) !== 'object') return false;
8143 o = Object.getPrototypeOf(o);
8144 }
8145 return false;
8146 }
8147
8148 // 7.3.11 HasOwnProperty (O, P)
8149 function HasOwnProperty(o, p) {
8150 return Object.prototype.hasOwnProperty.call(o, p);
8151 }
8152
8153 //----------------------------------------
8154 // 7.4 Operations on Iterator Objects
8155 //----------------------------------------
8156
8157 // 7.4.1 GetIterator ( obj, method )
8158 function GetIterator(obj, method) {
8159 if (arguments.length < 2)
8160 method = GetMethod(obj, $$iterator);
8161 var iterator = method.call(obj);
8162 if (Type(iterator) !== 'object') throw TypeError();
8163 return iterator;
8164 }
8165
8166 // 7.4.2 IteratorNext ( iterator, value )
8167 function IteratorNext(iterator, value) {
8168 if (arguments.length < 2)
8169 var result = iterator.next();
8170 else
8171 result = iterator.next(value);
8172 if (Type(result) !== 'object') throw TypeError();
8173 return result;
8174 }
8175
8176 // 7.4.3 IteratorComplete ( iterResult )
8177 function IteratorComplete(iterResult) {
8178 console.assert(Type(iterResult) === 'object');
8179 return Boolean(iterResult.done);
8180 }
8181
8182 // 7.4.4 IteratorValue ( iterResult )
8183 function IteratorValue(iterResult) {
8184 console.assert(Type(iterResult) === 'object');
8185 return iterResult.value;
8186 }
8187
8188 // 7.4.5 IteratorStep ( iterator )
8189 function IteratorStep( iterator, value ) {
8190 var result = IteratorNext(iterator, value);
8191 var done = result['done'];
8192 if (Boolean(done) === true) return false;
8193 return result;
8194 }
8195
8196 // 7.4.6 IteratorClose( iterator, completion )
8197 function IteratorClose( iterator, completion ) {
8198 console.assert(Type(iterator) === 'object');
8199 var _return = GetMethod(iterator, 'return');
8200 if (_return === undefined) return completion;
8201 try {
8202 var innerResult = _return[iterator]();
8203 } catch (result) {
8204 // TODO: If completion.[[type]] is throw, return completion
8205 return result;
8206 }
8207 if (Type(innerResult) !== 'object') throw TypeError();
8208 return completion;
8209 }
8210
8211 // 7.4.7 CreateIterResultObject (value, done)
8212 function CreateIterResultObject(value, done) {
8213 console.assert(Type(done) === 'boolean');
8214 var obj = {};
8215 obj["value"] = value;
8216 obj["done"] = done;
8217 return obj;
8218 }
8219
8220 // 7.4.8 CreateListIterator (list)
8221 // 7.4.8.1 ListIterator next( )
8222 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8223 // 7.4.9.1 CompoundIterator next( )
8224
8225 //----------------------------------------
8226 // 8 Executable Code and Execution Contexts
8227 //----------------------------------------
8228
8229 //----------------------------------------
8230 // 8.4 Jobs and Job Queues
8231 //----------------------------------------
8232
8233 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8234 function EnqueueJob(queueName, job, args) {
8235 var fn = function() { job.apply(undefined, args); };
8236 enqueue(fn);
8237 }
8238
8239 // 8.4.2 NextJob result
8240 function NextJob(result) {
8241 // no-op
8242 }
8243
8244 //----------------------------------------
8245 // 9 Ordinary and Exotic Objects Behaviors
8246 //----------------------------------------
8247
8248 // 9.1.11 [[Enumerate]] ()
8249 function Enumerate(obj) {
8250 var e = [];
8251 if (Object(obj) !== obj) return e;
8252 var visited = new Set;
8253 while (obj !== null) {
8254 Object.getOwnPropertyNames(obj).forEach(function(name) {
8255 if (!visited.has(name)) {
8256 var desc = Object.getOwnPropertyDescriptor(obj, name);
8257 if (desc) {
8258 visited.add(name);
8259 if (desc.enumerable) e.push(name);
8260 }
8261 }
8262 });
8263 obj = Object.getPrototypeOf(obj);
8264 }
8265 return e[$$iterator]();
8266 }
8267
8268 // 9.1.12 [[OwnPropertyKeys]] ( )
8269 function OwnPropertyKeys(o) {
8270 return Object.getOwnPropertyNames(o);
8271 }
8272
8273 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8274 function ObjectCreate(proto, internalSlotsList) {
8275 return Object.create(proto, internalSlotsList);
8276 }
8277
8278 // ---------------------------------------
8279 // 19 Fundamental Objects
8280 // ---------------------------------------
8281
8282 // ---------------------------------------
8283 // 19.1 Object Objects
8284 // ---------------------------------------
8285
8286 // 19.1.1 The Object Constructor
8287 // 19.1.1.1 Object ( [ value ] )
8288 // 19.1.2 Properties of the Object Constructor
8289 // 19.1.2.1 Object.assign ( target, ...sources )
8290 define(
8291 Object, 'assign',
8292 function assign(target, /*...*/sources) {
8293 var to = ToObject(target);
8294 if (arguments.length < 2) return to;
8295
8296 var sourcesIndex = 1;
8297 while (sourcesIndex < arguments.length) {
8298 var nextSource = arguments[sourcesIndex++];
8299 if (nextSource === undefined || nextSource === null) {
8300 var keys = [];
8301 } else {
8302 var from = ToObject(nextSource);
8303 keys = OwnPropertyKeys(from);
8304 }
8305 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8306 var nextKey = keys[keysIndex];
8307 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8308 if (desc !== undefined && desc.enumerable) {
8309 var propValue = from[nextKey];
8310 to[nextKey] = propValue;
8311 }
8312 }
8313 }
8314 return to;
8315 });
8316
8317 // 19.1.2.2 Object.create ( O [ , Properties ] )
8318 // 19.1.2.3 Object.defineProperties ( O, Properties )
8319 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8320 // 19.1.2.5 Object.freeze ( O )
8321 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8322
8323 (function() {
8324 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8325 $getOwnPropertyNames = Object.getOwnPropertyNames,
8326 $keys = Object.keys,
8327 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8328
8329 function isStringKey(k) { return !symbolForKey(k); }
8330
8331 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8332 define(
8333 Object, 'getOwnPropertyNames',
8334 function getOwnPropertyNames(o) {
8335 if (Object.prototype.toString.call(o) === '[object Window]') {
8336 // Workaround for cross-realm calling by IE itself.
8337 // https://github.com/inexorabletash/polyfill/issues/96
8338 try {
8339 return $getOwnPropertyNames(o).filter(isStringKey);
8340 } catch (_) {
8341 return $window_names.slice();
8342 }
8343 }
8344 return $getOwnPropertyNames(o).filter(isStringKey);
8345 }, !nativeSymbols);
8346
8347 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8348 define(
8349 Object, 'getOwnPropertySymbols',
8350 function getOwnPropertySymbols(o) {
8351 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8352 }, !nativeSymbols);
8353
8354 // 19.1.2.14 Object.keys ( O )
8355 define(
8356 Object, 'keys',
8357 function keys(o) {
8358 return $keys(o).filter(isStringKey);
8359 }, !nativeSymbols);
8360 }());
8361
8362 // 19.1.2.9 Object.getPrototypeOf ( O )
8363 // 19.1.2.10 Object.is ( value1, value2 )
8364 define(
8365 Object, 'is',
8366 function is(value1, value2) {
8367 return SameValue(value1, value2);
8368 });
8369
8370 // 19.1.2.11 Object.isExtensible ( O )
8371 // 19.1.2.12 Object.isFrozen ( O )
8372 // 19.1.2.13 Object.isSealed ( O )
8373
8374 // 19.1.2.14 Object.keys ( O )
8375 // see above
8376
8377 // 19.1.2.15 Object.preventExtensions ( O )
8378 // 19.1.2.16 Object.prototype
8379 // 19.1.2.17 Object.seal ( O )
8380
8381 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8382 define(
8383 Object, 'setPrototypeOf',
8384 function setPrototypeOf(o, proto) {
8385 if (Type(o) !== 'object') throw TypeError();
8386 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8387 o.__proto__ = proto;
8388 return o;
8389 }
8390 );
8391
8392 // 19.1.3 Properties of the Object Prototype Object
8393 // 19.1.3.1 Object.prototype.constructor
8394 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8395 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8396 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8397 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8398 // 19.1.3.6 Object.prototype.toString ( )
8399 hook(Object.prototype, 'toString',
8400 function() {
8401 var o = strict(this);
8402 if (o === Object(o) && $$toStringTag in o) {
8403 return '[object ' + o[$$toStringTag] + ']';
8404 }
8405 return undefined;
8406 });
8407
8408 // 19.1.3.7 Object.prototype.valueOf ( )
8409 // 19.1.4 Properties of Object Instances
8410
8411 // ---------------------------------------
8412 // 19.2 Function Objects
8413 // ---------------------------------------
8414
8415 // 19.2.1 The Function Constructor
8416 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8417 // 19.2.2 Properties of the Function Constructor
8418 // 19.2.2.1 Function.length
8419 // 19.2.2.2 Function.prototype
8420 // 19.2.3 Properties of the Function Prototype Object
8421 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8422 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8423 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8424 // 19.2.3.4 Function.prototype.constructor
8425 // 19.2.3.5 Function.prototype.toString ( )
8426 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8427 // 19.2.4 Function Instances
8428 // 19.2.4.1 length
8429 // 19.2.4.2 name
8430 // 19.2.4.3 prototype
8431
8432 // (No polyfillable changes from ES5)
8433
8434 // ---------------------------------------
8435 // 19.3 Boolean Objects
8436 // ---------------------------------------
8437
8438 // 19.3.1 The Boolean Constructor
8439 // 19.3.1.1 Boolean ( value )
8440 // 19.3.2 Properties of the Boolean Constructor
8441 // 19.3.2.1 Boolean.prototype
8442 // 19.3.3 Properties of the Boolean Prototype Object
8443 // 19.3.3.1 Boolean.prototype.constructor
8444 // 19.3.3.2 Boolean.prototype.toString ( )
8445 // 19.3.3.3 Boolean.prototype.valueOf ( )
8446 // 19.3.4 Properties of Boolean Instances
8447
8448 // (No polyfillable changes from ES5)
8449
8450 // ---------------------------------------
8451 // 19.4 Symbol Objects
8452 // ---------------------------------------
8453
8454 // Moved earlier in this script, so that other polyfills can depend on them.
8455
8456 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8457 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8458
8459 // ---------------------------------------
8460 // 19.5 Error Objects
8461 // ---------------------------------------
8462
8463 // 19.5.1 The Error Constructor
8464 // 19.5.1.1 Error ( message )
8465 // 19.5.1.2 new Error( ...argumentsList )
8466 // 19.5.2 Properties of the Error Constructor
8467 // 19.5.2.1 Error.prototype
8468 // 19.5.3 Properties of the Error Prototype Object
8469 // 19.5.3.1 Error.prototype.constructor
8470 // 19.5.3.2 Error.prototype.message
8471 // 19.5.3.3 Error.prototype.name
8472 // 19.5.3.4 Error.prototype.toString ( )
8473 // 19.5.4 Properties of Error Instances
8474 // 19.5.5 Native Error Types Used in This Standard
8475 // 19.5.5.1 EvalError
8476 // 19.5.5.2 RangeError
8477 // 19.5.5.3 ReferenceError
8478 // 19.5.5.4 SyntaxError
8479 // 19.5.5.5 TypeError
8480 // 19.5.5.6 URIError
8481 // 19.5.6 NativeError Object Structure
8482 // 19.5.6.1 NativeError Constructors
8483 // 19.5.6.1.1 NativeError ( message )
8484 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8485 // 19.5.6.2 Properties of the NativeError Constructors
8486 // 19.5.6.2.1 NativeError.prototype
8487 // 19.5.6.3 Properties of the NativeError Prototype Objects
8488 // 19.5.6.4 Properties of NativeError Instances
8489
8490 // (No polyfillable changes from ES5)
8491
8492 // ---------------------------------------
8493 // 20 Numbers and Dates
8494 // ---------------------------------------
8495
8496 // ---------------------------------------
8497 // 20.1 Number Objects
8498 // ---------------------------------------
8499
8500 // 20.1.1 The Number Constructor
8501 // 20.1.1.1 Number ( [ value ] )
8502 // 20.1.1.2 new Number ( ...argumentsList )
8503 // 20.1.2 Properties of the Number Constructor
8504
8505 // 20.1.2.1 Number.EPSILON
8506 define(
8507 Number, 'EPSILON',
8508 (function () {
8509 var next, result;
8510 for (next = 1; 1 + next !== 1; next = next / 2)
8511 result = next;
8512 return result;
8513 }()));
8514
8515 // 20.1.2.2 Number.isFinite ( number )
8516 define(
8517 Number, 'isFinite',
8518 function isFinite(number) {
8519 if (Type(number) !== 'number') return false;
8520 if (number !== number || number === +Infinity || number === -Infinity) return false;
8521 return true;
8522 });
8523
8524 // 20.1.2.3 Number.isInteger ( number )
8525 define(
8526 Number, 'isInteger',
8527 function isInteger(number) {
8528 if (Type(number) !== 'number') return false;
8529 if (number !== number || number === +Infinity || number === -Infinity) return false;
8530 var integer = ToInteger(number);
8531 if (integer !== number) return false;
8532 return true;
8533 });
8534
8535 // 20.1.2.4 Number.isNaN ( number )
8536 define(
8537 Number, 'isNaN',
8538 function isNaN(number) {
8539 if (Type(number) !== 'number') return false;
8540 if (number !== number) return true;
8541 return false;
8542 });
8543
8544 // 20.1.2.5 Number.isSafeInteger ( number )
8545 define(
8546 Number, 'isSafeInteger',
8547 function isSafeInteger(number) {
8548 if (Type(number) !== 'number') return false;
8549 if (number !== number || number === +Infinity || number === -Infinity) return false;
8550 var integer = ToInteger(number);
8551 if (integer !== number) return false;
8552 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8553 return true;
8554 return false;
8555 });
8556
8557 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8558 define(
8559 Number, 'MAX_SAFE_INTEGER',
8560 9007199254740991); // 2^53-1
8561
8562 // 20.1.2.7 Number.MAX_VALUE
8563
8564 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8565 define(
8566 Number, 'MIN_SAFE_INTEGER',
8567 -9007199254740991); // -2^53+1
8568
8569 // 20.1.2.9 Number.MIN_VALUE
8570 // 20.1.2.10 Number.NaN
8571 // 20.1.2.11 Number.NEGATIVE_INFINITY
8572
8573 // 20.1.2.12 Number.parseFloat ( string )
8574 define(Number, 'parseFloat', $parseFloat);
8575
8576 // 20.1.2.13 Number.parseInt ( string, radix )
8577 define(Number, 'parseInt', $parseInt);
8578
8579 // 20.1.2.14 Number.POSITIVE_INFINITY
8580 // 20.1.2.15 Number.prototype
8581
8582 // 20.1.3 Properties of the Number Prototype Object
8583 // 20.1.3.1 Number.prototype.constructor
8584 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8585 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8586 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8587 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8588 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8589 // 20.1.3.7 Number.prototype.valueOf ( )
8590 // 20.1.4 Properties of Number Instances
8591
8592 // ---------------------------------------
8593 // 20.2 The Math Object
8594 // ---------------------------------------
8595
8596 // 20.2.1 Value Properties of the Math Object
8597 // 20.2.1.1 Math.E
8598 // 20.2.1.2 Math.LN10
8599 // 20.2.1.3 Math.LN2
8600 // 20.2.1.4 Math.LOG10E
8601 // 20.2.1.5 Math.LOG2E
8602 // 20.2.1.6 Math.PI
8603 // 20.2.1.7 Math.SQRT1_2
8604 // 20.2.1.8 Math.SQRT2
8605
8606 // 20.2.1.9 Math [ @@toStringTag ]
8607 define(Math, $$toStringTag, 'Math');
8608
8609 // 20.2.2 Function Properties of the Math Object
8610 // 20.2.2.1 Math.abs ( x )
8611 // 20.2.2.2 Math.acos ( x )
8612
8613 // 20.2.2.3 Math.acosh(x)
8614 define(
8615 Math, 'acosh',
8616 function acosh(x) {
8617 x = Number(x);
8618 return log(x + sqrt(x * x - 1));
8619 });
8620
8621 // 20.2.2.4 Math.asin ( x )
8622
8623 // 20.2.2.5 Math.asinh( x )
8624 define(
8625 Math, 'asinh',
8626 function asinh(x) {
8627 x = Number(x);
8628 if (SameValue(x, -0)) {
8629 return x;
8630 }
8631 var s = sqrt(x * x + 1);
8632 return (s === -x) ? log(0) : log(x + s);
8633 });
8634
8635 // 20.2.2.6 Math.atan ( x )
8636
8637 // 20.2.2.7 Math.atanh( x )
8638 define(
8639 Math, 'atanh',
8640 function atanh(x) {
8641 x = Number(x);
8642 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8643 });
8644
8645 // 20.2.2.8 Math.atan2 ( y, x )
8646
8647 // 20.2.2.9 Math.cbrt ( x )
8648 define(
8649 Math, 'cbrt',
8650 function cbrt(x) {
8651 x = Number(x);
8652 if ($isNaN(x/x)) {
8653 return x;
8654 }
8655 var r = pow(abs(x), 1/3);
8656 var t = x/r/r;
8657 return r + (r * (t-r) / (2*r + t));
8658 });
8659
8660 // 20.2.2.10 Math.ceil ( x )
8661
8662 // 20.2.2.11 Math.clz32 ( x )
8663 define(
8664 Math, 'clz32',
8665 function clz32(x) {
8666 function clz8(x) {
8667 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8668 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8669 }
8670 x = ToUint32(x);
8671 return x & 0xff000000 ? clz8(x >> 24) :
8672 x & 0xff0000 ? clz8(x >> 16) + 8 :
8673 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8674 });
8675
8676
8677
8678 // 20.2.2.12 Math.cos ( x )
8679
8680 // 20.2.2.13 Math.cosh ( x )
8681 define(
8682 Math, 'cosh',
8683 function cosh(x) {
8684 x = Number(x);
8685 return (pow(E, x) + pow(E, -x)) / 2;
8686 });
8687
8688 // 20.2.2.14 Math.exp ( x )
8689
8690 // 20.2.2.15 Math.expm1 ( x )
8691 define(
8692 Math, 'expm1',
8693 function expm1(x) {
8694 x = Number(x);
8695 // from: http://www.johndcook.com/cpp_log1p.html
8696 if (SameValue(x, -0)) {
8697 return -0;
8698 } else if (abs(x) < 1e-5) {
8699 return x + 0.5 * x * x; // two terms of Taylor expansion
8700 } else {
8701 return exp(x) - 1;
8702 }
8703 });
8704
8705 // 20.2.2.16 Math.floor ( x )
8706
8707 // 20.2.2.17 Math.fround ( x )
8708 define(
8709 Math, 'fround',
8710 function fround(x) {
8711 if ($isNaN(x)) {
8712 return NaN;
8713 }
8714 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8715 return x;
8716 }
8717 return (new Float32Array([x]))[0];
8718 });
8719
8720 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8721 define(
8722 Math, 'hypot',
8723 function hypot() {
8724 var values = [];
8725 var m = 0, sawNaN = false;
8726 for (var i = 0; i < arguments.length; ++i) {
8727 var n = abs(Number(arguments[i]));
8728 if (n === Infinity) return n;
8729 if (n !== n) sawNaN = true;
8730 if (n > m) m = n;
8731 values[i] = n;
8732 }
8733 if (sawNaN) return NaN;
8734 if (m === 0) return +0;
8735 var sum = +0;
8736 for (i = 0; i < values.length; ++i) {
8737 var r = values[i] / m;
8738 sum = sum + r * r;
8739 }
8740 return m * sqrt(sum);
8741 });
8742
8743 // 20.2.2.19 Math.imul ( x, y )
8744 define(
8745 Math, 'imul',
8746 function imul(x, y) {
8747 var a = ToUint32(x);
8748 var b = ToUint32(y);
8749 // (slow but accurate)
8750 var ah = (a >>> 16) & 0xffff;
8751 var al = a & 0xffff;
8752 var bh = (b >>> 16) & 0xffff;
8753 var bl = b & 0xffff;
8754 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8755 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8756 );
8757
8758 // 20.2.2.20 Math.log ( x )
8759
8760 // 20.2.2.21 Math.log1p ( x )
8761 define(
8762 Math, 'log1p',
8763 function log1p(x) {
8764 x = Number(x);
8765 // from: http://www.johndcook.com/cpp_expm1.html
8766 if (x < -1) {
8767 return NaN;
8768 } else if (SameValue(x, -0)) {
8769 return -0;
8770 } else if (abs(x) > 1e-4) {
8771 return log(1 + x);
8772 } else {
8773 return (-0.5 * x + 1) * x;
8774 }
8775 });
8776
8777 // 20.2.2.22 Math.log10 ( x )
8778 define(
8779 Math, 'log10',
8780 function log10(x) {
8781 x = Number(x);
8782 return log(x) * LOG10E;
8783 });
8784
8785 // 20.2.2.23 Math.log2 ( x )
8786 define(
8787 Math, 'log2',
8788 function log2(x) {
8789 x = Number(x);
8790 return log(x) * LOG2E;
8791 });
8792
8793 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8794 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8795 // 20.2.2.26 Math.pow ( x, y )
8796 // 20.2.2.27 Math.random ( )
8797 // 20.2.2.28 Math.round ( x )
8798
8799 // 20.2.2.29 Math.sign(x)
8800 define(
8801 Math, 'sign',
8802 function sign(x) {
8803 x = Number(x);
8804 return x < 0 ? -1 : x > 0 ? 1 : x;
8805 });
8806
8807 // 20.2.2.30 Math.sin ( x )
8808
8809 // 20.2.2.31 Math.sinh( x )
8810 define(
8811 Math, 'sinh',
8812 function sinh(x) {
8813 x = Number(x);
8814 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8815 });
8816
8817 // 20.2.2.32 Math.sqrt ( x )
8818 // 20.2.2.33 Math.tan ( x )
8819
8820 // 20.2.2.34 Math.tanh ( x )
8821 define(
8822 Math, 'tanh',
8823 function tanh(x) {
8824 x = Number(x);
8825 var n = pow(E, 2 * x) - 1,
8826 d = pow(E, 2 * x) + 1;
8827 if (SameValue(x, -0))
8828 return x;
8829 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8830 });
8831
8832 // 20.2.2.35 Math.trunc ( x )
8833 define(
8834 Math, 'trunc',
8835 function trunc(x) {
8836 x = Number(x);
8837 return $isNaN(x) ? NaN :
8838 x < 0 ? ceil(x) : floor(x);
8839 });
8840
8841 // ---------------------------------------
8842 // 20.3 Date Objects
8843 // ---------------------------------------
8844
8845 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8846 // 20.3.1.1 Time Values and Time Range
8847 // 20.3.1.2 Day Number and Time within Day
8848 // 20.3.1.3 Year Number
8849 // 20.3.1.4 Month Number
8850 // 20.3.1.5 Date Number
8851 // 20.3.1.6 Week Day
8852 // 20.3.1.7 Local Time Zone Adjustment
8853 // 20.3.1.8 Daylight Saving Time Adjustment
8854 // 20.3.1.9 Local Time
8855 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8856 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8857 // 20.3.1.12 MakeDay (year, month, date)
8858 // 20.3.1.13 MakeDate (day, time)
8859 // 20.3.1.14 TimeClip (time)
8860 // 20.3.1.15 Date Time String Format
8861 // 20.3.1.15.1 Extended years
8862 // 20.3.2 The Date Constructor
8863 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8864 // 20.3.2.2 Date ( value )
8865 // 20.3.2.3 Date ( )
8866 // 20.3.3 Properties of the Date Constructor
8867 // 20.3.3.1 Date.now ( )
8868 // 20.3.3.2 Date.parse (string)
8869 // 20.3.3.3 Date.prototype
8870 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8871 // 20.3.4 Properties of the Date Prototype Object
8872 // 20.3.4.1 Date.prototype.constructor
8873 // 20.3.4.2 Date.prototype.getDate ( )
8874 // 20.3.4.3 Date.prototype.getDay ( )
8875 // 20.3.4.4 Date.prototype.getFullYear ( )
8876 // 20.3.4.5 Date.prototype.getHours ( )
8877 // 20.3.4.6 Date.prototype.getMilliseconds ( )
8878 // 20.3.4.7 Date.prototype.getMinutes ( )
8879 // 20.3.4.8 Date.prototype.getMonth ( )
8880 // 20.3.4.9 Date.prototype.getSeconds ( )
8881 // 20.3.4.10 Date.prototype.getTime ( )
8882 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
8883 // 20.3.4.12 Date.prototype.getUTCDate ( )
8884 // 20.3.4.13 Date.prototype.getUTCDay ( )
8885 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
8886 // 20.3.4.15 Date.prototype.getUTCHours ( )
8887 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
8888 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
8889 // 20.3.4.18 Date.prototype.getUTCMonth ( )
8890 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
8891 // 20.3.4.20 Date.prototype.setDate ( date )
8892 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
8893 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
8894 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
8895 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
8896 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
8897 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
8898 // 20.3.4.27 Date.prototype.setTime ( time )
8899 // 20.3.4.28 Date.prototype.setUTCDate ( date )
8900 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
8901 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
8902 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
8903 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
8904 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
8905 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
8906 // 20.3.4.35 Date.prototype.toDateString ( )
8907 // 20.3.4.36 Date.prototype.toISOString ( )
8908 // 20.3.4.37 Date.prototype.toJSON ( key )
8909 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
8910 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8911 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
8912 // 20.3.4.41 Date.prototype.toString ( )
8913 // 20.3.4.42 Date.prototype.toTimeString ( )
8914 // 20.3.4.43 Date.prototype.toUTCString ( )
8915 // 20.3.4.44 Date.prototype.valueOf ( )
8916 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
8917 // 20.3.5 Properties of Date Instances
8918
8919 // (No polyfillable changes from ES5)
8920
8921 // ---------------------------------------
8922 // 21 Text Processing
8923 // ---------------------------------------
8924
8925 var string_regexp_dispatch = (function() {
8926 var faux = {}, secret = Symbol();
8927 faux[Symbol.match] = function() { return secret; };
8928 return ("").match(faux) === secret;
8929 }());
8930
8931 // 21.1 String Objects
8932 // 21.1.1 The String Constructor
8933 // 21.1.1.1 String ( value )
8934 // 21.1.2 Properties of the String Constructor
8935 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
8936
8937 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
8938 define(
8939 String, 'fromCodePoint',
8940 function fromCodePoint(/*...codePoints*/) {
8941 var codePoints = arguments,
8942 length = codePoints.length,
8943 elements = [],
8944 nextIndex = 0;
8945 while (nextIndex < length) {
8946 var next = codePoints[nextIndex];
8947 var nextCP = Number(next);
8948 if (!SameValue(nextCP, ToInteger(nextCP)) ||
8949 nextCP < 0 || nextCP > 0x10FFFF) {
8950 throw RangeError('Invalid code point ' + nextCP);
8951 }
8952 if (nextCP < 0x10000) {
8953 elements.push(String.fromCharCode(nextCP));
8954 } else {
8955 nextCP -= 0x10000;
8956 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
8957 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
8958 }
8959 nextIndex += 1;
8960 }
8961 return elements.join('');
8962 });
8963
8964 // 21.1.2.3 String.prototype
8965
8966 // 21.1.2.4 String.raw ( template , ...substitutions )
8967 define(
8968 String, 'raw',
8969 function raw(template /*, ...substitutions*/) {
8970 var substitutions = [].slice.call(arguments, 1);
8971
8972 var cooked = Object(template);
8973 var rawValue = cooked['raw'];
8974 var raw = Object(rawValue);
8975 var len = raw['length'];
8976 var literalSegments = ToLength(len);
8977 if (literalSegments <= 0) return '';
8978 var stringElements = [];
8979 var nextIndex = 0;
8980 while (true) {
8981 var next = raw[nextIndex];
8982 var nextSeg = String(next);
8983 stringElements.push(nextSeg);
8984 if (nextIndex + 1 === literalSegments)
8985 return stringElements.join('');
8986 next = substitutions[nextIndex];
8987 var nextSub = String(next);
8988 stringElements.push(nextSub);
8989 nextIndex = nextIndex + 1;
8990 }
8991 });
8992
8993 // See https://githib.com/inexorabletash/uate for a more useful version.
8994
8995 // 21.1.3 Properties of the String Prototype Object
8996 // 21.1.3.1 String.prototype.charAt ( pos )
8997 // 21.1.3.2 String.prototype.charCodeAt ( pos )
8998
8999 // 21.1.3.3 String.prototype.codePointAt ( pos )
9000 define(
9001 String.prototype, 'codePointAt',
9002 function codePointAt(pos) {
9003 var o = strict(this);
9004 var s = String(o);
9005 var position = ToInteger(pos);
9006 var size = s.length;
9007 if (position < 0 || position >= size) return undefined;
9008 var first = s.charCodeAt(position);
9009 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9010 var second = s.charCodeAt(position + 1);
9011 if (second < 0xDC00 || second > 0xDFFF) return first;
9012 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9013 });
9014
9015 // 21.1.3.4 String.prototype.concat ( ...args )
9016 // 21.1.3.5 String.prototype.constructor
9017
9018 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9019 define(
9020 String.prototype, 'endsWith',
9021 function endsWith(searchString) {
9022 var endPosition = arguments[1];
9023
9024 var o = strict(this);
9025 var s = String(o);
9026 var searchStr = String(searchString);
9027 var len = s.length;
9028 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9029 var end = min(max(pos, 0), len);
9030 var searchLength = searchStr.length;
9031 var start = end - searchLength;
9032 if (start < 0) return false;
9033 if (s.substring(start, start + searchLength) === searchStr) return true;
9034 return false;
9035 });
9036
9037 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9038 define(
9039 String.prototype, 'includes',
9040 function includes(searchString) {
9041 var position = arguments[1];
9042
9043 var o = strict(this);
9044 var s = String(o);
9045 var searchStr = String(searchString);
9046 var pos = ToInteger(position);
9047 var len = s.length;
9048 var start = min(max(pos, 0), len);
9049 return s.indexOf(searchStr, start) !== -1;
9050 });
9051
9052 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9053 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9054 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9055 // 21.1.3.11 String.prototype.match ( regexp )
9056 define(
9057 String.prototype, 'match',
9058 function match(regexp) {
9059 var o = strict(this);
9060 var s = String(o);
9061 if (HasProperty(regexp, $$match)) var rx = regexp;
9062 else rx = new RegExp(regexp);
9063 return rx[$$match](s);
9064 }, !string_regexp_dispatch);
9065
9066 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9067
9068 // Not practical due to table sizes; if needed, pull in:
9069 // https://github.com/walling/unorm/
9070
9071 // 21.1.3.13 String.prototype.repeat ( count )
9072 define(
9073 String.prototype, 'repeat',
9074 function repeat(count) {
9075 var o = strict(this);
9076 var s = String(o);
9077 var n = ToInteger(count);
9078 if (n < 0) throw RangeError();
9079 if (n === Infinity) throw RangeError();
9080 var t = new Array(n + 1).join(s);
9081 return t;
9082 });
9083
9084 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9085 define(
9086 String.prototype, 'replace',
9087 function replace(searchValue, replaceValue) {
9088 var o = strict(this);
9089 if (HasProperty(searchValue, $$replace))
9090 return searchValue[$$replace](o, replaceValue);
9091 return orig_replace.call(o, searchValue, replaceValue);
9092 }, !string_regexp_dispatch);
9093
9094 // 21.1.3.15 String.prototype.search ( regexp )
9095 define(
9096 String.prototype, 'search',
9097 function search(regexp) {
9098 var o = strict(this);
9099 var string = String(o);
9100 if (HasProperty(regexp, $$search)) var rx = regexp;
9101 else rx = new RegExp(regexp);
9102 return rx[$$search](string);
9103 }, !string_regexp_dispatch);
9104
9105 // 21.1.3.16 String.prototype.slice ( start, end )
9106 // 21.1.3.17 String.prototype.split ( separator, limit )
9107 define(
9108 String.prototype, 'split',
9109 function split(separator, limit) {
9110 var o = strict(this);
9111 if (HasProperty(separator, $$split))
9112 return separator[$$split](o, limit);
9113 return orig_split.call(o, separator, limit);
9114 }, !string_regexp_dispatch);
9115
9116 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9117 define(
9118 String.prototype, 'startsWith',
9119 function startsWith(searchString) {
9120 var position = arguments[1];
9121
9122 var o = strict(this);
9123 var s = String(o);
9124 var searchStr = String(searchString);
9125 var pos = ToInteger(position);
9126 var len = s.length;
9127 var start = min(max(pos, 0), len);
9128 var searchLength = searchStr.length;
9129 if (searchLength + start > len) return false;
9130 if (s.substring(start, start + searchLength) === searchStr) return true;
9131 return false;
9132 });
9133
9134 // 21.1.3.19 String.prototype.substring ( start, end )
9135 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9136 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9137 // 21.1.3.22 String.prototype.toLowerCase ( )
9138 // 21.1.3.23 String.prototype.toString ( )
9139 // 21.1.3.24 String.prototype.toUpperCase ( )
9140 // 21.1.3.25 String.prototype.trim ( )
9141 // 21.1.3.26 String.prototype.valueOf ( )
9142
9143 // 21.1.3.27 String.prototype [ @@iterator ]( )
9144 define(
9145 String.prototype, $$iterator,
9146 function entries() {
9147 return CreateStringIterator(this, 'value');
9148 });
9149
9150 // 21.1.4 Properties of String Instances
9151 // 21.1.4.1 length
9152
9153 // 21.1.5 String Iterator Objects
9154 /** @constructor */
9155 function StringIterator() {}
9156
9157 // 21.1.5.1 CreateStringIterator Abstract Operation
9158 function CreateStringIterator(string, kind) {
9159 var s = String(string);
9160 var iterator = new StringIterator;
9161 set_internal(iterator, '[[IteratedString]]', s);
9162 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9163 set_internal(iterator, '[[StringIterationKind]]', kind);
9164 return iterator;
9165 }
9166
9167 // 21.1.5.2 The %StringIteratorPrototype% Object
9168 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9169 StringIterator.prototype = $StringIteratorPrototype$;
9170
9171 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9172 define(
9173 $StringIteratorPrototype$, 'next',
9174 function next() {
9175 var o = ToObject(this);
9176 var s = String(o['[[IteratedString]]']),
9177 index = o['[[StringIteratorNextIndex]]'],
9178 len = s.length;
9179 if (index >= len) {
9180 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9181 return CreateIterResultObject(undefined, true);
9182 }
9183 var cp = s.codePointAt(index);
9184 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9185 return CreateIterResultObject(String.fromCodePoint(cp), false);
9186 });
9187
9188 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9189 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9190
9191 // 21.1.5.3 Properties of String Iterator Instances
9192
9193 // ---------------------------------------
9194 // 21.2 RegExp (Regular Expression) Objects
9195 // ---------------------------------------
9196
9197 // 21.2.1 Patterns
9198 // 21.2.2 Pattern Semantics
9199 // 21.2.2.1 Notation
9200 // 21.2.2.2 Pattern
9201 // 21.2.2.3 Disjunction
9202 // 21.2.2.4 Alternative
9203 // 21.2.2.5 Term
9204 // 21.2.2.6 Assertion
9205 // 21.2.2.7 Quantifier
9206 // 21.2.2.8 Atom
9207 // 21.2.2.9 AtomEscape
9208 // 21.2.2.10 CharacterEscape
9209 // 21.2.2.11 DecimalEscape
9210 // 21.2.2.12 CharacterClassEscape
9211 // 21.2.2.13 CharacterClass
9212 // 21.2.2.14 ClassRanges
9213 // 21.2.2.15 NonemptyClassRanges
9214 // 21.2.2.16 NonemptyClassRangesNoDash
9215 // 21.2.2.17 ClassAtom
9216 // 21.2.2.18 ClassAtomNoDash
9217 // 21.2.2.19 ClassEscape
9218 // 21.2.3 The RegExp Constructor
9219 // 21.2.3.1 RegExp ( pattern, flags )
9220 // 21.2.3.2 new RegExp( ...argumentsList )
9221 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9222 // 21.2.4 Properties of the RegExp Constructor
9223 // 21.2.4.1 RegExp.prototype
9224 // 21.2.5 Properties of the RegExp Prototype Object
9225 // 21.2.5.1 RegExp.prototype.constructor
9226 // 21.2.5.2 RegExp.prototype.exec ( string )
9227
9228 // 21.2.5.3 get RegExp.prototype.flags
9229 if (!('flags' in RegExp.prototype)) {
9230 Object.defineProperty(
9231 RegExp.prototype, 'flags', {
9232 get: function() {
9233 var s = String(this);
9234 return s.substring(s.lastIndexOf('/') + 1);
9235 }
9236 });
9237 }
9238
9239 // 21.2.5.4 get RegExp.prototype.global
9240 // 21.2.5.5 get RegExp.prototype.ignoreCase
9241
9242 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9243 define(RegExp.prototype, $$match, function(string) {
9244 var o = strict(this);
9245 return orig_match.call(string, o);
9246 });
9247
9248 // 21.2.5.7 get RegExp.prototype.multiline
9249
9250 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9251 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9252 var o = strict(this);
9253 return orig_replace.call(string, o, replaceValue);
9254 });
9255
9256 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9257 define(RegExp.prototype, $$search, function(string) {
9258 var o = strict(this);
9259 return orig_search.call(string, o);
9260 });
9261
9262 // 21.2.5.10 get RegExp.prototype.source
9263
9264 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9265 define(RegExp.prototype, $$split, function(string, limit) {
9266 var o = strict(this);
9267 return orig_split.call(string, o, limit);
9268 });
9269
9270 // 21.2.5.12 get RegExp.prototype.sticky
9271 // 21.2.5.13 RegExp.prototype.test( S )
9272 // 21.2.5.14 RegExp.prototype.toString ( )
9273 // 21.2.5.15 get RegExp.prototype.unicode
9274
9275 // 21.2.6 Properties of RegExp Instances
9276 // 21.2.6.1 lastIndex
9277
9278 // (No polyfillable changes from ES5)
9279
9280 // ---------------------------------------
9281 // 22 Indexed Collections
9282 // ---------------------------------------
9283
9284 // ---------------------------------------
9285 // 22.1 Array Objects
9286 // ---------------------------------------
9287
9288 // 22.1.1 The Array Constructor
9289 // 22.1.1.1 Array ( )
9290 // 22.1.1.2 Array (len)
9291 // 22.1.1.3 Array (...items )
9292
9293 // 22.1.2 Properties of the Array Constructor
9294
9295 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9296 define(
9297 Array, 'from',
9298 function from(items) {
9299 var mapfn = arguments[1];
9300 var thisArg = arguments[2];
9301
9302 var c = strict(this);
9303 if (mapfn === undefined) {
9304 var mapping = false;
9305 } else {
9306 if (!IsCallable(mapfn)) throw TypeError();
9307 var t = thisArg;
9308 mapping = true;
9309 }
9310 var usingIterator = GetMethod(items, $$iterator);
9311 if (usingIterator !== undefined) {
9312 if (IsConstructor(c)) {
9313 var a = new c();
9314 } else {
9315 a = new Array(0);
9316 }
9317 var iterator = GetIterator(items, usingIterator);
9318 var k = 0;
9319 while (true) {
9320 var next = IteratorStep(iterator);
9321 if (next === false) {
9322 a.length = k;
9323 return a;
9324 }
9325 var nextValue = IteratorValue(next);
9326 if (mapping)
9327 var mappedValue = mapfn.call(t, nextValue);
9328 else
9329 mappedValue = nextValue;
9330 a[k] = mappedValue;
9331 k += 1;
9332 }
9333 }
9334 var arrayLike = ToObject(items);
9335 var lenValue = arrayLike.length;
9336 var len = ToLength(lenValue);
9337 if (IsConstructor(c)) {
9338 a = new c(len);
9339 } else {
9340 a = new Array(len);
9341 }
9342 k = 0;
9343 while (k < len) {
9344 var kValue = arrayLike[k];
9345 if (mapping)
9346 mappedValue = mapfn.call(t, kValue, k);
9347 else
9348 mappedValue = kValue;
9349 a[k] = mappedValue;
9350 k += 1;
9351 }
9352 a.length = len;
9353 return a;
9354 });
9355
9356 // 22.1.2.2 Array.isArray ( arg )
9357
9358 // 22.1.2.3 Array.of ( ...items )
9359 define(
9360 Array, 'of',
9361 function of() {
9362 var items = arguments;
9363
9364 var lenValue = items.length;
9365 var len = ToUint32(lenValue);
9366 var c = strict(this), a;
9367 if (IsConstructor(c)) {
9368 a = new c(len);
9369 a = ToObject(a);
9370 } else {
9371 a = new Array(len);
9372 }
9373 var k = 0;
9374 while (k < len) {
9375 a[k] = items[k];
9376 k += 1;
9377 }
9378 a.length = len;
9379 return a;
9380 });
9381
9382 // 22.1.2.4 Array.prototype
9383 // 22.1.2.5 get Array [ @@species ]
9384 // 22.1.3 Properties of the Array Prototype Object
9385 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9386 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9387 // 22.1.3.2 Array.prototype.constructor
9388 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9389 define(
9390 Array.prototype, 'copyWithin',
9391 function copyWithin(target, start/*, end*/) {
9392 var end = arguments[2];
9393
9394 var o = ToObject(this);
9395 var lenVal = o.length;
9396 var len = ToLength(lenVal);
9397 len = max(len, 0);
9398 var relativeTarget = ToInteger(target);
9399 var to;
9400 if (relativeTarget < 0)
9401 to = max(len + relativeTarget, 0);
9402 else
9403 to = min(relativeTarget, len);
9404 var relativeStart = ToInteger(start);
9405 var from;
9406 if (relativeStart < 0)
9407 from = max(len + relativeStart, 0);
9408 else
9409 from = min(relativeStart, len);
9410 var relativeEnd;
9411 if (end === undefined)
9412 relativeEnd = len;
9413 else
9414 relativeEnd = ToInteger(end);
9415 var final;
9416 if (relativeEnd < 0)
9417 final = max(len + relativeEnd, 0);
9418 else
9419 final = min(relativeEnd, len);
9420 var count = min(final - from, len - to);
9421 var direction;
9422 if (from < to && to < from + count) {
9423 direction = -1;
9424 from = from + count - 1;
9425 to = to + count - 1;
9426 } else {
9427 direction = 1;
9428 }
9429 while (count > 0) {
9430 var fromKey = String(from);
9431 var toKey = String(to);
9432 var fromPresent = HasProperty(o, fromKey);
9433 if (fromPresent) {
9434 var fromVal = o[fromKey];
9435 o[toKey] = fromVal;
9436 } else {
9437 delete o[toKey];
9438 }
9439 from = from + direction;
9440 to = to + direction;
9441 count = count - 1;
9442 }
9443 return o;
9444 });
9445
9446 // 22.1.3.4 Array.prototype.entries ( )
9447 var nativeArrayIteratorMethods =
9448 ('entries' in Array.prototype && 'next' in [].entries());
9449
9450 define(
9451 Array.prototype, 'entries',
9452 function entries() {
9453 return CreateArrayIterator(this, 'key+value');
9454 }, !nativeArrayIteratorMethods);
9455
9456 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9457
9458 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9459 define(
9460 Array.prototype, 'fill',
9461 function fill(value/*, start, end*/) {
9462 var start = arguments[1],
9463 end = arguments[2];
9464
9465 var o = ToObject(this);
9466 var lenVal = o.length;
9467 var len = ToLength(lenVal);
9468 len = max(len, 0);
9469 var relativeStart = ToInteger(start);
9470 var k;
9471 if (relativeStart < 0)
9472 k = max((len + relativeStart), 0);
9473 else
9474 k = min(relativeStart, len);
9475 var relativeEnd;
9476 if (end === undefined)
9477 relativeEnd = len;
9478 else
9479 relativeEnd = ToInteger(end);
9480 var final;
9481 if (relativeEnd < 0)
9482 final = max((len + relativeEnd), 0);
9483 else
9484 final = min(relativeEnd, len);
9485 while (k < final) {
9486 var pk = String(k);
9487 o[pk] = value;
9488 k += 1;
9489 }
9490 return o;
9491 });
9492
9493 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9494
9495 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9496 define(
9497 Array.prototype, 'find',
9498 function find(predicate) {
9499 var o = ToObject(this);
9500 var lenValue = o.length;
9501 var len = ToInteger(lenValue);
9502 if (!IsCallable(predicate)) throw TypeError();
9503 var t = arguments.length > 1 ? arguments[1] : undefined;
9504 var k = 0;
9505 while (k < len) {
9506 var pk = String(k);
9507 var kPresent = HasProperty(o, pk);
9508 if (kPresent) {
9509 var kValue = o[pk];
9510 var testResult = predicate.call(t, kValue, k, o);
9511 if (Boolean(testResult)) {
9512 return kValue;
9513 }
9514 }
9515 ++k;
9516 }
9517 return undefined;
9518 });
9519
9520 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9521 define(
9522 Array.prototype, 'findIndex',
9523 function findIndex(predicate) {
9524 var o = ToObject(this);
9525 var lenValue = o.length;
9526 var len = ToLength(lenValue);
9527 if (!IsCallable(predicate)) throw TypeError();
9528 var t = arguments.length > 1 ? arguments[1] : undefined;
9529 var k = 0;
9530 while (k < len) {
9531 var pk = String(k);
9532 var kPresent = HasProperty(o, pk);
9533 if (kPresent) {
9534 var kValue = o[pk];
9535 var testResult = predicate.call(t, kValue, k, o);
9536 if (Boolean(testResult)) {
9537 return k;
9538 }
9539 }
9540 ++k;
9541 }
9542 return -1;
9543 });
9544
9545 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9546 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9547 // 22.1.3.12 Array.prototype.join (separator)
9548
9549 // 22.1.3.13 Array.prototype.keys ( )
9550 define(
9551 Array.prototype, 'keys',
9552 function keys() {
9553 return CreateArrayIterator(this, 'key');
9554 }, !nativeArrayIteratorMethods);
9555
9556 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9557 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9558 // 22.1.3.16 Array.prototype.pop ( )
9559 // 22.1.3.17 Array.prototype.push ( ...items )
9560 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9561 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9562 // 22.1.3.20 Array.prototype.reverse ( )
9563 // 22.1.3.21 Array.prototype.shift ( )
9564 // 22.1.3.22 Array.prototype.slice (start, end)
9565 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9566 // 22.1.3.24 Array.prototype.sort (comparefn)
9567 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9568 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9569 // 22.1.3.27 Array.prototype.toString ( )
9570 // 22.1.3.28 Array.prototype.unshift ( ...items )
9571
9572 // 22.1.3.29 Array.prototype.values ( )
9573 define(
9574 Array.prototype, 'values',
9575 function values() {
9576 return CreateArrayIterator(this, 'value');
9577 }, !nativeArrayIteratorMethods);
9578
9579 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9580 define(
9581 Array.prototype, $$iterator,
9582 Array.prototype.values
9583 );
9584
9585 // 22.1.3.31 Array.prototype [ @@unscopables ]
9586 // 22.1.4 Properties of Array Instances
9587 // 22.1.4.1 length
9588
9589 // 22.1.5 Array Iterator Objects
9590 function ArrayIterator() {}
9591
9592 // 22.1.5.1 CreateArrayIterator Abstract Operation
9593 function CreateArrayIterator(array, kind) {
9594 var o = ToObject(array);
9595 var iterator = new ArrayIterator;
9596 set_internal(iterator, '[[IteratedObject]]', o);
9597 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9598 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9599 return iterator;
9600 }
9601
9602 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9603 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9604 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9605
9606 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9607 define(
9608 $ArrayIteratorPrototype$, 'next',
9609 function next() {
9610 var o = strict(this);
9611 if (Type(o) !== 'object') throw TypeError();
9612 var a = o['[[IteratedObject]]'],
9613 index = o['[[ArrayIteratorNextIndex]]'],
9614 itemKind = o['[[ArrayIterationKind]]'],
9615 lenValue = a.length,
9616 len = ToUint32(lenValue),
9617 elementKey,
9618 elementValue;
9619 if (itemKind.indexOf('sparse') !== -1) {
9620 var found = false;
9621 while (!found && index < len) {
9622 elementKey = String(index);
9623 found = HasProperty(a, elementKey);
9624 if (!found) {
9625 index += 1;
9626 }
9627 }
9628 }
9629 if (index >= len) {
9630 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9631 return CreateIterResultObject(undefined, true);
9632 }
9633 elementKey = index;
9634 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9635 if (itemKind.indexOf('value') !== -1)
9636 elementValue = a[elementKey];
9637 if (itemKind.indexOf('key+value') !== -1)
9638 return CreateIterResultObject([elementKey, elementValue], false);
9639 if (itemKind.indexOf('key') !== -1)
9640 return CreateIterResultObject(elementKey, false);
9641 if (itemKind === 'value')
9642 return CreateIterResultObject(elementValue, false);
9643 throw Error('Internal error');
9644 });
9645
9646 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9647 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9648
9649 // 22.1.5.3 Properties of Array Iterator Instances
9650
9651
9652 // ---------------------------------------
9653 // 22.2 TypedArray Objects
9654 // ---------------------------------------
9655
9656 // See typedarray.js for TypedArray polyfill
9657
9658 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9659 'Int16Array', 'Uint16Array',
9660 'Int32Array', 'Uint32Array',
9661 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9662 if (!($TypedArrayName$ in global))
9663 return;
9664 var $TypedArray$ = global[$TypedArrayName$];
9665
9666 // 22.2.1 The %TypedArray% Intrinsic Object
9667 // 22.2.1.1 %TypedArray% ( length )
9668 // 22.2.1.2 %TypedArray% ( typedArray )
9669 // 22.2.1.3 %TypedArray% ( object )
9670 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9671 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9672 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9673
9674 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9675 define(
9676 $TypedArray$, 'from',
9677 function from(source) {
9678 var mapfn = arguments[1];
9679 var thisArg = arguments[2];
9680
9681 var c = strict(this);
9682 if (!IsConstructor(c)) throw TypeError();
9683 if (mapfn === undefined) {
9684 var mapping = false;
9685 } else {
9686 if (IsCallable(mapfn)) throw TypeError();
9687 var t = thisArg;
9688 mapping = true;
9689 }
9690 var usingIterator = GetMethod(source, $$iterator);
9691 if (usingIterator !== undefined) {
9692 var iterator = GetIterator(source, usingIterator);
9693 var values = [];
9694 var next = true;
9695 while (next !== false) {
9696 next = IteratorStep(iterator);
9697 if (next !== false) {
9698 var nextValue = IteratorValue(next);
9699 values.push(nextValue);
9700 }
9701 }
9702 var len = values.length;
9703 var newObj = new c(len);
9704 var k = 0;
9705 while (k < len) {
9706 var kValue = values.shift();
9707 if (mapping) {
9708 var mappedValue = mapfn.call(t, kValue);
9709 } else {
9710 mappedValue = kValue;
9711 }
9712 newObj[k] = mappedValue;
9713 ++k;
9714 }
9715 console.assert(values.length === 0);
9716 return newObj;
9717 }
9718 var arrayLike = ToObject(source);
9719 var lenValue = arrayLike.length;
9720 len = ToLength(lenValue);
9721 newObj = new c(len);
9722 k = 0;
9723 while (k < len) {
9724 kValue = arrayLike[k];
9725 if (mapping) {
9726 mappedValue = mapfn.call(t, kValue, k);
9727 } else {
9728 mappedValue = kValue;
9729 }
9730 newObj[k] = mappedValue;
9731 ++k;
9732 }
9733 return newObj;
9734 });
9735
9736 // 22.2.2.2 %TypedArray%.of ( ...items )
9737 define(
9738 $TypedArray$, 'of',
9739 function of() {
9740 var items = arguments;
9741
9742 var len = items.length;
9743 var c = strict(this);
9744 var newObj = new c(len);
9745 var k = 0;
9746 while (k < len) {
9747 newObj[k] = items[k];
9748 ++k;
9749 }
9750 return newObj;
9751 });
9752
9753 // 22.2.2.3 %TypedArray%.prototype
9754 // 22.2.2.4 get %TypedArray% [ @@species ]
9755 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9756 // 22.2.3.1 get %TypedArray%.prototype.buffer
9757 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9758 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9759 // 22.2.3.4 %TypedArray%.prototype.constructor
9760
9761 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9762 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9763
9764 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9765 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9766
9767 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9768 define($TypedArray$.prototype, 'every', Array.prototype.every);
9769
9770 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9771 define(
9772 $TypedArray$.prototype, 'fill',
9773 //Array.prototype.fill // Doesn't work in Safari 7
9774 function fill(value/*, start, end*/) {
9775 var start = arguments[1],
9776 end = arguments[2];
9777
9778 var o = ToObject(this);
9779 var lenVal = o.length;
9780 var len = ToLength(lenVal);
9781 len = max(len, 0);
9782 var relativeStart = ToInteger(start);
9783 var k;
9784 if (relativeStart < 0) k = max((len + relativeStart), 0);
9785 else k = min(relativeStart, len);
9786 var relativeEnd;
9787 if (end === undefined) relativeEnd = len;
9788 else relativeEnd = ToInteger(end);
9789 var final;
9790 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9791 else final = min(relativeEnd, len);
9792 while (k < final) {
9793 var pk = String(k);
9794 o[pk] = value;
9795 k += 1;
9796 }
9797 return o;
9798 });
9799
9800 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9801 define(
9802 $TypedArray$.prototype, 'filter',
9803 function filter(callbackfn) {
9804 var thisArg = arguments[1];
9805
9806 var o = ToObject(this);
9807 var lenVal = o.length;
9808 var len = ToLength(lenVal);
9809 if (!IsCallable(callbackfn)) throw TypeError();
9810 var t = thisArg;
9811 var c = o.constructor;
9812 var kept = [];
9813 var k = 0;
9814 var captured = 0;
9815 while (k < len) {
9816 var kValue = o[k];
9817 var selected = callbackfn.call(t, kValue, k, o);
9818 if (selected) {
9819 kept.push(kValue);
9820 ++captured;
9821 }
9822 ++k;
9823 }
9824 var a = new c(captured);
9825 var n = 0;
9826 for (var i = 0; i < kept.length; ++i) {
9827 var e = kept[i];
9828 a[n] = e;
9829 ++n;
9830 }
9831 return a;
9832 });
9833
9834 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9835 define($TypedArray$.prototype, 'find', Array.prototype.find);
9836
9837 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9838 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9839
9840 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9841 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9842
9843 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9844 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9845
9846 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9847 define($TypedArray$.prototype, 'join', Array.prototype.join);
9848
9849 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9850 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9851
9852 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9853 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9854
9855 // 22.2.3.17 get %TypedArray%.prototype.length
9856
9857 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9858 define(
9859 $TypedArray$.prototype, 'map',
9860 function map(callbackfn) {
9861 var thisArg = arguments[1];
9862
9863 var o = ToObject(this);
9864 var lenValue = o.length;
9865 var len = ToLength(lenValue);
9866 if (!IsCallable(callbackfn)) throw TypeError();
9867 var t = thisArg;
9868 var a = undefined;
9869 var c = o.constructor;
9870 if (IsConstructor(c))
9871 a = new c(len);
9872 if (a === undefined)
9873 a = new Array(len);
9874 var k = 0;
9875 while (k < len) {
9876 var kPresent = HasProperty(o, k);
9877 if (kPresent) {
9878 var kValue = o[k];
9879 var mappedValue = callbackfn.call(t, kValue, k, o);
9880 a[k] = mappedValue;
9881 }
9882 ++k;
9883 }
9884 return a;
9885 });
9886
9887 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
9888 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
9889
9890 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
9891 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
9892
9893 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
9894 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
9895
9896 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
9897 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
9898 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
9899
9900 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
9901 define(
9902 $TypedArray$.prototype, 'slice',
9903 function slice(start, end) {
9904 var o = ToObject(this);
9905 var lenVal = o.length;
9906 var len = ToLength(lenVal);
9907 var relativeStart = ToInteger(start);
9908 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
9909 var relativeEnd = (end === undefined) ? len : ToInteger(end);
9910 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
9911 var count = final - k;
9912 var c = o.constructor;
9913 if (IsConstructor(c)) {
9914 var a = new c(count);
9915 } else {
9916 throw TypeError();
9917 }
9918 var n = 0;
9919 while (k < final) {
9920 var kValue = o[k];
9921 a[n] = kValue;
9922 ++k;
9923 ++n;
9924 }
9925 return a;
9926 });
9927
9928 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
9929 define($TypedArray$.prototype, 'some', Array.prototype.some);
9930
9931 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
9932 define(
9933 $TypedArray$.prototype, 'sort',
9934 function sort() {
9935 var comparefn = arguments[0];
9936
9937 function sortCompare(x, y) {
9938 console.assert(Type(x) === 'number' && Type(y) === 'number');
9939 if (x !== x && y !== y) return +0;
9940 if (x !== x) return 1;
9941 if (y !== y) return -1;
9942 if (comparefn !== undefined) {
9943 return comparefn(x, y);
9944 }
9945 if (x < y) return -1;
9946 if (x > y) return 1;
9947 return +0;
9948 }
9949 return Array.prototype.sort.call(this, sortCompare);
9950 });
9951
9952 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
9953 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
9954 // 22.2.3.28 %TypedArray%.prototype.toString ( )
9955
9956 // 22.2.3.29 %TypedArray%.prototype.values ( )
9957 define($TypedArray$.prototype, 'values', Array.prototype.values);
9958
9959 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
9960 define(
9961 $TypedArray$.prototype, $$iterator,
9962 $TypedArray$.prototype.values
9963 );
9964
9965 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
9966 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
9967
9968 // 22.2.4 The TypedArray Constructors
9969 // 22.2.4.1TypedArray( ... argumentsList)
9970 // 22.2.5 Properties of the TypedArray Constructors
9971 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
9972 // 22.2.5.2 TypedArray.prototype
9973 // 22.2.6 Properties of TypedArray Prototype Objects
9974 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
9975 // 22.2.6.2 TypedArray.prototype.constructor
9976 // 22.2.7 Properties of TypedArray Instances
9977 });
9978
9979 // ---------------------------------------
9980 // 23 Keyed Collection
9981 // ---------------------------------------
9982
9983 // ---------------------------------------
9984 // 23.1 Map Objects
9985 // ---------------------------------------
9986
9987 (function() {
9988 // 23.1.1 The Map Constructor
9989
9990 // 23.1.1.1 Map ( [ iterable ] )
9991 /** @constructor */
9992 function Map(/*iterable*/) {
9993 var map = strict(this);
9994 var iterable = arguments[0];
9995
9996 if (Type(map) !== 'object') throw TypeError();
9997 if ('[[MapData]]' in map) throw TypeError();
9998
9999 if (iterable !== undefined) {
10000 var adder = map['set'];
10001 if (!IsCallable(adder)) throw TypeError();
10002 var iter = GetIterator(ToObject(iterable));
10003 }
10004 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10005 if (iter === undefined) return map;
10006 while (true) {
10007 var next = IteratorStep(iter);
10008 if (next === false)
10009 return map;
10010 var nextItem = IteratorValue(next);
10011 if (Type(nextItem) !== 'object') throw TypeError();
10012 var k = nextItem[0];
10013 var v = nextItem[1];
10014 adder.call(map, k, v);
10015 }
10016
10017 return map;
10018 }
10019
10020 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10021 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10022 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10023 (new global.Map([['a', 1]]).size !== 1))
10024 global.Map = Map;
10025
10026
10027 function MapDataIndexOf(mapData, key) {
10028 var i;
10029 if (key === key) return mapData.keys.indexOf(key);
10030 // Slow case for NaN
10031 for (i = 0; i < mapData.keys.length; i += 1)
10032 if (SameValueZero(mapData.keys[i], key)) return i;
10033 return -1;
10034 }
10035
10036 // 23.1.1.2 new Map ( ... argumentsList )
10037 // 23.1.2 Properties of the Map Constructor
10038 // 23.1.2.1 Map.prototype
10039 var $MapPrototype$ = {};
10040 Map.prototype = $MapPrototype$;
10041
10042 // 23.1.2.2 get Map [ @@species ]
10043
10044 // 23.1.3 Properties of the Map Prototype Object
10045 // 23.1.3.1 Map.prototype.clear ()
10046 define(
10047 Map.prototype, 'clear',
10048 function clear() {
10049 var m = strict(this);
10050 if (Type(m) !== 'object') throw TypeError();
10051 if (!('[[MapData]]' in m)) throw TypeError();
10052 if (m['[[MapData]]'] === undefined) throw TypeError();
10053 var entries = m['[[MapData]]'];
10054 entries.keys.length = 0;
10055 entries.values.length = 0;
10056 return undefined;
10057 });
10058
10059 // 23.1.3.2 Map.prototype.constructor
10060
10061 // 23.1.3.3 Map.prototype.delete ( key )
10062 define(
10063 Map.prototype, 'delete',
10064 function delete_(key) {
10065 var m = strict(this);
10066 if (Type(m) !== 'object') throw TypeError();
10067 if (!('[[MapData]]' in m)) throw TypeError();
10068 if (m['[[MapData]]'] === undefined) throw TypeError();
10069 var entries = m['[[MapData]]'];
10070 var i = MapDataIndexOf(entries, key);
10071 if (i < 0) return false;
10072 entries.keys[i] = empty;
10073 entries.values[i] = empty;
10074 return true;
10075 });
10076
10077 // 23.1.3.4 Map.prototype.entries ( )
10078 define(
10079 Map.prototype, 'entries',
10080 function entries() {
10081 var m = strict(this);
10082 if (Type(m) !== 'object') throw TypeError();
10083 return CreateMapIterator(m, 'key+value');
10084 });
10085
10086 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10087 define(
10088 Map.prototype, 'forEach',
10089 function forEach(callbackfn /*, thisArg*/) {
10090 var thisArg = arguments[1];
10091
10092 var m = strict(this);
10093 if (Type(m) !== 'object') throw TypeError();
10094 if (!('[[MapData]]' in m)) throw TypeError();
10095 if (m['[[MapData]]'] === undefined) throw TypeError();
10096 var entries = m['[[MapData]]'];
10097
10098 if (!IsCallable(callbackfn)) {
10099 throw TypeError('First argument to forEach is not callable.');
10100 }
10101 for (var i = 0; i < entries.keys.length; ++i) {
10102 if (entries.keys[i] !== empty) {
10103 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10104 }
10105 }
10106 return undefined;
10107 });
10108
10109 // 23.1.3.6 Map.prototype.get ( key )
10110 define(
10111 Map.prototype, 'get',
10112 function get(key) {
10113 var m = strict(this);
10114 if (Type(m) !== 'object') throw TypeError();
10115 if (!('[[MapData]]' in m)) throw TypeError();
10116 if (m['[[MapData]]'] === undefined) throw TypeError();
10117 var entries = m['[[MapData]]'];
10118 var i = MapDataIndexOf(entries, key);
10119 if (i >= 0) return entries.values[i];
10120 return undefined;
10121 });
10122
10123 // 23.1.3.7 Map.prototype.has ( key )
10124 define(
10125 Map.prototype, 'has',
10126 function has(key) {
10127 var m = strict(this);
10128 if (Type(m) !== 'object') throw TypeError();
10129 if (!('[[MapData]]' in m)) throw TypeError();
10130 if (m['[[MapData]]'] === undefined) throw TypeError();
10131 var entries = m['[[MapData]]'];
10132 if (MapDataIndexOf(entries, key) >= 0) return true;
10133 return false;
10134 });
10135
10136 // 23.1.3.8 Map.prototype.keys ( )
10137 define(
10138 Map.prototype, 'keys',
10139 function keys() {
10140 var m = strict(this);
10141 if (Type(m) !== 'object') throw TypeError();
10142 return CreateMapIterator(m, 'key');
10143 });
10144
10145 // 23.1.3.9 Map.prototype.set ( key , value )
10146 define(
10147 Map.prototype, 'set',
10148 function set(key, value) {
10149 var m = strict(this);
10150 if (Type(m) !== 'object') throw TypeError();
10151 if (!('[[MapData]]' in m)) throw TypeError();
10152 if (m['[[MapData]]'] === undefined) throw TypeError();
10153 var entries = m['[[MapData]]'];
10154 var i = MapDataIndexOf(entries, key);
10155 if (i < 0) i = entries.keys.length;
10156 if (SameValue(key, -0)) key = 0;
10157 entries.keys[i] = key;
10158 entries.values[i] = value;
10159 return m;
10160 });
10161
10162 // 23.1.3.10 get Map.prototype.size
10163 Object.defineProperty(
10164 Map.prototype, 'size', {
10165 get: function() {
10166 var m = strict(this);
10167 if (Type(m) !== 'object') throw TypeError();
10168 if (!('[[MapData]]' in m)) throw TypeError();
10169 if (m['[[MapData]]'] === undefined) throw TypeError();
10170 var entries = m['[[MapData]]'];
10171 var count = 0;
10172 for (var i = 0; i < entries.keys.length; ++i) {
10173 if (entries.keys[i] !== empty)
10174 count = count + 1;
10175 }
10176 return count;
10177 }
10178 });
10179
10180 // 23.1.3.11 Map.prototype.values ( )
10181 define(
10182 Map.prototype, 'values',
10183 function values() {
10184 var m = strict(this);
10185 if (Type(m) !== 'object') throw TypeError();
10186 return CreateMapIterator(m, 'value');
10187 });
10188
10189 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10190 define(
10191 Map.prototype, $$iterator,
10192 function() {
10193 var m = strict(this);
10194 if (Type(m) !== 'object') throw TypeError();
10195 return CreateMapIterator(m, 'key+value');
10196 });
10197
10198 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10199 define(global.Map.prototype, $$toStringTag, 'Map');
10200
10201 // 23.1.4 Properties of Map Instances
10202 // 23.1.5 Map Iterator Objects
10203
10204 /** @constructor */
10205 function MapIterator() {}
10206
10207 // 23.1.5.1 CreateMapIterator Abstract Operation
10208 function CreateMapIterator(map, kind) {
10209 if (Type(map) !== 'object') throw TypeError();
10210 if (!('[[MapData]]' in map)) throw TypeError();
10211 if (map['[[MapData]]'] === undefined) throw TypeError();
10212 var iterator = new MapIterator;
10213 set_internal(iterator, '[[Map]]', map);
10214 set_internal(iterator, '[[MapNextIndex]]', 0);
10215 set_internal(iterator, '[[MapIterationKind]]', kind);
10216 return iterator;
10217 }
10218
10219 // 23.1.5.2 The %MapIteratorPrototype% Object
10220 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10221 MapIterator.prototype = $MapIteratorPrototype$;
10222
10223 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10224 define(
10225 $MapIteratorPrototype$, 'next',
10226 function next() {
10227 var o = strict(this);
10228 if (Type(o) !== 'object') throw TypeError();
10229 var m = o['[[Map]]'],
10230 index = o['[[MapNextIndex]]'],
10231 itemKind = o['[[MapIterationKind]]'],
10232 entries = m['[[MapData]]'];
10233 while (index < entries.keys.length) {
10234 var e = {key: entries.keys[index], value: entries.values[index]};
10235 index = index += 1;
10236 set_internal(o, '[[MapNextIndex]]', index);
10237 if (e.key !== empty) {
10238 if (itemKind === 'key') {
10239 return CreateIterResultObject(e.key, false);
10240 } else if (itemKind === 'value') {
10241 return CreateIterResultObject(e.value, false);
10242 } else {
10243 return CreateIterResultObject([e.key, e.value], false);
10244 }
10245 }
10246 }
10247 return CreateIterResultObject(undefined, true);
10248 });
10249
10250 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10251 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10252
10253 // 23.1.5.3 Properties of Map Iterator Instances
10254 }());
10255
10256 // ---------------------------------------
10257 // 23.2 Set Objects
10258 // ---------------------------------------
10259
10260 (function() {
10261 // 23.2.1 The Set Constructor
10262 // 23.2.1.1 Set ( [ iterable ] )
10263
10264 /** @constructor */
10265 function Set(/*iterable*/) {
10266 var set = strict(this);
10267 var iterable = arguments[0];
10268
10269 if (Type(set) !== 'object') throw TypeError();
10270 if ('[[SetData]]' in set) throw TypeError();
10271
10272 if (iterable !== undefined) {
10273 var adder = set['add'];
10274 if (!IsCallable(adder)) throw TypeError();
10275 var iter = GetIterator(ToObject(iterable));
10276 }
10277 set_internal(set, '[[SetData]]', []);
10278 if (iter === undefined) return set;
10279 while (true) {
10280 var next = IteratorStep(iter);
10281 if (next === false)
10282 return set;
10283 var nextValue = IteratorValue(next);
10284 adder.call(set, nextValue);
10285 }
10286
10287 return set;
10288 }
10289
10290 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10291 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10292 (new global.Set([1]).size !== 1))
10293 global.Set = Set;
10294
10295 function SetDataIndexOf(setData, key) {
10296 var i;
10297 if (key === key)
10298 return setData.indexOf(key);
10299 // Slow case for NaN
10300 for (i = 0; i < setData.length; i += 1)
10301 if (SameValueZero(setData[i], key)) return i;
10302 return -1;
10303 }
10304
10305 // 23.2.1.2 new Set ( ...argumentsList )
10306 // 23.2.2 Properties of the Set Constructor
10307
10308 // 23.2.2.1 Set.prototype
10309 var $SetPrototype$ = {};
10310 Set.prototype = $SetPrototype$;
10311
10312 // 23.2.2.2 get Set [ @@species ]
10313 // 23.2.3 Properties of the Set Prototype Object
10314
10315 // 23.2.3.1 Set.prototype.add (value )
10316 define(
10317 Set.prototype, 'add',
10318 function add(value) {
10319 var s = strict(this);
10320 if (Type(s) !== 'object') throw TypeError();
10321 if (!('[[SetData]]' in s)) throw TypeError();
10322 if (s['[[SetData]]'] === undefined) throw TypeError();
10323 if (SameValue(value, -0)) value = 0;
10324 var entries = s['[[SetData]]'];
10325 var i = SetDataIndexOf(entries, value);
10326 if (i < 0) i = s['[[SetData]]'].length;
10327 s['[[SetData]]'][i] = value;
10328
10329 return s;
10330 });
10331
10332 // 23.2.3.2 Set.prototype.clear ()
10333 define(
10334 Set.prototype, 'clear',
10335 function clear() {
10336 var s = strict(this);
10337 if (Type(s) !== 'object') throw TypeError();
10338 if (!('[[SetData]]' in s)) throw TypeError();
10339 if (s['[[SetData]]'] === undefined) throw TypeError();
10340 var entries = s['[[SetData]]'];
10341 entries.length = 0;
10342 return undefined;
10343 });
10344
10345 // 23.2.3.3 Set.prototype.constructor
10346 // 23.2.3.4 Set.prototype.delete ( value )
10347 define(
10348 Set.prototype, 'delete',
10349 function delete_(value) {
10350 var s = strict(this);
10351 if (Type(s) !== 'object') throw TypeError();
10352 if (!('[[SetData]]' in s)) throw TypeError();
10353 if (s['[[SetData]]'] === undefined) throw TypeError();
10354 var entries = s['[[SetData]]'];
10355 var i = SetDataIndexOf(entries, value);
10356 if (i < 0) return false;
10357 entries[i] = empty;
10358 return true;
10359 });
10360
10361 // 23.2.3.5 Set.prototype.entries ( )
10362 define(
10363 Set.prototype, 'entries',
10364 function entries() {
10365 var s = strict(this);
10366 if (Type(s) !== 'object') throw TypeError();
10367 return CreateSetIterator(s, 'key+value');
10368 });
10369
10370 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10371 define(
10372 Set.prototype, 'forEach',
10373 function forEach(callbackfn/*, thisArg*/) {
10374 var thisArg = arguments[1];
10375
10376 var s = strict(this);
10377 if (Type(s) !== 'object') throw TypeError();
10378 if (!('[[SetData]]' in s)) throw TypeError();
10379 if (s['[[SetData]]'] === undefined) throw TypeError();
10380 var entries = s['[[SetData]]'];
10381
10382 if (!IsCallable(callbackfn)) {
10383 throw TypeError('First argument to forEach is not callable.');
10384 }
10385 for (var i = 0; i < entries.length; ++i) {
10386 if (entries[i] !== empty) {
10387 callbackfn.call(thisArg, entries[i], entries[i], s);
10388 }
10389 }
10390 });
10391
10392 // 23.2.3.7 Set.prototype.has ( value )
10393 define(
10394 Set.prototype, 'has',
10395 function has(key) {
10396 var s = strict(this);
10397 if (Type(s) !== 'object') throw TypeError();
10398 if (!('[[SetData]]' in s)) throw TypeError();
10399 if (s['[[SetData]]'] === undefined) throw TypeError();
10400 var entries = s['[[SetData]]'];
10401 return SetDataIndexOf(entries, key) !== -1;
10402 });
10403
10404 // 23.2.3.8 Set.prototype.keys ( )
10405 // See Set.prototype.values
10406
10407 // 23.2.3.9 get Set.prototype.size
10408 Object.defineProperty(
10409 Set.prototype, 'size', {
10410 get: function() {
10411 var s = strict(this);
10412 if (Type(s) !== 'object') throw TypeError();
10413 if (!('[[SetData]]' in s)) throw TypeError();
10414 if (s['[[SetData]]'] === undefined) throw TypeError();
10415 var entries = s['[[SetData]]'];
10416 var count = 0;
10417 for (var i = 0; i < entries.length; ++i) {
10418 if (entries[i] !== empty)
10419 count = count + 1;
10420 }
10421 return count;
10422 }
10423 });
10424
10425 // 23.2.3.10 Set.prototype.values ( )
10426 define(
10427 Set.prototype, 'values',
10428 function values() {
10429 var s = strict(this);
10430 if (Type(s) !== 'object') throw TypeError();
10431 return CreateSetIterator(s, 'value');
10432 });
10433 // NOTE: function name is still 'values':
10434 Set.prototype.keys = Set.prototype.values;
10435
10436 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10437 define(
10438 Set.prototype, $$iterator,
10439 function() {
10440 var s = strict(this);
10441 if (Type(s) !== 'object') throw TypeError();
10442 return CreateSetIterator(s);
10443 });
10444
10445 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10446 define(global.Set.prototype, $$toStringTag, 'Set');
10447
10448 // 23.2.4 Properties of Set Instances
10449 // 23.2.5 Set Iterator Objects
10450 /** @constructor */
10451 function SetIterator() {}
10452
10453 // 23.2.5.1 CreateSetIterator Abstract Operation
10454 function CreateSetIterator(set, kind) {
10455 if (Type(set) !== 'object') throw TypeError();
10456 if (!('[[SetData]]' in set)) throw TypeError();
10457 if (set['[[SetData]]'] === undefined) throw TypeError();
10458 var iterator = new SetIterator;
10459 set_internal(iterator, '[[IteratedSet]]', set);
10460 set_internal(iterator, '[[SetNextIndex]]', 0);
10461 set_internal(iterator, '[[SetIterationKind]]', kind);
10462 return iterator;
10463 }
10464
10465 // 23.2.5.2 The %SetIteratorPrototype% Object
10466 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10467 SetIterator.prototype = $SetIteratorPrototype$;
10468
10469 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10470 define(
10471 $SetIteratorPrototype$, 'next',
10472 function next() {
10473 var o = strict(this);
10474 if (Type(o) !== 'object') throw TypeError();
10475 var s = o['[[IteratedSet]]'],
10476 index = o['[[SetNextIndex]]'],
10477 itemKind = o['[[SetIterationKind]]'],
10478 entries = s['[[SetData]]'];
10479 while (index < entries.length) {
10480 var e = entries[index];
10481 index = index += 1;
10482 set_internal(o, '[[SetNextIndex]]', index);
10483 if (e !== empty) {
10484 if (itemKind === 'key+value')
10485 return CreateIterResultObject([e, e], false);
10486 return CreateIterResultObject(e, false);
10487 }
10488 }
10489 return CreateIterResultObject(undefined, true);
10490 });
10491
10492 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10493 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10494
10495 // 23.2.5.3 Properties of Set Iterator Instances
10496
10497 }());
10498
10499 // ---------------------------------------
10500 // 23.3 WeakMap Objects
10501 // ---------------------------------------
10502
10503 (function() {
10504 // 23.3.1 The WeakMap Constructor
10505 // 23.3.1.1 WeakMap ( [ iterable ] )
10506 /** @constructor */
10507 function WeakMap(/*iterable*/) {
10508 var map = strict(this);
10509 var iterable = arguments[0];
10510
10511 if (Type(map) !== 'object') throw TypeError();
10512 if ('[[WeakMapData]]' in map) throw TypeError();
10513
10514 if (iterable !== undefined) {
10515 var adder = map['set'];
10516 if (!IsCallable(adder)) throw TypeError();
10517 var iter = GetIterator(ToObject(iterable));
10518 }
10519 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10520 if (iter === undefined) return map;
10521 while (true) {
10522 var next = IteratorStep(iter);
10523 if (next === false)
10524 return map;
10525 var nextValue = IteratorValue(next);
10526 if (Type(nextValue) !== 'object') throw TypeError();
10527 var k = nextValue[0];
10528 var v = nextValue[1];
10529 adder.call(map, k, v);
10530 }
10531
10532 return map;
10533 }
10534
10535 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10536 global.WeakMap = WeakMap;
10537
10538 // 23.3.2 Properties of the WeakMap Constructor
10539 // 23.3.2.1 WeakMap.prototype
10540 var $WeakMapPrototype$ = {};
10541 WeakMap.prototype = $WeakMapPrototype$;
10542
10543
10544
10545 // 23.3.2.2 WeakMap[ @@create ] ( )
10546 // 23.3.3 Properties of the WeakMap Prototype Object
10547
10548 // 23.3.3.1 WeakMap.prototype.constructor
10549
10550 // 23.3.3.2 WeakMap.prototype.delete ( key )
10551 define(
10552 WeakMap.prototype, 'delete',
10553 function delete_(key) {
10554 var M = strict(this);
10555 if (Type(M) !== 'object') throw TypeError();
10556 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10557 if (Type(key) !== 'object') throw TypeError('Expected object');
10558 return M['[[WeakMapData]]'].remove(key);
10559 });
10560
10561 // 23.3.3.3 WeakMap.prototype.get ( key )
10562 define(
10563 WeakMap.prototype, 'get',
10564 function get(key, defaultValue) {
10565 var M = strict(this);
10566 if (Type(M) !== 'object') throw TypeError();
10567 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10568 if (Type(key) !== 'object') throw TypeError('Expected object');
10569 return M['[[WeakMapData]]'].get(key, defaultValue);
10570 });
10571
10572 // 23.3.3.4 WeakMap.prototype.has ( key )
10573 define(
10574 WeakMap.prototype, 'has',
10575 function has(key) {
10576 var M = strict(this);
10577 if (Type(M) !== 'object') throw TypeError();
10578 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10579 if (Type(key) !== 'object') throw TypeError('Expected object');
10580 return M['[[WeakMapData]]'].has(key);
10581 });
10582
10583 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10584 define(
10585 WeakMap.prototype, 'set',
10586 function set(key, value) {
10587 var M = strict(this);
10588 if (Type(M) !== 'object') throw TypeError();
10589 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10590 if (Type(key) !== 'object') throw TypeError('Expected object');
10591 M['[[WeakMapData]]'].set(key, value);
10592 return M;
10593 });
10594
10595 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10596 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10597
10598 // 23.3.4 Properties of WeakMap Instances
10599
10600 // Polyfills for incomplete native implementations:
10601 (function() {
10602 var wm = new global.WeakMap();
10603 var orig = global.WeakMap.prototype.set;
10604 define(global.WeakMap.prototype, 'set', function set() {
10605 orig.apply(this, arguments);
10606 return this;
10607 }, wm.set({}, 0) !== wm);
10608 }());
10609 }());
10610
10611 // ---------------------------------------
10612 // 23.4 WeakSet Objects
10613 // ---------------------------------------
10614
10615 (function() {
10616 // 23.4.1 The WeakSet Constructor
10617 // 23.4.1.1 WeakSet ( [ iterable ] )
10618 /** @constructor */
10619 function WeakSet(/*iterable*/) {
10620 var set = strict(this);
10621 var iterable = arguments[0];
10622
10623 if (Type(set) !== 'object') throw TypeError();
10624 if ('[[WeakSetData]]' in set) throw TypeError();
10625
10626 if (iterable !== undefined) {
10627 var adder = set['add'];
10628 if (!IsCallable(adder)) throw TypeError();
10629 var iter = GetIterator(ToObject(iterable));
10630 }
10631 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10632 if (iter === undefined) return set;
10633 while (true) {
10634 var next = IteratorStep(iter);
10635 if (next === false)
10636 return set;
10637 var nextValue = IteratorValue(next);
10638 adder.call(set, nextValue);
10639 }
10640
10641 return set;
10642 }
10643
10644 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10645 global.WeakSet = WeakSet;
10646
10647 // 23.4.2 Properties of the WeakSet Constructor
10648 // 23.4.2.1 WeakSet.prototype
10649 var $WeakSetPrototype$ = {};
10650 WeakSet.prototype = $WeakSetPrototype$;
10651
10652 // 23.4.3 Properties of the WeakSet Prototype Object
10653 // 23.4.3.1 WeakSet.prototype.add (value )
10654 define(
10655 WeakSet.prototype, 'add',
10656 function add(value) {
10657 var S = strict(this);
10658 if (Type(S) !== 'object') throw TypeError();
10659 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10660 if (Type(value) !== 'object') throw TypeError('Expected object');
10661 S['[[WeakSetData]]'].set(value, true);
10662 return S;
10663 });
10664
10665 // 23.4.3.2 WeakSet.prototype.constructor
10666 // 23.4.3.3 WeakSet.prototype.delete ( value )
10667 define(
10668 WeakSet.prototype, 'delete',
10669 function delete_(value) {
10670 var S = strict(this);
10671 if (Type(S) !== 'object') throw TypeError();
10672 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10673 if (Type(value) !== 'object') throw TypeError('Expected object');
10674 return S['[[WeakSetData]]'].remove(value);
10675 });
10676
10677 // 23.4.3.4 WeakSet.prototype.has ( value )
10678 define(
10679 WeakSet.prototype, 'has',
10680 function has(key) {
10681 var S = strict(this);
10682 if (Type(S) !== 'object') throw TypeError();
10683 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10684 if (Type(key) !== 'object') throw TypeError('Expected object');
10685 return S['[[WeakSetData]]'].has(key);
10686 });
10687
10688 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10689 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10690
10691 // 23.4.4 Properties of WeakSet Instances
10692
10693 // Polyfills for incomplete native implementations:
10694 (function() {
10695 var ws = new global.WeakSet();
10696 var orig = global.WeakSet.prototype.add;
10697 define(global.WeakSet.prototype, 'add', function add() {
10698 orig.apply(this, arguments);
10699 return this;
10700 }, ws.add({}) !== ws);
10701 }());
10702 }());
10703
10704 // ---------------------------------------
10705 // 24 Structured Data
10706 // ---------------------------------------
10707
10708 // ---------------------------------------
10709 // 24.1 ArrayBuffer Objects
10710 // ---------------------------------------
10711
10712 // See typedarray.js for TypedArray polyfill
10713
10714 (function() {
10715 if (!('ArrayBuffer' in global))
10716 return;
10717
10718 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10719 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10720 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10721 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10722 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10723 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10724 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10725 // 24.1.2 The ArrayBuffer Constructor
10726 // 24.1.2.1 ArrayBuffer( length )
10727 // 24.1.3 Properties of the ArrayBuffer Constructor
10728
10729 // 24.1.3.1 ArrayBuffer.isView ( arg )
10730 define(
10731 ArrayBuffer, 'isView',
10732 function isView(arg) {
10733 if (Type(arg) !== 'object') return false;
10734 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10735 return false;
10736 });
10737
10738 // 24.1.3.2 ArrayBuffer.prototype
10739 // 24.1.3.3 get ArrayBuffer [ @@species ]
10740 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10741 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10742 // 24.1.4.2 ArrayBuffer.prototype.constructor
10743 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10744
10745 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10746 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10747
10748 // 24.1.5 Properties of the ArrayBuffer Instances
10749 }());
10750
10751 // ---------------------------------------
10752 // 24.2 DataView Objects
10753 // ---------------------------------------
10754
10755 // See typedarray.js for TypedArray polyfill
10756
10757 (function() {
10758 if (!('DataView' in global))
10759 return;
10760
10761 // 24.2.1 Abstract Operations For DataView Objects
10762 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10763 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10764 // 24.2.2 The DataView Constructor
10765 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10766 // 24.2.3 Properties of the DataView Constructor
10767 // 24.2.3.1 DataView.prototype
10768 // 24.2.4 Properties of the DataView Prototype Object
10769 // 24.2.4.1 get DataView.prototype.buffer
10770 // 24.2.4.2 get DataView.prototype.byteLength
10771 // 24.2.4.3 get DataView.prototype.byteOffset
10772 // 24.2.4.4 DataView.prototype.constructor
10773 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10774 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10775 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10776 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10777 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10778 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10779 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10780 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10781 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10782 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10783 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10784 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10785 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10786 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10787 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10788 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10789
10790 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10791 define(DataView.prototype, $$toStringTag, 'DataView');
10792
10793 // 24.2.5 Properties of DataView Instances
10794 }());
10795
10796 // ---------------------------------------
10797 // 24.3 The JSON Object
10798 // ---------------------------------------
10799
10800 // 24.3.1 JSON.parse ( text [ , reviver ] )
10801 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10802 // 24.3.3 JSON [ @@toStringTag ]
10803 define(JSON, $$toStringTag, 'JSON');
10804
10805 // ---------------------------------------
10806 // 25.1 Iteration
10807 // ---------------------------------------
10808
10809 // 25.1.1 Common Iteration Interfaces
10810 // 25.1.1.1 The Iterable Interface
10811 // 25.1.1.2 The Iterator Interface
10812 // 25.1.1.3 The IteratorResult Interface
10813
10814 // 25.1.2 The %IteratorPrototype% Object
10815 // Defined earlier, so other prototypes can reference it.
10816 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10817 define($IteratorPrototype$, $$iterator, function() {
10818 return this;
10819 });
10820
10821
10822 // ---------------------------------------
10823 // 25.4 Promise Objects
10824 // ---------------------------------------
10825
10826 (function() {
10827 // 25.4 Promise Objects
10828
10829 // 25.4.1 Promise Abstract Operations
10830
10831 // 25.4.1.1 PromiseCapability Records
10832 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10833
10834 function IfAbruptRejectPromise(value, capability) {
10835 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10836 return capability['[[Promise]]'];
10837 }
10838
10839 // 25.4.1.2 PromiseReaction Records
10840
10841 // 25.4.1.3 CreateResolvingFunctions ( promise )
10842
10843 function CreateResolvingFunctions(promise) {
10844 var alreadyResolved = {'[[value]]': false};
10845 var resolve = PromiseResolveFunction();
10846 set_internal(resolve, '[[Promise]]', promise);
10847 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10848 var reject = PromiseRejectFunction();
10849 set_internal(reject, '[[Promise]]', promise);
10850 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10851 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10852 }
10853
10854 // 25.4.1.3.1 Promise Reject Functions
10855
10856 function PromiseRejectFunction() {
10857 var F = function(reason) {
10858 console.assert(Type(F['[[Promise]]']) === 'object');
10859 var promise = F['[[Promise]]'];
10860 var alreadyResolved = F['[[AlreadyResolved]]'];
10861 if (alreadyResolved['[[value]]']) return undefined;
10862 set_internal(alreadyResolved, '[[value]]', true);
10863 return RejectPromise(promise, reason);
10864 };
10865 return F;
10866 }
10867
10868 // 25.4.1.3.2 Promise Resolve Functions
10869
10870 function PromiseResolveFunction() {
10871 var F = function(resolution) {
10872 console.assert(Type(F['[[Promise]]']) === 'object');
10873 var promise = F['[[Promise]]'];
10874 var alreadyResolved = F['[[AlreadyResolved]]'];
10875 if (alreadyResolved['[[value]]']) return undefined;
10876 set_internal(alreadyResolved, '[[value]]', true);
10877
10878 if (SameValue(resolution, promise)) {
10879 var selfResolutionError = TypeError();
10880 return RejectPromise(promise, selfResolutionError);
10881 }
10882 if (Type(resolution) !== 'object')
10883 return FulfillPromise(promise, resolution);
10884 try {
10885 var then = resolution['then'];
10886 } catch(then) {
10887 return RejectPromise(promise, then);
10888 }
10889 if (!IsCallable(then))
10890 return FulfillPromise(promise, resolution);
10891 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
10892 return undefined;
10893 };
10894 return F;
10895 }
10896
10897 // 25.4.1.4 FulfillPromise ( promise, value )
10898
10899 function FulfillPromise(promise, value) {
10900 console.assert(promise['[[PromiseState]]'] === 'pending');
10901 var reactions = promise['[[PromiseFulfillReactions]]'];
10902 set_internal(promise, '[[PromiseResult]]', value);
10903 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
10904 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
10905 set_internal(promise, '[[PromiseState]]', 'fulfilled');
10906 return TriggerPromiseReactions(reactions, value);
10907 }
10908
10909 // 25.4.1.5 NewPromiseCapability ( C )
10910
10911 function NewPromiseCapability(c) {
10912 // To keep Promise hermetic, this doesn't look much like the spec.
10913 return CreatePromiseCapabilityRecord(undefined, c);
10914 }
10915
10916 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
10917
10918 function CreatePromiseCapabilityRecord(promise, constructor) {
10919 // To keep Promise hermetic, this doesn't look much like the spec.
10920 console.assert(IsConstructor(constructor));
10921 var promiseCapability = {};
10922 set_internal(promiseCapability, '[[Promise]]', promise);
10923 set_internal(promiseCapability, '[[Resolve]]', undefined);
10924 set_internal(promiseCapability, '[[Reject]]', undefined);
10925 var executor = GetCapabilitiesExecutor();
10926 set_internal(executor, '[[Capability]]', promiseCapability);
10927
10928 // NOTE: Differs from spec; object is constructed here
10929 var constructorResult = promise = new constructor(executor);
10930 set_internal(promiseCapability, '[[Promise]]', promise);
10931
10932 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
10933 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
10934 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
10935 return promiseCapability;
10936 }
10937
10938 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
10939
10940 function GetCapabilitiesExecutor() {
10941 var F = function(resolve, reject) {
10942 console.assert(F['[[Capability]]']);
10943 var promiseCapability = F['[[Capability]]'];
10944 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
10945 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
10946 set_internal(promiseCapability, '[[Resolve]]', resolve);
10947 set_internal(promiseCapability, '[[Reject]]', reject);
10948 return undefined;
10949 };
10950 return F;
10951 }
10952
10953 // 25.4.1.6 IsPromise ( x )
10954
10955 function IsPromise(x) {
10956 if (Type(x) !== 'object') return false;
10957 if (!('[[PromiseState]]' in x)) return false;
10958 if (x['[[PromiseState]]'] === undefined) return false;
10959 return true;
10960 }
10961
10962 // 25.4.1.7 RejectPromise ( promise, reason )
10963
10964 function RejectPromise(promise, reason) {
10965 console.assert(promise['[[PromiseState]]'] === 'pending');
10966 var reactions = promise['[[PromiseRejectReactions]]'];
10967 set_internal(promise, '[[PromiseResult]]', reason);
10968 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
10969 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
10970 set_internal(promise, '[[PromiseState]]', 'rejected');
10971 return TriggerPromiseReactions(reactions, reason);
10972 }
10973
10974 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
10975
10976 function TriggerPromiseReactions(reactions, argument) {
10977 for (var i = 0, len = reactions.length; i < len; ++i)
10978 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
10979 return undefined;
10980 }
10981
10982 // 25.4.2 Promise Jobs
10983
10984 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
10985
10986 function PromiseReactionJob(reaction, argument) {
10987 var promiseCapability = reaction['[[Capabilities]]'];
10988 var handler = reaction['[[Handler]]'];
10989 var handlerResult, status;
10990 try {
10991 if (handler === 'Identity') handlerResult = argument;
10992 else if (handler === 'Thrower') throw argument;
10993 else handlerResult = handler.call(undefined, argument);
10994 } catch (handlerResult) {
10995 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
10996 NextJob(status); return;
10997 }
10998 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
10999 NextJob(status);
11000 }
11001
11002 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11003
11004 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11005 // SPEC BUG: promise vs. promiseToResolve
11006 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11007 try {
11008 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11009 resolvingFunctions['[[Reject]]']);
11010 } catch (thenCallResult) {
11011 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11012 NextJob(status); return;
11013 }
11014 NextJob(thenCallResult);
11015 }
11016
11017 // 25.4.3 The Promise Constructor
11018
11019 // 25.4.3.1 Promise ( executor )
11020
11021 function Promise(executor) {
11022 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11023 Object.defineProperty(this, '[[PromiseState]]', config);
11024 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11025 Object.defineProperty(this, '[[PromiseResult]]', config);
11026 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11027 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11028
11029 var promise = this;
11030 if (Type(promise) !== 'object') throw new TypeError();
11031 if (!('[[PromiseState]]' in promise)) throw TypeError();
11032 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11033 if (!IsCallable(executor)) throw TypeError();
11034
11035 set_internal(promise, '[[PromiseConstructor]]', Promise);
11036
11037 return InitializePromise(promise, executor);
11038 }
11039
11040 // 25.4.3.1.1 InitializePromise ( promise, executor )
11041
11042 function InitializePromise(promise, executor) {
11043 console.assert('[[PromiseState]]' in promise);
11044 console.assert(IsCallable(executor));
11045 set_internal(promise, '[[PromiseState]]', 'pending');
11046 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11047 set_internal(promise, '[[PromiseRejectReactions]]', []);
11048 var resolvingFunctions = CreateResolvingFunctions(promise);
11049 try {
11050 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11051 resolvingFunctions['[[Reject]]']);
11052 } catch (completion) {
11053 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11054 }
11055 return promise;
11056 }
11057
11058 // 25.4.4 Properties of the Promise Constructor
11059 // 25.4.4.1 Promise.all ( iterable )
11060
11061 define(Promise, 'all', function all(iterable) {
11062 var c = strict(this);
11063 var promiseCapability = NewPromiseCapability(c);
11064 try {
11065 var iterator = GetIterator(iterable);
11066 } catch (value) {
11067 promiseCapability['[[Reject]]'].call(undefined, value);
11068 return promiseCapability['[[Promise]]'];
11069 }
11070 var values = [];
11071 var remainingElementsCount = { value: 1 };
11072 var index = 0;
11073 while (true) {
11074 try {
11075 var next = IteratorStep(iterator);
11076 } catch (value) {
11077 promiseCapability['[[Reject]]'].call(undefined, value);
11078 return promiseCapability['[[Promise]]'];
11079 }
11080 if (!next) {
11081 remainingElementsCount.value -= 1;
11082 if (remainingElementsCount.value === 0) {
11083 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11084
11085
11086 }
11087 return promiseCapability['[[Promise]]'];
11088 }
11089 try {
11090 var nextValue = IteratorValue(next);
11091 } catch (value) {
11092 promiseCapability['[[Reject]]'].call(undefined, value);
11093 return promiseCapability['[[Promise]]'];
11094 }
11095 try {
11096 var nextPromise = c.resolve(nextValue);
11097 } catch (value) {
11098 promiseCapability['[[Reject]]'].call(undefined, value);
11099 return promiseCapability['[[Promise]]'];
11100 }
11101 var resolveElement = PromiseAllResolveElementFunction();
11102 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11103 set_internal(resolveElement, '[[Index]]', index);
11104 set_internal(resolveElement, '[[Values]]', values);
11105 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11106 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11107 remainingElementsCount.value += 1;
11108 try {
11109 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11110 } catch (value) {
11111 promiseCapability['[[Reject]]'].call(undefined, value);
11112 return promiseCapability['[[Promise]]'];
11113 }
11114 index += 1;
11115 }
11116 });
11117
11118 // 25.4.4.1.1 Promise.all Resolve Element Functions
11119
11120 function PromiseAllResolveElementFunction() {
11121 var F = function(x) {
11122 var alreadyCalled = F['[[AlreadyCalled]]'];
11123 if (alreadyCalled.value) return undefined;
11124 alreadyCalled.value = true;
11125 var index = F['[[Index]]'];
11126 var values = F['[[Values]]'];
11127 var promiseCapability = F['[[Capabilities]]'];
11128 var remainingElementsCount = F['[[RemainingElements]]'];
11129 try {
11130 values[index] = x;
11131 } catch (result) {
11132 promiseCapability['[[Reject]]'].call(undefined, result);
11133 return promiseCapability['[[Promise]]'];
11134 }
11135 remainingElementsCount.value -= 1;
11136 if (remainingElementsCount.value === 0)
11137 return promiseCapability['[[Resolve]]'].call(undefined, values);
11138 return undefined;
11139 };
11140 return F;
11141 }
11142
11143 // 25.4.4.2 Promise.prototype
11144
11145 Promise.prototype = {};
11146
11147 // 25.4.4.3 Promise.race ( iterable )
11148
11149 define(Promise, 'race', function race(iterable) {
11150 var c = strict(this);
11151 var promiseCapability = NewPromiseCapability(c);
11152 try {
11153 var iterator = GetIterator(iterable);
11154 } catch (value) {
11155 promiseCapability['[[Reject]]'].call(undefined, value);
11156 return promiseCapability['[[Promise]]'];
11157 }
11158 while (true) {
11159 try {
11160 var next = IteratorStep(iterator);
11161 } catch (value) {
11162 promiseCapability['[[Reject]]'].call(undefined, value);
11163 return promiseCapability['[[Promise]]'];
11164 }
11165 if (!next) return promiseCapability['[[Promise]]'];
11166 try {
11167 var nextValue = IteratorValue(next);
11168 } catch (value) {
11169 promiseCapability['[[Reject]]'].call(undefined, value);
11170 return promiseCapability['[[Promise]]'];
11171 }
11172 try {
11173 var nextPromise = c.resolve(nextValue);
11174 } catch (value) {
11175 promiseCapability['[[Reject]]'].call(undefined, value);
11176 return promiseCapability['[[Promise]]'];
11177 }
11178 try {
11179 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11180 } catch (value) {
11181 promiseCapability['[[Reject]]'].call(undefined, value);
11182 return promiseCapability['[[Promise]]'];
11183 }
11184 }
11185 });
11186
11187 // 25.4.4.4 Promise.reject ( r )
11188
11189 define(Promise, 'reject', function reject(r) {
11190 var c = strict(this);
11191 var promiseCapability = NewPromiseCapability(c);
11192 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11193 return promiseCapability['[[Promise]]'];
11194 });
11195
11196 // 25.4.4.5 Promise.resolve ( x )
11197
11198 define(Promise, 'resolve', function resolve(x) {
11199 var c = strict(this);
11200 if (IsPromise(x)) {
11201 var constructor = x['[[PromiseConstructor]]'];
11202 if (SameValue(constructor, c)) return x;
11203 }
11204 var promiseCapability = NewPromiseCapability(c);
11205 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11206 return promiseCapability['[[Promise]]'];
11207 });
11208
11209 // 25.4.4.6 Promise [ @@create ] ( )
11210 // 25.4.4.6.1 AllocatePromise ( constructor )
11211 // 25.4.5 Properties of the Promise Prototype Object
11212 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11213
11214 define(Promise.prototype, 'catch', function catch_(onRejected) {
11215 var promise = this;
11216 return promise.then(undefined, onRejected);
11217 });
11218
11219 // 25.4.5.2 Promise.prototype.constructor
11220
11221 Promise.prototype.constructor = Promise;
11222
11223 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11224
11225 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11226 var promise = this;
11227 if (!IsPromise(promise)) throw TypeError();
11228 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11229 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11230 var c = promise.constructor;
11231 var promiseCapability = NewPromiseCapability(c);
11232 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11233 '[[Handler]]': onFulfilled };
11234 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11235 '[[Handler]]': onRejected };
11236 if (promise['[[PromiseState]]'] === 'pending') {
11237 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11238 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11239 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11240 var value = promise['[[PromiseResult]]'];
11241 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11242 } else if (promise['[[PromiseState]]'] === 'rejected') {
11243 var reason = promise['[[PromiseResult]]'];
11244 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11245 }
11246 return promiseCapability['[[Promise]]'];
11247 });
11248
11249 // 25.4.6 Properties of Promise Instances
11250
11251 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11252 global.Promise = Promise;
11253
11254 // Patch early Promise.cast vs. Promise.resolve implementations
11255 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11256 }());
11257
11258 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11259 define(Promise.prototype, $$toStringTag, 'Promise');
11260
11261 // ---------------------------------------
11262 // 26 Reflection
11263 // ---------------------------------------
11264
11265 (function() {
11266 // 26.1 The Reflect Object
11267 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11268 global.Reflect = {};
11269
11270 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11271 define(
11272 Reflect, 'apply',
11273 function apply(target, thisArgument, argumentsList) {
11274 if (!IsCallable(target)) throw TypeError();
11275 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11276 });
11277
11278 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11279 define(
11280 Reflect, 'construct',
11281 function construct(target, argumentsList) {
11282 return __cons(target, argumentsList);
11283 });
11284
11285 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11286 define(
11287 Reflect, 'defineProperty',
11288 function defineProperty(target, propertyKey, attributes) {
11289 try {
11290 Object.defineProperty(target, propertyKey, attributes);
11291 return true;
11292 } catch (_) {
11293 return false;
11294 }
11295 });
11296
11297 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11298 define(
11299 Reflect, 'deleteProperty',
11300 function deleteProperty(target,name) {
11301 try {
11302 delete target[name];
11303 return !HasOwnProperty(target, name);
11304 } catch (_) {
11305 return false;
11306 }
11307 });
11308
11309 // 26.1.5 Reflect.enumerate ( target )
11310 define(
11311 Reflect, 'enumerate',
11312 function enumerate(target) {
11313 target = ToObject(target);
11314 var iterator = Enumerate(target);
11315 return iterator;
11316 });
11317
11318 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11319 define(
11320 Reflect, 'get',
11321 function get(target, name, receiver) {
11322 target = ToObject(target);
11323 name = String(name);
11324 receiver = (receiver === undefined) ? target : ToObject(receiver);
11325 var desc = getPropertyDescriptor(target, name);
11326 if (desc && 'get' in desc)
11327 return Function.prototype.call.call(desc['get'], receiver);
11328 return target[name];
11329 });
11330
11331 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11332 define(
11333 Reflect, 'getOwnPropertyDescriptor',
11334 Object.getOwnPropertyDescriptor);
11335
11336 // 26.1.8 Reflect.getPrototypeOf ( target )
11337 define(
11338 Reflect, 'getPrototypeOf',
11339 Object.getPrototypeOf);
11340
11341 // 26.1.9 Reflect.has ( target, propertyKey )
11342 define(
11343 Reflect, 'has',
11344 function has(target,name) {
11345 return String(name) in ToObject(target);
11346 });
11347
11348 // 26.1.10 Reflect.isExtensible (target)
11349 define(
11350 Reflect, 'isExtensible',
11351 Object.isExtensible);
11352
11353 // 26.1.11 Reflect.ownKeys ( target )
11354 define(
11355 Reflect, 'ownKeys',
11356 function ownKeys(target) {
11357 var obj = ToObject(target);
11358 return Object.getOwnPropertyNames(obj);
11359 });
11360
11361 // 26.1.12 Reflect.preventExtensions ( target )
11362 define(
11363 Reflect, 'preventExtensions',
11364 function preventExtensions(target) {
11365 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11366 });
11367
11368 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11369 define(
11370 Reflect, 'set',
11371 function set(target, name, value, receiver) {
11372 target = ToObject(target);
11373 name = String(name);
11374 receiver = (receiver === undefined) ? target : ToObject(receiver);
11375 var desc = getPropertyDescriptor(target, name);
11376 try {
11377 if (desc && 'set' in desc)
11378 Function.prototype.call.call(desc['set'], receiver, value);
11379 else
11380 target[name] = value;
11381 return true;
11382 } catch (_) {
11383 return false;
11384 }
11385 });
11386
11387 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11388 define(
11389 Reflect, 'setPrototypeOf',
11390 function setPrototypeOf(target, proto) {
11391 try {
11392 target.__proto__ = proto;
11393 return Reflect.getPrototypeOf(target) === proto;
11394 } catch(_) {
11395 return false;
11396 }
11397 });
11398
11399 }());
11400
11401 // ---------------------------------------
11402 // 26.2 Proxy Objects
11403 // ---------------------------------------
11404
11405 // Not polyfillable.
11406
11407}(self));
11408
11409// This helper is defined outside the main scope so that the use of
11410// 'eval' does not taint the scope for minifiers.
11411function __cons(t, a) {
11412 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11413}
11414</script>
11415 <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){
11416'use strict'
11417
11418exports.byteLength = byteLength
11419exports.toByteArray = toByteArray
11420exports.fromByteArray = fromByteArray
11421
11422var lookup = []
11423var revLookup = []
11424var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11425
11426var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11427for (var i = 0, len = code.length; i < len; ++i) {
11428 lookup[i] = code[i]
11429 revLookup[code.charCodeAt(i)] = i
11430}
11431
11432revLookup['-'.charCodeAt(0)] = 62
11433revLookup['_'.charCodeAt(0)] = 63
11434
11435function placeHoldersCount (b64) {
11436 var len = b64.length
11437 if (len % 4 > 0) {
11438 throw new Error('Invalid string. Length must be a multiple of 4')
11439 }
11440
11441 // the number of equal signs (place holders)
11442 // if there are two placeholders, than the two characters before it
11443 // represent one byte
11444 // if there is only one, then the three characters before it represent 2 bytes
11445 // this is just a cheap hack to not do indexOf twice
11446 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11447}
11448
11449function byteLength (b64) {
11450 // base64 is 4/3 + up to two characters of the original data
11451 return b64.length * 3 / 4 - placeHoldersCount(b64)
11452}
11453
11454function toByteArray (b64) {
11455 var i, j, l, tmp, placeHolders, arr
11456 var len = b64.length
11457 placeHolders = placeHoldersCount(b64)
11458
11459 arr = new Arr(len * 3 / 4 - placeHolders)
11460
11461 // if there are placeholders, only get up to the last complete 4 chars
11462 l = placeHolders > 0 ? len - 4 : len
11463
11464 var L = 0
11465
11466 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11467 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11468 arr[L++] = (tmp >> 16) & 0xFF
11469 arr[L++] = (tmp >> 8) & 0xFF
11470 arr[L++] = tmp & 0xFF
11471 }
11472
11473 if (placeHolders === 2) {
11474 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11475 arr[L++] = tmp & 0xFF
11476 } else if (placeHolders === 1) {
11477 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11478 arr[L++] = (tmp >> 8) & 0xFF
11479 arr[L++] = tmp & 0xFF
11480 }
11481
11482 return arr
11483}
11484
11485function tripletToBase64 (num) {
11486 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11487}
11488
11489function encodeChunk (uint8, start, end) {
11490 var tmp
11491 var output = []
11492 for (var i = start; i < end; i += 3) {
11493 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11494 output.push(tripletToBase64(tmp))
11495 }
11496 return output.join('')
11497}
11498
11499function fromByteArray (uint8) {
11500 var tmp
11501 var len = uint8.length
11502 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11503 var output = ''
11504 var parts = []
11505 var maxChunkLength = 16383 // must be multiple of 3
11506
11507 // go through the array every three bytes, we'll deal with trailing stuff later
11508 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11509 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11510 }
11511
11512 // pad the end with zeros, but make sure to not forget the extra bytes
11513 if (extraBytes === 1) {
11514 tmp = uint8[len - 1]
11515 output += lookup[tmp >> 2]
11516 output += lookup[(tmp << 4) & 0x3F]
11517 output += '=='
11518 } else if (extraBytes === 2) {
11519 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11520 output += lookup[tmp >> 10]
11521 output += lookup[(tmp >> 4) & 0x3F]
11522 output += lookup[(tmp << 2) & 0x3F]
11523 output += '='
11524 }
11525
11526 parts.push(output)
11527
11528 return parts.join('')
11529}
11530
11531},{}],2:[function(require,module,exports){
11532/*!
11533 * The buffer module from node.js, for the browser.
11534 *
11535 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11536 * @license MIT
11537 */
11538/* eslint-disable no-proto */
11539
11540'use strict'
11541
11542var base64 = require('base64-js')
11543var ieee754 = require('ieee754')
11544
11545exports.Buffer = Buffer
11546exports.SlowBuffer = SlowBuffer
11547exports.INSPECT_MAX_BYTES = 50
11548
11549var K_MAX_LENGTH = 0x7fffffff
11550exports.kMaxLength = K_MAX_LENGTH
11551
11552/**
11553 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11554 * === true Use Uint8Array implementation (fastest)
11555 * === false Print warning and recommend using `buffer` v4.x which has an Object
11556 * implementation (most compatible, even IE6)
11557 *
11558 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11559 * Opera 11.6+, iOS 4.2+.
11560 *
11561 * We report that the browser does not support typed arrays if the are not subclassable
11562 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11563 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11564 * for __proto__ and has a buggy typed array implementation.
11565 */
11566Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11567
11568if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11569 typeof console.error === 'function') {
11570 console.error(
11571 'This browser lacks typed array (Uint8Array) support which is required by ' +
11572 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11573 )
11574}
11575
11576function typedArraySupport () {
11577 // Can typed array instances can be augmented?
11578 try {
11579 var arr = new Uint8Array(1)
11580 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11581 return arr.foo() === 42
11582 } catch (e) {
11583 return false
11584 }
11585}
11586
11587function createBuffer (length) {
11588 if (length > K_MAX_LENGTH) {
11589 throw new RangeError('Invalid typed array length')
11590 }
11591 // Return an augmented `Uint8Array` instance
11592 var buf = new Uint8Array(length)
11593 buf.__proto__ = Buffer.prototype
11594 return buf
11595}
11596
11597/**
11598 * The Buffer constructor returns instances of `Uint8Array` that have their
11599 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11600 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11601 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11602 * returns a single octet.
11603 *
11604 * The `Uint8Array` prototype remains unmodified.
11605 */
11606
11607function Buffer (arg, encodingOrOffset, length) {
11608 // Common case.
11609 if (typeof arg === 'number') {
11610 if (typeof encodingOrOffset === 'string') {
11611 throw new Error(
11612 'If encoding is specified then the first argument must be a string'
11613 )
11614 }
11615 return allocUnsafe(arg)
11616 }
11617 return from(arg, encodingOrOffset, length)
11618}
11619
11620// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11621if (typeof Symbol !== 'undefined' && Symbol.species &&
11622 Buffer[Symbol.species] === Buffer) {
11623 Object.defineProperty(Buffer, Symbol.species, {
11624 value: null,
11625 configurable: true,
11626 enumerable: false,
11627 writable: false
11628 })
11629}
11630
11631Buffer.poolSize = 8192 // not used by this implementation
11632
11633function from (value, encodingOrOffset, length) {
11634 if (typeof value === 'number') {
11635 throw new TypeError('"value" argument must not be a number')
11636 }
11637
11638 if (value instanceof ArrayBuffer) {
11639 return fromArrayBuffer(value, encodingOrOffset, length)
11640 }
11641
11642 if (typeof value === 'string') {
11643 return fromString(value, encodingOrOffset)
11644 }
11645
11646 return fromObject(value)
11647}
11648
11649/**
11650 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11651 * if value is a number.
11652 * Buffer.from(str[, encoding])
11653 * Buffer.from(array)
11654 * Buffer.from(buffer)
11655 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11656 **/
11657Buffer.from = function (value, encodingOrOffset, length) {
11658 return from(value, encodingOrOffset, length)
11659}
11660
11661// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11662// https://github.com/feross/buffer/pull/148
11663Buffer.prototype.__proto__ = Uint8Array.prototype
11664Buffer.__proto__ = Uint8Array
11665
11666function assertSize (size) {
11667 if (typeof size !== 'number') {
11668 throw new TypeError('"size" argument must be a number')
11669 } else if (size < 0) {
11670 throw new RangeError('"size" argument must not be negative')
11671 }
11672}
11673
11674function alloc (size, fill, encoding) {
11675 assertSize(size)
11676 if (size <= 0) {
11677 return createBuffer(size)
11678 }
11679 if (fill !== undefined) {
11680 // Only pay attention to encoding if it's a string. This
11681 // prevents accidentally sending in a number that would
11682 // be interpretted as a start offset.
11683 return typeof encoding === 'string'
11684 ? createBuffer(size).fill(fill, encoding)
11685 : createBuffer(size).fill(fill)
11686 }
11687 return createBuffer(size)
11688}
11689
11690/**
11691 * Creates a new filled Buffer instance.
11692 * alloc(size[, fill[, encoding]])
11693 **/
11694Buffer.alloc = function (size, fill, encoding) {
11695 return alloc(size, fill, encoding)
11696}
11697
11698function allocUnsafe (size) {
11699 assertSize(size)
11700 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11701}
11702
11703/**
11704 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11705 * */
11706Buffer.allocUnsafe = function (size) {
11707 return allocUnsafe(size)
11708}
11709/**
11710 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11711 */
11712Buffer.allocUnsafeSlow = function (size) {
11713 return allocUnsafe(size)
11714}
11715
11716function fromString (string, encoding) {
11717 if (typeof encoding !== 'string' || encoding === '') {
11718 encoding = 'utf8'
11719 }
11720
11721 if (!Buffer.isEncoding(encoding)) {
11722 throw new TypeError('"encoding" must be a valid string encoding')
11723 }
11724
11725 var length = byteLength(string, encoding) | 0
11726 var buf = createBuffer(length)
11727
11728 var actual = buf.write(string, encoding)
11729
11730 if (actual !== length) {
11731 // Writing a hex string, for example, that contains invalid characters will
11732 // cause everything after the first invalid character to be ignored. (e.g.
11733 // 'abxxcd' will be treated as 'ab')
11734 buf = buf.slice(0, actual)
11735 }
11736
11737 return buf
11738}
11739
11740function fromArrayLike (array) {
11741 var length = array.length < 0 ? 0 : checked(array.length) | 0
11742 var buf = createBuffer(length)
11743 for (var i = 0; i < length; i += 1) {
11744 buf[i] = array[i] & 255
11745 }
11746 return buf
11747}
11748
11749function fromArrayBuffer (array, byteOffset, length) {
11750 if (byteOffset < 0 || array.byteLength < byteOffset) {
11751 throw new RangeError('\'offset\' is out of bounds')
11752 }
11753
11754 if (array.byteLength < byteOffset + (length || 0)) {
11755 throw new RangeError('\'length\' is out of bounds')
11756 }
11757
11758 var buf
11759 if (byteOffset === undefined && length === undefined) {
11760 buf = new Uint8Array(array)
11761 } else if (length === undefined) {
11762 buf = new Uint8Array(array, byteOffset)
11763 } else {
11764 buf = new Uint8Array(array, byteOffset, length)
11765 }
11766
11767 // Return an augmented `Uint8Array` instance
11768 buf.__proto__ = Buffer.prototype
11769 return buf
11770}
11771
11772function fromObject (obj) {
11773 if (Buffer.isBuffer(obj)) {
11774 var len = checked(obj.length) | 0
11775 var buf = createBuffer(len)
11776
11777 if (buf.length === 0) {
11778 return buf
11779 }
11780
11781 obj.copy(buf, 0, 0, len)
11782 return buf
11783 }
11784
11785 if (obj) {
11786 if (isArrayBufferView(obj) || 'length' in obj) {
11787 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11788 return createBuffer(0)
11789 }
11790 return fromArrayLike(obj)
11791 }
11792
11793 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11794 return fromArrayLike(obj.data)
11795 }
11796 }
11797
11798 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11799}
11800
11801function checked (length) {
11802 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11803 // length is NaN (which is otherwise coerced to zero.)
11804 if (length >= K_MAX_LENGTH) {
11805 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11806 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11807 }
11808 return length | 0
11809}
11810
11811function SlowBuffer (length) {
11812 if (+length != length) { // eslint-disable-line eqeqeq
11813 length = 0
11814 }
11815 return Buffer.alloc(+length)
11816}
11817
11818Buffer.isBuffer = function isBuffer (b) {
11819 return b != null && b._isBuffer === true
11820}
11821
11822Buffer.compare = function compare (a, b) {
11823 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11824 throw new TypeError('Arguments must be Buffers')
11825 }
11826
11827 if (a === b) return 0
11828
11829 var x = a.length
11830 var y = b.length
11831
11832 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11833 if (a[i] !== b[i]) {
11834 x = a[i]
11835 y = b[i]
11836 break
11837 }
11838 }
11839
11840 if (x < y) return -1
11841 if (y < x) return 1
11842 return 0
11843}
11844
11845Buffer.isEncoding = function isEncoding (encoding) {
11846 switch (String(encoding).toLowerCase()) {
11847 case 'hex':
11848 case 'utf8':
11849 case 'utf-8':
11850 case 'ascii':
11851 case 'latin1':
11852 case 'binary':
11853 case 'base64':
11854 case 'ucs2':
11855 case 'ucs-2':
11856 case 'utf16le':
11857 case 'utf-16le':
11858 return true
11859 default:
11860 return false
11861 }
11862}
11863
11864Buffer.concat = function concat (list, length) {
11865 if (!Array.isArray(list)) {
11866 throw new TypeError('"list" argument must be an Array of Buffers')
11867 }
11868
11869 if (list.length === 0) {
11870 return Buffer.alloc(0)
11871 }
11872
11873 var i
11874 if (length === undefined) {
11875 length = 0
11876 for (i = 0; i < list.length; ++i) {
11877 length += list[i].length
11878 }
11879 }
11880
11881 var buffer = Buffer.allocUnsafe(length)
11882 var pos = 0
11883 for (i = 0; i < list.length; ++i) {
11884 var buf = list[i]
11885 if (!Buffer.isBuffer(buf)) {
11886 throw new TypeError('"list" argument must be an Array of Buffers')
11887 }
11888 buf.copy(buffer, pos)
11889 pos += buf.length
11890 }
11891 return buffer
11892}
11893
11894function byteLength (string, encoding) {
11895 if (Buffer.isBuffer(string)) {
11896 return string.length
11897 }
11898 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
11899 return string.byteLength
11900 }
11901 if (typeof string !== 'string') {
11902 string = '' + string
11903 }
11904
11905 var len = string.length
11906 if (len === 0) return 0
11907
11908 // Use a for loop to avoid recursion
11909 var loweredCase = false
11910 for (;;) {
11911 switch (encoding) {
11912 case 'ascii':
11913 case 'latin1':
11914 case 'binary':
11915 return len
11916 case 'utf8':
11917 case 'utf-8':
11918 case undefined:
11919 return utf8ToBytes(string).length
11920 case 'ucs2':
11921 case 'ucs-2':
11922 case 'utf16le':
11923 case 'utf-16le':
11924 return len * 2
11925 case 'hex':
11926 return len >>> 1
11927 case 'base64':
11928 return base64ToBytes(string).length
11929 default:
11930 if (loweredCase) return utf8ToBytes(string).length // assume utf8
11931 encoding = ('' + encoding).toLowerCase()
11932 loweredCase = true
11933 }
11934 }
11935}
11936Buffer.byteLength = byteLength
11937
11938function slowToString (encoding, start, end) {
11939 var loweredCase = false
11940
11941 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
11942 // property of a typed array.
11943
11944 // This behaves neither like String nor Uint8Array in that we set start/end
11945 // to their upper/lower bounds if the value passed is out of range.
11946 // undefined is handled specially as per ECMA-262 6th Edition,
11947 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
11948 if (start === undefined || start < 0) {
11949 start = 0
11950 }
11951 // Return early if start > this.length. Done here to prevent potential uint32
11952 // coercion fail below.
11953 if (start > this.length) {
11954 return ''
11955 }
11956
11957 if (end === undefined || end > this.length) {
11958 end = this.length
11959 }
11960
11961 if (end <= 0) {
11962 return ''
11963 }
11964
11965 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
11966 end >>>= 0
11967 start >>>= 0
11968
11969 if (end <= start) {
11970 return ''
11971 }
11972
11973 if (!encoding) encoding = 'utf8'
11974
11975 while (true) {
11976 switch (encoding) {
11977 case 'hex':
11978 return hexSlice(this, start, end)
11979
11980 case 'utf8':
11981 case 'utf-8':
11982 return utf8Slice(this, start, end)
11983
11984 case 'ascii':
11985 return asciiSlice(this, start, end)
11986
11987 case 'latin1':
11988 case 'binary':
11989 return latin1Slice(this, start, end)
11990
11991 case 'base64':
11992 return base64Slice(this, start, end)
11993
11994 case 'ucs2':
11995 case 'ucs-2':
11996 case 'utf16le':
11997 case 'utf-16le':
11998 return utf16leSlice(this, start, end)
11999
12000 default:
12001 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12002 encoding = (encoding + '').toLowerCase()
12003 loweredCase = true
12004 }
12005 }
12006}
12007
12008// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12009// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12010// reliably in a browserify context because there could be multiple different
12011// copies of the 'buffer' package in use. This method works even for Buffer
12012// instances that were created from another copy of the `buffer` package.
12013// See: https://github.com/feross/buffer/issues/154
12014Buffer.prototype._isBuffer = true
12015
12016function swap (b, n, m) {
12017 var i = b[n]
12018 b[n] = b[m]
12019 b[m] = i
12020}
12021
12022Buffer.prototype.swap16 = function swap16 () {
12023 var len = this.length
12024 if (len % 2 !== 0) {
12025 throw new RangeError('Buffer size must be a multiple of 16-bits')
12026 }
12027 for (var i = 0; i < len; i += 2) {
12028 swap(this, i, i + 1)
12029 }
12030 return this
12031}
12032
12033Buffer.prototype.swap32 = function swap32 () {
12034 var len = this.length
12035 if (len % 4 !== 0) {
12036 throw new RangeError('Buffer size must be a multiple of 32-bits')
12037 }
12038 for (var i = 0; i < len; i += 4) {
12039 swap(this, i, i + 3)
12040 swap(this, i + 1, i + 2)
12041 }
12042 return this
12043}
12044
12045Buffer.prototype.swap64 = function swap64 () {
12046 var len = this.length
12047 if (len % 8 !== 0) {
12048 throw new RangeError('Buffer size must be a multiple of 64-bits')
12049 }
12050 for (var i = 0; i < len; i += 8) {
12051 swap(this, i, i + 7)
12052 swap(this, i + 1, i + 6)
12053 swap(this, i + 2, i + 5)
12054 swap(this, i + 3, i + 4)
12055 }
12056 return this
12057}
12058
12059Buffer.prototype.toString = function toString () {
12060 var length = this.length
12061 if (length === 0) return ''
12062 if (arguments.length === 0) return utf8Slice(this, 0, length)
12063 return slowToString.apply(this, arguments)
12064}
12065
12066Buffer.prototype.equals = function equals (b) {
12067 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12068 if (this === b) return true
12069 return Buffer.compare(this, b) === 0
12070}
12071
12072Buffer.prototype.inspect = function inspect () {
12073 var str = ''
12074 var max = exports.INSPECT_MAX_BYTES
12075 if (this.length > 0) {
12076 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12077 if (this.length > max) str += ' ... '
12078 }
12079 return '<Buffer ' + str + '>'
12080}
12081
12082Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12083 if (!Buffer.isBuffer(target)) {
12084 throw new TypeError('Argument must be a Buffer')
12085 }
12086
12087 if (start === undefined) {
12088 start = 0
12089 }
12090 if (end === undefined) {
12091 end = target ? target.length : 0
12092 }
12093 if (thisStart === undefined) {
12094 thisStart = 0
12095 }
12096 if (thisEnd === undefined) {
12097 thisEnd = this.length
12098 }
12099
12100 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12101 throw new RangeError('out of range index')
12102 }
12103
12104 if (thisStart >= thisEnd && start >= end) {
12105 return 0
12106 }
12107 if (thisStart >= thisEnd) {
12108 return -1
12109 }
12110 if (start >= end) {
12111 return 1
12112 }
12113
12114 start >>>= 0
12115 end >>>= 0
12116 thisStart >>>= 0
12117 thisEnd >>>= 0
12118
12119 if (this === target) return 0
12120
12121 var x = thisEnd - thisStart
12122 var y = end - start
12123 var len = Math.min(x, y)
12124
12125 var thisCopy = this.slice(thisStart, thisEnd)
12126 var targetCopy = target.slice(start, end)
12127
12128 for (var i = 0; i < len; ++i) {
12129 if (thisCopy[i] !== targetCopy[i]) {
12130 x = thisCopy[i]
12131 y = targetCopy[i]
12132 break
12133 }
12134 }
12135
12136 if (x < y) return -1
12137 if (y < x) return 1
12138 return 0
12139}
12140
12141// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12142// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12143//
12144// Arguments:
12145// - buffer - a Buffer to search
12146// - val - a string, Buffer, or number
12147// - byteOffset - an index into `buffer`; will be clamped to an int32
12148// - encoding - an optional encoding, relevant is val is a string
12149// - dir - true for indexOf, false for lastIndexOf
12150function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12151 // Empty buffer means no match
12152 if (buffer.length === 0) return -1
12153
12154 // Normalize byteOffset
12155 if (typeof byteOffset === 'string') {
12156 encoding = byteOffset
12157 byteOffset = 0
12158 } else if (byteOffset > 0x7fffffff) {
12159 byteOffset = 0x7fffffff
12160 } else if (byteOffset < -0x80000000) {
12161 byteOffset = -0x80000000
12162 }
12163 byteOffset = +byteOffset // Coerce to Number.
12164 if (numberIsNaN(byteOffset)) {
12165 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12166 byteOffset = dir ? 0 : (buffer.length - 1)
12167 }
12168
12169 // Normalize byteOffset: negative offsets start from the end of the buffer
12170 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12171 if (byteOffset >= buffer.length) {
12172 if (dir) return -1
12173 else byteOffset = buffer.length - 1
12174 } else if (byteOffset < 0) {
12175 if (dir) byteOffset = 0
12176 else return -1
12177 }
12178
12179 // Normalize val
12180 if (typeof val === 'string') {
12181 val = Buffer.from(val, encoding)
12182 }
12183
12184 // Finally, search either indexOf (if dir is true) or lastIndexOf
12185 if (Buffer.isBuffer(val)) {
12186 // Special case: looking for empty string/buffer always fails
12187 if (val.length === 0) {
12188 return -1
12189 }
12190 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12191 } else if (typeof val === 'number') {
12192 val = val & 0xFF // Search for a byte value [0-255]
12193 if (typeof Uint8Array.prototype.indexOf === 'function') {
12194 if (dir) {
12195 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12196 } else {
12197 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12198 }
12199 }
12200 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12201 }
12202
12203 throw new TypeError('val must be string, number or Buffer')
12204}
12205
12206function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12207 var indexSize = 1
12208 var arrLength = arr.length
12209 var valLength = val.length
12210
12211 if (encoding !== undefined) {
12212 encoding = String(encoding).toLowerCase()
12213 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12214 encoding === 'utf16le' || encoding === 'utf-16le') {
12215 if (arr.length < 2 || val.length < 2) {
12216 return -1
12217 }
12218 indexSize = 2
12219 arrLength /= 2
12220 valLength /= 2
12221 byteOffset /= 2
12222 }
12223 }
12224
12225 function read (buf, i) {
12226 if (indexSize === 1) {
12227 return buf[i]
12228 } else {
12229 return buf.readUInt16BE(i * indexSize)
12230 }
12231 }
12232
12233 var i
12234 if (dir) {
12235 var foundIndex = -1
12236 for (i = byteOffset; i < arrLength; i++) {
12237 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12238 if (foundIndex === -1) foundIndex = i
12239 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12240 } else {
12241 if (foundIndex !== -1) i -= i - foundIndex
12242 foundIndex = -1
12243 }
12244 }
12245 } else {
12246 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12247 for (i = byteOffset; i >= 0; i--) {
12248 var found = true
12249 for (var j = 0; j < valLength; j++) {
12250 if (read(arr, i + j) !== read(val, j)) {
12251 found = false
12252 break
12253 }
12254 }
12255 if (found) return i
12256 }
12257 }
12258
12259 return -1
12260}
12261
12262Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12263 return this.indexOf(val, byteOffset, encoding) !== -1
12264}
12265
12266Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12267 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12268}
12269
12270Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12271 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12272}
12273
12274function hexWrite (buf, string, offset, length) {
12275 offset = Number(offset) || 0
12276 var remaining = buf.length - offset
12277 if (!length) {
12278 length = remaining
12279 } else {
12280 length = Number(length)
12281 if (length > remaining) {
12282 length = remaining
12283 }
12284 }
12285
12286 // must be an even number of digits
12287 var strLen = string.length
12288 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12289
12290 if (length > strLen / 2) {
12291 length = strLen / 2
12292 }
12293 for (var i = 0; i < length; ++i) {
12294 var parsed = parseInt(string.substr(i * 2, 2), 16)
12295 if (numberIsNaN(parsed)) return i
12296 buf[offset + i] = parsed
12297 }
12298 return i
12299}
12300
12301function utf8Write (buf, string, offset, length) {
12302 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12303}
12304
12305function asciiWrite (buf, string, offset, length) {
12306 return blitBuffer(asciiToBytes(string), buf, offset, length)
12307}
12308
12309function latin1Write (buf, string, offset, length) {
12310 return asciiWrite(buf, string, offset, length)
12311}
12312
12313function base64Write (buf, string, offset, length) {
12314 return blitBuffer(base64ToBytes(string), buf, offset, length)
12315}
12316
12317function ucs2Write (buf, string, offset, length) {
12318 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12319}
12320
12321Buffer.prototype.write = function write (string, offset, length, encoding) {
12322 // Buffer#write(string)
12323 if (offset === undefined) {
12324 encoding = 'utf8'
12325 length = this.length
12326 offset = 0
12327 // Buffer#write(string, encoding)
12328 } else if (length === undefined && typeof offset === 'string') {
12329 encoding = offset
12330 length = this.length
12331 offset = 0
12332 // Buffer#write(string, offset[, length][, encoding])
12333 } else if (isFinite(offset)) {
12334 offset = offset >>> 0
12335 if (isFinite(length)) {
12336 length = length >>> 0
12337 if (encoding === undefined) encoding = 'utf8'
12338 } else {
12339 encoding = length
12340 length = undefined
12341 }
12342 } else {
12343 throw new Error(
12344 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12345 )
12346 }
12347
12348 var remaining = this.length - offset
12349 if (length === undefined || length > remaining) length = remaining
12350
12351 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12352 throw new RangeError('Attempt to write outside buffer bounds')
12353 }
12354
12355 if (!encoding) encoding = 'utf8'
12356
12357 var loweredCase = false
12358 for (;;) {
12359 switch (encoding) {
12360 case 'hex':
12361 return hexWrite(this, string, offset, length)
12362
12363 case 'utf8':
12364 case 'utf-8':
12365 return utf8Write(this, string, offset, length)
12366
12367 case 'ascii':
12368 return asciiWrite(this, string, offset, length)
12369
12370 case 'latin1':
12371 case 'binary':
12372 return latin1Write(this, string, offset, length)
12373
12374 case 'base64':
12375 // Warning: maxLength not taken into account in base64Write
12376 return base64Write(this, string, offset, length)
12377
12378 case 'ucs2':
12379 case 'ucs-2':
12380 case 'utf16le':
12381 case 'utf-16le':
12382 return ucs2Write(this, string, offset, length)
12383
12384 default:
12385 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12386 encoding = ('' + encoding).toLowerCase()
12387 loweredCase = true
12388 }
12389 }
12390}
12391
12392Buffer.prototype.toJSON = function toJSON () {
12393 return {
12394 type: 'Buffer',
12395 data: Array.prototype.slice.call(this._arr || this, 0)
12396 }
12397}
12398
12399function base64Slice (buf, start, end) {
12400 if (start === 0 && end === buf.length) {
12401 return base64.fromByteArray(buf)
12402 } else {
12403 return base64.fromByteArray(buf.slice(start, end))
12404 }
12405}
12406
12407function utf8Slice (buf, start, end) {
12408 end = Math.min(buf.length, end)
12409 var res = []
12410
12411 var i = start
12412 while (i < end) {
12413 var firstByte = buf[i]
12414 var codePoint = null
12415 var bytesPerSequence = (firstByte > 0xEF) ? 4
12416 : (firstByte > 0xDF) ? 3
12417 : (firstByte > 0xBF) ? 2
12418 : 1
12419
12420 if (i + bytesPerSequence <= end) {
12421 var secondByte, thirdByte, fourthByte, tempCodePoint
12422
12423 switch (bytesPerSequence) {
12424 case 1:
12425 if (firstByte < 0x80) {
12426 codePoint = firstByte
12427 }
12428 break
12429 case 2:
12430 secondByte = buf[i + 1]
12431 if ((secondByte & 0xC0) === 0x80) {
12432 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12433 if (tempCodePoint > 0x7F) {
12434 codePoint = tempCodePoint
12435 }
12436 }
12437 break
12438 case 3:
12439 secondByte = buf[i + 1]
12440 thirdByte = buf[i + 2]
12441 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12442 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12443 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12444 codePoint = tempCodePoint
12445 }
12446 }
12447 break
12448 case 4:
12449 secondByte = buf[i + 1]
12450 thirdByte = buf[i + 2]
12451 fourthByte = buf[i + 3]
12452 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12453 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12454 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12455 codePoint = tempCodePoint
12456 }
12457 }
12458 }
12459 }
12460
12461 if (codePoint === null) {
12462 // we did not generate a valid codePoint so insert a
12463 // replacement char (U+FFFD) and advance only 1 byte
12464 codePoint = 0xFFFD
12465 bytesPerSequence = 1
12466 } else if (codePoint > 0xFFFF) {
12467 // encode to utf16 (surrogate pair dance)
12468 codePoint -= 0x10000
12469 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12470 codePoint = 0xDC00 | codePoint & 0x3FF
12471 }
12472
12473 res.push(codePoint)
12474 i += bytesPerSequence
12475 }
12476
12477 return decodeCodePointsArray(res)
12478}
12479
12480// Based on http://stackoverflow.com/a/22747272/680742, the browser with
12481// the lowest limit is Chrome, with 0x10000 args.
12482// We go 1 magnitude less, for safety
12483var MAX_ARGUMENTS_LENGTH = 0x1000
12484
12485function decodeCodePointsArray (codePoints) {
12486 var len = codePoints.length
12487 if (len <= MAX_ARGUMENTS_LENGTH) {
12488 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12489 }
12490
12491 // Decode in chunks to avoid "call stack size exceeded".
12492 var res = ''
12493 var i = 0
12494 while (i < len) {
12495 res += String.fromCharCode.apply(
12496 String,
12497 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12498 )
12499 }
12500 return res
12501}
12502
12503function asciiSlice (buf, start, end) {
12504 var ret = ''
12505 end = Math.min(buf.length, end)
12506
12507 for (var i = start; i < end; ++i) {
12508 ret += String.fromCharCode(buf[i] & 0x7F)
12509 }
12510 return ret
12511}
12512
12513function latin1Slice (buf, start, end) {
12514 var ret = ''
12515 end = Math.min(buf.length, end)
12516
12517 for (var i = start; i < end; ++i) {
12518 ret += String.fromCharCode(buf[i])
12519 }
12520 return ret
12521}
12522
12523function hexSlice (buf, start, end) {
12524 var len = buf.length
12525
12526 if (!start || start < 0) start = 0
12527 if (!end || end < 0 || end > len) end = len
12528
12529 var out = ''
12530 for (var i = start; i < end; ++i) {
12531 out += toHex(buf[i])
12532 }
12533 return out
12534}
12535
12536function utf16leSlice (buf, start, end) {
12537 var bytes = buf.slice(start, end)
12538 var res = ''
12539 for (var i = 0; i < bytes.length; i += 2) {
12540 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12541 }
12542 return res
12543}
12544
12545Buffer.prototype.slice = function slice (start, end) {
12546 var len = this.length
12547 start = ~~start
12548 end = end === undefined ? len : ~~end
12549
12550 if (start < 0) {
12551 start += len
12552 if (start < 0) start = 0
12553 } else if (start > len) {
12554 start = len
12555 }
12556
12557 if (end < 0) {
12558 end += len
12559 if (end < 0) end = 0
12560 } else if (end > len) {
12561 end = len
12562 }
12563
12564 if (end < start) end = start
12565
12566 var newBuf = this.subarray(start, end)
12567 // Return an augmented `Uint8Array` instance
12568 newBuf.__proto__ = Buffer.prototype
12569 return newBuf
12570}
12571
12572/*
12573 * Need to make sure that buffer isn't trying to write out of bounds.
12574 */
12575function checkOffset (offset, ext, length) {
12576 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12577 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12578}
12579
12580Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12581 offset = offset >>> 0
12582 byteLength = byteLength >>> 0
12583 if (!noAssert) checkOffset(offset, byteLength, this.length)
12584
12585 var val = this[offset]
12586 var mul = 1
12587 var i = 0
12588 while (++i < byteLength && (mul *= 0x100)) {
12589 val += this[offset + i] * mul
12590 }
12591
12592 return val
12593}
12594
12595Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12596 offset = offset >>> 0
12597 byteLength = byteLength >>> 0
12598 if (!noAssert) {
12599 checkOffset(offset, byteLength, this.length)
12600 }
12601
12602 var val = this[offset + --byteLength]
12603 var mul = 1
12604 while (byteLength > 0 && (mul *= 0x100)) {
12605 val += this[offset + --byteLength] * mul
12606 }
12607
12608 return val
12609}
12610
12611Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12612 offset = offset >>> 0
12613 if (!noAssert) checkOffset(offset, 1, this.length)
12614 return this[offset]
12615}
12616
12617Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12618 offset = offset >>> 0
12619 if (!noAssert) checkOffset(offset, 2, this.length)
12620 return this[offset] | (this[offset + 1] << 8)
12621}
12622
12623Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12624 offset = offset >>> 0
12625 if (!noAssert) checkOffset(offset, 2, this.length)
12626 return (this[offset] << 8) | this[offset + 1]
12627}
12628
12629Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12630 offset = offset >>> 0
12631 if (!noAssert) checkOffset(offset, 4, this.length)
12632
12633 return ((this[offset]) |
12634 (this[offset + 1] << 8) |
12635 (this[offset + 2] << 16)) +
12636 (this[offset + 3] * 0x1000000)
12637}
12638
12639Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12640 offset = offset >>> 0
12641 if (!noAssert) checkOffset(offset, 4, this.length)
12642
12643 return (this[offset] * 0x1000000) +
12644 ((this[offset + 1] << 16) |
12645 (this[offset + 2] << 8) |
12646 this[offset + 3])
12647}
12648
12649Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12650 offset = offset >>> 0
12651 byteLength = byteLength >>> 0
12652 if (!noAssert) checkOffset(offset, byteLength, this.length)
12653
12654 var val = this[offset]
12655 var mul = 1
12656 var i = 0
12657 while (++i < byteLength && (mul *= 0x100)) {
12658 val += this[offset + i] * mul
12659 }
12660 mul *= 0x80
12661
12662 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12663
12664 return val
12665}
12666
12667Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12668 offset = offset >>> 0
12669 byteLength = byteLength >>> 0
12670 if (!noAssert) checkOffset(offset, byteLength, this.length)
12671
12672 var i = byteLength
12673 var mul = 1
12674 var val = this[offset + --i]
12675 while (i > 0 && (mul *= 0x100)) {
12676 val += this[offset + --i] * mul
12677 }
12678 mul *= 0x80
12679
12680 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12681
12682 return val
12683}
12684
12685Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12686 offset = offset >>> 0
12687 if (!noAssert) checkOffset(offset, 1, this.length)
12688 if (!(this[offset] & 0x80)) return (this[offset])
12689 return ((0xff - this[offset] + 1) * -1)
12690}
12691
12692Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12693 offset = offset >>> 0
12694 if (!noAssert) checkOffset(offset, 2, this.length)
12695 var val = this[offset] | (this[offset + 1] << 8)
12696 return (val & 0x8000) ? val | 0xFFFF0000 : val
12697}
12698
12699Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12700 offset = offset >>> 0
12701 if (!noAssert) checkOffset(offset, 2, this.length)
12702 var val = this[offset + 1] | (this[offset] << 8)
12703 return (val & 0x8000) ? val | 0xFFFF0000 : val
12704}
12705
12706Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12707 offset = offset >>> 0
12708 if (!noAssert) checkOffset(offset, 4, this.length)
12709
12710 return (this[offset]) |
12711 (this[offset + 1] << 8) |
12712 (this[offset + 2] << 16) |
12713 (this[offset + 3] << 24)
12714}
12715
12716Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12717 offset = offset >>> 0
12718 if (!noAssert) checkOffset(offset, 4, this.length)
12719
12720 return (this[offset] << 24) |
12721 (this[offset + 1] << 16) |
12722 (this[offset + 2] << 8) |
12723 (this[offset + 3])
12724}
12725
12726Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12727 offset = offset >>> 0
12728 if (!noAssert) checkOffset(offset, 4, this.length)
12729 return ieee754.read(this, offset, true, 23, 4)
12730}
12731
12732Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12733 offset = offset >>> 0
12734 if (!noAssert) checkOffset(offset, 4, this.length)
12735 return ieee754.read(this, offset, false, 23, 4)
12736}
12737
12738Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12739 offset = offset >>> 0
12740 if (!noAssert) checkOffset(offset, 8, this.length)
12741 return ieee754.read(this, offset, true, 52, 8)
12742}
12743
12744Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12745 offset = offset >>> 0
12746 if (!noAssert) checkOffset(offset, 8, this.length)
12747 return ieee754.read(this, offset, false, 52, 8)
12748}
12749
12750function checkInt (buf, value, offset, ext, max, min) {
12751 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12752 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12753 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12754}
12755
12756Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12757 value = +value
12758 offset = offset >>> 0
12759 byteLength = byteLength >>> 0
12760 if (!noAssert) {
12761 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12762 checkInt(this, value, offset, byteLength, maxBytes, 0)
12763 }
12764
12765 var mul = 1
12766 var i = 0
12767 this[offset] = value & 0xFF
12768 while (++i < byteLength && (mul *= 0x100)) {
12769 this[offset + i] = (value / mul) & 0xFF
12770 }
12771
12772 return offset + byteLength
12773}
12774
12775Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12776 value = +value
12777 offset = offset >>> 0
12778 byteLength = byteLength >>> 0
12779 if (!noAssert) {
12780 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12781 checkInt(this, value, offset, byteLength, maxBytes, 0)
12782 }
12783
12784 var i = byteLength - 1
12785 var mul = 1
12786 this[offset + i] = value & 0xFF
12787 while (--i >= 0 && (mul *= 0x100)) {
12788 this[offset + i] = (value / mul) & 0xFF
12789 }
12790
12791 return offset + byteLength
12792}
12793
12794Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12795 value = +value
12796 offset = offset >>> 0
12797 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12798 this[offset] = (value & 0xff)
12799 return offset + 1
12800}
12801
12802Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12803 value = +value
12804 offset = offset >>> 0
12805 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12806 this[offset] = (value & 0xff)
12807 this[offset + 1] = (value >>> 8)
12808 return offset + 2
12809}
12810
12811Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12812 value = +value
12813 offset = offset >>> 0
12814 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12815 this[offset] = (value >>> 8)
12816 this[offset + 1] = (value & 0xff)
12817 return offset + 2
12818}
12819
12820Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12821 value = +value
12822 offset = offset >>> 0
12823 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12824 this[offset + 3] = (value >>> 24)
12825 this[offset + 2] = (value >>> 16)
12826 this[offset + 1] = (value >>> 8)
12827 this[offset] = (value & 0xff)
12828 return offset + 4
12829}
12830
12831Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12832 value = +value
12833 offset = offset >>> 0
12834 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12835 this[offset] = (value >>> 24)
12836 this[offset + 1] = (value >>> 16)
12837 this[offset + 2] = (value >>> 8)
12838 this[offset + 3] = (value & 0xff)
12839 return offset + 4
12840}
12841
12842Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12843 value = +value
12844 offset = offset >>> 0
12845 if (!noAssert) {
12846 var limit = Math.pow(2, (8 * byteLength) - 1)
12847
12848 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12849 }
12850
12851 var i = 0
12852 var mul = 1
12853 var sub = 0
12854 this[offset] = value & 0xFF
12855 while (++i < byteLength && (mul *= 0x100)) {
12856 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12857 sub = 1
12858 }
12859 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12860 }
12861
12862 return offset + byteLength
12863}
12864
12865Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
12866 value = +value
12867 offset = offset >>> 0
12868 if (!noAssert) {
12869 var limit = Math.pow(2, (8 * byteLength) - 1)
12870
12871 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12872 }
12873
12874 var i = byteLength - 1
12875 var mul = 1
12876 var sub = 0
12877 this[offset + i] = value & 0xFF
12878 while (--i >= 0 && (mul *= 0x100)) {
12879 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
12880 sub = 1
12881 }
12882 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12883 }
12884
12885 return offset + byteLength
12886}
12887
12888Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
12889 value = +value
12890 offset = offset >>> 0
12891 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
12892 if (value < 0) value = 0xff + value + 1
12893 this[offset] = (value & 0xff)
12894 return offset + 1
12895}
12896
12897Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
12898 value = +value
12899 offset = offset >>> 0
12900 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
12901 this[offset] = (value & 0xff)
12902 this[offset + 1] = (value >>> 8)
12903 return offset + 2
12904}
12905
12906Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
12907 value = +value
12908 offset = offset >>> 0
12909 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
12910 this[offset] = (value >>> 8)
12911 this[offset + 1] = (value & 0xff)
12912 return offset + 2
12913}
12914
12915Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
12916 value = +value
12917 offset = offset >>> 0
12918 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
12919 this[offset] = (value & 0xff)
12920 this[offset + 1] = (value >>> 8)
12921 this[offset + 2] = (value >>> 16)
12922 this[offset + 3] = (value >>> 24)
12923 return offset + 4
12924}
12925
12926Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
12927 value = +value
12928 offset = offset >>> 0
12929 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
12930 if (value < 0) value = 0xffffffff + value + 1
12931 this[offset] = (value >>> 24)
12932 this[offset + 1] = (value >>> 16)
12933 this[offset + 2] = (value >>> 8)
12934 this[offset + 3] = (value & 0xff)
12935 return offset + 4
12936}
12937
12938function checkIEEE754 (buf, value, offset, ext, max, min) {
12939 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12940 if (offset < 0) throw new RangeError('Index out of range')
12941}
12942
12943function writeFloat (buf, value, offset, littleEndian, noAssert) {
12944 value = +value
12945 offset = offset >>> 0
12946 if (!noAssert) {
12947 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
12948 }
12949 ieee754.write(buf, value, offset, littleEndian, 23, 4)
12950 return offset + 4
12951}
12952
12953Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
12954 return writeFloat(this, value, offset, true, noAssert)
12955}
12956
12957Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
12958 return writeFloat(this, value, offset, false, noAssert)
12959}
12960
12961function writeDouble (buf, value, offset, littleEndian, noAssert) {
12962 value = +value
12963 offset = offset >>> 0
12964 if (!noAssert) {
12965 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
12966 }
12967 ieee754.write(buf, value, offset, littleEndian, 52, 8)
12968 return offset + 8
12969}
12970
12971Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
12972 return writeDouble(this, value, offset, true, noAssert)
12973}
12974
12975Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
12976 return writeDouble(this, value, offset, false, noAssert)
12977}
12978
12979// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
12980Buffer.prototype.copy = function copy (target, targetStart, start, end) {
12981 if (!start) start = 0
12982 if (!end && end !== 0) end = this.length
12983 if (targetStart >= target.length) targetStart = target.length
12984 if (!targetStart) targetStart = 0
12985 if (end > 0 && end < start) end = start
12986
12987 // Copy 0 bytes; we're done
12988 if (end === start) return 0
12989 if (target.length === 0 || this.length === 0) return 0
12990
12991 // Fatal error conditions
12992 if (targetStart < 0) {
12993 throw new RangeError('targetStart out of bounds')
12994 }
12995 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
12996 if (end < 0) throw new RangeError('sourceEnd out of bounds')
12997
12998 // Are we oob?
12999 if (end > this.length) end = this.length
13000 if (target.length - targetStart < end - start) {
13001 end = target.length - targetStart + start
13002 }
13003
13004 var len = end - start
13005 var i
13006
13007 if (this === target && start < targetStart && targetStart < end) {
13008 // descending copy from end
13009 for (i = len - 1; i >= 0; --i) {
13010 target[i + targetStart] = this[i + start]
13011 }
13012 } else if (len < 1000) {
13013 // ascending copy from start
13014 for (i = 0; i < len; ++i) {
13015 target[i + targetStart] = this[i + start]
13016 }
13017 } else {
13018 Uint8Array.prototype.set.call(
13019 target,
13020 this.subarray(start, start + len),
13021 targetStart
13022 )
13023 }
13024
13025 return len
13026}
13027
13028// Usage:
13029// buffer.fill(number[, offset[, end]])
13030// buffer.fill(buffer[, offset[, end]])
13031// buffer.fill(string[, offset[, end]][, encoding])
13032Buffer.prototype.fill = function fill (val, start, end, encoding) {
13033 // Handle string cases:
13034 if (typeof val === 'string') {
13035 if (typeof start === 'string') {
13036 encoding = start
13037 start = 0
13038 end = this.length
13039 } else if (typeof end === 'string') {
13040 encoding = end
13041 end = this.length
13042 }
13043 if (val.length === 1) {
13044 var code = val.charCodeAt(0)
13045 if (code < 256) {
13046 val = code
13047 }
13048 }
13049 if (encoding !== undefined && typeof encoding !== 'string') {
13050 throw new TypeError('encoding must be a string')
13051 }
13052 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13053 throw new TypeError('Unknown encoding: ' + encoding)
13054 }
13055 } else if (typeof val === 'number') {
13056 val = val & 255
13057 }
13058
13059 // Invalid ranges are not set to a default, so can range check early.
13060 if (start < 0 || this.length < start || this.length < end) {
13061 throw new RangeError('Out of range index')
13062 }
13063
13064 if (end <= start) {
13065 return this
13066 }
13067
13068 start = start >>> 0
13069 end = end === undefined ? this.length : end >>> 0
13070
13071 if (!val) val = 0
13072
13073 var i
13074 if (typeof val === 'number') {
13075 for (i = start; i < end; ++i) {
13076 this[i] = val
13077 }
13078 } else {
13079 var bytes = Buffer.isBuffer(val)
13080 ? val
13081 : new Buffer(val, encoding)
13082 var len = bytes.length
13083 for (i = 0; i < end - start; ++i) {
13084 this[i + start] = bytes[i % len]
13085 }
13086 }
13087
13088 return this
13089}
13090
13091// HELPER FUNCTIONS
13092// ================
13093
13094var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13095
13096function base64clean (str) {
13097 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13098 str = str.trim().replace(INVALID_BASE64_RE, '')
13099 // Node converts strings with length < 2 to ''
13100 if (str.length < 2) return ''
13101 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13102 while (str.length % 4 !== 0) {
13103 str = str + '='
13104 }
13105 return str
13106}
13107
13108function toHex (n) {
13109 if (n < 16) return '0' + n.toString(16)
13110 return n.toString(16)
13111}
13112
13113function utf8ToBytes (string, units) {
13114 units = units || Infinity
13115 var codePoint
13116 var length = string.length
13117 var leadSurrogate = null
13118 var bytes = []
13119
13120 for (var i = 0; i < length; ++i) {
13121 codePoint = string.charCodeAt(i)
13122
13123 // is surrogate component
13124 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13125 // last char was a lead
13126 if (!leadSurrogate) {
13127 // no lead yet
13128 if (codePoint > 0xDBFF) {
13129 // unexpected trail
13130 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13131 continue
13132 } else if (i + 1 === length) {
13133 // unpaired lead
13134 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13135 continue
13136 }
13137
13138 // valid lead
13139 leadSurrogate = codePoint
13140
13141 continue
13142 }
13143
13144 // 2 leads in a row
13145 if (codePoint < 0xDC00) {
13146 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13147 leadSurrogate = codePoint
13148 continue
13149 }
13150
13151 // valid surrogate pair
13152 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13153 } else if (leadSurrogate) {
13154 // valid bmp char, but last char was a lead
13155 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13156 }
13157
13158 leadSurrogate = null
13159
13160 // encode utf8
13161 if (codePoint < 0x80) {
13162 if ((units -= 1) < 0) break
13163 bytes.push(codePoint)
13164 } else if (codePoint < 0x800) {
13165 if ((units -= 2) < 0) break
13166 bytes.push(
13167 codePoint >> 0x6 | 0xC0,
13168 codePoint & 0x3F | 0x80
13169 )
13170 } else if (codePoint < 0x10000) {
13171 if ((units -= 3) < 0) break
13172 bytes.push(
13173 codePoint >> 0xC | 0xE0,
13174 codePoint >> 0x6 & 0x3F | 0x80,
13175 codePoint & 0x3F | 0x80
13176 )
13177 } else if (codePoint < 0x110000) {
13178 if ((units -= 4) < 0) break
13179 bytes.push(
13180 codePoint >> 0x12 | 0xF0,
13181 codePoint >> 0xC & 0x3F | 0x80,
13182 codePoint >> 0x6 & 0x3F | 0x80,
13183 codePoint & 0x3F | 0x80
13184 )
13185 } else {
13186 throw new Error('Invalid code point')
13187 }
13188 }
13189
13190 return bytes
13191}
13192
13193function asciiToBytes (str) {
13194 var byteArray = []
13195 for (var i = 0; i < str.length; ++i) {
13196 // Node's code seems to be doing this and not & 0x7F..
13197 byteArray.push(str.charCodeAt(i) & 0xFF)
13198 }
13199 return byteArray
13200}
13201
13202function utf16leToBytes (str, units) {
13203 var c, hi, lo
13204 var byteArray = []
13205 for (var i = 0; i < str.length; ++i) {
13206 if ((units -= 2) < 0) break
13207
13208 c = str.charCodeAt(i)
13209 hi = c >> 8
13210 lo = c % 256
13211 byteArray.push(lo)
13212 byteArray.push(hi)
13213 }
13214
13215 return byteArray
13216}
13217
13218function base64ToBytes (str) {
13219 return base64.toByteArray(base64clean(str))
13220}
13221
13222function blitBuffer (src, dst, offset, length) {
13223 for (var i = 0; i < length; ++i) {
13224 if ((i + offset >= dst.length) || (i >= src.length)) break
13225 dst[i + offset] = src[i]
13226 }
13227 return i
13228}
13229
13230// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13231function isArrayBufferView (obj) {
13232 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13233}
13234
13235function numberIsNaN (obj) {
13236 return obj !== obj // eslint-disable-line no-self-compare
13237}
13238
13239},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13240exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13241 var e, m
13242 var eLen = nBytes * 8 - mLen - 1
13243 var eMax = (1 << eLen) - 1
13244 var eBias = eMax >> 1
13245 var nBits = -7
13246 var i = isLE ? (nBytes - 1) : 0
13247 var d = isLE ? -1 : 1
13248 var s = buffer[offset + i]
13249
13250 i += d
13251
13252 e = s & ((1 << (-nBits)) - 1)
13253 s >>= (-nBits)
13254 nBits += eLen
13255 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13256
13257 m = e & ((1 << (-nBits)) - 1)
13258 e >>= (-nBits)
13259 nBits += mLen
13260 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13261
13262 if (e === 0) {
13263 e = 1 - eBias
13264 } else if (e === eMax) {
13265 return m ? NaN : ((s ? -1 : 1) * Infinity)
13266 } else {
13267 m = m + Math.pow(2, mLen)
13268 e = e - eBias
13269 }
13270 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13271}
13272
13273exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13274 var e, m, c
13275 var eLen = nBytes * 8 - mLen - 1
13276 var eMax = (1 << eLen) - 1
13277 var eBias = eMax >> 1
13278 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13279 var i = isLE ? 0 : (nBytes - 1)
13280 var d = isLE ? 1 : -1
13281 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13282
13283 value = Math.abs(value)
13284
13285 if (isNaN(value) || value === Infinity) {
13286 m = isNaN(value) ? 1 : 0
13287 e = eMax
13288 } else {
13289 e = Math.floor(Math.log(value) / Math.LN2)
13290 if (value * (c = Math.pow(2, -e)) < 1) {
13291 e--
13292 c *= 2
13293 }
13294 if (e + eBias >= 1) {
13295 value += rt / c
13296 } else {
13297 value += rt * Math.pow(2, 1 - eBias)
13298 }
13299 if (value * c >= 2) {
13300 e++
13301 c /= 2
13302 }
13303
13304 if (e + eBias >= eMax) {
13305 m = 0
13306 e = eMax
13307 } else if (e + eBias >= 1) {
13308 m = (value * c - 1) * Math.pow(2, mLen)
13309 e = e + eBias
13310 } else {
13311 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13312 e = 0
13313 }
13314 }
13315
13316 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13317
13318 e = (e << mLen) | m
13319 eLen += mLen
13320 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13321
13322 buffer[offset + i - d] |= s * 128
13323}
13324
13325},{}],4:[function(require,module,exports){
13326window.basex = require('base-x')
13327},{"base-x":5}],5:[function(require,module,exports){
13328// base-x encoding
13329// Forked from https://github.com/cryptocoinjs/bs58
13330// Originally written by Mike Hearn for BitcoinJ
13331// Copyright (c) 2011 Google Inc
13332// Ported to JavaScript by Stefan Thomas
13333// Merged Buffer refactorings from base58-native by Stephen Pair
13334// Copyright (c) 2013 BitPay Inc
13335
13336var Buffer = require('safe-buffer').Buffer
13337
13338module.exports = function base (ALPHABET) {
13339 var ALPHABET_MAP = {}
13340 var BASE = ALPHABET.length
13341 var LEADER = ALPHABET.charAt(0)
13342
13343 // pre-compute lookup table
13344 for (var z = 0; z < ALPHABET.length; z++) {
13345 var x = ALPHABET.charAt(z)
13346
13347 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13348 ALPHABET_MAP[x] = z
13349 }
13350
13351 function encode (source) {
13352 if (source.length === 0) return ''
13353
13354 var digits = [0]
13355 for (var i = 0; i < source.length; ++i) {
13356 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13357 carry += digits[j] << 8
13358 digits[j] = carry % BASE
13359 carry = (carry / BASE) | 0
13360 }
13361
13362 while (carry > 0) {
13363 digits.push(carry % BASE)
13364 carry = (carry / BASE) | 0
13365 }
13366 }
13367
13368 var string = ''
13369
13370 // deal with leading zeros
13371 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13372 // convert digits to a string
13373 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13374
13375 return string
13376 }
13377
13378 function decodeUnsafe (string) {
13379 if (string.length === 0) return Buffer.allocUnsafe(0)
13380
13381 var bytes = [0]
13382 for (var i = 0; i < string.length; i++) {
13383 var value = ALPHABET_MAP[string[i]]
13384 if (value === undefined) return
13385
13386 for (var j = 0, carry = value; j < bytes.length; ++j) {
13387 carry += bytes[j] * BASE
13388 bytes[j] = carry & 0xff
13389 carry >>= 8
13390 }
13391
13392 while (carry > 0) {
13393 bytes.push(carry & 0xff)
13394 carry >>= 8
13395 }
13396 }
13397
13398 // deal with leading zeros
13399 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13400 bytes.push(0)
13401 }
13402
13403 return Buffer.from(bytes.reverse())
13404 }
13405
13406 function decode (string) {
13407 var buffer = decodeUnsafe(string)
13408 if (buffer) return buffer
13409
13410 throw new Error('Non-base' + BASE + ' character')
13411 }
13412
13413 return {
13414 encode: encode,
13415 decodeUnsafe: decodeUnsafe,
13416 decode: decode
13417 }
13418}
13419
13420},{"safe-buffer":6}],6:[function(require,module,exports){
13421module.exports = require('buffer')
13422
13423},{"buffer":2}]},{},[4])(4)
13424});</script>
13425 <script>(function (root) {
13426 "use strict";
13427
13428/***** unorm.js *****/
13429
13430/*
13431 * UnicodeNormalizer 1.0.0
13432 * Copyright (c) 2008 Matsuza
13433 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13434 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13435 * $Rev: 13309 $
13436 */
13437
13438 var DEFAULT_FEATURE = [null, 0, {}];
13439 var CACHE_THRESHOLD = 10;
13440 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13441 var NCount = VCount * TCount; // 588
13442 var SCount = LCount * NCount; // 11172
13443
13444 var UChar = function(cp, feature){
13445 this.codepoint = cp;
13446 this.feature = feature;
13447 };
13448
13449 // Strategies
13450 var cache = {};
13451 var cacheCounter = [];
13452 for (var i = 0; i <= 0xFF; ++i){
13453 cacheCounter[i] = 0;
13454 }
13455
13456 function fromCache(next, cp, needFeature){
13457 var ret = cache[cp];
13458 if(!ret){
13459 ret = next(cp, needFeature);
13460 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13461 cache[cp] = ret;
13462 }
13463 }
13464 return ret;
13465 }
13466
13467 function fromData(next, cp, needFeature){
13468 var hash = cp & 0xFF00;
13469 var dunit = UChar.udata[hash] || {};
13470 var f = dunit[cp];
13471 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13472 }
13473 function fromCpOnly(next, cp, needFeature){
13474 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13475 }
13476 function fromRuleBasedJamo(next, cp, needFeature){
13477 var j;
13478 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13479 return next(cp, needFeature);
13480 }
13481 if(LBase <= cp && cp < LBase + LCount){
13482 var c = {};
13483 var base = (cp - LBase) * VCount;
13484 for (j = 0; j < VCount; ++j){
13485 c[VBase + j] = SBase + TCount * (j + base);
13486 }
13487 return new UChar(cp, [,,c]);
13488 }
13489
13490 var SIndex = cp - SBase;
13491 var TIndex = SIndex % TCount;
13492 var feature = [];
13493 if(TIndex !== 0){
13494 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13495 } else {
13496 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13497 feature[2] = {};
13498 for (j = 1; j < TCount; ++j){
13499 feature[2][TBase + j] = cp + j;
13500 }
13501 }
13502 return new UChar(cp, feature);
13503 }
13504 function fromCpFilter(next, cp, needFeature){
13505 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13506 }
13507
13508 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13509
13510 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13511 return function (cp, needFeature) {
13512 return strategy(next, cp, needFeature);
13513 };
13514 }, null);
13515
13516 UChar.isHighSurrogate = function(cp){
13517 return cp >= 0xD800 && cp <= 0xDBFF;
13518 };
13519 UChar.isLowSurrogate = function(cp){
13520 return cp >= 0xDC00 && cp <= 0xDFFF;
13521 };
13522
13523 UChar.prototype.prepFeature = function(){
13524 if(!this.feature){
13525 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13526 }
13527 };
13528
13529 UChar.prototype.toString = function(){
13530 if(this.codepoint < 0x10000){
13531 return String.fromCharCode(this.codepoint);
13532 } else {
13533 var x = this.codepoint - 0x10000;
13534 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13535 }
13536 };
13537
13538 UChar.prototype.getDecomp = function(){
13539 this.prepFeature();
13540 return this.feature[0] || null;
13541 };
13542
13543 UChar.prototype.isCompatibility = function(){
13544 this.prepFeature();
13545 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13546 };
13547 UChar.prototype.isExclude = function(){
13548 this.prepFeature();
13549 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13550 };
13551 UChar.prototype.getCanonicalClass = function(){
13552 this.prepFeature();
13553 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13554 };
13555 UChar.prototype.getComposite = function(following){
13556 this.prepFeature();
13557 if(!this.feature[2]){
13558 return null;
13559 }
13560 var cp = this.feature[2][following.codepoint];
13561 return cp ? UChar.fromCharCode(cp) : null;
13562 };
13563
13564 var UCharIterator = function(str){
13565 this.str = str;
13566 this.cursor = 0;
13567 };
13568 UCharIterator.prototype.next = function(){
13569 if(!!this.str && this.cursor < this.str.length){
13570 var cp = this.str.charCodeAt(this.cursor++);
13571 var d;
13572 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13573 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13574 ++this.cursor;
13575 }
13576 return UChar.fromCharCode(cp);
13577 } else {
13578 this.str = null;
13579 return null;
13580 }
13581 };
13582
13583 var RecursDecompIterator = function(it, cano){
13584 this.it = it;
13585 this.canonical = cano;
13586 this.resBuf = [];
13587 };
13588
13589 RecursDecompIterator.prototype.next = function(){
13590 function recursiveDecomp(cano, uchar){
13591 var decomp = uchar.getDecomp();
13592 if(!!decomp && !(cano && uchar.isCompatibility())){
13593 var ret = [];
13594 for(var i = 0; i < decomp.length; ++i){
13595 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13596 ret = ret.concat(a);
13597 }
13598 return ret;
13599 } else {
13600 return [uchar];
13601 }
13602 }
13603 if(this.resBuf.length === 0){
13604 var uchar = this.it.next();
13605 if(!uchar){
13606 return null;
13607 }
13608 this.resBuf = recursiveDecomp(this.canonical, uchar);
13609 }
13610 return this.resBuf.shift();
13611 };
13612
13613 var DecompIterator = function(it){
13614 this.it = it;
13615 this.resBuf = [];
13616 };
13617
13618 DecompIterator.prototype.next = function(){
13619 var cc;
13620 if(this.resBuf.length === 0){
13621 do{
13622 var uchar = this.it.next();
13623 if(!uchar){
13624 break;
13625 }
13626 cc = uchar.getCanonicalClass();
13627 var inspt = this.resBuf.length;
13628 if(cc !== 0){
13629 for(; inspt > 0; --inspt){
13630 var uchar2 = this.resBuf[inspt - 1];
13631 var cc2 = uchar2.getCanonicalClass();
13632 if(cc2 <= cc){
13633 break;
13634 }
13635 }
13636 }
13637 this.resBuf.splice(inspt, 0, uchar);
13638 } while(cc !== 0);
13639 }
13640 return this.resBuf.shift();
13641 };
13642
13643 var CompIterator = function(it){
13644 this.it = it;
13645 this.procBuf = [];
13646 this.resBuf = [];
13647 this.lastClass = null;
13648 };
13649
13650 CompIterator.prototype.next = function(){
13651 while(this.resBuf.length === 0){
13652 var uchar = this.it.next();
13653 if(!uchar){
13654 this.resBuf = this.procBuf;
13655 this.procBuf = [];
13656 break;
13657 }
13658 if(this.procBuf.length === 0){
13659 this.lastClass = uchar.getCanonicalClass();
13660 this.procBuf.push(uchar);
13661 } else {
13662 var starter = this.procBuf[0];
13663 var composite = starter.getComposite(uchar);
13664 var cc = uchar.getCanonicalClass();
13665 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13666 this.procBuf[0] = composite;
13667 } else {
13668 if(cc === 0){
13669 this.resBuf = this.procBuf;
13670 this.procBuf = [];
13671 }
13672 this.lastClass = cc;
13673 this.procBuf.push(uchar);
13674 }
13675 }
13676 }
13677 return this.resBuf.shift();
13678 };
13679
13680 var createIterator = function(mode, str){
13681 switch(mode){
13682 case "NFD":
13683 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13684 case "NFKD":
13685 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13686 case "NFC":
13687 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13688 case "NFKC":
13689 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13690 }
13691 throw mode + " is invalid";
13692 };
13693 var normalize = function(mode, str){
13694 var it = createIterator(mode, str);
13695 var ret = "";
13696 var uchar;
13697 while(!!(uchar = it.next())){
13698 ret += uchar.toString();
13699 }
13700 return ret;
13701 };
13702
13703 /* API functions */
13704 function nfd(str){
13705 return normalize("NFD", str);
13706 }
13707
13708 function nfkd(str){
13709 return normalize("NFKD", str);
13710 }
13711
13712 function nfc(str){
13713 return normalize("NFC", str);
13714 }
13715
13716 function nfkc(str){
13717 return normalize("NFKC", str);
13718 }
13719
13720/* Unicode data */
13721UChar.udata={
137220:{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]]},
13723256:{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]},
13724512:{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]},
13725768:{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]},
137261024:{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]]},
137271280:{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]},
137281536:{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]},
137291792:{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]},
137302048:{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]},
137312304:{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]},
137322560:{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]},
137332816:{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]},
137343072:{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]},
137353328:{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]]},
137363584:{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]},
137373840:{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]},
137384096:{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]},
137394352:{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]},
137404608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
137414864:{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]},
137425120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
137435376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
137445632:{71231:[,9],71350:[,9],71351:[,7]},
137455888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
137466144:{6313:[,228]},
137476400:{6457:[,222],6458:[,230],6459:[,220]},
137486656:{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]},
137496912:{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]},
137507168:{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]},
137517424:{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]},
137527680:{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]]},
137537936:{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}]},
137548192:{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]},
137558448:{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}]},
137568704:{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]]},
137578960:{9001:[[12296]],9002:[[12297]]},
137589216:{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]},
1375910752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
1376011264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
1376111520:{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]},
1376211776:{11935:[[27597],256],12019:[[40863],256]},
1376312032:{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]},
1376412288:{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]},
1376512544:{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]},
1376612800:{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]},
1376713056:{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]},
1376827136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
1376927392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
1377042496:{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]},
1377142752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
1377243008:{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]},
1377343264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
1377443520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
1377543776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
1377648128:{113822:[,1]},
1377753504:{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]},
1377853760:{119362:[,230],119363:[,230],119364:[,230]},
1377954272:{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]},
1378054528:{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]},
1378154784:{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]},
1378255040:{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]},
1378359392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
1378460928:{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]},
1378561696:{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]},
1378661952:{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]},
1378763488:{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]]},
1378863744:{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]]},
1378964000:{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]]},
1379064256:{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]},
1379164512:{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]},
1379264768:{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]},
1379365024:{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]},
1379465280:{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]}
13795
13796};
13797
13798 /***** Module to export */
13799 var unorm = {
13800 nfc: nfc,
13801 nfd: nfd,
13802 nfkc: nfkc,
13803 nfkd: nfkd
13804 };
13805
13806 /*globals module:true,define:true*/
13807
13808 // CommonJS
13809 if (typeof module === "object") {
13810 module.exports = unorm;
13811
13812 // AMD
13813 } else if (typeof define === "function" && define.amd) {
13814 define("unorm", function () {
13815 return unorm;
13816 });
13817
13818 // Global
13819 } else {
13820 root.unorm = unorm;
13821 }
13822
13823 /***** Export as shim for String::normalize method *****/
13824 /*
13825 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13826
13827 21.1.3.12 String.prototype.normalize(form="NFC")
13828 When the normalize method is called with one argument form, the following steps are taken:
13829
13830 1. Let O be CheckObjectCoercible(this value).
13831 2. Let S be ToString(O).
13832 3. ReturnIfAbrupt(S).
13833 4. If form is not provided or undefined let form be "NFC".
13834 5. Let f be ToString(form).
13835 6. ReturnIfAbrupt(f).
13836 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13837 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.
13838 9. Return ns.
13839
13840 The length property of the normalize method is 0.
13841
13842 *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.
13843 */
13844 unorm.shimApplied = false;
13845
13846 if (!String.prototype.normalize) {
13847 String.prototype.normalize = function(form) {
13848 var str = "" + this;
13849 form = form === undefined ? "NFC" : form;
13850
13851 if (form === "NFC") {
13852 return unorm.nfc(str);
13853 } else if (form === "NFD") {
13854 return unorm.nfd(str);
13855 } else if (form === "NFKC") {
13856 return unorm.nfkc(str);
13857 } else if (form === "NFKD") {
13858 return unorm.nfkd(str);
13859 } else {
13860 throw new RangeError("Invalid normalization form: " + form);
13861 }
13862 };
13863
13864 unorm.shimApplied = true;
13865 }
13866}(this));
13867</script>
13868 <script>/*!
13869 * jQuery JavaScript Library v3.2.1
13870 * https://jquery.com/
13871 *
13872 * Includes Sizzle.js
13873 * https://sizzlejs.com/
13874 *
13875 * Copyright JS Foundation and other contributors
13876 * Released under the MIT license
13877 * https://jquery.org/license
13878 *
13879 * Date: 2017-03-20T18:59Z
13880 */
13881( function( global, factory ) {
13882
13883 "use strict";
13884
13885 if ( typeof module === "object" && typeof module.exports === "object" ) {
13886
13887 // For CommonJS and CommonJS-like environments where a proper `window`
13888 // is present, execute the factory and get jQuery.
13889 // For environments that do not have a `window` with a `document`
13890 // (such as Node.js), expose a factory as module.exports.
13891 // This accentuates the need for the creation of a real `window`.
13892 // e.g. var jQuery = require("jquery")(window);
13893 // See ticket #14549 for more info.
13894 module.exports = global.document ?
13895 factory( global, true ) :
13896 function( w ) {
13897 if ( !w.document ) {
13898 throw new Error( "jQuery requires a window with a document" );
13899 }
13900 return factory( w );
13901 };
13902 } else {
13903 factory( global );
13904 }
13905
13906// Pass this if window is not defined yet
13907} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
13908
13909// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
13910// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
13911// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
13912// enough that all such attempts are guarded in a try block.
13913"use strict";
13914
13915var arr = [];
13916
13917var document = window.document;
13918
13919var getProto = Object.getPrototypeOf;
13920
13921var slice = arr.slice;
13922
13923var concat = arr.concat;
13924
13925var push = arr.push;
13926
13927var indexOf = arr.indexOf;
13928
13929var class2type = {};
13930
13931var toString = class2type.toString;
13932
13933var hasOwn = class2type.hasOwnProperty;
13934
13935var fnToString = hasOwn.toString;
13936
13937var ObjectFunctionString = fnToString.call( Object );
13938
13939var support = {};
13940
13941
13942
13943 function DOMEval( code, doc ) {
13944 doc = doc || document;
13945
13946 var script = doc.createElement( "script" );
13947
13948 script.text = code;
13949 doc.head.appendChild( script ).parentNode.removeChild( script );
13950 }
13951/* global Symbol */
13952// Defining this global in .eslintrc.json would create a danger of using the global
13953// unguarded in another place, it seems safer to define global only for this module
13954
13955
13956
13957var
13958 version = "3.2.1",
13959
13960 // Define a local copy of jQuery
13961 jQuery = function( selector, context ) {
13962
13963 // The jQuery object is actually just the init constructor 'enhanced'
13964 // Need init if jQuery is called (just allow error to be thrown if not included)
13965 return new jQuery.fn.init( selector, context );
13966 },
13967
13968 // Support: Android <=4.0 only
13969 // Make sure we trim BOM and NBSP
13970 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
13971
13972 // Matches dashed string for camelizing
13973 rmsPrefix = /^-ms-/,
13974 rdashAlpha = /-([a-z])/g,
13975
13976 // Used by jQuery.camelCase as callback to replace()
13977 fcamelCase = function( all, letter ) {
13978 return letter.toUpperCase();
13979 };
13980
13981jQuery.fn = jQuery.prototype = {
13982
13983 // The current version of jQuery being used
13984 jquery: version,
13985
13986 constructor: jQuery,
13987
13988 // The default length of a jQuery object is 0
13989 length: 0,
13990
13991 toArray: function() {
13992 return slice.call( this );
13993 },
13994
13995 // Get the Nth element in the matched element set OR
13996 // Get the whole matched element set as a clean array
13997 get: function( num ) {
13998
13999 // Return all the elements in a clean array
14000 if ( num == null ) {
14001 return slice.call( this );
14002 }
14003
14004 // Return just the one element from the set
14005 return num < 0 ? this[ num + this.length ] : this[ num ];
14006 },
14007
14008 // Take an array of elements and push it onto the stack
14009 // (returning the new matched element set)
14010 pushStack: function( elems ) {
14011
14012 // Build a new jQuery matched element set
14013 var ret = jQuery.merge( this.constructor(), elems );
14014
14015 // Add the old object onto the stack (as a reference)
14016 ret.prevObject = this;
14017
14018 // Return the newly-formed element set
14019 return ret;
14020 },
14021
14022 // Execute a callback for every element in the matched set.
14023 each: function( callback ) {
14024 return jQuery.each( this, callback );
14025 },
14026
14027 map: function( callback ) {
14028 return this.pushStack( jQuery.map( this, function( elem, i ) {
14029 return callback.call( elem, i, elem );
14030 } ) );
14031 },
14032
14033 slice: function() {
14034 return this.pushStack( slice.apply( this, arguments ) );
14035 },
14036
14037 first: function() {
14038 return this.eq( 0 );
14039 },
14040
14041 last: function() {
14042 return this.eq( -1 );
14043 },
14044
14045 eq: function( i ) {
14046 var len = this.length,
14047 j = +i + ( i < 0 ? len : 0 );
14048 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14049 },
14050
14051 end: function() {
14052 return this.prevObject || this.constructor();
14053 },
14054
14055 // For internal use only.
14056 // Behaves like an Array's method, not like a jQuery method.
14057 push: push,
14058 sort: arr.sort,
14059 splice: arr.splice
14060};
14061
14062jQuery.extend = jQuery.fn.extend = function() {
14063 var options, name, src, copy, copyIsArray, clone,
14064 target = arguments[ 0 ] || {},
14065 i = 1,
14066 length = arguments.length,
14067 deep = false;
14068
14069 // Handle a deep copy situation
14070 if ( typeof target === "boolean" ) {
14071 deep = target;
14072
14073 // Skip the boolean and the target
14074 target = arguments[ i ] || {};
14075 i++;
14076 }
14077
14078 // Handle case when target is a string or something (possible in deep copy)
14079 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14080 target = {};
14081 }
14082
14083 // Extend jQuery itself if only one argument is passed
14084 if ( i === length ) {
14085 target = this;
14086 i--;
14087 }
14088
14089 for ( ; i < length; i++ ) {
14090
14091 // Only deal with non-null/undefined values
14092 if ( ( options = arguments[ i ] ) != null ) {
14093
14094 // Extend the base object
14095 for ( name in options ) {
14096 src = target[ name ];
14097 copy = options[ name ];
14098
14099 // Prevent never-ending loop
14100 if ( target === copy ) {
14101 continue;
14102 }
14103
14104 // Recurse if we're merging plain objects or arrays
14105 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14106 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14107
14108 if ( copyIsArray ) {
14109 copyIsArray = false;
14110 clone = src && Array.isArray( src ) ? src : [];
14111
14112 } else {
14113 clone = src && jQuery.isPlainObject( src ) ? src : {};
14114 }
14115
14116 // Never move original objects, clone them
14117 target[ name ] = jQuery.extend( deep, clone, copy );
14118
14119 // Don't bring in undefined values
14120 } else if ( copy !== undefined ) {
14121 target[ name ] = copy;
14122 }
14123 }
14124 }
14125 }
14126
14127 // Return the modified object
14128 return target;
14129};
14130
14131jQuery.extend( {
14132
14133 // Unique for each copy of jQuery on the page
14134 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14135
14136 // Assume jQuery is ready without the ready module
14137 isReady: true,
14138
14139 error: function( msg ) {
14140 throw new Error( msg );
14141 },
14142
14143 noop: function() {},
14144
14145 isFunction: function( obj ) {
14146 return jQuery.type( obj ) === "function";
14147 },
14148
14149 isWindow: function( obj ) {
14150 return obj != null && obj === obj.window;
14151 },
14152
14153 isNumeric: function( obj ) {
14154
14155 // As of jQuery 3.0, isNumeric is limited to
14156 // strings and numbers (primitives or objects)
14157 // that can be coerced to finite numbers (gh-2662)
14158 var type = jQuery.type( obj );
14159 return ( type === "number" || type === "string" ) &&
14160
14161 // parseFloat NaNs numeric-cast false positives ("")
14162 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14163 // subtraction forces infinities to NaN
14164 !isNaN( obj - parseFloat( obj ) );
14165 },
14166
14167 isPlainObject: function( obj ) {
14168 var proto, Ctor;
14169
14170 // Detect obvious negatives
14171 // Use toString instead of jQuery.type to catch host objects
14172 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14173 return false;
14174 }
14175
14176 proto = getProto( obj );
14177
14178 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14179 if ( !proto ) {
14180 return true;
14181 }
14182
14183 // Objects with prototype are plain iff they were constructed by a global Object function
14184 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14185 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14186 },
14187
14188 isEmptyObject: function( obj ) {
14189
14190 /* eslint-disable no-unused-vars */
14191 // See https://github.com/eslint/eslint/issues/6125
14192 var name;
14193
14194 for ( name in obj ) {
14195 return false;
14196 }
14197 return true;
14198 },
14199
14200 type: function( obj ) {
14201 if ( obj == null ) {
14202 return obj + "";
14203 }
14204
14205 // Support: Android <=2.3 only (functionish RegExp)
14206 return typeof obj === "object" || typeof obj === "function" ?
14207 class2type[ toString.call( obj ) ] || "object" :
14208 typeof obj;
14209 },
14210
14211 // Evaluates a script in a global context
14212 globalEval: function( code ) {
14213 DOMEval( code );
14214 },
14215
14216 // Convert dashed to camelCase; used by the css and data modules
14217 // Support: IE <=9 - 11, Edge 12 - 13
14218 // Microsoft forgot to hump their vendor prefix (#9572)
14219 camelCase: function( string ) {
14220 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14221 },
14222
14223 each: function( obj, callback ) {
14224 var length, i = 0;
14225
14226 if ( isArrayLike( obj ) ) {
14227 length = obj.length;
14228 for ( ; i < length; i++ ) {
14229 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14230 break;
14231 }
14232 }
14233 } else {
14234 for ( i in obj ) {
14235 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14236 break;
14237 }
14238 }
14239 }
14240
14241 return obj;
14242 },
14243
14244 // Support: Android <=4.0 only
14245 trim: function( text ) {
14246 return text == null ?
14247 "" :
14248 ( text + "" ).replace( rtrim, "" );
14249 },
14250
14251 // results is for internal usage only
14252 makeArray: function( arr, results ) {
14253 var ret = results || [];
14254
14255 if ( arr != null ) {
14256 if ( isArrayLike( Object( arr ) ) ) {
14257 jQuery.merge( ret,
14258 typeof arr === "string" ?
14259 [ arr ] : arr
14260 );
14261 } else {
14262 push.call( ret, arr );
14263 }
14264 }
14265
14266 return ret;
14267 },
14268
14269 inArray: function( elem, arr, i ) {
14270 return arr == null ? -1 : indexOf.call( arr, elem, i );
14271 },
14272
14273 // Support: Android <=4.0 only, PhantomJS 1 only
14274 // push.apply(_, arraylike) throws on ancient WebKit
14275 merge: function( first, second ) {
14276 var len = +second.length,
14277 j = 0,
14278 i = first.length;
14279
14280 for ( ; j < len; j++ ) {
14281 first[ i++ ] = second[ j ];
14282 }
14283
14284 first.length = i;
14285
14286 return first;
14287 },
14288
14289 grep: function( elems, callback, invert ) {
14290 var callbackInverse,
14291 matches = [],
14292 i = 0,
14293 length = elems.length,
14294 callbackExpect = !invert;
14295
14296 // Go through the array, only saving the items
14297 // that pass the validator function
14298 for ( ; i < length; i++ ) {
14299 callbackInverse = !callback( elems[ i ], i );
14300 if ( callbackInverse !== callbackExpect ) {
14301 matches.push( elems[ i ] );
14302 }
14303 }
14304
14305 return matches;
14306 },
14307
14308 // arg is for internal usage only
14309 map: function( elems, callback, arg ) {
14310 var length, value,
14311 i = 0,
14312 ret = [];
14313
14314 // Go through the array, translating each of the items to their new values
14315 if ( isArrayLike( elems ) ) {
14316 length = elems.length;
14317 for ( ; i < length; i++ ) {
14318 value = callback( elems[ i ], i, arg );
14319
14320 if ( value != null ) {
14321 ret.push( value );
14322 }
14323 }
14324
14325 // Go through every key on the object,
14326 } else {
14327 for ( i in elems ) {
14328 value = callback( elems[ i ], i, arg );
14329
14330 if ( value != null ) {
14331 ret.push( value );
14332 }
14333 }
14334 }
14335
14336 // Flatten any nested arrays
14337 return concat.apply( [], ret );
14338 },
14339
14340 // A global GUID counter for objects
14341 guid: 1,
14342
14343 // Bind a function to a context, optionally partially applying any
14344 // arguments.
14345 proxy: function( fn, context ) {
14346 var tmp, args, proxy;
14347
14348 if ( typeof context === "string" ) {
14349 tmp = fn[ context ];
14350 context = fn;
14351 fn = tmp;
14352 }
14353
14354 // Quick check to determine if target is callable, in the spec
14355 // this throws a TypeError, but we will just return undefined.
14356 if ( !jQuery.isFunction( fn ) ) {
14357 return undefined;
14358 }
14359
14360 // Simulated bind
14361 args = slice.call( arguments, 2 );
14362 proxy = function() {
14363 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14364 };
14365
14366 // Set the guid of unique handler to the same of original handler, so it can be removed
14367 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14368
14369 return proxy;
14370 },
14371
14372 now: Date.now,
14373
14374 // jQuery.support is not used in Core but other projects attach their
14375 // properties to it so it needs to exist.
14376 support: support
14377} );
14378
14379if ( typeof Symbol === "function" ) {
14380 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14381}
14382
14383// Populate the class2type map
14384jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14385function( i, name ) {
14386 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14387} );
14388
14389function isArrayLike( obj ) {
14390
14391 // Support: real iOS 8.2 only (not reproducible in simulator)
14392 // `in` check used to prevent JIT error (gh-2145)
14393 // hasOwn isn't used here due to false negatives
14394 // regarding Nodelist length in IE
14395 var length = !!obj && "length" in obj && obj.length,
14396 type = jQuery.type( obj );
14397
14398 if ( type === "function" || jQuery.isWindow( obj ) ) {
14399 return false;
14400 }
14401
14402 return type === "array" || length === 0 ||
14403 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14404}
14405var Sizzle =
14406/*!
14407 * Sizzle CSS Selector Engine v2.3.3
14408 * https://sizzlejs.com/
14409 *
14410 * Copyright jQuery Foundation and other contributors
14411 * Released under the MIT license
14412 * http://jquery.org/license
14413 *
14414 * Date: 2016-08-08
14415 */
14416(function( window ) {
14417
14418var i,
14419 support,
14420 Expr,
14421 getText,
14422 isXML,
14423 tokenize,
14424 compile,
14425 select,
14426 outermostContext,
14427 sortInput,
14428 hasDuplicate,
14429
14430 // Local document vars
14431 setDocument,
14432 document,
14433 docElem,
14434 documentIsHTML,
14435 rbuggyQSA,
14436 rbuggyMatches,
14437 matches,
14438 contains,
14439
14440 // Instance-specific data
14441 expando = "sizzle" + 1 * new Date(),
14442 preferredDoc = window.document,
14443 dirruns = 0,
14444 done = 0,
14445 classCache = createCache(),
14446 tokenCache = createCache(),
14447 compilerCache = createCache(),
14448 sortOrder = function( a, b ) {
14449 if ( a === b ) {
14450 hasDuplicate = true;
14451 }
14452 return 0;
14453 },
14454
14455 // Instance methods
14456 hasOwn = ({}).hasOwnProperty,
14457 arr = [],
14458 pop = arr.pop,
14459 push_native = arr.push,
14460 push = arr.push,
14461 slice = arr.slice,
14462 // Use a stripped-down indexOf as it's faster than native
14463 // https://jsperf.com/thor-indexof-vs-for/5
14464 indexOf = function( list, elem ) {
14465 var i = 0,
14466 len = list.length;
14467 for ( ; i < len; i++ ) {
14468 if ( list[i] === elem ) {
14469 return i;
14470 }
14471 }
14472 return -1;
14473 },
14474
14475 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14476
14477 // Regular expressions
14478
14479 // http://www.w3.org/TR/css3-selectors/#whitespace
14480 whitespace = "[\\x20\\t\\r\\n\\f]",
14481
14482 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14483 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14484
14485 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14486 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14487 // Operator (capture 2)
14488 "*([*^$|!~]?=)" + whitespace +
14489 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14490 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14491 "*\\]",
14492
14493 pseudos = ":(" + identifier + ")(?:\\((" +
14494 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14495 // 1. quoted (capture 3; capture 4 or capture 5)
14496 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14497 // 2. simple (capture 6)
14498 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14499 // 3. anything else (capture 2)
14500 ".*" +
14501 ")\\)|)",
14502
14503 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14504 rwhitespace = new RegExp( whitespace + "+", "g" ),
14505 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14506
14507 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14508 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14509
14510 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14511
14512 rpseudo = new RegExp( pseudos ),
14513 ridentifier = new RegExp( "^" + identifier + "$" ),
14514
14515 matchExpr = {
14516 "ID": new RegExp( "^#(" + identifier + ")" ),
14517 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14518 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14519 "ATTR": new RegExp( "^" + attributes ),
14520 "PSEUDO": new RegExp( "^" + pseudos ),
14521 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14522 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14523 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14524 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14525 // For use in libraries implementing .is()
14526 // We use this for POS matching in `select`
14527 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14528 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14529 },
14530
14531 rinputs = /^(?:input|select|textarea|button)$/i,
14532 rheader = /^h\d$/i,
14533
14534 rnative = /^[^{]+\{\s*\[native \w/,
14535
14536 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14537 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14538
14539 rsibling = /[+~]/,
14540
14541 // CSS escapes
14542 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14543 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14544 funescape = function( _, escaped, escapedWhitespace ) {
14545 var high = "0x" + escaped - 0x10000;
14546 // NaN means non-codepoint
14547 // Support: Firefox<24
14548 // Workaround erroneous numeric interpretation of +"0x"
14549 return high !== high || escapedWhitespace ?
14550 escaped :
14551 high < 0 ?
14552 // BMP codepoint
14553 String.fromCharCode( high + 0x10000 ) :
14554 // Supplemental Plane codepoint (surrogate pair)
14555 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14556 },
14557
14558 // CSS string/identifier serialization
14559 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14560 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14561 fcssescape = function( ch, asCodePoint ) {
14562 if ( asCodePoint ) {
14563
14564 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14565 if ( ch === "\0" ) {
14566 return "\uFFFD";
14567 }
14568
14569 // Control characters and (dependent upon position) numbers get escaped as code points
14570 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14571 }
14572
14573 // Other potentially-special ASCII characters get backslash-escaped
14574 return "\\" + ch;
14575 },
14576
14577 // Used for iframes
14578 // See setDocument()
14579 // Removing the function wrapper causes a "Permission Denied"
14580 // error in IE
14581 unloadHandler = function() {
14582 setDocument();
14583 },
14584
14585 disabledAncestor = addCombinator(
14586 function( elem ) {
14587 return elem.disabled === true && ("form" in elem || "label" in elem);
14588 },
14589 { dir: "parentNode", next: "legend" }
14590 );
14591
14592// Optimize for push.apply( _, NodeList )
14593try {
14594 push.apply(
14595 (arr = slice.call( preferredDoc.childNodes )),
14596 preferredDoc.childNodes
14597 );
14598 // Support: Android<4.0
14599 // Detect silently failing push.apply
14600 arr[ preferredDoc.childNodes.length ].nodeType;
14601} catch ( e ) {
14602 push = { apply: arr.length ?
14603
14604 // Leverage slice if possible
14605 function( target, els ) {
14606 push_native.apply( target, slice.call(els) );
14607 } :
14608
14609 // Support: IE<9
14610 // Otherwise append directly
14611 function( target, els ) {
14612 var j = target.length,
14613 i = 0;
14614 // Can't trust NodeList.length
14615 while ( (target[j++] = els[i++]) ) {}
14616 target.length = j - 1;
14617 }
14618 };
14619}
14620
14621function Sizzle( selector, context, results, seed ) {
14622 var m, i, elem, nid, match, groups, newSelector,
14623 newContext = context && context.ownerDocument,
14624
14625 // nodeType defaults to 9, since context defaults to document
14626 nodeType = context ? context.nodeType : 9;
14627
14628 results = results || [];
14629
14630 // Return early from calls with invalid selector or context
14631 if ( typeof selector !== "string" || !selector ||
14632 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14633
14634 return results;
14635 }
14636
14637 // Try to shortcut find operations (as opposed to filters) in HTML documents
14638 if ( !seed ) {
14639
14640 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14641 setDocument( context );
14642 }
14643 context = context || document;
14644
14645 if ( documentIsHTML ) {
14646
14647 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14648 // (excepting DocumentFragment context, where the methods don't exist)
14649 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14650
14651 // ID selector
14652 if ( (m = match[1]) ) {
14653
14654 // Document context
14655 if ( nodeType === 9 ) {
14656 if ( (elem = context.getElementById( m )) ) {
14657
14658 // Support: IE, Opera, Webkit
14659 // TODO: identify versions
14660 // getElementById can match elements by name instead of ID
14661 if ( elem.id === m ) {
14662 results.push( elem );
14663 return results;
14664 }
14665 } else {
14666 return results;
14667 }
14668
14669 // Element context
14670 } else {
14671
14672 // Support: IE, Opera, Webkit
14673 // TODO: identify versions
14674 // getElementById can match elements by name instead of ID
14675 if ( newContext && (elem = newContext.getElementById( m )) &&
14676 contains( context, elem ) &&
14677 elem.id === m ) {
14678
14679 results.push( elem );
14680 return results;
14681 }
14682 }
14683
14684 // Type selector
14685 } else if ( match[2] ) {
14686 push.apply( results, context.getElementsByTagName( selector ) );
14687 return results;
14688
14689 // Class selector
14690 } else if ( (m = match[3]) && support.getElementsByClassName &&
14691 context.getElementsByClassName ) {
14692
14693 push.apply( results, context.getElementsByClassName( m ) );
14694 return results;
14695 }
14696 }
14697
14698 // Take advantage of querySelectorAll
14699 if ( support.qsa &&
14700 !compilerCache[ selector + " " ] &&
14701 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14702
14703 if ( nodeType !== 1 ) {
14704 newContext = context;
14705 newSelector = selector;
14706
14707 // qSA looks outside Element context, which is not what we want
14708 // Thanks to Andrew Dupont for this workaround technique
14709 // Support: IE <=8
14710 // Exclude object elements
14711 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14712
14713 // Capture the context ID, setting it first if necessary
14714 if ( (nid = context.getAttribute( "id" )) ) {
14715 nid = nid.replace( rcssescape, fcssescape );
14716 } else {
14717 context.setAttribute( "id", (nid = expando) );
14718 }
14719
14720 // Prefix every selector in the list
14721 groups = tokenize( selector );
14722 i = groups.length;
14723 while ( i-- ) {
14724 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14725 }
14726 newSelector = groups.join( "," );
14727
14728 // Expand context for sibling selectors
14729 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14730 context;
14731 }
14732
14733 if ( newSelector ) {
14734 try {
14735 push.apply( results,
14736 newContext.querySelectorAll( newSelector )
14737 );
14738 return results;
14739 } catch ( qsaError ) {
14740 } finally {
14741 if ( nid === expando ) {
14742 context.removeAttribute( "id" );
14743 }
14744 }
14745 }
14746 }
14747 }
14748 }
14749
14750 // All others
14751 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14752}
14753
14754/**
14755 * Create key-value caches of limited size
14756 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14757 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14758 * deleting the oldest entry
14759 */
14760function createCache() {
14761 var keys = [];
14762
14763 function cache( key, value ) {
14764 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14765 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14766 // Only keep the most recent entries
14767 delete cache[ keys.shift() ];
14768 }
14769 return (cache[ key + " " ] = value);
14770 }
14771 return cache;
14772}
14773
14774/**
14775 * Mark a function for special use by Sizzle
14776 * @param {Function} fn The function to mark
14777 */
14778function markFunction( fn ) {
14779 fn[ expando ] = true;
14780 return fn;
14781}
14782
14783/**
14784 * Support testing using an element
14785 * @param {Function} fn Passed the created element and returns a boolean result
14786 */
14787function assert( fn ) {
14788 var el = document.createElement("fieldset");
14789
14790 try {
14791 return !!fn( el );
14792 } catch (e) {
14793 return false;
14794 } finally {
14795 // Remove from its parent by default
14796 if ( el.parentNode ) {
14797 el.parentNode.removeChild( el );
14798 }
14799 // release memory in IE
14800 el = null;
14801 }
14802}
14803
14804/**
14805 * Adds the same handler for all of the specified attrs
14806 * @param {String} attrs Pipe-separated list of attributes
14807 * @param {Function} handler The method that will be applied
14808 */
14809function addHandle( attrs, handler ) {
14810 var arr = attrs.split("|"),
14811 i = arr.length;
14812
14813 while ( i-- ) {
14814 Expr.attrHandle[ arr[i] ] = handler;
14815 }
14816}
14817
14818/**
14819 * Checks document order of two siblings
14820 * @param {Element} a
14821 * @param {Element} b
14822 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14823 */
14824function siblingCheck( a, b ) {
14825 var cur = b && a,
14826 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14827 a.sourceIndex - b.sourceIndex;
14828
14829 // Use IE sourceIndex if available on both nodes
14830 if ( diff ) {
14831 return diff;
14832 }
14833
14834 // Check if b follows a
14835 if ( cur ) {
14836 while ( (cur = cur.nextSibling) ) {
14837 if ( cur === b ) {
14838 return -1;
14839 }
14840 }
14841 }
14842
14843 return a ? 1 : -1;
14844}
14845
14846/**
14847 * Returns a function to use in pseudos for input types
14848 * @param {String} type
14849 */
14850function createInputPseudo( type ) {
14851 return function( elem ) {
14852 var name = elem.nodeName.toLowerCase();
14853 return name === "input" && elem.type === type;
14854 };
14855}
14856
14857/**
14858 * Returns a function to use in pseudos for buttons
14859 * @param {String} type
14860 */
14861function createButtonPseudo( type ) {
14862 return function( elem ) {
14863 var name = elem.nodeName.toLowerCase();
14864 return (name === "input" || name === "button") && elem.type === type;
14865 };
14866}
14867
14868/**
14869 * Returns a function to use in pseudos for :enabled/:disabled
14870 * @param {Boolean} disabled true for :disabled; false for :enabled
14871 */
14872function createDisabledPseudo( disabled ) {
14873
14874 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
14875 return function( elem ) {
14876
14877 // Only certain elements can match :enabled or :disabled
14878 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
14879 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
14880 if ( "form" in elem ) {
14881
14882 // Check for inherited disabledness on relevant non-disabled elements:
14883 // * listed form-associated elements in a disabled fieldset
14884 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
14885 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
14886 // * option elements in a disabled optgroup
14887 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
14888 // All such elements have a "form" property.
14889 if ( elem.parentNode && elem.disabled === false ) {
14890
14891 // Option elements defer to a parent optgroup if present
14892 if ( "label" in elem ) {
14893 if ( "label" in elem.parentNode ) {
14894 return elem.parentNode.disabled === disabled;
14895 } else {
14896 return elem.disabled === disabled;
14897 }
14898 }
14899
14900 // Support: IE 6 - 11
14901 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
14902 return elem.isDisabled === disabled ||
14903
14904 // Where there is no isDisabled, check manually
14905 /* jshint -W018 */
14906 elem.isDisabled !== !disabled &&
14907 disabledAncestor( elem ) === disabled;
14908 }
14909
14910 return elem.disabled === disabled;
14911
14912 // Try to winnow out elements that can't be disabled before trusting the disabled property.
14913 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
14914 // even exist on them, let alone have a boolean value.
14915 } else if ( "label" in elem ) {
14916 return elem.disabled === disabled;
14917 }
14918
14919 // Remaining elements are neither :enabled nor :disabled
14920 return false;
14921 };
14922}
14923
14924/**
14925 * Returns a function to use in pseudos for positionals
14926 * @param {Function} fn
14927 */
14928function createPositionalPseudo( fn ) {
14929 return markFunction(function( argument ) {
14930 argument = +argument;
14931 return markFunction(function( seed, matches ) {
14932 var j,
14933 matchIndexes = fn( [], seed.length, argument ),
14934 i = matchIndexes.length;
14935
14936 // Match elements found at the specified indexes
14937 while ( i-- ) {
14938 if ( seed[ (j = matchIndexes[i]) ] ) {
14939 seed[j] = !(matches[j] = seed[j]);
14940 }
14941 }
14942 });
14943 });
14944}
14945
14946/**
14947 * Checks a node for validity as a Sizzle context
14948 * @param {Element|Object=} context
14949 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
14950 */
14951function testContext( context ) {
14952 return context && typeof context.getElementsByTagName !== "undefined" && context;
14953}
14954
14955// Expose support vars for convenience
14956support = Sizzle.support = {};
14957
14958/**
14959 * Detects XML nodes
14960 * @param {Element|Object} elem An element or a document
14961 * @returns {Boolean} True iff elem is a non-HTML XML node
14962 */
14963isXML = Sizzle.isXML = function( elem ) {
14964 // documentElement is verified for cases where it doesn't yet exist
14965 // (such as loading iframes in IE - #4833)
14966 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
14967 return documentElement ? documentElement.nodeName !== "HTML" : false;
14968};
14969
14970/**
14971 * Sets document-related variables once based on the current document
14972 * @param {Element|Object} [doc] An element or document object to use to set the document
14973 * @returns {Object} Returns the current document
14974 */
14975setDocument = Sizzle.setDocument = function( node ) {
14976 var hasCompare, subWindow,
14977 doc = node ? node.ownerDocument || node : preferredDoc;
14978
14979 // Return early if doc is invalid or already selected
14980 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
14981 return document;
14982 }
14983
14984 // Update global variables
14985 document = doc;
14986 docElem = document.documentElement;
14987 documentIsHTML = !isXML( document );
14988
14989 // Support: IE 9-11, Edge
14990 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
14991 if ( preferredDoc !== document &&
14992 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
14993
14994 // Support: IE 11, Edge
14995 if ( subWindow.addEventListener ) {
14996 subWindow.addEventListener( "unload", unloadHandler, false );
14997
14998 // Support: IE 9 - 10 only
14999 } else if ( subWindow.attachEvent ) {
15000 subWindow.attachEvent( "onunload", unloadHandler );
15001 }
15002 }
15003
15004 /* Attributes
15005 ---------------------------------------------------------------------- */
15006
15007 // Support: IE<8
15008 // Verify that getAttribute really returns attributes and not properties
15009 // (excepting IE8 booleans)
15010 support.attributes = assert(function( el ) {
15011 el.className = "i";
15012 return !el.getAttribute("className");
15013 });
15014
15015 /* getElement(s)By*
15016 ---------------------------------------------------------------------- */
15017
15018 // Check if getElementsByTagName("*") returns only elements
15019 support.getElementsByTagName = assert(function( el ) {
15020 el.appendChild( document.createComment("") );
15021 return !el.getElementsByTagName("*").length;
15022 });
15023
15024 // Support: IE<9
15025 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15026
15027 // Support: IE<10
15028 // Check if getElementById returns elements by name
15029 // The broken getElementById methods don't pick up programmatically-set names,
15030 // so use a roundabout getElementsByName test
15031 support.getById = assert(function( el ) {
15032 docElem.appendChild( el ).id = expando;
15033 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15034 });
15035
15036 // ID filter and find
15037 if ( support.getById ) {
15038 Expr.filter["ID"] = function( id ) {
15039 var attrId = id.replace( runescape, funescape );
15040 return function( elem ) {
15041 return elem.getAttribute("id") === attrId;
15042 };
15043 };
15044 Expr.find["ID"] = function( id, context ) {
15045 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15046 var elem = context.getElementById( id );
15047 return elem ? [ elem ] : [];
15048 }
15049 };
15050 } else {
15051 Expr.filter["ID"] = function( id ) {
15052 var attrId = id.replace( runescape, funescape );
15053 return function( elem ) {
15054 var node = typeof elem.getAttributeNode !== "undefined" &&
15055 elem.getAttributeNode("id");
15056 return node && node.value === attrId;
15057 };
15058 };
15059
15060 // Support: IE 6 - 7 only
15061 // getElementById is not reliable as a find shortcut
15062 Expr.find["ID"] = function( id, context ) {
15063 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15064 var node, i, elems,
15065 elem = context.getElementById( id );
15066
15067 if ( elem ) {
15068
15069 // Verify the id attribute
15070 node = elem.getAttributeNode("id");
15071 if ( node && node.value === id ) {
15072 return [ elem ];
15073 }
15074
15075 // Fall back on getElementsByName
15076 elems = context.getElementsByName( id );
15077 i = 0;
15078 while ( (elem = elems[i++]) ) {
15079 node = elem.getAttributeNode("id");
15080 if ( node && node.value === id ) {
15081 return [ elem ];
15082 }
15083 }
15084 }
15085
15086 return [];
15087 }
15088 };
15089 }
15090
15091 // Tag
15092 Expr.find["TAG"] = support.getElementsByTagName ?
15093 function( tag, context ) {
15094 if ( typeof context.getElementsByTagName !== "undefined" ) {
15095 return context.getElementsByTagName( tag );
15096
15097 // DocumentFragment nodes don't have gEBTN
15098 } else if ( support.qsa ) {
15099 return context.querySelectorAll( tag );
15100 }
15101 } :
15102
15103 function( tag, context ) {
15104 var elem,
15105 tmp = [],
15106 i = 0,
15107 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15108 results = context.getElementsByTagName( tag );
15109
15110 // Filter out possible comments
15111 if ( tag === "*" ) {
15112 while ( (elem = results[i++]) ) {
15113 if ( elem.nodeType === 1 ) {
15114 tmp.push( elem );
15115 }
15116 }
15117
15118 return tmp;
15119 }
15120 return results;
15121 };
15122
15123 // Class
15124 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15125 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15126 return context.getElementsByClassName( className );
15127 }
15128 };
15129
15130 /* QSA/matchesSelector
15131 ---------------------------------------------------------------------- */
15132
15133 // QSA and matchesSelector support
15134
15135 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15136 rbuggyMatches = [];
15137
15138 // qSa(:focus) reports false when true (Chrome 21)
15139 // We allow this because of a bug in IE8/9 that throws an error
15140 // whenever `document.activeElement` is accessed on an iframe
15141 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15142 // See https://bugs.jquery.com/ticket/13378
15143 rbuggyQSA = [];
15144
15145 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15146 // Build QSA regex
15147 // Regex strategy adopted from Diego Perini
15148 assert(function( el ) {
15149 // Select is set to empty string on purpose
15150 // This is to test IE's treatment of not explicitly
15151 // setting a boolean content attribute,
15152 // since its presence should be enough
15153 // https://bugs.jquery.com/ticket/12359
15154 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15155 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15156 "<option selected=''></option></select>";
15157
15158 // Support: IE8, Opera 11-12.16
15159 // Nothing should be selected when empty strings follow ^= or $= or *=
15160 // The test attribute must be unknown in Opera but "safe" for WinRT
15161 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15162 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15163 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15164 }
15165
15166 // Support: IE8
15167 // Boolean attributes and "value" are not treated correctly
15168 if ( !el.querySelectorAll("[selected]").length ) {
15169 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15170 }
15171
15172 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15173 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15174 rbuggyQSA.push("~=");
15175 }
15176
15177 // Webkit/Opera - :checked should return selected option elements
15178 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15179 // IE8 throws error here and will not see later tests
15180 if ( !el.querySelectorAll(":checked").length ) {
15181 rbuggyQSA.push(":checked");
15182 }
15183
15184 // Support: Safari 8+, iOS 8+
15185 // https://bugs.webkit.org/show_bug.cgi?id=136851
15186 // In-page `selector#id sibling-combinator selector` fails
15187 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15188 rbuggyQSA.push(".#.+[+~]");
15189 }
15190 });
15191
15192 assert(function( el ) {
15193 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15194 "<select disabled='disabled'><option/></select>";
15195
15196 // Support: Windows 8 Native Apps
15197 // The type and name attributes are restricted during .innerHTML assignment
15198 var input = document.createElement("input");
15199 input.setAttribute( "type", "hidden" );
15200 el.appendChild( input ).setAttribute( "name", "D" );
15201
15202 // Support: IE8
15203 // Enforce case-sensitivity of name attribute
15204 if ( el.querySelectorAll("[name=d]").length ) {
15205 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15206 }
15207
15208 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15209 // IE8 throws error here and will not see later tests
15210 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15211 rbuggyQSA.push( ":enabled", ":disabled" );
15212 }
15213
15214 // Support: IE9-11+
15215 // IE's :disabled selector does not pick up the children of disabled fieldsets
15216 docElem.appendChild( el ).disabled = true;
15217 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15218 rbuggyQSA.push( ":enabled", ":disabled" );
15219 }
15220
15221 // Opera 10-11 does not throw on post-comma invalid pseudos
15222 el.querySelectorAll("*,:x");
15223 rbuggyQSA.push(",.*:");
15224 });
15225 }
15226
15227 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15228 docElem.webkitMatchesSelector ||
15229 docElem.mozMatchesSelector ||
15230 docElem.oMatchesSelector ||
15231 docElem.msMatchesSelector) )) ) {
15232
15233 assert(function( el ) {
15234 // Check to see if it's possible to do matchesSelector
15235 // on a disconnected node (IE 9)
15236 support.disconnectedMatch = matches.call( el, "*" );
15237
15238 // This should fail with an exception
15239 // Gecko does not error, returns false instead
15240 matches.call( el, "[s!='']:x" );
15241 rbuggyMatches.push( "!=", pseudos );
15242 });
15243 }
15244
15245 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15246 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15247
15248 /* Contains
15249 ---------------------------------------------------------------------- */
15250 hasCompare = rnative.test( docElem.compareDocumentPosition );
15251
15252 // Element contains another
15253 // Purposefully self-exclusive
15254 // As in, an element does not contain itself
15255 contains = hasCompare || rnative.test( docElem.contains ) ?
15256 function( a, b ) {
15257 var adown = a.nodeType === 9 ? a.documentElement : a,
15258 bup = b && b.parentNode;
15259 return a === bup || !!( bup && bup.nodeType === 1 && (
15260 adown.contains ?
15261 adown.contains( bup ) :
15262 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15263 ));
15264 } :
15265 function( a, b ) {
15266 if ( b ) {
15267 while ( (b = b.parentNode) ) {
15268 if ( b === a ) {
15269 return true;
15270 }
15271 }
15272 }
15273 return false;
15274 };
15275
15276 /* Sorting
15277 ---------------------------------------------------------------------- */
15278
15279 // Document order sorting
15280 sortOrder = hasCompare ?
15281 function( a, b ) {
15282
15283 // Flag for duplicate removal
15284 if ( a === b ) {
15285 hasDuplicate = true;
15286 return 0;
15287 }
15288
15289 // Sort on method existence if only one input has compareDocumentPosition
15290 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15291 if ( compare ) {
15292 return compare;
15293 }
15294
15295 // Calculate position if both inputs belong to the same document
15296 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15297 a.compareDocumentPosition( b ) :
15298
15299 // Otherwise we know they are disconnected
15300 1;
15301
15302 // Disconnected nodes
15303 if ( compare & 1 ||
15304 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15305
15306 // Choose the first element that is related to our preferred document
15307 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15308 return -1;
15309 }
15310 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15311 return 1;
15312 }
15313
15314 // Maintain original order
15315 return sortInput ?
15316 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15317 0;
15318 }
15319
15320 return compare & 4 ? -1 : 1;
15321 } :
15322 function( a, b ) {
15323 // Exit early if the nodes are identical
15324 if ( a === b ) {
15325 hasDuplicate = true;
15326 return 0;
15327 }
15328
15329 var cur,
15330 i = 0,
15331 aup = a.parentNode,
15332 bup = b.parentNode,
15333 ap = [ a ],
15334 bp = [ b ];
15335
15336 // Parentless nodes are either documents or disconnected
15337 if ( !aup || !bup ) {
15338 return a === document ? -1 :
15339 b === document ? 1 :
15340 aup ? -1 :
15341 bup ? 1 :
15342 sortInput ?
15343 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15344 0;
15345
15346 // If the nodes are siblings, we can do a quick check
15347 } else if ( aup === bup ) {
15348 return siblingCheck( a, b );
15349 }
15350
15351 // Otherwise we need full lists of their ancestors for comparison
15352 cur = a;
15353 while ( (cur = cur.parentNode) ) {
15354 ap.unshift( cur );
15355 }
15356 cur = b;
15357 while ( (cur = cur.parentNode) ) {
15358 bp.unshift( cur );
15359 }
15360
15361 // Walk down the tree looking for a discrepancy
15362 while ( ap[i] === bp[i] ) {
15363 i++;
15364 }
15365
15366 return i ?
15367 // Do a sibling check if the nodes have a common ancestor
15368 siblingCheck( ap[i], bp[i] ) :
15369
15370 // Otherwise nodes in our document sort first
15371 ap[i] === preferredDoc ? -1 :
15372 bp[i] === preferredDoc ? 1 :
15373 0;
15374 };
15375
15376 return document;
15377};
15378
15379Sizzle.matches = function( expr, elements ) {
15380 return Sizzle( expr, null, null, elements );
15381};
15382
15383Sizzle.matchesSelector = function( elem, expr ) {
15384 // Set document vars if needed
15385 if ( ( elem.ownerDocument || elem ) !== document ) {
15386 setDocument( elem );
15387 }
15388
15389 // Make sure that attribute selectors are quoted
15390 expr = expr.replace( rattributeQuotes, "='$1']" );
15391
15392 if ( support.matchesSelector && documentIsHTML &&
15393 !compilerCache[ expr + " " ] &&
15394 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15395 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15396
15397 try {
15398 var ret = matches.call( elem, expr );
15399
15400 // IE 9's matchesSelector returns false on disconnected nodes
15401 if ( ret || support.disconnectedMatch ||
15402 // As well, disconnected nodes are said to be in a document
15403 // fragment in IE 9
15404 elem.document && elem.document.nodeType !== 11 ) {
15405 return ret;
15406 }
15407 } catch (e) {}
15408 }
15409
15410 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15411};
15412
15413Sizzle.contains = function( context, elem ) {
15414 // Set document vars if needed
15415 if ( ( context.ownerDocument || context ) !== document ) {
15416 setDocument( context );
15417 }
15418 return contains( context, elem );
15419};
15420
15421Sizzle.attr = function( elem, name ) {
15422 // Set document vars if needed
15423 if ( ( elem.ownerDocument || elem ) !== document ) {
15424 setDocument( elem );
15425 }
15426
15427 var fn = Expr.attrHandle[ name.toLowerCase() ],
15428 // Don't get fooled by Object.prototype properties (jQuery #13807)
15429 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15430 fn( elem, name, !documentIsHTML ) :
15431 undefined;
15432
15433 return val !== undefined ?
15434 val :
15435 support.attributes || !documentIsHTML ?
15436 elem.getAttribute( name ) :
15437 (val = elem.getAttributeNode(name)) && val.specified ?
15438 val.value :
15439 null;
15440};
15441
15442Sizzle.escape = function( sel ) {
15443 return (sel + "").replace( rcssescape, fcssescape );
15444};
15445
15446Sizzle.error = function( msg ) {
15447 throw new Error( "Syntax error, unrecognized expression: " + msg );
15448};
15449
15450/**
15451 * Document sorting and removing duplicates
15452 * @param {ArrayLike} results
15453 */
15454Sizzle.uniqueSort = function( results ) {
15455 var elem,
15456 duplicates = [],
15457 j = 0,
15458 i = 0;
15459
15460 // Unless we *know* we can detect duplicates, assume their presence
15461 hasDuplicate = !support.detectDuplicates;
15462 sortInput = !support.sortStable && results.slice( 0 );
15463 results.sort( sortOrder );
15464
15465 if ( hasDuplicate ) {
15466 while ( (elem = results[i++]) ) {
15467 if ( elem === results[ i ] ) {
15468 j = duplicates.push( i );
15469 }
15470 }
15471 while ( j-- ) {
15472 results.splice( duplicates[ j ], 1 );
15473 }
15474 }
15475
15476 // Clear input after sorting to release objects
15477 // See https://github.com/jquery/sizzle/pull/225
15478 sortInput = null;
15479
15480 return results;
15481};
15482
15483/**
15484 * Utility function for retrieving the text value of an array of DOM nodes
15485 * @param {Array|Element} elem
15486 */
15487getText = Sizzle.getText = function( elem ) {
15488 var node,
15489 ret = "",
15490 i = 0,
15491 nodeType = elem.nodeType;
15492
15493 if ( !nodeType ) {
15494 // If no nodeType, this is expected to be an array
15495 while ( (node = elem[i++]) ) {
15496 // Do not traverse comment nodes
15497 ret += getText( node );
15498 }
15499 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15500 // Use textContent for elements
15501 // innerText usage removed for consistency of new lines (jQuery #11153)
15502 if ( typeof elem.textContent === "string" ) {
15503 return elem.textContent;
15504 } else {
15505 // Traverse its children
15506 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15507 ret += getText( elem );
15508 }
15509 }
15510 } else if ( nodeType === 3 || nodeType === 4 ) {
15511 return elem.nodeValue;
15512 }
15513 // Do not include comment or processing instruction nodes
15514
15515 return ret;
15516};
15517
15518Expr = Sizzle.selectors = {
15519
15520 // Can be adjusted by the user
15521 cacheLength: 50,
15522
15523 createPseudo: markFunction,
15524
15525 match: matchExpr,
15526
15527 attrHandle: {},
15528
15529 find: {},
15530
15531 relative: {
15532 ">": { dir: "parentNode", first: true },
15533 " ": { dir: "parentNode" },
15534 "+": { dir: "previousSibling", first: true },
15535 "~": { dir: "previousSibling" }
15536 },
15537
15538 preFilter: {
15539 "ATTR": function( match ) {
15540 match[1] = match[1].replace( runescape, funescape );
15541
15542 // Move the given value to match[3] whether quoted or unquoted
15543 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15544
15545 if ( match[2] === "~=" ) {
15546 match[3] = " " + match[3] + " ";
15547 }
15548
15549 return match.slice( 0, 4 );
15550 },
15551
15552 "CHILD": function( match ) {
15553 /* matches from matchExpr["CHILD"]
15554 1 type (only|nth|...)
15555 2 what (child|of-type)
15556 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15557 4 xn-component of xn+y argument ([+-]?\d*n|)
15558 5 sign of xn-component
15559 6 x of xn-component
15560 7 sign of y-component
15561 8 y of y-component
15562 */
15563 match[1] = match[1].toLowerCase();
15564
15565 if ( match[1].slice( 0, 3 ) === "nth" ) {
15566 // nth-* requires argument
15567 if ( !match[3] ) {
15568 Sizzle.error( match[0] );
15569 }
15570
15571 // numeric x and y parameters for Expr.filter.CHILD
15572 // remember that false/true cast respectively to 0/1
15573 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15574 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15575
15576 // other types prohibit arguments
15577 } else if ( match[3] ) {
15578 Sizzle.error( match[0] );
15579 }
15580
15581 return match;
15582 },
15583
15584 "PSEUDO": function( match ) {
15585 var excess,
15586 unquoted = !match[6] && match[2];
15587
15588 if ( matchExpr["CHILD"].test( match[0] ) ) {
15589 return null;
15590 }
15591
15592 // Accept quoted arguments as-is
15593 if ( match[3] ) {
15594 match[2] = match[4] || match[5] || "";
15595
15596 // Strip excess characters from unquoted arguments
15597 } else if ( unquoted && rpseudo.test( unquoted ) &&
15598 // Get excess from tokenize (recursively)
15599 (excess = tokenize( unquoted, true )) &&
15600 // advance to the next closing parenthesis
15601 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15602
15603 // excess is a negative index
15604 match[0] = match[0].slice( 0, excess );
15605 match[2] = unquoted.slice( 0, excess );
15606 }
15607
15608 // Return only captures needed by the pseudo filter method (type and argument)
15609 return match.slice( 0, 3 );
15610 }
15611 },
15612
15613 filter: {
15614
15615 "TAG": function( nodeNameSelector ) {
15616 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15617 return nodeNameSelector === "*" ?
15618 function() { return true; } :
15619 function( elem ) {
15620 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15621 };
15622 },
15623
15624 "CLASS": function( className ) {
15625 var pattern = classCache[ className + " " ];
15626
15627 return pattern ||
15628 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15629 classCache( className, function( elem ) {
15630 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15631 });
15632 },
15633
15634 "ATTR": function( name, operator, check ) {
15635 return function( elem ) {
15636 var result = Sizzle.attr( elem, name );
15637
15638 if ( result == null ) {
15639 return operator === "!=";
15640 }
15641 if ( !operator ) {
15642 return true;
15643 }
15644
15645 result += "";
15646
15647 return operator === "=" ? result === check :
15648 operator === "!=" ? result !== check :
15649 operator === "^=" ? check && result.indexOf( check ) === 0 :
15650 operator === "*=" ? check && result.indexOf( check ) > -1 :
15651 operator === "$=" ? check && result.slice( -check.length ) === check :
15652 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15653 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15654 false;
15655 };
15656 },
15657
15658 "CHILD": function( type, what, argument, first, last ) {
15659 var simple = type.slice( 0, 3 ) !== "nth",
15660 forward = type.slice( -4 ) !== "last",
15661 ofType = what === "of-type";
15662
15663 return first === 1 && last === 0 ?
15664
15665 // Shortcut for :nth-*(n)
15666 function( elem ) {
15667 return !!elem.parentNode;
15668 } :
15669
15670 function( elem, context, xml ) {
15671 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15672 dir = simple !== forward ? "nextSibling" : "previousSibling",
15673 parent = elem.parentNode,
15674 name = ofType && elem.nodeName.toLowerCase(),
15675 useCache = !xml && !ofType,
15676 diff = false;
15677
15678 if ( parent ) {
15679
15680 // :(first|last|only)-(child|of-type)
15681 if ( simple ) {
15682 while ( dir ) {
15683 node = elem;
15684 while ( (node = node[ dir ]) ) {
15685 if ( ofType ?
15686 node.nodeName.toLowerCase() === name :
15687 node.nodeType === 1 ) {
15688
15689 return false;
15690 }
15691 }
15692 // Reverse direction for :only-* (if we haven't yet done so)
15693 start = dir = type === "only" && !start && "nextSibling";
15694 }
15695 return true;
15696 }
15697
15698 start = [ forward ? parent.firstChild : parent.lastChild ];
15699
15700 // non-xml :nth-child(...) stores cache data on `parent`
15701 if ( forward && useCache ) {
15702
15703 // Seek `elem` from a previously-cached index
15704
15705 // ...in a gzip-friendly way
15706 node = parent;
15707 outerCache = node[ expando ] || (node[ expando ] = {});
15708
15709 // Support: IE <9 only
15710 // Defend against cloned attroperties (jQuery gh-1709)
15711 uniqueCache = outerCache[ node.uniqueID ] ||
15712 (outerCache[ node.uniqueID ] = {});
15713
15714 cache = uniqueCache[ type ] || [];
15715 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15716 diff = nodeIndex && cache[ 2 ];
15717 node = nodeIndex && parent.childNodes[ nodeIndex ];
15718
15719 while ( (node = ++nodeIndex && node && node[ dir ] ||
15720
15721 // Fallback to seeking `elem` from the start
15722 (diff = nodeIndex = 0) || start.pop()) ) {
15723
15724 // When found, cache indexes on `parent` and break
15725 if ( node.nodeType === 1 && ++diff && node === elem ) {
15726 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15727 break;
15728 }
15729 }
15730
15731 } else {
15732 // Use previously-cached element index if available
15733 if ( useCache ) {
15734 // ...in a gzip-friendly way
15735 node = elem;
15736 outerCache = node[ expando ] || (node[ expando ] = {});
15737
15738 // Support: IE <9 only
15739 // Defend against cloned attroperties (jQuery gh-1709)
15740 uniqueCache = outerCache[ node.uniqueID ] ||
15741 (outerCache[ node.uniqueID ] = {});
15742
15743 cache = uniqueCache[ type ] || [];
15744 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15745 diff = nodeIndex;
15746 }
15747
15748 // xml :nth-child(...)
15749 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15750 if ( diff === false ) {
15751 // Use the same loop as above to seek `elem` from the start
15752 while ( (node = ++nodeIndex && node && node[ dir ] ||
15753 (diff = nodeIndex = 0) || start.pop()) ) {
15754
15755 if ( ( ofType ?
15756 node.nodeName.toLowerCase() === name :
15757 node.nodeType === 1 ) &&
15758 ++diff ) {
15759
15760 // Cache the index of each encountered element
15761 if ( useCache ) {
15762 outerCache = node[ expando ] || (node[ expando ] = {});
15763
15764 // Support: IE <9 only
15765 // Defend against cloned attroperties (jQuery gh-1709)
15766 uniqueCache = outerCache[ node.uniqueID ] ||
15767 (outerCache[ node.uniqueID ] = {});
15768
15769 uniqueCache[ type ] = [ dirruns, diff ];
15770 }
15771
15772 if ( node === elem ) {
15773 break;
15774 }
15775 }
15776 }
15777 }
15778 }
15779
15780 // Incorporate the offset, then check against cycle size
15781 diff -= last;
15782 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15783 }
15784 };
15785 },
15786
15787 "PSEUDO": function( pseudo, argument ) {
15788 // pseudo-class names are case-insensitive
15789 // http://www.w3.org/TR/selectors/#pseudo-classes
15790 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15791 // Remember that setFilters inherits from pseudos
15792 var args,
15793 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15794 Sizzle.error( "unsupported pseudo: " + pseudo );
15795
15796 // The user may use createPseudo to indicate that
15797 // arguments are needed to create the filter function
15798 // just as Sizzle does
15799 if ( fn[ expando ] ) {
15800 return fn( argument );
15801 }
15802
15803 // But maintain support for old signatures
15804 if ( fn.length > 1 ) {
15805 args = [ pseudo, pseudo, "", argument ];
15806 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15807 markFunction(function( seed, matches ) {
15808 var idx,
15809 matched = fn( seed, argument ),
15810 i = matched.length;
15811 while ( i-- ) {
15812 idx = indexOf( seed, matched[i] );
15813 seed[ idx ] = !( matches[ idx ] = matched[i] );
15814 }
15815 }) :
15816 function( elem ) {
15817 return fn( elem, 0, args );
15818 };
15819 }
15820
15821 return fn;
15822 }
15823 },
15824
15825 pseudos: {
15826 // Potentially complex pseudos
15827 "not": markFunction(function( selector ) {
15828 // Trim the selector passed to compile
15829 // to avoid treating leading and trailing
15830 // spaces as combinators
15831 var input = [],
15832 results = [],
15833 matcher = compile( selector.replace( rtrim, "$1" ) );
15834
15835 return matcher[ expando ] ?
15836 markFunction(function( seed, matches, context, xml ) {
15837 var elem,
15838 unmatched = matcher( seed, null, xml, [] ),
15839 i = seed.length;
15840
15841 // Match elements unmatched by `matcher`
15842 while ( i-- ) {
15843 if ( (elem = unmatched[i]) ) {
15844 seed[i] = !(matches[i] = elem);
15845 }
15846 }
15847 }) :
15848 function( elem, context, xml ) {
15849 input[0] = elem;
15850 matcher( input, null, xml, results );
15851 // Don't keep the element (issue #299)
15852 input[0] = null;
15853 return !results.pop();
15854 };
15855 }),
15856
15857 "has": markFunction(function( selector ) {
15858 return function( elem ) {
15859 return Sizzle( selector, elem ).length > 0;
15860 };
15861 }),
15862
15863 "contains": markFunction(function( text ) {
15864 text = text.replace( runescape, funescape );
15865 return function( elem ) {
15866 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
15867 };
15868 }),
15869
15870 // "Whether an element is represented by a :lang() selector
15871 // is based solely on the element's language value
15872 // being equal to the identifier C,
15873 // or beginning with the identifier C immediately followed by "-".
15874 // The matching of C against the element's language value is performed case-insensitively.
15875 // The identifier C does not have to be a valid language name."
15876 // http://www.w3.org/TR/selectors/#lang-pseudo
15877 "lang": markFunction( function( lang ) {
15878 // lang value must be a valid identifier
15879 if ( !ridentifier.test(lang || "") ) {
15880 Sizzle.error( "unsupported lang: " + lang );
15881 }
15882 lang = lang.replace( runescape, funescape ).toLowerCase();
15883 return function( elem ) {
15884 var elemLang;
15885 do {
15886 if ( (elemLang = documentIsHTML ?
15887 elem.lang :
15888 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
15889
15890 elemLang = elemLang.toLowerCase();
15891 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
15892 }
15893 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
15894 return false;
15895 };
15896 }),
15897
15898 // Miscellaneous
15899 "target": function( elem ) {
15900 var hash = window.location && window.location.hash;
15901 return hash && hash.slice( 1 ) === elem.id;
15902 },
15903
15904 "root": function( elem ) {
15905 return elem === docElem;
15906 },
15907
15908 "focus": function( elem ) {
15909 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
15910 },
15911
15912 // Boolean properties
15913 "enabled": createDisabledPseudo( false ),
15914 "disabled": createDisabledPseudo( true ),
15915
15916 "checked": function( elem ) {
15917 // In CSS3, :checked should return both checked and selected elements
15918 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15919 var nodeName = elem.nodeName.toLowerCase();
15920 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
15921 },
15922
15923 "selected": function( elem ) {
15924 // Accessing this property makes selected-by-default
15925 // options in Safari work properly
15926 if ( elem.parentNode ) {
15927 elem.parentNode.selectedIndex;
15928 }
15929
15930 return elem.selected === true;
15931 },
15932
15933 // Contents
15934 "empty": function( elem ) {
15935 // http://www.w3.org/TR/selectors/#empty-pseudo
15936 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
15937 // but not by others (comment: 8; processing instruction: 7; etc.)
15938 // nodeType < 6 works because attributes (2) do not appear as children
15939 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15940 if ( elem.nodeType < 6 ) {
15941 return false;
15942 }
15943 }
15944 return true;
15945 },
15946
15947 "parent": function( elem ) {
15948 return !Expr.pseudos["empty"]( elem );
15949 },
15950
15951 // Element/input types
15952 "header": function( elem ) {
15953 return rheader.test( elem.nodeName );
15954 },
15955
15956 "input": function( elem ) {
15957 return rinputs.test( elem.nodeName );
15958 },
15959
15960 "button": function( elem ) {
15961 var name = elem.nodeName.toLowerCase();
15962 return name === "input" && elem.type === "button" || name === "button";
15963 },
15964
15965 "text": function( elem ) {
15966 var attr;
15967 return elem.nodeName.toLowerCase() === "input" &&
15968 elem.type === "text" &&
15969
15970 // Support: IE<8
15971 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
15972 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
15973 },
15974
15975 // Position-in-collection
15976 "first": createPositionalPseudo(function() {
15977 return [ 0 ];
15978 }),
15979
15980 "last": createPositionalPseudo(function( matchIndexes, length ) {
15981 return [ length - 1 ];
15982 }),
15983
15984 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
15985 return [ argument < 0 ? argument + length : argument ];
15986 }),
15987
15988 "even": createPositionalPseudo(function( matchIndexes, length ) {
15989 var i = 0;
15990 for ( ; i < length; i += 2 ) {
15991 matchIndexes.push( i );
15992 }
15993 return matchIndexes;
15994 }),
15995
15996 "odd": createPositionalPseudo(function( matchIndexes, length ) {
15997 var i = 1;
15998 for ( ; i < length; i += 2 ) {
15999 matchIndexes.push( i );
16000 }
16001 return matchIndexes;
16002 }),
16003
16004 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16005 var i = argument < 0 ? argument + length : argument;
16006 for ( ; --i >= 0; ) {
16007 matchIndexes.push( i );
16008 }
16009 return matchIndexes;
16010 }),
16011
16012 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16013 var i = argument < 0 ? argument + length : argument;
16014 for ( ; ++i < length; ) {
16015 matchIndexes.push( i );
16016 }
16017 return matchIndexes;
16018 })
16019 }
16020};
16021
16022Expr.pseudos["nth"] = Expr.pseudos["eq"];
16023
16024// Add button/input type pseudos
16025for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16026 Expr.pseudos[ i ] = createInputPseudo( i );
16027}
16028for ( i in { submit: true, reset: true } ) {
16029 Expr.pseudos[ i ] = createButtonPseudo( i );
16030}
16031
16032// Easy API for creating new setFilters
16033function setFilters() {}
16034setFilters.prototype = Expr.filters = Expr.pseudos;
16035Expr.setFilters = new setFilters();
16036
16037tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16038 var matched, match, tokens, type,
16039 soFar, groups, preFilters,
16040 cached = tokenCache[ selector + " " ];
16041
16042 if ( cached ) {
16043 return parseOnly ? 0 : cached.slice( 0 );
16044 }
16045
16046 soFar = selector;
16047 groups = [];
16048 preFilters = Expr.preFilter;
16049
16050 while ( soFar ) {
16051
16052 // Comma and first run
16053 if ( !matched || (match = rcomma.exec( soFar )) ) {
16054 if ( match ) {
16055 // Don't consume trailing commas as valid
16056 soFar = soFar.slice( match[0].length ) || soFar;
16057 }
16058 groups.push( (tokens = []) );
16059 }
16060
16061 matched = false;
16062
16063 // Combinators
16064 if ( (match = rcombinators.exec( soFar )) ) {
16065 matched = match.shift();
16066 tokens.push({
16067 value: matched,
16068 // Cast descendant combinators to space
16069 type: match[0].replace( rtrim, " " )
16070 });
16071 soFar = soFar.slice( matched.length );
16072 }
16073
16074 // Filters
16075 for ( type in Expr.filter ) {
16076 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16077 (match = preFilters[ type ]( match ))) ) {
16078 matched = match.shift();
16079 tokens.push({
16080 value: matched,
16081 type: type,
16082 matches: match
16083 });
16084 soFar = soFar.slice( matched.length );
16085 }
16086 }
16087
16088 if ( !matched ) {
16089 break;
16090 }
16091 }
16092
16093 // Return the length of the invalid excess
16094 // if we're just parsing
16095 // Otherwise, throw an error or return tokens
16096 return parseOnly ?
16097 soFar.length :
16098 soFar ?
16099 Sizzle.error( selector ) :
16100 // Cache the tokens
16101 tokenCache( selector, groups ).slice( 0 );
16102};
16103
16104function toSelector( tokens ) {
16105 var i = 0,
16106 len = tokens.length,
16107 selector = "";
16108 for ( ; i < len; i++ ) {
16109 selector += tokens[i].value;
16110 }
16111 return selector;
16112}
16113
16114function addCombinator( matcher, combinator, base ) {
16115 var dir = combinator.dir,
16116 skip = combinator.next,
16117 key = skip || dir,
16118 checkNonElements = base && key === "parentNode",
16119 doneName = done++;
16120
16121 return combinator.first ?
16122 // Check against closest ancestor/preceding element
16123 function( elem, context, xml ) {
16124 while ( (elem = elem[ dir ]) ) {
16125 if ( elem.nodeType === 1 || checkNonElements ) {
16126 return matcher( elem, context, xml );
16127 }
16128 }
16129 return false;
16130 } :
16131
16132 // Check against all ancestor/preceding elements
16133 function( elem, context, xml ) {
16134 var oldCache, uniqueCache, outerCache,
16135 newCache = [ dirruns, doneName ];
16136
16137 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16138 if ( xml ) {
16139 while ( (elem = elem[ dir ]) ) {
16140 if ( elem.nodeType === 1 || checkNonElements ) {
16141 if ( matcher( elem, context, xml ) ) {
16142 return true;
16143 }
16144 }
16145 }
16146 } else {
16147 while ( (elem = elem[ dir ]) ) {
16148 if ( elem.nodeType === 1 || checkNonElements ) {
16149 outerCache = elem[ expando ] || (elem[ expando ] = {});
16150
16151 // Support: IE <9 only
16152 // Defend against cloned attroperties (jQuery gh-1709)
16153 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16154
16155 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16156 elem = elem[ dir ] || elem;
16157 } else if ( (oldCache = uniqueCache[ key ]) &&
16158 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16159
16160 // Assign to newCache so results back-propagate to previous elements
16161 return (newCache[ 2 ] = oldCache[ 2 ]);
16162 } else {
16163 // Reuse newcache so results back-propagate to previous elements
16164 uniqueCache[ key ] = newCache;
16165
16166 // A match means we're done; a fail means we have to keep checking
16167 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16168 return true;
16169 }
16170 }
16171 }
16172 }
16173 }
16174 return false;
16175 };
16176}
16177
16178function elementMatcher( matchers ) {
16179 return matchers.length > 1 ?
16180 function( elem, context, xml ) {
16181 var i = matchers.length;
16182 while ( i-- ) {
16183 if ( !matchers[i]( elem, context, xml ) ) {
16184 return false;
16185 }
16186 }
16187 return true;
16188 } :
16189 matchers[0];
16190}
16191
16192function multipleContexts( selector, contexts, results ) {
16193 var i = 0,
16194 len = contexts.length;
16195 for ( ; i < len; i++ ) {
16196 Sizzle( selector, contexts[i], results );
16197 }
16198 return results;
16199}
16200
16201function condense( unmatched, map, filter, context, xml ) {
16202 var elem,
16203 newUnmatched = [],
16204 i = 0,
16205 len = unmatched.length,
16206 mapped = map != null;
16207
16208 for ( ; i < len; i++ ) {
16209 if ( (elem = unmatched[i]) ) {
16210 if ( !filter || filter( elem, context, xml ) ) {
16211 newUnmatched.push( elem );
16212 if ( mapped ) {
16213 map.push( i );
16214 }
16215 }
16216 }
16217 }
16218
16219 return newUnmatched;
16220}
16221
16222function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16223 if ( postFilter && !postFilter[ expando ] ) {
16224 postFilter = setMatcher( postFilter );
16225 }
16226 if ( postFinder && !postFinder[ expando ] ) {
16227 postFinder = setMatcher( postFinder, postSelector );
16228 }
16229 return markFunction(function( seed, results, context, xml ) {
16230 var temp, i, elem,
16231 preMap = [],
16232 postMap = [],
16233 preexisting = results.length,
16234
16235 // Get initial elements from seed or context
16236 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16237
16238 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16239 matcherIn = preFilter && ( seed || !selector ) ?
16240 condense( elems, preMap, preFilter, context, xml ) :
16241 elems,
16242
16243 matcherOut = matcher ?
16244 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16245 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16246
16247 // ...intermediate processing is necessary
16248 [] :
16249
16250 // ...otherwise use results directly
16251 results :
16252 matcherIn;
16253
16254 // Find primary matches
16255 if ( matcher ) {
16256 matcher( matcherIn, matcherOut, context, xml );
16257 }
16258
16259 // Apply postFilter
16260 if ( postFilter ) {
16261 temp = condense( matcherOut, postMap );
16262 postFilter( temp, [], context, xml );
16263
16264 // Un-match failing elements by moving them back to matcherIn
16265 i = temp.length;
16266 while ( i-- ) {
16267 if ( (elem = temp[i]) ) {
16268 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16269 }
16270 }
16271 }
16272
16273 if ( seed ) {
16274 if ( postFinder || preFilter ) {
16275 if ( postFinder ) {
16276 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16277 temp = [];
16278 i = matcherOut.length;
16279 while ( i-- ) {
16280 if ( (elem = matcherOut[i]) ) {
16281 // Restore matcherIn since elem is not yet a final match
16282 temp.push( (matcherIn[i] = elem) );
16283 }
16284 }
16285 postFinder( null, (matcherOut = []), temp, xml );
16286 }
16287
16288 // Move matched elements from seed to results to keep them synchronized
16289 i = matcherOut.length;
16290 while ( i-- ) {
16291 if ( (elem = matcherOut[i]) &&
16292 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16293
16294 seed[temp] = !(results[temp] = elem);
16295 }
16296 }
16297 }
16298
16299 // Add elements to results, through postFinder if defined
16300 } else {
16301 matcherOut = condense(
16302 matcherOut === results ?
16303 matcherOut.splice( preexisting, matcherOut.length ) :
16304 matcherOut
16305 );
16306 if ( postFinder ) {
16307 postFinder( null, results, matcherOut, xml );
16308 } else {
16309 push.apply( results, matcherOut );
16310 }
16311 }
16312 });
16313}
16314
16315function matcherFromTokens( tokens ) {
16316 var checkContext, matcher, j,
16317 len = tokens.length,
16318 leadingRelative = Expr.relative[ tokens[0].type ],
16319 implicitRelative = leadingRelative || Expr.relative[" "],
16320 i = leadingRelative ? 1 : 0,
16321
16322 // The foundational matcher ensures that elements are reachable from top-level context(s)
16323 matchContext = addCombinator( function( elem ) {
16324 return elem === checkContext;
16325 }, implicitRelative, true ),
16326 matchAnyContext = addCombinator( function( elem ) {
16327 return indexOf( checkContext, elem ) > -1;
16328 }, implicitRelative, true ),
16329 matchers = [ function( elem, context, xml ) {
16330 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16331 (checkContext = context).nodeType ?
16332 matchContext( elem, context, xml ) :
16333 matchAnyContext( elem, context, xml ) );
16334 // Avoid hanging onto element (issue #299)
16335 checkContext = null;
16336 return ret;
16337 } ];
16338
16339 for ( ; i < len; i++ ) {
16340 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16341 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16342 } else {
16343 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16344
16345 // Return special upon seeing a positional matcher
16346 if ( matcher[ expando ] ) {
16347 // Find the next relative operator (if any) for proper handling
16348 j = ++i;
16349 for ( ; j < len; j++ ) {
16350 if ( Expr.relative[ tokens[j].type ] ) {
16351 break;
16352 }
16353 }
16354 return setMatcher(
16355 i > 1 && elementMatcher( matchers ),
16356 i > 1 && toSelector(
16357 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16358 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16359 ).replace( rtrim, "$1" ),
16360 matcher,
16361 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16362 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16363 j < len && toSelector( tokens )
16364 );
16365 }
16366 matchers.push( matcher );
16367 }
16368 }
16369
16370 return elementMatcher( matchers );
16371}
16372
16373function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16374 var bySet = setMatchers.length > 0,
16375 byElement = elementMatchers.length > 0,
16376 superMatcher = function( seed, context, xml, results, outermost ) {
16377 var elem, j, matcher,
16378 matchedCount = 0,
16379 i = "0",
16380 unmatched = seed && [],
16381 setMatched = [],
16382 contextBackup = outermostContext,
16383 // We must always have either seed elements or outermost context
16384 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16385 // Use integer dirruns iff this is the outermost matcher
16386 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16387 len = elems.length;
16388
16389 if ( outermost ) {
16390 outermostContext = context === document || context || outermost;
16391 }
16392
16393 // Add elements passing elementMatchers directly to results
16394 // Support: IE<9, Safari
16395 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16396 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16397 if ( byElement && elem ) {
16398 j = 0;
16399 if ( !context && elem.ownerDocument !== document ) {
16400 setDocument( elem );
16401 xml = !documentIsHTML;
16402 }
16403 while ( (matcher = elementMatchers[j++]) ) {
16404 if ( matcher( elem, context || document, xml) ) {
16405 results.push( elem );
16406 break;
16407 }
16408 }
16409 if ( outermost ) {
16410 dirruns = dirrunsUnique;
16411 }
16412 }
16413
16414 // Track unmatched elements for set filters
16415 if ( bySet ) {
16416 // They will have gone through all possible matchers
16417 if ( (elem = !matcher && elem) ) {
16418 matchedCount--;
16419 }
16420
16421 // Lengthen the array for every element, matched or not
16422 if ( seed ) {
16423 unmatched.push( elem );
16424 }
16425 }
16426 }
16427
16428 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16429 // makes the latter nonnegative.
16430 matchedCount += i;
16431
16432 // Apply set filters to unmatched elements
16433 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16434 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16435 // no element matchers and no seed.
16436 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16437 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16438 // numerically zero.
16439 if ( bySet && i !== matchedCount ) {
16440 j = 0;
16441 while ( (matcher = setMatchers[j++]) ) {
16442 matcher( unmatched, setMatched, context, xml );
16443 }
16444
16445 if ( seed ) {
16446 // Reintegrate element matches to eliminate the need for sorting
16447 if ( matchedCount > 0 ) {
16448 while ( i-- ) {
16449 if ( !(unmatched[i] || setMatched[i]) ) {
16450 setMatched[i] = pop.call( results );
16451 }
16452 }
16453 }
16454
16455 // Discard index placeholder values to get only actual matches
16456 setMatched = condense( setMatched );
16457 }
16458
16459 // Add matches to results
16460 push.apply( results, setMatched );
16461
16462 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16463 if ( outermost && !seed && setMatched.length > 0 &&
16464 ( matchedCount + setMatchers.length ) > 1 ) {
16465
16466 Sizzle.uniqueSort( results );
16467 }
16468 }
16469
16470 // Override manipulation of globals by nested matchers
16471 if ( outermost ) {
16472 dirruns = dirrunsUnique;
16473 outermostContext = contextBackup;
16474 }
16475
16476 return unmatched;
16477 };
16478
16479 return bySet ?
16480 markFunction( superMatcher ) :
16481 superMatcher;
16482}
16483
16484compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16485 var i,
16486 setMatchers = [],
16487 elementMatchers = [],
16488 cached = compilerCache[ selector + " " ];
16489
16490 if ( !cached ) {
16491 // Generate a function of recursive functions that can be used to check each element
16492 if ( !match ) {
16493 match = tokenize( selector );
16494 }
16495 i = match.length;
16496 while ( i-- ) {
16497 cached = matcherFromTokens( match[i] );
16498 if ( cached[ expando ] ) {
16499 setMatchers.push( cached );
16500 } else {
16501 elementMatchers.push( cached );
16502 }
16503 }
16504
16505 // Cache the compiled function
16506 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16507
16508 // Save selector and tokenization
16509 cached.selector = selector;
16510 }
16511 return cached;
16512};
16513
16514/**
16515 * A low-level selection function that works with Sizzle's compiled
16516 * selector functions
16517 * @param {String|Function} selector A selector or a pre-compiled
16518 * selector function built with Sizzle.compile
16519 * @param {Element} context
16520 * @param {Array} [results]
16521 * @param {Array} [seed] A set of elements to match against
16522 */
16523select = Sizzle.select = function( selector, context, results, seed ) {
16524 var i, tokens, token, type, find,
16525 compiled = typeof selector === "function" && selector,
16526 match = !seed && tokenize( (selector = compiled.selector || selector) );
16527
16528 results = results || [];
16529
16530 // Try to minimize operations if there is only one selector in the list and no seed
16531 // (the latter of which guarantees us context)
16532 if ( match.length === 1 ) {
16533
16534 // Reduce context if the leading compound selector is an ID
16535 tokens = match[0] = match[0].slice( 0 );
16536 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16537 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16538
16539 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16540 if ( !context ) {
16541 return results;
16542
16543 // Precompiled matchers will still verify ancestry, so step up a level
16544 } else if ( compiled ) {
16545 context = context.parentNode;
16546 }
16547
16548 selector = selector.slice( tokens.shift().value.length );
16549 }
16550
16551 // Fetch a seed set for right-to-left matching
16552 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16553 while ( i-- ) {
16554 token = tokens[i];
16555
16556 // Abort if we hit a combinator
16557 if ( Expr.relative[ (type = token.type) ] ) {
16558 break;
16559 }
16560 if ( (find = Expr.find[ type ]) ) {
16561 // Search, expanding context for leading sibling combinators
16562 if ( (seed = find(
16563 token.matches[0].replace( runescape, funescape ),
16564 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16565 )) ) {
16566
16567 // If seed is empty or no tokens remain, we can return early
16568 tokens.splice( i, 1 );
16569 selector = seed.length && toSelector( tokens );
16570 if ( !selector ) {
16571 push.apply( results, seed );
16572 return results;
16573 }
16574
16575 break;
16576 }
16577 }
16578 }
16579 }
16580
16581 // Compile and execute a filtering function if one is not provided
16582 // Provide `match` to avoid retokenization if we modified the selector above
16583 ( compiled || compile( selector, match ) )(
16584 seed,
16585 context,
16586 !documentIsHTML,
16587 results,
16588 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16589 );
16590 return results;
16591};
16592
16593// One-time assignments
16594
16595// Sort stability
16596support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16597
16598// Support: Chrome 14-35+
16599// Always assume duplicates if they aren't passed to the comparison function
16600support.detectDuplicates = !!hasDuplicate;
16601
16602// Initialize against the default document
16603setDocument();
16604
16605// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16606// Detached nodes confoundingly follow *each other*
16607support.sortDetached = assert(function( el ) {
16608 // Should return 1, but returns 4 (following)
16609 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16610});
16611
16612// Support: IE<8
16613// Prevent attribute/property "interpolation"
16614// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16615if ( !assert(function( el ) {
16616 el.innerHTML = "<a href='#'></a>";
16617 return el.firstChild.getAttribute("href") === "#" ;
16618}) ) {
16619 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16620 if ( !isXML ) {
16621 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16622 }
16623 });
16624}
16625
16626// Support: IE<9
16627// Use defaultValue in place of getAttribute("value")
16628if ( !support.attributes || !assert(function( el ) {
16629 el.innerHTML = "<input/>";
16630 el.firstChild.setAttribute( "value", "" );
16631 return el.firstChild.getAttribute( "value" ) === "";
16632}) ) {
16633 addHandle( "value", function( elem, name, isXML ) {
16634 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16635 return elem.defaultValue;
16636 }
16637 });
16638}
16639
16640// Support: IE<9
16641// Use getAttributeNode to fetch booleans when getAttribute lies
16642if ( !assert(function( el ) {
16643 return el.getAttribute("disabled") == null;
16644}) ) {
16645 addHandle( booleans, function( elem, name, isXML ) {
16646 var val;
16647 if ( !isXML ) {
16648 return elem[ name ] === true ? name.toLowerCase() :
16649 (val = elem.getAttributeNode( name )) && val.specified ?
16650 val.value :
16651 null;
16652 }
16653 });
16654}
16655
16656return Sizzle;
16657
16658})( window );
16659
16660
16661
16662jQuery.find = Sizzle;
16663jQuery.expr = Sizzle.selectors;
16664
16665// Deprecated
16666jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16667jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16668jQuery.text = Sizzle.getText;
16669jQuery.isXMLDoc = Sizzle.isXML;
16670jQuery.contains = Sizzle.contains;
16671jQuery.escapeSelector = Sizzle.escape;
16672
16673
16674
16675
16676var dir = function( elem, dir, until ) {
16677 var matched = [],
16678 truncate = until !== undefined;
16679
16680 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16681 if ( elem.nodeType === 1 ) {
16682 if ( truncate && jQuery( elem ).is( until ) ) {
16683 break;
16684 }
16685 matched.push( elem );
16686 }
16687 }
16688 return matched;
16689};
16690
16691
16692var siblings = function( n, elem ) {
16693 var matched = [];
16694
16695 for ( ; n; n = n.nextSibling ) {
16696 if ( n.nodeType === 1 && n !== elem ) {
16697 matched.push( n );
16698 }
16699 }
16700
16701 return matched;
16702};
16703
16704
16705var rneedsContext = jQuery.expr.match.needsContext;
16706
16707
16708
16709function nodeName( elem, name ) {
16710
16711 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16712
16713};
16714var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16715
16716
16717
16718var risSimple = /^.[^:#\[\.,]*$/;
16719
16720// Implement the identical functionality for filter and not
16721function winnow( elements, qualifier, not ) {
16722 if ( jQuery.isFunction( qualifier ) ) {
16723 return jQuery.grep( elements, function( elem, i ) {
16724 return !!qualifier.call( elem, i, elem ) !== not;
16725 } );
16726 }
16727
16728 // Single element
16729 if ( qualifier.nodeType ) {
16730 return jQuery.grep( elements, function( elem ) {
16731 return ( elem === qualifier ) !== not;
16732 } );
16733 }
16734
16735 // Arraylike of elements (jQuery, arguments, Array)
16736 if ( typeof qualifier !== "string" ) {
16737 return jQuery.grep( elements, function( elem ) {
16738 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16739 } );
16740 }
16741
16742 // Simple selector that can be filtered directly, removing non-Elements
16743 if ( risSimple.test( qualifier ) ) {
16744 return jQuery.filter( qualifier, elements, not );
16745 }
16746
16747 // Complex selector, compare the two sets, removing non-Elements
16748 qualifier = jQuery.filter( qualifier, elements );
16749 return jQuery.grep( elements, function( elem ) {
16750 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16751 } );
16752}
16753
16754jQuery.filter = function( expr, elems, not ) {
16755 var elem = elems[ 0 ];
16756
16757 if ( not ) {
16758 expr = ":not(" + expr + ")";
16759 }
16760
16761 if ( elems.length === 1 && elem.nodeType === 1 ) {
16762 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16763 }
16764
16765 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16766 return elem.nodeType === 1;
16767 } ) );
16768};
16769
16770jQuery.fn.extend( {
16771 find: function( selector ) {
16772 var i, ret,
16773 len = this.length,
16774 self = this;
16775
16776 if ( typeof selector !== "string" ) {
16777 return this.pushStack( jQuery( selector ).filter( function() {
16778 for ( i = 0; i < len; i++ ) {
16779 if ( jQuery.contains( self[ i ], this ) ) {
16780 return true;
16781 }
16782 }
16783 } ) );
16784 }
16785
16786 ret = this.pushStack( [] );
16787
16788 for ( i = 0; i < len; i++ ) {
16789 jQuery.find( selector, self[ i ], ret );
16790 }
16791
16792 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16793 },
16794 filter: function( selector ) {
16795 return this.pushStack( winnow( this, selector || [], false ) );
16796 },
16797 not: function( selector ) {
16798 return this.pushStack( winnow( this, selector || [], true ) );
16799 },
16800 is: function( selector ) {
16801 return !!winnow(
16802 this,
16803
16804 // If this is a positional/relative selector, check membership in the returned set
16805 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16806 typeof selector === "string" && rneedsContext.test( selector ) ?
16807 jQuery( selector ) :
16808 selector || [],
16809 false
16810 ).length;
16811 }
16812} );
16813
16814
16815// Initialize a jQuery object
16816
16817
16818// A central reference to the root jQuery(document)
16819var rootjQuery,
16820
16821 // A simple way to check for HTML strings
16822 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16823 // Strict HTML recognition (#11290: must start with <)
16824 // Shortcut simple #id case for speed
16825 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16826
16827 init = jQuery.fn.init = function( selector, context, root ) {
16828 var match, elem;
16829
16830 // HANDLE: $(""), $(null), $(undefined), $(false)
16831 if ( !selector ) {
16832 return this;
16833 }
16834
16835 // Method init() accepts an alternate rootjQuery
16836 // so migrate can support jQuery.sub (gh-2101)
16837 root = root || rootjQuery;
16838
16839 // Handle HTML strings
16840 if ( typeof selector === "string" ) {
16841 if ( selector[ 0 ] === "<" &&
16842 selector[ selector.length - 1 ] === ">" &&
16843 selector.length >= 3 ) {
16844
16845 // Assume that strings that start and end with <> are HTML and skip the regex check
16846 match = [ null, selector, null ];
16847
16848 } else {
16849 match = rquickExpr.exec( selector );
16850 }
16851
16852 // Match html or make sure no context is specified for #id
16853 if ( match && ( match[ 1 ] || !context ) ) {
16854
16855 // HANDLE: $(html) -> $(array)
16856 if ( match[ 1 ] ) {
16857 context = context instanceof jQuery ? context[ 0 ] : context;
16858
16859 // Option to run scripts is true for back-compat
16860 // Intentionally let the error be thrown if parseHTML is not present
16861 jQuery.merge( this, jQuery.parseHTML(
16862 match[ 1 ],
16863 context && context.nodeType ? context.ownerDocument || context : document,
16864 true
16865 ) );
16866
16867 // HANDLE: $(html, props)
16868 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
16869 for ( match in context ) {
16870
16871 // Properties of context are called as methods if possible
16872 if ( jQuery.isFunction( this[ match ] ) ) {
16873 this[ match ]( context[ match ] );
16874
16875 // ...and otherwise set as attributes
16876 } else {
16877 this.attr( match, context[ match ] );
16878 }
16879 }
16880 }
16881
16882 return this;
16883
16884 // HANDLE: $(#id)
16885 } else {
16886 elem = document.getElementById( match[ 2 ] );
16887
16888 if ( elem ) {
16889
16890 // Inject the element directly into the jQuery object
16891 this[ 0 ] = elem;
16892 this.length = 1;
16893 }
16894 return this;
16895 }
16896
16897 // HANDLE: $(expr, $(...))
16898 } else if ( !context || context.jquery ) {
16899 return ( context || root ).find( selector );
16900
16901 // HANDLE: $(expr, context)
16902 // (which is just equivalent to: $(context).find(expr)
16903 } else {
16904 return this.constructor( context ).find( selector );
16905 }
16906
16907 // HANDLE: $(DOMElement)
16908 } else if ( selector.nodeType ) {
16909 this[ 0 ] = selector;
16910 this.length = 1;
16911 return this;
16912
16913 // HANDLE: $(function)
16914 // Shortcut for document ready
16915 } else if ( jQuery.isFunction( selector ) ) {
16916 return root.ready !== undefined ?
16917 root.ready( selector ) :
16918
16919 // Execute immediately if ready is not present
16920 selector( jQuery );
16921 }
16922
16923 return jQuery.makeArray( selector, this );
16924 };
16925
16926// Give the init function the jQuery prototype for later instantiation
16927init.prototype = jQuery.fn;
16928
16929// Initialize central reference
16930rootjQuery = jQuery( document );
16931
16932
16933var rparentsprev = /^(?:parents|prev(?:Until|All))/,
16934
16935 // Methods guaranteed to produce a unique set when starting from a unique set
16936 guaranteedUnique = {
16937 children: true,
16938 contents: true,
16939 next: true,
16940 prev: true
16941 };
16942
16943jQuery.fn.extend( {
16944 has: function( target ) {
16945 var targets = jQuery( target, this ),
16946 l = targets.length;
16947
16948 return this.filter( function() {
16949 var i = 0;
16950 for ( ; i < l; i++ ) {
16951 if ( jQuery.contains( this, targets[ i ] ) ) {
16952 return true;
16953 }
16954 }
16955 } );
16956 },
16957
16958 closest: function( selectors, context ) {
16959 var cur,
16960 i = 0,
16961 l = this.length,
16962 matched = [],
16963 targets = typeof selectors !== "string" && jQuery( selectors );
16964
16965 // Positional selectors never match, since there's no _selection_ context
16966 if ( !rneedsContext.test( selectors ) ) {
16967 for ( ; i < l; i++ ) {
16968 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
16969
16970 // Always skip document fragments
16971 if ( cur.nodeType < 11 && ( targets ?
16972 targets.index( cur ) > -1 :
16973
16974 // Don't pass non-elements to Sizzle
16975 cur.nodeType === 1 &&
16976 jQuery.find.matchesSelector( cur, selectors ) ) ) {
16977
16978 matched.push( cur );
16979 break;
16980 }
16981 }
16982 }
16983 }
16984
16985 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
16986 },
16987
16988 // Determine the position of an element within the set
16989 index: function( elem ) {
16990
16991 // No argument, return index in parent
16992 if ( !elem ) {
16993 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
16994 }
16995
16996 // Index in selector
16997 if ( typeof elem === "string" ) {
16998 return indexOf.call( jQuery( elem ), this[ 0 ] );
16999 }
17000
17001 // Locate the position of the desired element
17002 return indexOf.call( this,
17003
17004 // If it receives a jQuery object, the first element is used
17005 elem.jquery ? elem[ 0 ] : elem
17006 );
17007 },
17008
17009 add: function( selector, context ) {
17010 return this.pushStack(
17011 jQuery.uniqueSort(
17012 jQuery.merge( this.get(), jQuery( selector, context ) )
17013 )
17014 );
17015 },
17016
17017 addBack: function( selector ) {
17018 return this.add( selector == null ?
17019 this.prevObject : this.prevObject.filter( selector )
17020 );
17021 }
17022} );
17023
17024function sibling( cur, dir ) {
17025 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17026 return cur;
17027}
17028
17029jQuery.each( {
17030 parent: function( elem ) {
17031 var parent = elem.parentNode;
17032 return parent && parent.nodeType !== 11 ? parent : null;
17033 },
17034 parents: function( elem ) {
17035 return dir( elem, "parentNode" );
17036 },
17037 parentsUntil: function( elem, i, until ) {
17038 return dir( elem, "parentNode", until );
17039 },
17040 next: function( elem ) {
17041 return sibling( elem, "nextSibling" );
17042 },
17043 prev: function( elem ) {
17044 return sibling( elem, "previousSibling" );
17045 },
17046 nextAll: function( elem ) {
17047 return dir( elem, "nextSibling" );
17048 },
17049 prevAll: function( elem ) {
17050 return dir( elem, "previousSibling" );
17051 },
17052 nextUntil: function( elem, i, until ) {
17053 return dir( elem, "nextSibling", until );
17054 },
17055 prevUntil: function( elem, i, until ) {
17056 return dir( elem, "previousSibling", until );
17057 },
17058 siblings: function( elem ) {
17059 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17060 },
17061 children: function( elem ) {
17062 return siblings( elem.firstChild );
17063 },
17064 contents: function( elem ) {
17065 if ( nodeName( elem, "iframe" ) ) {
17066 return elem.contentDocument;
17067 }
17068
17069 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17070 // Treat the template element as a regular one in browsers that
17071 // don't support it.
17072 if ( nodeName( elem, "template" ) ) {
17073 elem = elem.content || elem;
17074 }
17075
17076 return jQuery.merge( [], elem.childNodes );
17077 }
17078}, function( name, fn ) {
17079 jQuery.fn[ name ] = function( until, selector ) {
17080 var matched = jQuery.map( this, fn, until );
17081
17082 if ( name.slice( -5 ) !== "Until" ) {
17083 selector = until;
17084 }
17085
17086 if ( selector && typeof selector === "string" ) {
17087 matched = jQuery.filter( selector, matched );
17088 }
17089
17090 if ( this.length > 1 ) {
17091
17092 // Remove duplicates
17093 if ( !guaranteedUnique[ name ] ) {
17094 jQuery.uniqueSort( matched );
17095 }
17096
17097 // Reverse order for parents* and prev-derivatives
17098 if ( rparentsprev.test( name ) ) {
17099 matched.reverse();
17100 }
17101 }
17102
17103 return this.pushStack( matched );
17104 };
17105} );
17106var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17107
17108
17109
17110// Convert String-formatted options into Object-formatted ones
17111function createOptions( options ) {
17112 var object = {};
17113 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17114 object[ flag ] = true;
17115 } );
17116 return object;
17117}
17118
17119/*
17120 * Create a callback list using the following parameters:
17121 *
17122 * options: an optional list of space-separated options that will change how
17123 * the callback list behaves or a more traditional option object
17124 *
17125 * By default a callback list will act like an event callback list and can be
17126 * "fired" multiple times.
17127 *
17128 * Possible options:
17129 *
17130 * once: will ensure the callback list can only be fired once (like a Deferred)
17131 *
17132 * memory: will keep track of previous values and will call any callback added
17133 * after the list has been fired right away with the latest "memorized"
17134 * values (like a Deferred)
17135 *
17136 * unique: will ensure a callback can only be added once (no duplicate in the list)
17137 *
17138 * stopOnFalse: interrupt callings when a callback returns false
17139 *
17140 */
17141jQuery.Callbacks = function( options ) {
17142
17143 // Convert options from String-formatted to Object-formatted if needed
17144 // (we check in cache first)
17145 options = typeof options === "string" ?
17146 createOptions( options ) :
17147 jQuery.extend( {}, options );
17148
17149 var // Flag to know if list is currently firing
17150 firing,
17151
17152 // Last fire value for non-forgettable lists
17153 memory,
17154
17155 // Flag to know if list was already fired
17156 fired,
17157
17158 // Flag to prevent firing
17159 locked,
17160
17161 // Actual callback list
17162 list = [],
17163
17164 // Queue of execution data for repeatable lists
17165 queue = [],
17166
17167 // Index of currently firing callback (modified by add/remove as needed)
17168 firingIndex = -1,
17169
17170 // Fire callbacks
17171 fire = function() {
17172
17173 // Enforce single-firing
17174 locked = locked || options.once;
17175
17176 // Execute callbacks for all pending executions,
17177 // respecting firingIndex overrides and runtime changes
17178 fired = firing = true;
17179 for ( ; queue.length; firingIndex = -1 ) {
17180 memory = queue.shift();
17181 while ( ++firingIndex < list.length ) {
17182
17183 // Run callback and check for early termination
17184 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17185 options.stopOnFalse ) {
17186
17187 // Jump to end and forget the data so .add doesn't re-fire
17188 firingIndex = list.length;
17189 memory = false;
17190 }
17191 }
17192 }
17193
17194 // Forget the data if we're done with it
17195 if ( !options.memory ) {
17196 memory = false;
17197 }
17198
17199 firing = false;
17200
17201 // Clean up if we're done firing for good
17202 if ( locked ) {
17203
17204 // Keep an empty list if we have data for future add calls
17205 if ( memory ) {
17206 list = [];
17207
17208 // Otherwise, this object is spent
17209 } else {
17210 list = "";
17211 }
17212 }
17213 },
17214
17215 // Actual Callbacks object
17216 self = {
17217
17218 // Add a callback or a collection of callbacks to the list
17219 add: function() {
17220 if ( list ) {
17221
17222 // If we have memory from a past run, we should fire after adding
17223 if ( memory && !firing ) {
17224 firingIndex = list.length - 1;
17225 queue.push( memory );
17226 }
17227
17228 ( function add( args ) {
17229 jQuery.each( args, function( _, arg ) {
17230 if ( jQuery.isFunction( arg ) ) {
17231 if ( !options.unique || !self.has( arg ) ) {
17232 list.push( arg );
17233 }
17234 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17235
17236 // Inspect recursively
17237 add( arg );
17238 }
17239 } );
17240 } )( arguments );
17241
17242 if ( memory && !firing ) {
17243 fire();
17244 }
17245 }
17246 return this;
17247 },
17248
17249 // Remove a callback from the list
17250 remove: function() {
17251 jQuery.each( arguments, function( _, arg ) {
17252 var index;
17253 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17254 list.splice( index, 1 );
17255
17256 // Handle firing indexes
17257 if ( index <= firingIndex ) {
17258 firingIndex--;
17259 }
17260 }
17261 } );
17262 return this;
17263 },
17264
17265 // Check if a given callback is in the list.
17266 // If no argument is given, return whether or not list has callbacks attached.
17267 has: function( fn ) {
17268 return fn ?
17269 jQuery.inArray( fn, list ) > -1 :
17270 list.length > 0;
17271 },
17272
17273 // Remove all callbacks from the list
17274 empty: function() {
17275 if ( list ) {
17276 list = [];
17277 }
17278 return this;
17279 },
17280
17281 // Disable .fire and .add
17282 // Abort any current/pending executions
17283 // Clear all callbacks and values
17284 disable: function() {
17285 locked = queue = [];
17286 list = memory = "";
17287 return this;
17288 },
17289 disabled: function() {
17290 return !list;
17291 },
17292
17293 // Disable .fire
17294 // Also disable .add unless we have memory (since it would have no effect)
17295 // Abort any pending executions
17296 lock: function() {
17297 locked = queue = [];
17298 if ( !memory && !firing ) {
17299 list = memory = "";
17300 }
17301 return this;
17302 },
17303 locked: function() {
17304 return !!locked;
17305 },
17306
17307 // Call all callbacks with the given context and arguments
17308 fireWith: function( context, args ) {
17309 if ( !locked ) {
17310 args = args || [];
17311 args = [ context, args.slice ? args.slice() : args ];
17312 queue.push( args );
17313 if ( !firing ) {
17314 fire();
17315 }
17316 }
17317 return this;
17318 },
17319
17320 // Call all the callbacks with the given arguments
17321 fire: function() {
17322 self.fireWith( this, arguments );
17323 return this;
17324 },
17325
17326 // To know if the callbacks have already been called at least once
17327 fired: function() {
17328 return !!fired;
17329 }
17330 };
17331
17332 return self;
17333};
17334
17335
17336function Identity( v ) {
17337 return v;
17338}
17339function Thrower( ex ) {
17340 throw ex;
17341}
17342
17343function adoptValue( value, resolve, reject, noValue ) {
17344 var method;
17345
17346 try {
17347
17348 // Check for promise aspect first to privilege synchronous behavior
17349 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17350 method.call( value ).done( resolve ).fail( reject );
17351
17352 // Other thenables
17353 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17354 method.call( value, resolve, reject );
17355
17356 // Other non-thenables
17357 } else {
17358
17359 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17360 // * false: [ value ].slice( 0 ) => resolve( value )
17361 // * true: [ value ].slice( 1 ) => resolve()
17362 resolve.apply( undefined, [ value ].slice( noValue ) );
17363 }
17364
17365 // For Promises/A+, convert exceptions into rejections
17366 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17367 // Deferred#then to conditionally suppress rejection.
17368 } catch ( value ) {
17369
17370 // Support: Android 4.0 only
17371 // Strict mode functions invoked without .call/.apply get global-object context
17372 reject.apply( undefined, [ value ] );
17373 }
17374}
17375
17376jQuery.extend( {
17377
17378 Deferred: function( func ) {
17379 var tuples = [
17380
17381 // action, add listener, callbacks,
17382 // ... .then handlers, argument index, [final state]
17383 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17384 jQuery.Callbacks( "memory" ), 2 ],
17385 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17386 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17387 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17388 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17389 ],
17390 state = "pending",
17391 promise = {
17392 state: function() {
17393 return state;
17394 },
17395 always: function() {
17396 deferred.done( arguments ).fail( arguments );
17397 return this;
17398 },
17399 "catch": function( fn ) {
17400 return promise.then( null, fn );
17401 },
17402
17403 // Keep pipe for back-compat
17404 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17405 var fns = arguments;
17406
17407 return jQuery.Deferred( function( newDefer ) {
17408 jQuery.each( tuples, function( i, tuple ) {
17409
17410 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17411 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17412
17413 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17414 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17415 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17416 deferred[ tuple[ 1 ] ]( function() {
17417 var returned = fn && fn.apply( this, arguments );
17418 if ( returned && jQuery.isFunction( returned.promise ) ) {
17419 returned.promise()
17420 .progress( newDefer.notify )
17421 .done( newDefer.resolve )
17422 .fail( newDefer.reject );
17423 } else {
17424 newDefer[ tuple[ 0 ] + "With" ](
17425 this,
17426 fn ? [ returned ] : arguments
17427 );
17428 }
17429 } );
17430 } );
17431 fns = null;
17432 } ).promise();
17433 },
17434 then: function( onFulfilled, onRejected, onProgress ) {
17435 var maxDepth = 0;
17436 function resolve( depth, deferred, handler, special ) {
17437 return function() {
17438 var that = this,
17439 args = arguments,
17440 mightThrow = function() {
17441 var returned, then;
17442
17443 // Support: Promises/A+ section 2.3.3.3.3
17444 // https://promisesaplus.com/#point-59
17445 // Ignore double-resolution attempts
17446 if ( depth < maxDepth ) {
17447 return;
17448 }
17449
17450 returned = handler.apply( that, args );
17451
17452 // Support: Promises/A+ section 2.3.1
17453 // https://promisesaplus.com/#point-48
17454 if ( returned === deferred.promise() ) {
17455 throw new TypeError( "Thenable self-resolution" );
17456 }
17457
17458 // Support: Promises/A+ sections 2.3.3.1, 3.5
17459 // https://promisesaplus.com/#point-54
17460 // https://promisesaplus.com/#point-75
17461 // Retrieve `then` only once
17462 then = returned &&
17463
17464 // Support: Promises/A+ section 2.3.4
17465 // https://promisesaplus.com/#point-64
17466 // Only check objects and functions for thenability
17467 ( typeof returned === "object" ||
17468 typeof returned === "function" ) &&
17469 returned.then;
17470
17471 // Handle a returned thenable
17472 if ( jQuery.isFunction( then ) ) {
17473
17474 // Special processors (notify) just wait for resolution
17475 if ( special ) {
17476 then.call(
17477 returned,
17478 resolve( maxDepth, deferred, Identity, special ),
17479 resolve( maxDepth, deferred, Thrower, special )
17480 );
17481
17482 // Normal processors (resolve) also hook into progress
17483 } else {
17484
17485 // ...and disregard older resolution values
17486 maxDepth++;
17487
17488 then.call(
17489 returned,
17490 resolve( maxDepth, deferred, Identity, special ),
17491 resolve( maxDepth, deferred, Thrower, special ),
17492 resolve( maxDepth, deferred, Identity,
17493 deferred.notifyWith )
17494 );
17495 }
17496
17497 // Handle all other returned values
17498 } else {
17499
17500 // Only substitute handlers pass on context
17501 // and multiple values (non-spec behavior)
17502 if ( handler !== Identity ) {
17503 that = undefined;
17504 args = [ returned ];
17505 }
17506
17507 // Process the value(s)
17508 // Default process is resolve
17509 ( special || deferred.resolveWith )( that, args );
17510 }
17511 },
17512
17513 // Only normal processors (resolve) catch and reject exceptions
17514 process = special ?
17515 mightThrow :
17516 function() {
17517 try {
17518 mightThrow();
17519 } catch ( e ) {
17520
17521 if ( jQuery.Deferred.exceptionHook ) {
17522 jQuery.Deferred.exceptionHook( e,
17523 process.stackTrace );
17524 }
17525
17526 // Support: Promises/A+ section 2.3.3.3.4.1
17527 // https://promisesaplus.com/#point-61
17528 // Ignore post-resolution exceptions
17529 if ( depth + 1 >= maxDepth ) {
17530
17531 // Only substitute handlers pass on context
17532 // and multiple values (non-spec behavior)
17533 if ( handler !== Thrower ) {
17534 that = undefined;
17535 args = [ e ];
17536 }
17537
17538 deferred.rejectWith( that, args );
17539 }
17540 }
17541 };
17542
17543 // Support: Promises/A+ section 2.3.3.3.1
17544 // https://promisesaplus.com/#point-57
17545 // Re-resolve promises immediately to dodge false rejection from
17546 // subsequent errors
17547 if ( depth ) {
17548 process();
17549 } else {
17550
17551 // Call an optional hook to record the stack, in case of exception
17552 // since it's otherwise lost when execution goes async
17553 if ( jQuery.Deferred.getStackHook ) {
17554 process.stackTrace = jQuery.Deferred.getStackHook();
17555 }
17556 window.setTimeout( process );
17557 }
17558 };
17559 }
17560
17561 return jQuery.Deferred( function( newDefer ) {
17562
17563 // progress_handlers.add( ... )
17564 tuples[ 0 ][ 3 ].add(
17565 resolve(
17566 0,
17567 newDefer,
17568 jQuery.isFunction( onProgress ) ?
17569 onProgress :
17570 Identity,
17571 newDefer.notifyWith
17572 )
17573 );
17574
17575 // fulfilled_handlers.add( ... )
17576 tuples[ 1 ][ 3 ].add(
17577 resolve(
17578 0,
17579 newDefer,
17580 jQuery.isFunction( onFulfilled ) ?
17581 onFulfilled :
17582 Identity
17583 )
17584 );
17585
17586 // rejected_handlers.add( ... )
17587 tuples[ 2 ][ 3 ].add(
17588 resolve(
17589 0,
17590 newDefer,
17591 jQuery.isFunction( onRejected ) ?
17592 onRejected :
17593 Thrower
17594 )
17595 );
17596 } ).promise();
17597 },
17598
17599 // Get a promise for this deferred
17600 // If obj is provided, the promise aspect is added to the object
17601 promise: function( obj ) {
17602 return obj != null ? jQuery.extend( obj, promise ) : promise;
17603 }
17604 },
17605 deferred = {};
17606
17607 // Add list-specific methods
17608 jQuery.each( tuples, function( i, tuple ) {
17609 var list = tuple[ 2 ],
17610 stateString = tuple[ 5 ];
17611
17612 // promise.progress = list.add
17613 // promise.done = list.add
17614 // promise.fail = list.add
17615 promise[ tuple[ 1 ] ] = list.add;
17616
17617 // Handle state
17618 if ( stateString ) {
17619 list.add(
17620 function() {
17621
17622 // state = "resolved" (i.e., fulfilled)
17623 // state = "rejected"
17624 state = stateString;
17625 },
17626
17627 // rejected_callbacks.disable
17628 // fulfilled_callbacks.disable
17629 tuples[ 3 - i ][ 2 ].disable,
17630
17631 // progress_callbacks.lock
17632 tuples[ 0 ][ 2 ].lock
17633 );
17634 }
17635
17636 // progress_handlers.fire
17637 // fulfilled_handlers.fire
17638 // rejected_handlers.fire
17639 list.add( tuple[ 3 ].fire );
17640
17641 // deferred.notify = function() { deferred.notifyWith(...) }
17642 // deferred.resolve = function() { deferred.resolveWith(...) }
17643 // deferred.reject = function() { deferred.rejectWith(...) }
17644 deferred[ tuple[ 0 ] ] = function() {
17645 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17646 return this;
17647 };
17648
17649 // deferred.notifyWith = list.fireWith
17650 // deferred.resolveWith = list.fireWith
17651 // deferred.rejectWith = list.fireWith
17652 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17653 } );
17654
17655 // Make the deferred a promise
17656 promise.promise( deferred );
17657
17658 // Call given func if any
17659 if ( func ) {
17660 func.call( deferred, deferred );
17661 }
17662
17663 // All done!
17664 return deferred;
17665 },
17666
17667 // Deferred helper
17668 when: function( singleValue ) {
17669 var
17670
17671 // count of uncompleted subordinates
17672 remaining = arguments.length,
17673
17674 // count of unprocessed arguments
17675 i = remaining,
17676
17677 // subordinate fulfillment data
17678 resolveContexts = Array( i ),
17679 resolveValues = slice.call( arguments ),
17680
17681 // the master Deferred
17682 master = jQuery.Deferred(),
17683
17684 // subordinate callback factory
17685 updateFunc = function( i ) {
17686 return function( value ) {
17687 resolveContexts[ i ] = this;
17688 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17689 if ( !( --remaining ) ) {
17690 master.resolveWith( resolveContexts, resolveValues );
17691 }
17692 };
17693 };
17694
17695 // Single- and empty arguments are adopted like Promise.resolve
17696 if ( remaining <= 1 ) {
17697 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17698 !remaining );
17699
17700 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17701 if ( master.state() === "pending" ||
17702 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17703
17704 return master.then();
17705 }
17706 }
17707
17708 // Multiple arguments are aggregated like Promise.all array elements
17709 while ( i-- ) {
17710 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17711 }
17712
17713 return master.promise();
17714 }
17715} );
17716
17717
17718// These usually indicate a programmer mistake during development,
17719// warn about them ASAP rather than swallowing them by default.
17720var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17721
17722jQuery.Deferred.exceptionHook = function( error, stack ) {
17723
17724 // Support: IE 8 - 9 only
17725 // Console exists when dev tools are open, which can happen at any time
17726 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17727 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17728 }
17729};
17730
17731
17732
17733
17734jQuery.readyException = function( error ) {
17735 window.setTimeout( function() {
17736 throw error;
17737 } );
17738};
17739
17740
17741
17742
17743// The deferred used on DOM ready
17744var readyList = jQuery.Deferred();
17745
17746jQuery.fn.ready = function( fn ) {
17747
17748 readyList
17749 .then( fn )
17750
17751 // Wrap jQuery.readyException in a function so that the lookup
17752 // happens at the time of error handling instead of callback
17753 // registration.
17754 .catch( function( error ) {
17755 jQuery.readyException( error );
17756 } );
17757
17758 return this;
17759};
17760
17761jQuery.extend( {
17762
17763 // Is the DOM ready to be used? Set to true once it occurs.
17764 isReady: false,
17765
17766 // A counter to track how many items to wait for before
17767 // the ready event fires. See #6781
17768 readyWait: 1,
17769
17770 // Handle when the DOM is ready
17771 ready: function( wait ) {
17772
17773 // Abort if there are pending holds or we're already ready
17774 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17775 return;
17776 }
17777
17778 // Remember that the DOM is ready
17779 jQuery.isReady = true;
17780
17781 // If a normal DOM Ready event fired, decrement, and wait if need be
17782 if ( wait !== true && --jQuery.readyWait > 0 ) {
17783 return;
17784 }
17785
17786 // If there are functions bound, to execute
17787 readyList.resolveWith( document, [ jQuery ] );
17788 }
17789} );
17790
17791jQuery.ready.then = readyList.then;
17792
17793// The ready event handler and self cleanup method
17794function completed() {
17795 document.removeEventListener( "DOMContentLoaded", completed );
17796 window.removeEventListener( "load", completed );
17797 jQuery.ready();
17798}
17799
17800// Catch cases where $(document).ready() is called
17801// after the browser event has already occurred.
17802// Support: IE <=9 - 10 only
17803// Older IE sometimes signals "interactive" too soon
17804if ( document.readyState === "complete" ||
17805 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17806
17807 // Handle it asynchronously to allow scripts the opportunity to delay ready
17808 window.setTimeout( jQuery.ready );
17809
17810} else {
17811
17812 // Use the handy event callback
17813 document.addEventListener( "DOMContentLoaded", completed );
17814
17815 // A fallback to window.onload, that will always work
17816 window.addEventListener( "load", completed );
17817}
17818
17819
17820
17821
17822// Multifunctional method to get and set values of a collection
17823// The value/s can optionally be executed if it's a function
17824var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17825 var i = 0,
17826 len = elems.length,
17827 bulk = key == null;
17828
17829 // Sets many values
17830 if ( jQuery.type( key ) === "object" ) {
17831 chainable = true;
17832 for ( i in key ) {
17833 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17834 }
17835
17836 // Sets one value
17837 } else if ( value !== undefined ) {
17838 chainable = true;
17839
17840 if ( !jQuery.isFunction( value ) ) {
17841 raw = true;
17842 }
17843
17844 if ( bulk ) {
17845
17846 // Bulk operations run against the entire set
17847 if ( raw ) {
17848 fn.call( elems, value );
17849 fn = null;
17850
17851 // ...except when executing function values
17852 } else {
17853 bulk = fn;
17854 fn = function( elem, key, value ) {
17855 return bulk.call( jQuery( elem ), value );
17856 };
17857 }
17858 }
17859
17860 if ( fn ) {
17861 for ( ; i < len; i++ ) {
17862 fn(
17863 elems[ i ], key, raw ?
17864 value :
17865 value.call( elems[ i ], i, fn( elems[ i ], key ) )
17866 );
17867 }
17868 }
17869 }
17870
17871 if ( chainable ) {
17872 return elems;
17873 }
17874
17875 // Gets
17876 if ( bulk ) {
17877 return fn.call( elems );
17878 }
17879
17880 return len ? fn( elems[ 0 ], key ) : emptyGet;
17881};
17882var acceptData = function( owner ) {
17883
17884 // Accepts only:
17885 // - Node
17886 // - Node.ELEMENT_NODE
17887 // - Node.DOCUMENT_NODE
17888 // - Object
17889 // - Any
17890 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
17891};
17892
17893
17894
17895
17896function Data() {
17897 this.expando = jQuery.expando + Data.uid++;
17898}
17899
17900Data.uid = 1;
17901
17902Data.prototype = {
17903
17904 cache: function( owner ) {
17905
17906 // Check if the owner object already has a cache
17907 var value = owner[ this.expando ];
17908
17909 // If not, create one
17910 if ( !value ) {
17911 value = {};
17912
17913 // We can accept data for non-element nodes in modern browsers,
17914 // but we should not, see #8335.
17915 // Always return an empty object.
17916 if ( acceptData( owner ) ) {
17917
17918 // If it is a node unlikely to be stringify-ed or looped over
17919 // use plain assignment
17920 if ( owner.nodeType ) {
17921 owner[ this.expando ] = value;
17922
17923 // Otherwise secure it in a non-enumerable property
17924 // configurable must be true to allow the property to be
17925 // deleted when data is removed
17926 } else {
17927 Object.defineProperty( owner, this.expando, {
17928 value: value,
17929 configurable: true
17930 } );
17931 }
17932 }
17933 }
17934
17935 return value;
17936 },
17937 set: function( owner, data, value ) {
17938 var prop,
17939 cache = this.cache( owner );
17940
17941 // Handle: [ owner, key, value ] args
17942 // Always use camelCase key (gh-2257)
17943 if ( typeof data === "string" ) {
17944 cache[ jQuery.camelCase( data ) ] = value;
17945
17946 // Handle: [ owner, { properties } ] args
17947 } else {
17948
17949 // Copy the properties one-by-one to the cache object
17950 for ( prop in data ) {
17951 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
17952 }
17953 }
17954 return cache;
17955 },
17956 get: function( owner, key ) {
17957 return key === undefined ?
17958 this.cache( owner ) :
17959
17960 // Always use camelCase key (gh-2257)
17961 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
17962 },
17963 access: function( owner, key, value ) {
17964
17965 // In cases where either:
17966 //
17967 // 1. No key was specified
17968 // 2. A string key was specified, but no value provided
17969 //
17970 // Take the "read" path and allow the get method to determine
17971 // which value to return, respectively either:
17972 //
17973 // 1. The entire cache object
17974 // 2. The data stored at the key
17975 //
17976 if ( key === undefined ||
17977 ( ( key && typeof key === "string" ) && value === undefined ) ) {
17978
17979 return this.get( owner, key );
17980 }
17981
17982 // When the key is not a string, or both a key and value
17983 // are specified, set or extend (existing objects) with either:
17984 //
17985 // 1. An object of properties
17986 // 2. A key and value
17987 //
17988 this.set( owner, key, value );
17989
17990 // Since the "set" path can have two possible entry points
17991 // return the expected data based on which path was taken[*]
17992 return value !== undefined ? value : key;
17993 },
17994 remove: function( owner, key ) {
17995 var i,
17996 cache = owner[ this.expando ];
17997
17998 if ( cache === undefined ) {
17999 return;
18000 }
18001
18002 if ( key !== undefined ) {
18003
18004 // Support array or space separated string of keys
18005 if ( Array.isArray( key ) ) {
18006
18007 // If key is an array of keys...
18008 // We always set camelCase keys, so remove that.
18009 key = key.map( jQuery.camelCase );
18010 } else {
18011 key = jQuery.camelCase( key );
18012
18013 // If a key with the spaces exists, use it.
18014 // Otherwise, create an array by matching non-whitespace
18015 key = key in cache ?
18016 [ key ] :
18017 ( key.match( rnothtmlwhite ) || [] );
18018 }
18019
18020 i = key.length;
18021
18022 while ( i-- ) {
18023 delete cache[ key[ i ] ];
18024 }
18025 }
18026
18027 // Remove the expando if there's no more data
18028 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18029
18030 // Support: Chrome <=35 - 45
18031 // Webkit & Blink performance suffers when deleting properties
18032 // from DOM nodes, so set to undefined instead
18033 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18034 if ( owner.nodeType ) {
18035 owner[ this.expando ] = undefined;
18036 } else {
18037 delete owner[ this.expando ];
18038 }
18039 }
18040 },
18041 hasData: function( owner ) {
18042 var cache = owner[ this.expando ];
18043 return cache !== undefined && !jQuery.isEmptyObject( cache );
18044 }
18045};
18046var dataPriv = new Data();
18047
18048var dataUser = new Data();
18049
18050
18051
18052// Implementation Summary
18053//
18054// 1. Enforce API surface and semantic compatibility with 1.9.x branch
18055// 2. Improve the module's maintainability by reducing the storage
18056// paths to a single mechanism.
18057// 3. Use the same single mechanism to support "private" and "user" data.
18058// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18059// 5. Avoid exposing implementation details on user objects (eg. expando properties)
18060// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18061
18062var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18063 rmultiDash = /[A-Z]/g;
18064
18065function getData( data ) {
18066 if ( data === "true" ) {
18067 return true;
18068 }
18069
18070 if ( data === "false" ) {
18071 return false;
18072 }
18073
18074 if ( data === "null" ) {
18075 return null;
18076 }
18077
18078 // Only convert to a number if it doesn't change the string
18079 if ( data === +data + "" ) {
18080 return +data;
18081 }
18082
18083 if ( rbrace.test( data ) ) {
18084 return JSON.parse( data );
18085 }
18086
18087 return data;
18088}
18089
18090function dataAttr( elem, key, data ) {
18091 var name;
18092
18093 // If nothing was found internally, try to fetch any
18094 // data from the HTML5 data-* attribute
18095 if ( data === undefined && elem.nodeType === 1 ) {
18096 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18097 data = elem.getAttribute( name );
18098
18099 if ( typeof data === "string" ) {
18100 try {
18101 data = getData( data );
18102 } catch ( e ) {}
18103
18104 // Make sure we set the data so it isn't changed later
18105 dataUser.set( elem, key, data );
18106 } else {
18107 data = undefined;
18108 }
18109 }
18110 return data;
18111}
18112
18113jQuery.extend( {
18114 hasData: function( elem ) {
18115 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18116 },
18117
18118 data: function( elem, name, data ) {
18119 return dataUser.access( elem, name, data );
18120 },
18121
18122 removeData: function( elem, name ) {
18123 dataUser.remove( elem, name );
18124 },
18125
18126 // TODO: Now that all calls to _data and _removeData have been replaced
18127 // with direct calls to dataPriv methods, these can be deprecated.
18128 _data: function( elem, name, data ) {
18129 return dataPriv.access( elem, name, data );
18130 },
18131
18132 _removeData: function( elem, name ) {
18133 dataPriv.remove( elem, name );
18134 }
18135} );
18136
18137jQuery.fn.extend( {
18138 data: function( key, value ) {
18139 var i, name, data,
18140 elem = this[ 0 ],
18141 attrs = elem && elem.attributes;
18142
18143 // Gets all values
18144 if ( key === undefined ) {
18145 if ( this.length ) {
18146 data = dataUser.get( elem );
18147
18148 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18149 i = attrs.length;
18150 while ( i-- ) {
18151
18152 // Support: IE 11 only
18153 // The attrs elements can be null (#14894)
18154 if ( attrs[ i ] ) {
18155 name = attrs[ i ].name;
18156 if ( name.indexOf( "data-" ) === 0 ) {
18157 name = jQuery.camelCase( name.slice( 5 ) );
18158 dataAttr( elem, name, data[ name ] );
18159 }
18160 }
18161 }
18162 dataPriv.set( elem, "hasDataAttrs", true );
18163 }
18164 }
18165
18166 return data;
18167 }
18168
18169 // Sets multiple values
18170 if ( typeof key === "object" ) {
18171 return this.each( function() {
18172 dataUser.set( this, key );
18173 } );
18174 }
18175
18176 return access( this, function( value ) {
18177 var data;
18178
18179 // The calling jQuery object (element matches) is not empty
18180 // (and therefore has an element appears at this[ 0 ]) and the
18181 // `value` parameter was not undefined. An empty jQuery object
18182 // will result in `undefined` for elem = this[ 0 ] which will
18183 // throw an exception if an attempt to read a data cache is made.
18184 if ( elem && value === undefined ) {
18185
18186 // Attempt to get data from the cache
18187 // The key will always be camelCased in Data
18188 data = dataUser.get( elem, key );
18189 if ( data !== undefined ) {
18190 return data;
18191 }
18192
18193 // Attempt to "discover" the data in
18194 // HTML5 custom data-* attrs
18195 data = dataAttr( elem, key );
18196 if ( data !== undefined ) {
18197 return data;
18198 }
18199
18200 // We tried really hard, but the data doesn't exist.
18201 return;
18202 }
18203
18204 // Set the data...
18205 this.each( function() {
18206
18207 // We always store the camelCased key
18208 dataUser.set( this, key, value );
18209 } );
18210 }, null, value, arguments.length > 1, null, true );
18211 },
18212
18213 removeData: function( key ) {
18214 return this.each( function() {
18215 dataUser.remove( this, key );
18216 } );
18217 }
18218} );
18219
18220
18221jQuery.extend( {
18222 queue: function( elem, type, data ) {
18223 var queue;
18224
18225 if ( elem ) {
18226 type = ( type || "fx" ) + "queue";
18227 queue = dataPriv.get( elem, type );
18228
18229 // Speed up dequeue by getting out quickly if this is just a lookup
18230 if ( data ) {
18231 if ( !queue || Array.isArray( data ) ) {
18232 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18233 } else {
18234 queue.push( data );
18235 }
18236 }
18237 return queue || [];
18238 }
18239 },
18240
18241 dequeue: function( elem, type ) {
18242 type = type || "fx";
18243
18244 var queue = jQuery.queue( elem, type ),
18245 startLength = queue.length,
18246 fn = queue.shift(),
18247 hooks = jQuery._queueHooks( elem, type ),
18248 next = function() {
18249 jQuery.dequeue( elem, type );
18250 };
18251
18252 // If the fx queue is dequeued, always remove the progress sentinel
18253 if ( fn === "inprogress" ) {
18254 fn = queue.shift();
18255 startLength--;
18256 }
18257
18258 if ( fn ) {
18259
18260 // Add a progress sentinel to prevent the fx queue from being
18261 // automatically dequeued
18262 if ( type === "fx" ) {
18263 queue.unshift( "inprogress" );
18264 }
18265
18266 // Clear up the last queue stop function
18267 delete hooks.stop;
18268 fn.call( elem, next, hooks );
18269 }
18270
18271 if ( !startLength && hooks ) {
18272 hooks.empty.fire();
18273 }
18274 },
18275
18276 // Not public - generate a queueHooks object, or return the current one
18277 _queueHooks: function( elem, type ) {
18278 var key = type + "queueHooks";
18279 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18280 empty: jQuery.Callbacks( "once memory" ).add( function() {
18281 dataPriv.remove( elem, [ type + "queue", key ] );
18282 } )
18283 } );
18284 }
18285} );
18286
18287jQuery.fn.extend( {
18288 queue: function( type, data ) {
18289 var setter = 2;
18290
18291 if ( typeof type !== "string" ) {
18292 data = type;
18293 type = "fx";
18294 setter--;
18295 }
18296
18297 if ( arguments.length < setter ) {
18298 return jQuery.queue( this[ 0 ], type );
18299 }
18300
18301 return data === undefined ?
18302 this :
18303 this.each( function() {
18304 var queue = jQuery.queue( this, type, data );
18305
18306 // Ensure a hooks for this queue
18307 jQuery._queueHooks( this, type );
18308
18309 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18310 jQuery.dequeue( this, type );
18311 }
18312 } );
18313 },
18314 dequeue: function( type ) {
18315 return this.each( function() {
18316 jQuery.dequeue( this, type );
18317 } );
18318 },
18319 clearQueue: function( type ) {
18320 return this.queue( type || "fx", [] );
18321 },
18322
18323 // Get a promise resolved when queues of a certain type
18324 // are emptied (fx is the type by default)
18325 promise: function( type, obj ) {
18326 var tmp,
18327 count = 1,
18328 defer = jQuery.Deferred(),
18329 elements = this,
18330 i = this.length,
18331 resolve = function() {
18332 if ( !( --count ) ) {
18333 defer.resolveWith( elements, [ elements ] );
18334 }
18335 };
18336
18337 if ( typeof type !== "string" ) {
18338 obj = type;
18339 type = undefined;
18340 }
18341 type = type || "fx";
18342
18343 while ( i-- ) {
18344 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18345 if ( tmp && tmp.empty ) {
18346 count++;
18347 tmp.empty.add( resolve );
18348 }
18349 }
18350 resolve();
18351 return defer.promise( obj );
18352 }
18353} );
18354var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18355
18356var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18357
18358
18359var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18360
18361var isHiddenWithinTree = function( elem, el ) {
18362
18363 // isHiddenWithinTree might be called from jQuery#filter function;
18364 // in that case, element will be second argument
18365 elem = el || elem;
18366
18367 // Inline style trumps all
18368 return elem.style.display === "none" ||
18369 elem.style.display === "" &&
18370
18371 // Otherwise, check computed style
18372 // Support: Firefox <=43 - 45
18373 // Disconnected elements can have computed display: none, so first confirm that elem is
18374 // in the document.
18375 jQuery.contains( elem.ownerDocument, elem ) &&
18376
18377 jQuery.css( elem, "display" ) === "none";
18378 };
18379
18380var swap = function( elem, options, callback, args ) {
18381 var ret, name,
18382 old = {};
18383
18384 // Remember the old values, and insert the new ones
18385 for ( name in options ) {
18386 old[ name ] = elem.style[ name ];
18387 elem.style[ name ] = options[ name ];
18388 }
18389
18390 ret = callback.apply( elem, args || [] );
18391
18392 // Revert the old values
18393 for ( name in options ) {
18394 elem.style[ name ] = old[ name ];
18395 }
18396
18397 return ret;
18398};
18399
18400
18401
18402
18403function adjustCSS( elem, prop, valueParts, tween ) {
18404 var adjusted,
18405 scale = 1,
18406 maxIterations = 20,
18407 currentValue = tween ?
18408 function() {
18409 return tween.cur();
18410 } :
18411 function() {
18412 return jQuery.css( elem, prop, "" );
18413 },
18414 initial = currentValue(),
18415 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18416
18417 // Starting value computation is required for potential unit mismatches
18418 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18419 rcssNum.exec( jQuery.css( elem, prop ) );
18420
18421 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18422
18423 // Trust units reported by jQuery.css
18424 unit = unit || initialInUnit[ 3 ];
18425
18426 // Make sure we update the tween properties later on
18427 valueParts = valueParts || [];
18428
18429 // Iteratively approximate from a nonzero starting point
18430 initialInUnit = +initial || 1;
18431
18432 do {
18433
18434 // If previous iteration zeroed out, double until we get *something*.
18435 // Use string for doubling so we don't accidentally see scale as unchanged below
18436 scale = scale || ".5";
18437
18438 // Adjust and apply
18439 initialInUnit = initialInUnit / scale;
18440 jQuery.style( elem, prop, initialInUnit + unit );
18441
18442 // Update scale, tolerating zero or NaN from tween.cur()
18443 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18444 } while (
18445 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18446 );
18447 }
18448
18449 if ( valueParts ) {
18450 initialInUnit = +initialInUnit || +initial || 0;
18451
18452 // Apply relative offset (+=/-=) if specified
18453 adjusted = valueParts[ 1 ] ?
18454 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18455 +valueParts[ 2 ];
18456 if ( tween ) {
18457 tween.unit = unit;
18458 tween.start = initialInUnit;
18459 tween.end = adjusted;
18460 }
18461 }
18462 return adjusted;
18463}
18464
18465
18466var defaultDisplayMap = {};
18467
18468function getDefaultDisplay( elem ) {
18469 var temp,
18470 doc = elem.ownerDocument,
18471 nodeName = elem.nodeName,
18472 display = defaultDisplayMap[ nodeName ];
18473
18474 if ( display ) {
18475 return display;
18476 }
18477
18478 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18479 display = jQuery.css( temp, "display" );
18480
18481 temp.parentNode.removeChild( temp );
18482
18483 if ( display === "none" ) {
18484 display = "block";
18485 }
18486 defaultDisplayMap[ nodeName ] = display;
18487
18488 return display;
18489}
18490
18491function showHide( elements, show ) {
18492 var display, elem,
18493 values = [],
18494 index = 0,
18495 length = elements.length;
18496
18497 // Determine new display value for elements that need to change
18498 for ( ; index < length; index++ ) {
18499 elem = elements[ index ];
18500 if ( !elem.style ) {
18501 continue;
18502 }
18503
18504 display = elem.style.display;
18505 if ( show ) {
18506
18507 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18508 // check is required in this first loop unless we have a nonempty display value (either
18509 // inline or about-to-be-restored)
18510 if ( display === "none" ) {
18511 values[ index ] = dataPriv.get( elem, "display" ) || null;
18512 if ( !values[ index ] ) {
18513 elem.style.display = "";
18514 }
18515 }
18516 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18517 values[ index ] = getDefaultDisplay( elem );
18518 }
18519 } else {
18520 if ( display !== "none" ) {
18521 values[ index ] = "none";
18522
18523 // Remember what we're overwriting
18524 dataPriv.set( elem, "display", display );
18525 }
18526 }
18527 }
18528
18529 // Set the display of the elements in a second loop to avoid constant reflow
18530 for ( index = 0; index < length; index++ ) {
18531 if ( values[ index ] != null ) {
18532 elements[ index ].style.display = values[ index ];
18533 }
18534 }
18535
18536 return elements;
18537}
18538
18539jQuery.fn.extend( {
18540 show: function() {
18541 return showHide( this, true );
18542 },
18543 hide: function() {
18544 return showHide( this );
18545 },
18546 toggle: function( state ) {
18547 if ( typeof state === "boolean" ) {
18548 return state ? this.show() : this.hide();
18549 }
18550
18551 return this.each( function() {
18552 if ( isHiddenWithinTree( this ) ) {
18553 jQuery( this ).show();
18554 } else {
18555 jQuery( this ).hide();
18556 }
18557 } );
18558 }
18559} );
18560var rcheckableType = ( /^(?:checkbox|radio)$/i );
18561
18562var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18563
18564var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18565
18566
18567
18568// We have to close these tags to support XHTML (#13200)
18569var wrapMap = {
18570
18571 // Support: IE <=9 only
18572 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18573
18574 // XHTML parsers do not magically insert elements in the
18575 // same way that tag soup parsers do. So we cannot shorten
18576 // this by omitting <tbody> or other required elements.
18577 thead: [ 1, "<table>", "</table>" ],
18578 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18579 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18580 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18581
18582 _default: [ 0, "", "" ]
18583};
18584
18585// Support: IE <=9 only
18586wrapMap.optgroup = wrapMap.option;
18587
18588wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18589wrapMap.th = wrapMap.td;
18590
18591
18592function getAll( context, tag ) {
18593
18594 // Support: IE <=9 - 11 only
18595 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18596 var ret;
18597
18598 if ( typeof context.getElementsByTagName !== "undefined" ) {
18599 ret = context.getElementsByTagName( tag || "*" );
18600
18601 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18602 ret = context.querySelectorAll( tag || "*" );
18603
18604 } else {
18605 ret = [];
18606 }
18607
18608 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18609 return jQuery.merge( [ context ], ret );
18610 }
18611
18612 return ret;
18613}
18614
18615
18616// Mark scripts as having already been evaluated
18617function setGlobalEval( elems, refElements ) {
18618 var i = 0,
18619 l = elems.length;
18620
18621 for ( ; i < l; i++ ) {
18622 dataPriv.set(
18623 elems[ i ],
18624 "globalEval",
18625 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18626 );
18627 }
18628}
18629
18630
18631var rhtml = /<|&#?\w+;/;
18632
18633function buildFragment( elems, context, scripts, selection, ignored ) {
18634 var elem, tmp, tag, wrap, contains, j,
18635 fragment = context.createDocumentFragment(),
18636 nodes = [],
18637 i = 0,
18638 l = elems.length;
18639
18640 for ( ; i < l; i++ ) {
18641 elem = elems[ i ];
18642
18643 if ( elem || elem === 0 ) {
18644
18645 // Add nodes directly
18646 if ( jQuery.type( elem ) === "object" ) {
18647
18648 // Support: Android <=4.0 only, PhantomJS 1 only
18649 // push.apply(_, arraylike) throws on ancient WebKit
18650 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18651
18652 // Convert non-html into a text node
18653 } else if ( !rhtml.test( elem ) ) {
18654 nodes.push( context.createTextNode( elem ) );
18655
18656 // Convert html into DOM nodes
18657 } else {
18658 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18659
18660 // Deserialize a standard representation
18661 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18662 wrap = wrapMap[ tag ] || wrapMap._default;
18663 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18664
18665 // Descend through wrappers to the right content
18666 j = wrap[ 0 ];
18667 while ( j-- ) {
18668 tmp = tmp.lastChild;
18669 }
18670
18671 // Support: Android <=4.0 only, PhantomJS 1 only
18672 // push.apply(_, arraylike) throws on ancient WebKit
18673 jQuery.merge( nodes, tmp.childNodes );
18674
18675 // Remember the top-level container
18676 tmp = fragment.firstChild;
18677
18678 // Ensure the created nodes are orphaned (#12392)
18679 tmp.textContent = "";
18680 }
18681 }
18682 }
18683
18684 // Remove wrapper from fragment
18685 fragment.textContent = "";
18686
18687 i = 0;
18688 while ( ( elem = nodes[ i++ ] ) ) {
18689
18690 // Skip elements already in the context collection (trac-4087)
18691 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18692 if ( ignored ) {
18693 ignored.push( elem );
18694 }
18695 continue;
18696 }
18697
18698 contains = jQuery.contains( elem.ownerDocument, elem );
18699
18700 // Append to fragment
18701 tmp = getAll( fragment.appendChild( elem ), "script" );
18702
18703 // Preserve script evaluation history
18704 if ( contains ) {
18705 setGlobalEval( tmp );
18706 }
18707
18708 // Capture executables
18709 if ( scripts ) {
18710 j = 0;
18711 while ( ( elem = tmp[ j++ ] ) ) {
18712 if ( rscriptType.test( elem.type || "" ) ) {
18713 scripts.push( elem );
18714 }
18715 }
18716 }
18717 }
18718
18719 return fragment;
18720}
18721
18722
18723( function() {
18724 var fragment = document.createDocumentFragment(),
18725 div = fragment.appendChild( document.createElement( "div" ) ),
18726 input = document.createElement( "input" );
18727
18728 // Support: Android 4.0 - 4.3 only
18729 // Check state lost if the name is set (#11217)
18730 // Support: Windows Web Apps (WWA)
18731 // `name` and `type` must use .setAttribute for WWA (#14901)
18732 input.setAttribute( "type", "radio" );
18733 input.setAttribute( "checked", "checked" );
18734 input.setAttribute( "name", "t" );
18735
18736 div.appendChild( input );
18737
18738 // Support: Android <=4.1 only
18739 // Older WebKit doesn't clone checked state correctly in fragments
18740 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18741
18742 // Support: IE <=11 only
18743 // Make sure textarea (and checkbox) defaultValue is properly cloned
18744 div.innerHTML = "<textarea>x</textarea>";
18745 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18746} )();
18747var documentElement = document.documentElement;
18748
18749
18750
18751var
18752 rkeyEvent = /^key/,
18753 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18754 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18755
18756function returnTrue() {
18757 return true;
18758}
18759
18760function returnFalse() {
18761 return false;
18762}
18763
18764// Support: IE <=9 only
18765// See #13393 for more info
18766function safeActiveElement() {
18767 try {
18768 return document.activeElement;
18769 } catch ( err ) { }
18770}
18771
18772function on( elem, types, selector, data, fn, one ) {
18773 var origFn, type;
18774
18775 // Types can be a map of types/handlers
18776 if ( typeof types === "object" ) {
18777
18778 // ( types-Object, selector, data )
18779 if ( typeof selector !== "string" ) {
18780
18781 // ( types-Object, data )
18782 data = data || selector;
18783 selector = undefined;
18784 }
18785 for ( type in types ) {
18786 on( elem, type, selector, data, types[ type ], one );
18787 }
18788 return elem;
18789 }
18790
18791 if ( data == null && fn == null ) {
18792
18793 // ( types, fn )
18794 fn = selector;
18795 data = selector = undefined;
18796 } else if ( fn == null ) {
18797 if ( typeof selector === "string" ) {
18798
18799 // ( types, selector, fn )
18800 fn = data;
18801 data = undefined;
18802 } else {
18803
18804 // ( types, data, fn )
18805 fn = data;
18806 data = selector;
18807 selector = undefined;
18808 }
18809 }
18810 if ( fn === false ) {
18811 fn = returnFalse;
18812 } else if ( !fn ) {
18813 return elem;
18814 }
18815
18816 if ( one === 1 ) {
18817 origFn = fn;
18818 fn = function( event ) {
18819
18820 // Can use an empty set, since event contains the info
18821 jQuery().off( event );
18822 return origFn.apply( this, arguments );
18823 };
18824
18825 // Use same guid so caller can remove using origFn
18826 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18827 }
18828 return elem.each( function() {
18829 jQuery.event.add( this, types, fn, data, selector );
18830 } );
18831}
18832
18833/*
18834 * Helper functions for managing events -- not part of the public interface.
18835 * Props to Dean Edwards' addEvent library for many of the ideas.
18836 */
18837jQuery.event = {
3af2954a 18838
26dd39fd 18839 global: {},
3af2954a 18840
26dd39fd
IC
18841 add: function( elem, types, handler, data, selector ) {
18842
18843 var handleObjIn, eventHandle, tmp,
18844 events, t, handleObj,
18845 special, handlers, type, namespaces, origType,
18846 elemData = dataPriv.get( elem );
18847
18848 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18849 if ( !elemData ) {
18850 return;
18851 }
18852
18853 // Caller can pass in an object of custom data in lieu of the handler
18854 if ( handler.handler ) {
18855 handleObjIn = handler;
18856 handler = handleObjIn.handler;
18857 selector = handleObjIn.selector;
18858 }
18859
18860 // Ensure that invalid selectors throw exceptions at attach time
18861 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18862 if ( selector ) {
18863 jQuery.find.matchesSelector( documentElement, selector );
18864 }
18865
18866 // Make sure that the handler has a unique ID, used to find/remove it later
18867 if ( !handler.guid ) {
18868 handler.guid = jQuery.guid++;
18869 }
18870
18871 // Init the element's event structure and main handler, if this is the first
18872 if ( !( events = elemData.events ) ) {
18873 events = elemData.events = {};
18874 }
18875 if ( !( eventHandle = elemData.handle ) ) {
18876 eventHandle = elemData.handle = function( e ) {
18877
18878 // Discard the second event of a jQuery.event.trigger() and
18879 // when an event is called after a page has unloaded
18880 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
18881 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
18882 };
18883 }
18884
18885 // Handle multiple events separated by a space
18886 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
18887 t = types.length;
18888 while ( t-- ) {
18889 tmp = rtypenamespace.exec( types[ t ] ) || [];
18890 type = origType = tmp[ 1 ];
18891 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
18892
18893 // There *must* be a type, no attaching namespace-only handlers
18894 if ( !type ) {
18895 continue;
18896 }
18897
18898 // If event changes its type, use the special event handlers for the changed type
18899 special = jQuery.event.special[ type ] || {};
18900
18901 // If selector defined, determine special event api type, otherwise given type
18902 type = ( selector ? special.delegateType : special.bindType ) || type;
18903
18904 // Update special based on newly reset type
18905 special = jQuery.event.special[ type ] || {};
18906
18907 // handleObj is passed to all event handlers
18908 handleObj = jQuery.extend( {
18909 type: type,
18910 origType: origType,
18911 data: data,
18912 handler: handler,
18913 guid: handler.guid,
18914 selector: selector,
18915 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
18916 namespace: namespaces.join( "." )
18917 }, handleObjIn );
18918
18919 // Init the event handler queue if we're the first
18920 if ( !( handlers = events[ type ] ) ) {
18921 handlers = events[ type ] = [];
18922 handlers.delegateCount = 0;
18923
18924 // Only use addEventListener if the special events handler returns false
18925 if ( !special.setup ||
18926 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
18927
18928 if ( elem.addEventListener ) {
18929 elem.addEventListener( type, eventHandle );
18930 }
18931 }
18932 }
18933
18934 if ( special.add ) {
18935 special.add.call( elem, handleObj );
18936
18937 if ( !handleObj.handler.guid ) {
18938 handleObj.handler.guid = handler.guid;
18939 }
18940 }
18941
18942 // Add to the element's handler list, delegates in front
18943 if ( selector ) {
18944 handlers.splice( handlers.delegateCount++, 0, handleObj );
18945 } else {
18946 handlers.push( handleObj );
18947 }
18948
18949 // Keep track of which events have ever been used, for event optimization
18950 jQuery.event.global[ type ] = true;
18951 }
18952
18953 },
18954
18955 // Detach an event or set of events from an element
18956 remove: function( elem, types, handler, selector, mappedTypes ) {
18957
18958 var j, origCount, tmp,
18959 events, t, handleObj,
18960 special, handlers, type, namespaces, origType,
18961 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
18962
18963 if ( !elemData || !( events = elemData.events ) ) {
18964 return;
18965 }
18966
18967 // Once for each type.namespace in types; type may be omitted
18968 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
18969 t = types.length;
18970 while ( t-- ) {
18971 tmp = rtypenamespace.exec( types[ t ] ) || [];
18972 type = origType = tmp[ 1 ];
18973 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
18974
18975 // Unbind all events (on this namespace, if provided) for the element
18976 if ( !type ) {
18977 for ( type in events ) {
18978 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
18979 }
18980 continue;
18981 }
18982
18983 special = jQuery.event.special[ type ] || {};
18984 type = ( selector ? special.delegateType : special.bindType ) || type;
18985 handlers = events[ type ] || [];
18986 tmp = tmp[ 2 ] &&
18987 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
18988
18989 // Remove matching events
18990 origCount = j = handlers.length;
18991 while ( j-- ) {
18992 handleObj = handlers[ j ];
18993
18994 if ( ( mappedTypes || origType === handleObj.origType ) &&
18995 ( !handler || handler.guid === handleObj.guid ) &&
18996 ( !tmp || tmp.test( handleObj.namespace ) ) &&
18997 ( !selector || selector === handleObj.selector ||
18998 selector === "**" && handleObj.selector ) ) {
18999 handlers.splice( j, 1 );
19000
19001 if ( handleObj.selector ) {
19002 handlers.delegateCount--;
19003 }
19004 if ( special.remove ) {
19005 special.remove.call( elem, handleObj );
19006 }
19007 }
19008 }
19009
19010 // Remove generic event handler if we removed something and no more handlers exist
19011 // (avoids potential for endless recursion during removal of special event handlers)
19012 if ( origCount && !handlers.length ) {
19013 if ( !special.teardown ||
19014 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19015
19016 jQuery.removeEvent( elem, type, elemData.handle );
19017 }
19018
19019 delete events[ type ];
19020 }
19021 }
19022
19023 // Remove data and the expando if it's no longer used
19024 if ( jQuery.isEmptyObject( events ) ) {
19025 dataPriv.remove( elem, "handle events" );
19026 }
19027 },
19028
19029 dispatch: function( nativeEvent ) {
19030
19031 // Make a writable jQuery.Event from the native event object
19032 var event = jQuery.event.fix( nativeEvent );
19033
19034 var i, j, ret, matched, handleObj, handlerQueue,
19035 args = new Array( arguments.length ),
19036 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19037 special = jQuery.event.special[ event.type ] || {};
19038
19039 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19040 args[ 0 ] = event;
19041
19042 for ( i = 1; i < arguments.length; i++ ) {
19043 args[ i ] = arguments[ i ];
19044 }
19045
19046 event.delegateTarget = this;
19047
19048 // Call the preDispatch hook for the mapped type, and let it bail if desired
19049 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19050 return;
19051 }
19052
19053 // Determine handlers
19054 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19055
19056 // Run delegates first; they may want to stop propagation beneath us
19057 i = 0;
19058 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19059 event.currentTarget = matched.elem;
19060
19061 j = 0;
19062 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19063 !event.isImmediatePropagationStopped() ) {
19064
19065 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19066 // a subset or equal to those in the bound event (both can have no namespace).
19067 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19068
19069 event.handleObj = handleObj;
19070 event.data = handleObj.data;
19071
19072 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19073 handleObj.handler ).apply( matched.elem, args );
19074
19075 if ( ret !== undefined ) {
19076 if ( ( event.result = ret ) === false ) {
19077 event.preventDefault();
19078 event.stopPropagation();
19079 }
19080 }
19081 }
19082 }
19083 }
19084
19085 // Call the postDispatch hook for the mapped type
19086 if ( special.postDispatch ) {
19087 special.postDispatch.call( this, event );
19088 }
19089
19090 return event.result;
19091 },
19092
19093 handlers: function( event, handlers ) {
19094 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19095 handlerQueue = [],
19096 delegateCount = handlers.delegateCount,
19097 cur = event.target;
19098
19099 // Find delegate handlers
19100 if ( delegateCount &&
19101
19102 // Support: IE <=9
19103 // Black-hole SVG <use> instance trees (trac-13180)
19104 cur.nodeType &&
19105
19106 // Support: Firefox <=42
19107 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19108 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19109 // Support: IE 11 only
19110 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19111 !( event.type === "click" && event.button >= 1 ) ) {
19112
19113 for ( ; cur !== this; cur = cur.parentNode || this ) {
19114
19115 // Don't check non-elements (#13208)
19116 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19117 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19118 matchedHandlers = [];
19119 matchedSelectors = {};
19120 for ( i = 0; i < delegateCount; i++ ) {
19121 handleObj = handlers[ i ];
19122
19123 // Don't conflict with Object.prototype properties (#13203)
19124 sel = handleObj.selector + " ";
19125
19126 if ( matchedSelectors[ sel ] === undefined ) {
19127 matchedSelectors[ sel ] = handleObj.needsContext ?
19128 jQuery( sel, this ).index( cur ) > -1 :
19129 jQuery.find( sel, this, null, [ cur ] ).length;
19130 }
19131 if ( matchedSelectors[ sel ] ) {
19132 matchedHandlers.push( handleObj );
19133 }
19134 }
19135 if ( matchedHandlers.length ) {
19136 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19137 }
19138 }
19139 }
19140 }
19141
19142 // Add the remaining (directly-bound) handlers
19143 cur = this;
19144 if ( delegateCount < handlers.length ) {
19145 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19146 }
19147
19148 return handlerQueue;
19149 },
19150
19151 addProp: function( name, hook ) {
19152 Object.defineProperty( jQuery.Event.prototype, name, {
19153 enumerable: true,
19154 configurable: true,
19155
19156 get: jQuery.isFunction( hook ) ?
19157 function() {
19158 if ( this.originalEvent ) {
19159 return hook( this.originalEvent );
19160 }
19161 } :
19162 function() {
19163 if ( this.originalEvent ) {
19164 return this.originalEvent[ name ];
19165 }
19166 },
19167
19168 set: function( value ) {
19169 Object.defineProperty( this, name, {
19170 enumerable: true,
19171 configurable: true,
19172 writable: true,
19173 value: value
19174 } );
19175 }
19176 } );
19177 },
19178
19179 fix: function( originalEvent ) {
19180 return originalEvent[ jQuery.expando ] ?
19181 originalEvent :
19182 new jQuery.Event( originalEvent );
19183 },
19184
19185 special: {
19186 load: {
19187
19188 // Prevent triggered image.load events from bubbling to window.load
19189 noBubble: true
19190 },
19191 focus: {
19192
19193 // Fire native event if possible so blur/focus sequence is correct
19194 trigger: function() {
19195 if ( this !== safeActiveElement() && this.focus ) {
19196 this.focus();
19197 return false;
19198 }
19199 },
19200 delegateType: "focusin"
19201 },
19202 blur: {
19203 trigger: function() {
19204 if ( this === safeActiveElement() && this.blur ) {
19205 this.blur();
19206 return false;
19207 }
19208 },
19209 delegateType: "focusout"
19210 },
19211 click: {
19212
19213 // For checkbox, fire native event so checked state will be right
19214 trigger: function() {
19215 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19216 this.click();
19217 return false;
19218 }
19219 },
19220
19221 // For cross-browser consistency, don't fire native .click() on links
19222 _default: function( event ) {
19223 return nodeName( event.target, "a" );
19224 }
19225 },
19226
19227 beforeunload: {
19228 postDispatch: function( event ) {
19229
19230 // Support: Firefox 20+
19231 // Firefox doesn't alert if the returnValue field is not set.
19232 if ( event.result !== undefined && event.originalEvent ) {
19233 event.originalEvent.returnValue = event.result;
19234 }
19235 }
19236 }
19237 }
19238};
19239
19240jQuery.removeEvent = function( elem, type, handle ) {
19241
19242 // This "if" is needed for plain objects
19243 if ( elem.removeEventListener ) {
19244 elem.removeEventListener( type, handle );
19245 }
19246};
19247
19248jQuery.Event = function( src, props ) {
19249
19250 // Allow instantiation without the 'new' keyword
19251 if ( !( this instanceof jQuery.Event ) ) {
19252 return new jQuery.Event( src, props );
19253 }
19254
19255 // Event object
19256 if ( src && src.type ) {
19257 this.originalEvent = src;
19258 this.type = src.type;
19259
19260 // Events bubbling up the document may have been marked as prevented
19261 // by a handler lower down the tree; reflect the correct value.
19262 this.isDefaultPrevented = src.defaultPrevented ||
19263 src.defaultPrevented === undefined &&
19264
19265 // Support: Android <=2.3 only
19266 src.returnValue === false ?
19267 returnTrue :
19268 returnFalse;
19269
19270 // Create target properties
19271 // Support: Safari <=6 - 7 only
19272 // Target should not be a text node (#504, #13143)
19273 this.target = ( src.target && src.target.nodeType === 3 ) ?
19274 src.target.parentNode :
19275 src.target;
19276
19277 this.currentTarget = src.currentTarget;
19278 this.relatedTarget = src.relatedTarget;
19279
19280 // Event type
19281 } else {
19282 this.type = src;
19283 }
19284
19285 // Put explicitly provided properties onto the event object
19286 if ( props ) {
19287 jQuery.extend( this, props );
19288 }
19289
19290 // Create a timestamp if incoming event doesn't have one
19291 this.timeStamp = src && src.timeStamp || jQuery.now();
19292
19293 // Mark it as fixed
19294 this[ jQuery.expando ] = true;
19295};
19296
19297// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19298// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19299jQuery.Event.prototype = {
19300 constructor: jQuery.Event,
19301 isDefaultPrevented: returnFalse,
19302 isPropagationStopped: returnFalse,
19303 isImmediatePropagationStopped: returnFalse,
19304 isSimulated: false,
19305
19306 preventDefault: function() {
19307 var e = this.originalEvent;
19308
19309 this.isDefaultPrevented = returnTrue;
19310
19311 if ( e && !this.isSimulated ) {
19312 e.preventDefault();
19313 }
19314 },
19315 stopPropagation: function() {
19316 var e = this.originalEvent;
19317
19318 this.isPropagationStopped = returnTrue;
19319
19320 if ( e && !this.isSimulated ) {
19321 e.stopPropagation();
19322 }
19323 },
19324 stopImmediatePropagation: function() {
19325 var e = this.originalEvent;
19326
19327 this.isImmediatePropagationStopped = returnTrue;
19328
19329 if ( e && !this.isSimulated ) {
19330 e.stopImmediatePropagation();
19331 }
19332
19333 this.stopPropagation();
19334 }
19335};
19336
19337// Includes all common event props including KeyEvent and MouseEvent specific props
19338jQuery.each( {
19339 altKey: true,
19340 bubbles: true,
19341 cancelable: true,
19342 changedTouches: true,
19343 ctrlKey: true,
19344 detail: true,
19345 eventPhase: true,
19346 metaKey: true,
19347 pageX: true,
19348 pageY: true,
19349 shiftKey: true,
19350 view: true,
19351 "char": true,
19352 charCode: true,
19353 key: true,
19354 keyCode: true,
19355 button: true,
19356 buttons: true,
19357 clientX: true,
19358 clientY: true,
19359 offsetX: true,
19360 offsetY: true,
19361 pointerId: true,
19362 pointerType: true,
19363 screenX: true,
19364 screenY: true,
19365 targetTouches: true,
19366 toElement: true,
19367 touches: true,
19368
19369 which: function( event ) {
19370 var button = event.button;
19371
19372 // Add which for key events
19373 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19374 return event.charCode != null ? event.charCode : event.keyCode;
19375 }
19376
19377 // Add which for click: 1 === left; 2 === middle; 3 === right
19378 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19379 if ( button & 1 ) {
19380 return 1;
19381 }
19382
19383 if ( button & 2 ) {
19384 return 3;
19385 }
19386
19387 if ( button & 4 ) {
19388 return 2;
19389 }
19390
19391 return 0;
19392 }
19393
19394 return event.which;
19395 }
19396}, jQuery.event.addProp );
19397
19398// Create mouseenter/leave events using mouseover/out and event-time checks
19399// so that event delegation works in jQuery.
19400// Do the same for pointerenter/pointerleave and pointerover/pointerout
19401//
19402// Support: Safari 7 only
19403// Safari sends mouseenter too often; see:
19404// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19405// for the description of the bug (it existed in older Chrome versions as well).
19406jQuery.each( {
19407 mouseenter: "mouseover",
19408 mouseleave: "mouseout",
19409 pointerenter: "pointerover",
19410 pointerleave: "pointerout"
19411}, function( orig, fix ) {
19412 jQuery.event.special[ orig ] = {
19413 delegateType: fix,
19414 bindType: fix,
19415
19416 handle: function( event ) {
19417 var ret,
19418 target = this,
19419 related = event.relatedTarget,
19420 handleObj = event.handleObj;
19421
19422 // For mouseenter/leave call the handler if related is outside the target.
19423 // NB: No relatedTarget if the mouse left/entered the browser window
19424 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19425 event.type = handleObj.origType;
19426 ret = handleObj.handler.apply( this, arguments );
19427 event.type = fix;
19428 }
19429 return ret;
19430 }
19431 };
19432} );
19433
19434jQuery.fn.extend( {
19435
19436 on: function( types, selector, data, fn ) {
19437 return on( this, types, selector, data, fn );
19438 },
19439 one: function( types, selector, data, fn ) {
19440 return on( this, types, selector, data, fn, 1 );
19441 },
19442 off: function( types, selector, fn ) {
19443 var handleObj, type;
19444 if ( types && types.preventDefault && types.handleObj ) {
19445
19446 // ( event ) dispatched jQuery.Event
19447 handleObj = types.handleObj;
19448 jQuery( types.delegateTarget ).off(
19449 handleObj.namespace ?
19450 handleObj.origType + "." + handleObj.namespace :
19451 handleObj.origType,
19452 handleObj.selector,
19453 handleObj.handler
19454 );
19455 return this;
19456 }
19457 if ( typeof types === "object" ) {
19458
19459 // ( types-object [, selector] )
19460 for ( type in types ) {
19461 this.off( type, selector, types[ type ] );
19462 }
19463 return this;
19464 }
19465 if ( selector === false || typeof selector === "function" ) {
19466
19467 // ( types [, fn] )
19468 fn = selector;
19469 selector = undefined;
19470 }
19471 if ( fn === false ) {
19472 fn = returnFalse;
19473 }
19474 return this.each( function() {
19475 jQuery.event.remove( this, types, fn, selector );
19476 } );
19477 }
19478} );
19479
19480
19481var
19482
19483 /* eslint-disable max-len */
19484
19485 // See https://github.com/eslint/eslint/issues/3229
19486 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19487
19488 /* eslint-enable */
19489
19490 // Support: IE <=10 - 11, Edge 12 - 13
19491 // In IE/Edge using regex groups here causes severe slowdowns.
19492 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19493 rnoInnerhtml = /<script|<style|<link/i,
19494
19495 // checked="checked" or checked
19496 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19497 rscriptTypeMasked = /^true\/(.*)/,
19498 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19499
19500// Prefer a tbody over its parent table for containing new rows
19501function manipulationTarget( elem, content ) {
19502 if ( nodeName( elem, "table" ) &&
19503 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19504
19505 return jQuery( ">tbody", elem )[ 0 ] || elem;
19506 }
19507
19508 return elem;
19509}
19510
19511// Replace/restore the type attribute of script elements for safe DOM manipulation
19512function disableScript( elem ) {
19513 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19514 return elem;
19515}
19516function restoreScript( elem ) {
19517 var match = rscriptTypeMasked.exec( elem.type );
19518
19519 if ( match ) {
19520 elem.type = match[ 1 ];
19521 } else {
19522 elem.removeAttribute( "type" );
19523 }
19524
19525 return elem;
19526}
19527
19528function cloneCopyEvent( src, dest ) {
19529 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19530
19531 if ( dest.nodeType !== 1 ) {
19532 return;
19533 }
19534
19535 // 1. Copy private data: events, handlers, etc.
19536 if ( dataPriv.hasData( src ) ) {
19537 pdataOld = dataPriv.access( src );
19538 pdataCur = dataPriv.set( dest, pdataOld );
19539 events = pdataOld.events;
19540
19541 if ( events ) {
19542 delete pdataCur.handle;
19543 pdataCur.events = {};
19544
19545 for ( type in events ) {
19546 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19547 jQuery.event.add( dest, type, events[ type ][ i ] );
19548 }
19549 }
19550 }
19551 }
19552
19553 // 2. Copy user data
19554 if ( dataUser.hasData( src ) ) {
19555 udataOld = dataUser.access( src );
19556 udataCur = jQuery.extend( {}, udataOld );
19557
19558 dataUser.set( dest, udataCur );
19559 }
19560}
19561
19562// Fix IE bugs, see support tests
19563function fixInput( src, dest ) {
19564 var nodeName = dest.nodeName.toLowerCase();
19565
19566 // Fails to persist the checked state of a cloned checkbox or radio button.
19567 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19568 dest.checked = src.checked;
19569
19570 // Fails to return the selected option to the default selected state when cloning options
19571 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19572 dest.defaultValue = src.defaultValue;
19573 }
19574}
19575
19576function domManip( collection, args, callback, ignored ) {
19577
19578 // Flatten any nested arrays
19579 args = concat.apply( [], args );
19580
19581 var fragment, first, scripts, hasScripts, node, doc,
19582 i = 0,
19583 l = collection.length,
19584 iNoClone = l - 1,
19585 value = args[ 0 ],
19586 isFunction = jQuery.isFunction( value );
19587
19588 // We can't cloneNode fragments that contain checked, in WebKit
19589 if ( isFunction ||
19590 ( l > 1 && typeof value === "string" &&
19591 !support.checkClone && rchecked.test( value ) ) ) {
19592 return collection.each( function( index ) {
19593 var self = collection.eq( index );
19594 if ( isFunction ) {
19595 args[ 0 ] = value.call( this, index, self.html() );
19596 }
19597 domManip( self, args, callback, ignored );
19598 } );
19599 }
19600
19601 if ( l ) {
19602 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19603 first = fragment.firstChild;
19604
19605 if ( fragment.childNodes.length === 1 ) {
19606 fragment = first;
19607 }
19608
19609 // Require either new content or an interest in ignored elements to invoke the callback
19610 if ( first || ignored ) {
19611 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19612 hasScripts = scripts.length;
19613
19614 // Use the original fragment for the last item
19615 // instead of the first because it can end up
19616 // being emptied incorrectly in certain situations (#8070).
19617 for ( ; i < l; i++ ) {
19618 node = fragment;
19619
19620 if ( i !== iNoClone ) {
19621 node = jQuery.clone( node, true, true );
19622
19623 // Keep references to cloned scripts for later restoration
19624 if ( hasScripts ) {
19625
19626 // Support: Android <=4.0 only, PhantomJS 1 only
19627 // push.apply(_, arraylike) throws on ancient WebKit
19628 jQuery.merge( scripts, getAll( node, "script" ) );
19629 }
19630 }
19631
19632 callback.call( collection[ i ], node, i );
19633 }
19634
19635 if ( hasScripts ) {
19636 doc = scripts[ scripts.length - 1 ].ownerDocument;
19637
19638 // Reenable scripts
19639 jQuery.map( scripts, restoreScript );
19640
19641 // Evaluate executable scripts on first document insertion
19642 for ( i = 0; i < hasScripts; i++ ) {
19643 node = scripts[ i ];
19644 if ( rscriptType.test( node.type || "" ) &&
19645 !dataPriv.access( node, "globalEval" ) &&
19646 jQuery.contains( doc, node ) ) {
19647
19648 if ( node.src ) {
19649
19650 // Optional AJAX dependency, but won't run scripts if not present
19651 if ( jQuery._evalUrl ) {
19652 jQuery._evalUrl( node.src );
19653 }
19654 } else {
19655 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19656 }
19657 }
19658 }
19659 }
19660 }
19661 }
19662
19663 return collection;
19664}
19665
19666function remove( elem, selector, keepData ) {
19667 var node,
19668 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19669 i = 0;
19670
19671 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19672 if ( !keepData && node.nodeType === 1 ) {
19673 jQuery.cleanData( getAll( node ) );
19674 }
19675
19676 if ( node.parentNode ) {
19677 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19678 setGlobalEval( getAll( node, "script" ) );
19679 }
19680 node.parentNode.removeChild( node );
19681 }
19682 }
19683
19684 return elem;
19685}
19686
19687jQuery.extend( {
19688 htmlPrefilter: function( html ) {
19689 return html.replace( rxhtmlTag, "<$1></$2>" );
19690 },
19691
19692 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19693 var i, l, srcElements, destElements,
19694 clone = elem.cloneNode( true ),
19695 inPage = jQuery.contains( elem.ownerDocument, elem );
19696
19697 // Fix IE cloning issues
19698 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19699 !jQuery.isXMLDoc( elem ) ) {
19700
19701 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19702 destElements = getAll( clone );
19703 srcElements = getAll( elem );
19704
19705 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19706 fixInput( srcElements[ i ], destElements[ i ] );
19707 }
19708 }
19709
19710 // Copy the events from the original to the clone
19711 if ( dataAndEvents ) {
19712 if ( deepDataAndEvents ) {
19713 srcElements = srcElements || getAll( elem );
19714 destElements = destElements || getAll( clone );
19715
19716 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19717 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19718 }
19719 } else {
19720 cloneCopyEvent( elem, clone );
19721 }
19722 }
19723
19724 // Preserve script evaluation history
19725 destElements = getAll( clone, "script" );
19726 if ( destElements.length > 0 ) {
19727 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19728 }
19729
19730 // Return the cloned set
19731 return clone;
19732 },
19733
19734 cleanData: function( elems ) {
19735 var data, elem, type,
19736 special = jQuery.event.special,
19737 i = 0;
19738
19739 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19740 if ( acceptData( elem ) ) {
19741 if ( ( data = elem[ dataPriv.expando ] ) ) {
19742 if ( data.events ) {
19743 for ( type in data.events ) {
19744 if ( special[ type ] ) {
19745 jQuery.event.remove( elem, type );
19746
19747 // This is a shortcut to avoid jQuery.event.remove's overhead
19748 } else {
19749 jQuery.removeEvent( elem, type, data.handle );
19750 }
19751 }
19752 }
19753
19754 // Support: Chrome <=35 - 45+
19755 // Assign undefined instead of using delete, see Data#remove
19756 elem[ dataPriv.expando ] = undefined;
19757 }
19758 if ( elem[ dataUser.expando ] ) {
19759
19760 // Support: Chrome <=35 - 45+
19761 // Assign undefined instead of using delete, see Data#remove
19762 elem[ dataUser.expando ] = undefined;
19763 }
19764 }
19765 }
19766 }
19767} );
19768
19769jQuery.fn.extend( {
19770 detach: function( selector ) {
19771 return remove( this, selector, true );
19772 },
19773
19774 remove: function( selector ) {
19775 return remove( this, selector );
19776 },
19777
19778 text: function( value ) {
19779 return access( this, function( value ) {
19780 return value === undefined ?
19781 jQuery.text( this ) :
19782 this.empty().each( function() {
19783 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19784 this.textContent = value;
19785 }
19786 } );
19787 }, null, value, arguments.length );
19788 },
19789
19790 append: function() {
19791 return domManip( this, arguments, function( elem ) {
19792 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19793 var target = manipulationTarget( this, elem );
19794 target.appendChild( elem );
19795 }
19796 } );
19797 },
19798
19799 prepend: function() {
19800 return domManip( this, arguments, function( elem ) {
19801 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19802 var target = manipulationTarget( this, elem );
19803 target.insertBefore( elem, target.firstChild );
19804 }
19805 } );
19806 },
19807
19808 before: function() {
19809 return domManip( this, arguments, function( elem ) {
19810 if ( this.parentNode ) {
19811 this.parentNode.insertBefore( elem, this );
19812 }
19813 } );
19814 },
19815
19816 after: function() {
19817 return domManip( this, arguments, function( elem ) {
19818 if ( this.parentNode ) {
19819 this.parentNode.insertBefore( elem, this.nextSibling );
19820 }
19821 } );
19822 },
19823
19824 empty: function() {
19825 var elem,
19826 i = 0;
19827
19828 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19829 if ( elem.nodeType === 1 ) {
19830
19831 // Prevent memory leaks
19832 jQuery.cleanData( getAll( elem, false ) );
19833
19834 // Remove any remaining nodes
19835 elem.textContent = "";
19836 }
19837 }
19838
19839 return this;
19840 },
19841
19842 clone: function( dataAndEvents, deepDataAndEvents ) {
19843 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19844 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19845
19846 return this.map( function() {
19847 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19848 } );
19849 },
19850
19851 html: function( value ) {
19852 return access( this, function( value ) {
19853 var elem = this[ 0 ] || {},
19854 i = 0,
19855 l = this.length;
19856
19857 if ( value === undefined && elem.nodeType === 1 ) {
19858 return elem.innerHTML;
19859 }
19860
19861 // See if we can take a shortcut and just use innerHTML
19862 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
19863 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
19864
19865 value = jQuery.htmlPrefilter( value );
19866
19867 try {
19868 for ( ; i < l; i++ ) {
19869 elem = this[ i ] || {};
19870
19871 // Remove element nodes and prevent memory leaks
19872 if ( elem.nodeType === 1 ) {
19873 jQuery.cleanData( getAll( elem, false ) );
19874 elem.innerHTML = value;
19875 }
19876 }
19877
19878 elem = 0;
19879
19880 // If using innerHTML throws an exception, use the fallback method
19881 } catch ( e ) {}
19882 }
19883
19884 if ( elem ) {
19885 this.empty().append( value );
19886 }
19887 }, null, value, arguments.length );
19888 },
19889
19890 replaceWith: function() {
19891 var ignored = [];
19892
19893 // Make the changes, replacing each non-ignored context element with the new content
19894 return domManip( this, arguments, function( elem ) {
19895 var parent = this.parentNode;
19896
19897 if ( jQuery.inArray( this, ignored ) < 0 ) {
19898 jQuery.cleanData( getAll( this ) );
19899 if ( parent ) {
19900 parent.replaceChild( elem, this );
19901 }
19902 }
19903
19904 // Force callback invocation
19905 }, ignored );
19906 }
19907} );
19908
19909jQuery.each( {
19910 appendTo: "append",
19911 prependTo: "prepend",
19912 insertBefore: "before",
19913 insertAfter: "after",
19914 replaceAll: "replaceWith"
19915}, function( name, original ) {
19916 jQuery.fn[ name ] = function( selector ) {
19917 var elems,
19918 ret = [],
19919 insert = jQuery( selector ),
19920 last = insert.length - 1,
19921 i = 0;
19922
19923 for ( ; i <= last; i++ ) {
19924 elems = i === last ? this : this.clone( true );
19925 jQuery( insert[ i ] )[ original ]( elems );
19926
19927 // Support: Android <=4.0 only, PhantomJS 1 only
19928 // .get() because push.apply(_, arraylike) throws on ancient WebKit
19929 push.apply( ret, elems.get() );
19930 }
19931
19932 return this.pushStack( ret );
19933 };
19934} );
19935var rmargin = ( /^margin/ );
19936
19937var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
19938
19939var getStyles = function( elem ) {
19940
19941 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
19942 // IE throws on elements created in popups
19943 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
19944 var view = elem.ownerDocument.defaultView;
19945
19946 if ( !view || !view.opener ) {
19947 view = window;
19948 }
19949
19950 return view.getComputedStyle( elem );
19951 };
19952
19953
19954
19955( function() {
19956
19957 // Executing both pixelPosition & boxSizingReliable tests require only one layout
19958 // so they're executed at the same time to save the second computation.
19959 function computeStyleTests() {
19960
19961 // This is a singleton, we need to execute it only once
19962 if ( !div ) {
19963 return;
19964 }
19965
19966 div.style.cssText =
19967 "box-sizing:border-box;" +
19968 "position:relative;display:block;" +
19969 "margin:auto;border:1px;padding:1px;" +
19970 "top:1%;width:50%";
19971 div.innerHTML = "";
19972 documentElement.appendChild( container );
19973
19974 var divStyle = window.getComputedStyle( div );
19975 pixelPositionVal = divStyle.top !== "1%";
19976
19977 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
19978 reliableMarginLeftVal = divStyle.marginLeft === "2px";
19979 boxSizingReliableVal = divStyle.width === "4px";
19980
19981 // Support: Android 4.0 - 4.3 only
19982 // Some styles come back with percentage values, even though they shouldn't
19983 div.style.marginRight = "50%";
19984 pixelMarginRightVal = divStyle.marginRight === "4px";
19985
19986 documentElement.removeChild( container );
19987
19988 // Nullify the div so it wouldn't be stored in the memory and
19989 // it will also be a sign that checks already performed
19990 div = null;
19991 }
19992
19993 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
19994 container = document.createElement( "div" ),
19995 div = document.createElement( "div" );
19996
19997 // Finish early in limited (non-browser) environments
19998 if ( !div.style ) {
19999 return;
20000 }
20001
20002 // Support: IE <=9 - 11 only
20003 // Style of cloned element affects source element cloned (#8908)
20004 div.style.backgroundClip = "content-box";
20005 div.cloneNode( true ).style.backgroundClip = "";
20006 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20007
20008 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20009 "padding:0;margin-top:1px;position:absolute";
20010 container.appendChild( div );
20011
20012 jQuery.extend( support, {
20013 pixelPosition: function() {
20014 computeStyleTests();
20015 return pixelPositionVal;
20016 },
20017 boxSizingReliable: function() {
20018 computeStyleTests();
20019 return boxSizingReliableVal;
20020 },
20021 pixelMarginRight: function() {
20022 computeStyleTests();
20023 return pixelMarginRightVal;
20024 },
20025 reliableMarginLeft: function() {
20026 computeStyleTests();
20027 return reliableMarginLeftVal;
20028 }
20029 } );
20030} )();
20031
20032
20033function curCSS( elem, name, computed ) {
20034 var width, minWidth, maxWidth, ret,
20035
20036 // Support: Firefox 51+
20037 // Retrieving style before computed somehow
20038 // fixes an issue with getting wrong values
20039 // on detached elements
20040 style = elem.style;
20041
20042 computed = computed || getStyles( elem );
20043
20044 // getPropertyValue is needed for:
20045 // .css('filter') (IE 9 only, #12537)
20046 // .css('--customProperty) (#3144)
20047 if ( computed ) {
20048 ret = computed.getPropertyValue( name ) || computed[ name ];
20049
20050 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20051 ret = jQuery.style( elem, name );
20052 }
20053
20054 // A tribute to the "awesome hack by Dean Edwards"
20055 // Android Browser returns percentage for some values,
20056 // but width seems to be reliably pixels.
20057 // This is against the CSSOM draft spec:
20058 // https://drafts.csswg.org/cssom/#resolved-values
20059 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20060
20061 // Remember the original values
20062 width = style.width;
20063 minWidth = style.minWidth;
20064 maxWidth = style.maxWidth;
20065
20066 // Put in the new values to get a computed value out
20067 style.minWidth = style.maxWidth = style.width = ret;
20068 ret = computed.width;
20069
20070 // Revert the changed values
20071 style.width = width;
20072 style.minWidth = minWidth;
20073 style.maxWidth = maxWidth;
20074 }
20075 }
20076
20077 return ret !== undefined ?
20078
20079 // Support: IE <=9 - 11 only
20080 // IE returns zIndex value as an integer.
20081 ret + "" :
20082 ret;
20083}
20084
20085
20086function addGetHookIf( conditionFn, hookFn ) {
20087
20088 // Define the hook, we'll check on the first run if it's really needed.
20089 return {
20090 get: function() {
20091 if ( conditionFn() ) {
20092
20093 // Hook not needed (or it's not possible to use it due
20094 // to missing dependency), remove it.
20095 delete this.get;
20096 return;
20097 }
20098
20099 // Hook needed; redefine it so that the support test is not executed again.
20100 return ( this.get = hookFn ).apply( this, arguments );
20101 }
20102 };
20103}
20104
20105
20106var
20107
20108 // Swappable if display is none or starts with table
20109 // except "table", "table-cell", or "table-caption"
20110 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20111 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20112 rcustomProp = /^--/,
20113 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20114 cssNormalTransform = {
20115 letterSpacing: "0",
20116 fontWeight: "400"
20117 },
20118
20119 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20120 emptyStyle = document.createElement( "div" ).style;
20121
20122// Return a css property mapped to a potentially vendor prefixed property
20123function vendorPropName( name ) {
20124
20125 // Shortcut for names that are not vendor prefixed
20126 if ( name in emptyStyle ) {
20127 return name;
20128 }
20129
20130 // Check for vendor prefixed names
20131 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20132 i = cssPrefixes.length;
20133
20134 while ( i-- ) {
20135 name = cssPrefixes[ i ] + capName;
20136 if ( name in emptyStyle ) {
20137 return name;
20138 }
20139 }
20140}
20141
20142// Return a property mapped along what jQuery.cssProps suggests or to
20143// a vendor prefixed property.
20144function finalPropName( name ) {
20145 var ret = jQuery.cssProps[ name ];
20146 if ( !ret ) {
20147 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20148 }
20149 return ret;
20150}
3af2954a 20151
26dd39fd 20152function setPositiveNumber( elem, value, subtract ) {
3af2954a 20153
26dd39fd
IC
20154 // Any relative (+/-) values have already been
20155 // normalized at this point
20156 var matches = rcssNum.exec( value );
20157 return matches ?
3af2954a 20158
26dd39fd
IC
20159 // Guard against undefined "subtract", e.g., when used as in cssHooks
20160 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20161 value;
20162}
3af2954a 20163
26dd39fd
IC
20164function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20165 var i,
20166 val = 0;
3af2954a 20167
26dd39fd
IC
20168 // If we already have the right measurement, avoid augmentation
20169 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20170 i = 4;
3af2954a 20171
26dd39fd
IC
20172 // Otherwise initialize for horizontal or vertical properties
20173 } else {
20174 i = name === "width" ? 1 : 0;
20175 }
1102f201 20176
26dd39fd 20177 for ( ; i < 4; i += 2 ) {
1102f201 20178
26dd39fd
IC
20179 // Both box models exclude margin, so add it if we want it
20180 if ( extra === "margin" ) {
20181 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20182 }
3af2954a 20183
26dd39fd 20184 if ( isBorderBox ) {
3af2954a 20185
26dd39fd
IC
20186 // border-box includes padding, so remove it if we want content
20187 if ( extra === "content" ) {
20188 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20189 }
3af2954a 20190
26dd39fd
IC
20191 // At this point, extra isn't border nor margin, so remove border
20192 if ( extra !== "margin" ) {
20193 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20194 }
20195 } else {
3af2954a 20196
26dd39fd
IC
20197 // At this point, extra isn't content, so add padding
20198 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
3af2954a 20199
26dd39fd
IC
20200 // At this point, extra isn't content nor padding, so add border
20201 if ( extra !== "padding" ) {
20202 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20203 }
20204 }
20205 }
3af2954a 20206
26dd39fd
IC
20207 return val;
20208}
3af2954a 20209
26dd39fd 20210function getWidthOrHeight( elem, name, extra ) {
3af2954a 20211
26dd39fd
IC
20212 // Start with computed style
20213 var valueIsBorderBox,
20214 styles = getStyles( elem ),
20215 val = curCSS( elem, name, styles ),
20216 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20217
20218 // Computed unit is not pixels. Stop here and return.
20219 if ( rnumnonpx.test( val ) ) {
20220 return val;
20221 }
20222
20223 // Check for style in case a browser which returns unreliable values
20224 // for getComputedStyle silently falls back to the reliable elem.style
20225 valueIsBorderBox = isBorderBox &&
20226 ( support.boxSizingReliable() || val === elem.style[ name ] );
20227
20228 // Fall back to offsetWidth/Height when value is "auto"
20229 // This happens for inline elements with no explicit setting (gh-3571)
20230 if ( val === "auto" ) {
20231 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20232 }
20233
20234 // Normalize "", auto, and prepare for extra
20235 val = parseFloat( val ) || 0;
20236
20237 // Use the active box-sizing model to add/subtract irrelevant styles
20238 return ( val +
20239 augmentWidthOrHeight(
20240 elem,
20241 name,
20242 extra || ( isBorderBox ? "border" : "content" ),
20243 valueIsBorderBox,
20244 styles
20245 )
20246 ) + "px";
20247}
20248
20249jQuery.extend( {
20250
20251 // Add in style property hooks for overriding the default
20252 // behavior of getting and setting a style property
20253 cssHooks: {
20254 opacity: {
20255 get: function( elem, computed ) {
20256 if ( computed ) {
20257
20258 // We should always get a number back from opacity
20259 var ret = curCSS( elem, "opacity" );
20260 return ret === "" ? "1" : ret;
20261 }
20262 }
20263 }
20264 },
20265
20266 // Don't automatically add "px" to these possibly-unitless properties
20267 cssNumber: {
20268 "animationIterationCount": true,
20269 "columnCount": true,
20270 "fillOpacity": true,
20271 "flexGrow": true,
20272 "flexShrink": true,
20273 "fontWeight": true,
20274 "lineHeight": true,
20275 "opacity": true,
20276 "order": true,
20277 "orphans": true,
20278 "widows": true,
20279 "zIndex": true,
20280 "zoom": true
20281 },
20282
20283 // Add in properties whose names you wish to fix before
20284 // setting or getting the value
20285 cssProps: {
20286 "float": "cssFloat"
20287 },
20288
20289 // Get and set the style property on a DOM Node
20290 style: function( elem, name, value, extra ) {
20291
20292 // Don't set styles on text and comment nodes
20293 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20294 return;
20295 }
20296
20297 // Make sure that we're working with the right name
20298 var ret, type, hooks,
20299 origName = jQuery.camelCase( name ),
20300 isCustomProp = rcustomProp.test( name ),
20301 style = elem.style;
20302
20303 // Make sure that we're working with the right name. We don't
20304 // want to query the value if it is a CSS custom property
20305 // since they are user-defined.
20306 if ( !isCustomProp ) {
20307 name = finalPropName( origName );
20308 }
20309
20310 // Gets hook for the prefixed version, then unprefixed version
20311 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20312
20313 // Check if we're setting a value
20314 if ( value !== undefined ) {
20315 type = typeof value;
20316
20317 // Convert "+=" or "-=" to relative numbers (#7345)
20318 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20319 value = adjustCSS( elem, name, ret );
20320
20321 // Fixes bug #9237
20322 type = "number";
20323 }
3af2954a 20324
26dd39fd
IC
20325 // Make sure that null and NaN values aren't set (#7116)
20326 if ( value == null || value !== value ) {
20327 return;
20328 }
3af2954a 20329
26dd39fd
IC
20330 // If a number was passed in, add the unit (except for certain CSS properties)
20331 if ( type === "number" ) {
20332 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20333 }
3af2954a 20334
26dd39fd
IC
20335 // background-* props affect original clone's values
20336 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20337 style[ name ] = "inherit";
20338 }
3af2954a 20339
26dd39fd
IC
20340 // If a hook was provided, use that value, otherwise just set the specified value
20341 if ( !hooks || !( "set" in hooks ) ||
20342 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
3af2954a 20343
26dd39fd
IC
20344 if ( isCustomProp ) {
20345 style.setProperty( name, value );
20346 } else {
20347 style[ name ] = value;
20348 }
20349 }
3af2954a 20350
26dd39fd 20351 } else {
3af2954a 20352
26dd39fd
IC
20353 // If a hook was provided get the non-computed value from there
20354 if ( hooks && "get" in hooks &&
20355 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
3af2954a 20356
26dd39fd
IC
20357 return ret;
20358 }
3af2954a 20359
26dd39fd
IC
20360 // Otherwise just get the value from the style object
20361 return style[ name ];
20362 }
20363 },
20364
20365 css: function( elem, name, extra, styles ) {
20366 var val, num, hooks,
20367 origName = jQuery.camelCase( name ),
20368 isCustomProp = rcustomProp.test( name );
20369
20370 // Make sure that we're working with the right name. We don't
20371 // want to modify the value if it is a CSS custom property
20372 // since they are user-defined.
20373 if ( !isCustomProp ) {
20374 name = finalPropName( origName );
20375 }
3af2954a 20376
26dd39fd
IC
20377 // Try prefixed name followed by the unprefixed name
20378 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
e00964cc 20379
26dd39fd
IC
20380 // If a hook was provided get the computed value from there
20381 if ( hooks && "get" in hooks ) {
20382 val = hooks.get( elem, true, extra );
20383 }
3af2954a 20384
26dd39fd
IC
20385 // Otherwise, if a way to get the computed value exists, use that
20386 if ( val === undefined ) {
20387 val = curCSS( elem, name, styles );
20388 }
8b095871 20389
26dd39fd
IC
20390 // Convert "normal" to computed value
20391 if ( val === "normal" && name in cssNormalTransform ) {
20392 val = cssNormalTransform[ name ];
20393 }
563e401a 20394
26dd39fd
IC
20395 // Make numeric if forced or a qualifier was provided and val looks numeric
20396 if ( extra === "" || extra ) {
20397 num = parseFloat( val );
20398 return extra === true || isFinite( num ) ? num || 0 : val;
20399 }
8b095871 20400
26dd39fd
IC
20401 return val;
20402 }
20403} );
20404
20405jQuery.each( [ "height", "width" ], function( i, name ) {
20406 jQuery.cssHooks[ name ] = {
20407 get: function( elem, computed, extra ) {
20408 if ( computed ) {
20409
20410 // Certain elements can have dimension info if we invisibly show them
20411 // but it must have a current display style that would benefit
20412 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20413
20414 // Support: Safari 8+
20415 // Table columns in Safari have non-zero offsetWidth & zero
20416 // getBoundingClientRect().width unless display is changed.
20417 // Support: IE <=11 only
20418 // Running getBoundingClientRect on a disconnected node
20419 // in IE throws an error.
20420 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20421 swap( elem, cssShow, function() {
20422 return getWidthOrHeight( elem, name, extra );
20423 } ) :
20424 getWidthOrHeight( elem, name, extra );
20425 }
20426 },
20427
20428 set: function( elem, value, extra ) {
20429 var matches,
20430 styles = extra && getStyles( elem ),
20431 subtract = extra && augmentWidthOrHeight(
20432 elem,
20433 name,
20434 extra,
20435 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20436 styles
20437 );
20438
20439 // Convert to pixels if value adjustment is needed
20440 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20441 ( matches[ 3 ] || "px" ) !== "px" ) {
20442
20443 elem.style[ name ] = value;
20444 value = jQuery.css( elem, name );
20445 }
8b095871 20446
26dd39fd
IC
20447 return setPositiveNumber( elem, value, subtract );
20448 }
20449 };
20450} );
20451
20452jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20453 function( elem, computed ) {
20454 if ( computed ) {
20455 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20456 elem.getBoundingClientRect().left -
20457 swap( elem, { marginLeft: 0 }, function() {
20458 return elem.getBoundingClientRect().left;
20459 } )
20460 ) + "px";
20461 }
20462 }
20463);
20464
20465// These hooks are used by animate to expand properties
20466jQuery.each( {
20467 margin: "",
20468 padding: "",
20469 border: "Width"
20470}, function( prefix, suffix ) {
20471 jQuery.cssHooks[ prefix + suffix ] = {
20472 expand: function( value ) {
20473 var i = 0,
20474 expanded = {},
20475
20476 // Assumes a single number if not a string
20477 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20478
20479 for ( ; i < 4; i++ ) {
20480 expanded[ prefix + cssExpand[ i ] + suffix ] =
20481 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20482 }
8b095871 20483
26dd39fd
IC
20484 return expanded;
20485 }
20486 };
8b095871 20487
26dd39fd
IC
20488 if ( !rmargin.test( prefix ) ) {
20489 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20490 }
20491} );
8b095871 20492
26dd39fd
IC
20493jQuery.fn.extend( {
20494 css: function( name, value ) {
20495 return access( this, function( elem, name, value ) {
20496 var styles, len,
20497 map = {},
20498 i = 0;
8b095871 20499
26dd39fd
IC
20500 if ( Array.isArray( name ) ) {
20501 styles = getStyles( elem );
20502 len = name.length;
8b095871 20503
26dd39fd
IC
20504 for ( ; i < len; i++ ) {
20505 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20506 }
563e401a 20507
26dd39fd
IC
20508 return map;
20509 }
563e401a 20510
26dd39fd
IC
20511 return value !== undefined ?
20512 jQuery.style( elem, name, value ) :
20513 jQuery.css( elem, name );
20514 }, name, value, arguments.length > 1 );
20515 }
20516} );
20517
20518
20519function Tween( elem, options, prop, end, easing ) {
20520 return new Tween.prototype.init( elem, options, prop, end, easing );
20521}
20522jQuery.Tween = Tween;
20523
20524Tween.prototype = {
20525 constructor: Tween,
20526 init: function( elem, options, prop, end, easing, unit ) {
20527 this.elem = elem;
20528 this.prop = prop;
20529 this.easing = easing || jQuery.easing._default;
20530 this.options = options;
20531 this.start = this.now = this.cur();
20532 this.end = end;
20533 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20534 },
20535 cur: function() {
20536 var hooks = Tween.propHooks[ this.prop ];
20537
20538 return hooks && hooks.get ?
20539 hooks.get( this ) :
20540 Tween.propHooks._default.get( this );
20541 },
20542 run: function( percent ) {
20543 var eased,
20544 hooks = Tween.propHooks[ this.prop ];
20545
20546 if ( this.options.duration ) {
20547 this.pos = eased = jQuery.easing[ this.easing ](
20548 percent, this.options.duration * percent, 0, 1, this.options.duration
20549 );
20550 } else {
20551 this.pos = eased = percent;
20552 }
20553 this.now = ( this.end - this.start ) * eased + this.start;
8b095871 20554
26dd39fd
IC
20555 if ( this.options.step ) {
20556 this.options.step.call( this.elem, this.now, this );
20557 }
563e401a 20558
26dd39fd
IC
20559 if ( hooks && hooks.set ) {
20560 hooks.set( this );
20561 } else {
20562 Tween.propHooks._default.set( this );
20563 }
20564 return this;
20565 }
20566};
563e401a 20567
26dd39fd 20568Tween.prototype.init.prototype = Tween.prototype;
8b095871 20569
26dd39fd
IC
20570Tween.propHooks = {
20571 _default: {
20572 get: function( tween ) {
20573 var result;
8b095871 20574
26dd39fd
IC
20575 // Use a property on the element directly when it is not a DOM element,
20576 // or when there is no matching style property that exists.
20577 if ( tween.elem.nodeType !== 1 ||
20578 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20579 return tween.elem[ tween.prop ];
20580 }
8b095871 20581
26dd39fd
IC
20582 // Passing an empty string as a 3rd parameter to .css will automatically
20583 // attempt a parseFloat and fallback to a string if the parse fails.
20584 // Simple values such as "10px" are parsed to Float;
20585 // complex values such as "rotate(1rad)" are returned as-is.
20586 result = jQuery.css( tween.elem, tween.prop, "" );
20587
20588 // Empty strings, null, undefined and "auto" are converted to 0.
20589 return !result || result === "auto" ? 0 : result;
20590 },
20591 set: function( tween ) {
20592
20593 // Use step hook for back compat.
20594 // Use cssHook if its there.
20595 // Use .style if available and use plain properties where available.
20596 if ( jQuery.fx.step[ tween.prop ] ) {
20597 jQuery.fx.step[ tween.prop ]( tween );
20598 } else if ( tween.elem.nodeType === 1 &&
20599 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20600 jQuery.cssHooks[ tween.prop ] ) ) {
20601 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20602 } else {
20603 tween.elem[ tween.prop ] = tween.now;
20604 }
20605 }
20606 }
20607};
8b095871 20608
26dd39fd
IC
20609// Support: IE <=9 only
20610// Panic based approach to setting things on disconnected nodes
20611Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20612 set: function( tween ) {
20613 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20614 tween.elem[ tween.prop ] = tween.now;
20615 }
20616 }
20617};
8b095871 20618
26dd39fd
IC
20619jQuery.easing = {
20620 linear: function( p ) {
20621 return p;
20622 },
20623 swing: function( p ) {
20624 return 0.5 - Math.cos( p * Math.PI ) / 2;
20625 },
20626 _default: "swing"
20627};
563e401a 20628
26dd39fd 20629jQuery.fx = Tween.prototype.init;
8b095871 20630
26dd39fd
IC
20631// Back compat <1.8 extension point
20632jQuery.fx.step = {};
563e401a 20633
563e401a 20634
563e401a 20635
563e401a 20636
26dd39fd
IC
20637var
20638 fxNow, inProgress,
20639 rfxtypes = /^(?:toggle|show|hide)$/,
20640 rrun = /queueHooks$/;
563e401a 20641
26dd39fd
IC
20642function schedule() {
20643 if ( inProgress ) {
20644 if ( document.hidden === false && window.requestAnimationFrame ) {
20645 window.requestAnimationFrame( schedule );
20646 } else {
20647 window.setTimeout( schedule, jQuery.fx.interval );
20648 }
563e401a 20649
26dd39fd
IC
20650 jQuery.fx.tick();
20651 }
20652}
563e401a 20653
26dd39fd
IC
20654// Animations created synchronously will run synchronously
20655function createFxNow() {
20656 window.setTimeout( function() {
20657 fxNow = undefined;
20658 } );
20659 return ( fxNow = jQuery.now() );
20660}
563e401a 20661
26dd39fd
IC
20662// Generate parameters to create a standard animation
20663function genFx( type, includeWidth ) {
20664 var which,
20665 i = 0,
20666 attrs = { height: type };
563e401a 20667
26dd39fd
IC
20668 // If we include width, step value is 1 to do all cssExpand values,
20669 // otherwise step value is 2 to skip over Left and Right
20670 includeWidth = includeWidth ? 1 : 0;
20671 for ( ; i < 4; i += 2 - includeWidth ) {
20672 which = cssExpand[ i ];
20673 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20674 }
563e401a 20675
26dd39fd
IC
20676 if ( includeWidth ) {
20677 attrs.opacity = attrs.width = type;
20678 }
8b095871 20679
26dd39fd
IC
20680 return attrs;
20681}
8b095871 20682
26dd39fd
IC
20683function createTween( value, prop, animation ) {
20684 var tween,
20685 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20686 index = 0,
20687 length = collection.length;
20688 for ( ; index < length; index++ ) {
20689 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
8b095871 20690
26dd39fd
IC
20691 // We're done with this property
20692 return tween;
20693 }
20694 }
20695}
8b095871 20696
26dd39fd
IC
20697function defaultPrefilter( elem, props, opts ) {
20698 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20699 isBox = "width" in props || "height" in props,
20700 anim = this,
20701 orig = {},
20702 style = elem.style,
20703 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20704 dataShow = dataPriv.get( elem, "fxshow" );
20705
20706 // Queue-skipping animations hijack the fx hooks
20707 if ( !opts.queue ) {
20708 hooks = jQuery._queueHooks( elem, "fx" );
20709 if ( hooks.unqueued == null ) {
20710 hooks.unqueued = 0;
20711 oldfire = hooks.empty.fire;
20712 hooks.empty.fire = function() {
20713 if ( !hooks.unqueued ) {
20714 oldfire();
20715 }
20716 };
20717 }
20718 hooks.unqueued++;
20719
20720 anim.always( function() {
20721
20722 // Ensure the complete handler is called before this completes
20723 anim.always( function() {
20724 hooks.unqueued--;
20725 if ( !jQuery.queue( elem, "fx" ).length ) {
20726 hooks.empty.fire();
20727 }
20728 } );
20729 } );
20730 }
8b095871 20731
26dd39fd
IC
20732 // Detect show/hide animations
20733 for ( prop in props ) {
20734 value = props[ prop ];
20735 if ( rfxtypes.test( value ) ) {
20736 delete props[ prop ];
20737 toggle = toggle || value === "toggle";
20738 if ( value === ( hidden ? "hide" : "show" ) ) {
20739
20740 // Pretend to be hidden if this is a "show" and
20741 // there is still data from a stopped show/hide
20742 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20743 hidden = true;
20744
20745 // Ignore all other no-op show/hide data
20746 } else {
20747 continue;
20748 }
20749 }
20750 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20751 }
20752 }
563e401a 20753
26dd39fd
IC
20754 // Bail out if this is a no-op like .hide().hide()
20755 propTween = !jQuery.isEmptyObject( props );
20756 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20757 return;
20758 }
563e401a 20759
26dd39fd
IC
20760 // Restrict "overflow" and "display" styles during box animations
20761 if ( isBox && elem.nodeType === 1 ) {
563e401a 20762
26dd39fd
IC
20763 // Support: IE <=9 - 11, Edge 12 - 13
20764 // Record all 3 overflow attributes because IE does not infer the shorthand
20765 // from identically-valued overflowX and overflowY
20766 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
563e401a 20767
26dd39fd
IC
20768 // Identify a display type, preferring old show/hide data over the CSS cascade
20769 restoreDisplay = dataShow && dataShow.display;
20770 if ( restoreDisplay == null ) {
20771 restoreDisplay = dataPriv.get( elem, "display" );
20772 }
20773 display = jQuery.css( elem, "display" );
20774 if ( display === "none" ) {
20775 if ( restoreDisplay ) {
20776 display = restoreDisplay;
20777 } else {
20778
20779 // Get nonempty value(s) by temporarily forcing visibility
20780 showHide( [ elem ], true );
20781 restoreDisplay = elem.style.display || restoreDisplay;
20782 display = jQuery.css( elem, "display" );
20783 showHide( [ elem ] );
20784 }
20785 }
563e401a 20786
26dd39fd
IC
20787 // Animate inline elements as inline-block
20788 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20789 if ( jQuery.css( elem, "float" ) === "none" ) {
20790
20791 // Restore the original display value at the end of pure show/hide animations
20792 if ( !propTween ) {
20793 anim.done( function() {
20794 style.display = restoreDisplay;
20795 } );
20796 if ( restoreDisplay == null ) {
20797 display = style.display;
20798 restoreDisplay = display === "none" ? "" : display;
20799 }
20800 }
20801 style.display = "inline-block";
20802 }
20803 }
20804 }
563e401a 20805
26dd39fd
IC
20806 if ( opts.overflow ) {
20807 style.overflow = "hidden";
20808 anim.always( function() {
20809 style.overflow = opts.overflow[ 0 ];
20810 style.overflowX = opts.overflow[ 1 ];
20811 style.overflowY = opts.overflow[ 2 ];
20812 } );
20813 }
563e401a 20814
26dd39fd
IC
20815 // Implement show/hide animations
20816 propTween = false;
20817 for ( prop in orig ) {
20818
20819 // General show/hide setup for this element animation
20820 if ( !propTween ) {
20821 if ( dataShow ) {
20822 if ( "hidden" in dataShow ) {
20823 hidden = dataShow.hidden;
20824 }
20825 } else {
20826 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20827 }
563e401a 20828
26dd39fd
IC
20829 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20830 if ( toggle ) {
20831 dataShow.hidden = !hidden;
20832 }
563e401a 20833
26dd39fd
IC
20834 // Show elements before animating them
20835 if ( hidden ) {
20836 showHide( [ elem ], true );
20837 }
563e401a 20838
26dd39fd 20839 /* eslint-disable no-loop-func */
563e401a 20840
26dd39fd 20841 anim.done( function() {
8b095871 20842
26dd39fd 20843 /* eslint-enable no-loop-func */
8b095871 20844
26dd39fd
IC
20845 // The final step of a "hide" animation is actually hiding the element
20846 if ( !hidden ) {
20847 showHide( [ elem ] );
20848 }
20849 dataPriv.remove( elem, "fxshow" );
20850 for ( prop in orig ) {
20851 jQuery.style( elem, prop, orig[ prop ] );
20852 }
20853 } );
20854 }
8b095871 20855
26dd39fd
IC
20856 // Per-property setup
20857 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20858 if ( !( prop in dataShow ) ) {
20859 dataShow[ prop ] = propTween.start;
20860 if ( hidden ) {
20861 propTween.end = propTween.start;
20862 propTween.start = 0;
20863 }
20864 }
20865 }
20866}
8b095871 20867
26dd39fd
IC
20868function propFilter( props, specialEasing ) {
20869 var index, name, easing, value, hooks;
8b095871 20870
26dd39fd
IC
20871 // camelCase, specialEasing and expand cssHook pass
20872 for ( index in props ) {
20873 name = jQuery.camelCase( index );
20874 easing = specialEasing[ name ];
20875 value = props[ index ];
20876 if ( Array.isArray( value ) ) {
20877 easing = value[ 1 ];
20878 value = props[ index ] = value[ 0 ];
20879 }
8b095871 20880
26dd39fd
IC
20881 if ( index !== name ) {
20882 props[ name ] = value;
20883 delete props[ index ];
20884 }
8b095871 20885
26dd39fd
IC
20886 hooks = jQuery.cssHooks[ name ];
20887 if ( hooks && "expand" in hooks ) {
20888 value = hooks.expand( value );
20889 delete props[ name ];
20890
20891 // Not quite $.extend, this won't overwrite existing keys.
20892 // Reusing 'index' because we have the correct "name"
20893 for ( index in value ) {
20894 if ( !( index in props ) ) {
20895 props[ index ] = value[ index ];
20896 specialEasing[ index ] = easing;
20897 }
20898 }
20899 } else {
20900 specialEasing[ name ] = easing;
20901 }
20902 }
20903}
8b095871 20904
26dd39fd
IC
20905function Animation( elem, properties, options ) {
20906 var result,
20907 stopped,
20908 index = 0,
20909 length = Animation.prefilters.length,
20910 deferred = jQuery.Deferred().always( function() {
8b095871 20911
26dd39fd
IC
20912 // Don't match elem in the :animated selector
20913 delete tick.elem;
20914 } ),
20915 tick = function() {
20916 if ( stopped ) {
20917 return false;
20918 }
20919 var currentTime = fxNow || createFxNow(),
20920 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
20921
20922 // Support: Android 2.3 only
20923 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
20924 temp = remaining / animation.duration || 0,
20925 percent = 1 - temp,
20926 index = 0,
20927 length = animation.tweens.length;
20928
20929 for ( ; index < length; index++ ) {
20930 animation.tweens[ index ].run( percent );
20931 }
8b095871 20932
26dd39fd 20933 deferred.notifyWith( elem, [ animation, percent, remaining ] );
8b095871 20934
26dd39fd
IC
20935 // If there's more to do, yield
20936 if ( percent < 1 && length ) {
20937 return remaining;
20938 }
8b095871 20939
26dd39fd
IC
20940 // If this was an empty animation, synthesize a final progress notification
20941 if ( !length ) {
20942 deferred.notifyWith( elem, [ animation, 1, 0 ] );
20943 }
563e401a 20944
26dd39fd
IC
20945 // Resolve the animation and report its conclusion
20946 deferred.resolveWith( elem, [ animation ] );
20947 return false;
20948 },
20949 animation = deferred.promise( {
20950 elem: elem,
20951 props: jQuery.extend( {}, properties ),
20952 opts: jQuery.extend( true, {
20953 specialEasing: {},
20954 easing: jQuery.easing._default
20955 }, options ),
20956 originalProperties: properties,
20957 originalOptions: options,
20958 startTime: fxNow || createFxNow(),
20959 duration: options.duration,
20960 tweens: [],
20961 createTween: function( prop, end ) {
20962 var tween = jQuery.Tween( elem, animation.opts, prop, end,
20963 animation.opts.specialEasing[ prop ] || animation.opts.easing );
20964 animation.tweens.push( tween );
20965 return tween;
20966 },
20967 stop: function( gotoEnd ) {
20968 var index = 0,
20969
20970 // If we are going to the end, we want to run all the tweens
20971 // otherwise we skip this part
20972 length = gotoEnd ? animation.tweens.length : 0;
20973 if ( stopped ) {
20974 return this;
20975 }
20976 stopped = true;
20977 for ( ; index < length; index++ ) {
20978 animation.tweens[ index ].run( 1 );
20979 }
20980
20981 // Resolve when we played the last frame; otherwise, reject
20982 if ( gotoEnd ) {
20983 deferred.notifyWith( elem, [ animation, 1, 0 ] );
20984 deferred.resolveWith( elem, [ animation, gotoEnd ] );
20985 } else {
20986 deferred.rejectWith( elem, [ animation, gotoEnd ] );
20987 }
20988 return this;
20989 }
20990 } ),
20991 props = animation.props;
563e401a 20992
26dd39fd 20993 propFilter( props, animation.opts.specialEasing );
8b095871 20994
26dd39fd
IC
20995 for ( ; index < length; index++ ) {
20996 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
20997 if ( result ) {
20998 if ( jQuery.isFunction( result.stop ) ) {
20999 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21000 jQuery.proxy( result.stop, result );
21001 }
21002 return result;
21003 }
21004 }
8b095871 21005
26dd39fd 21006 jQuery.map( props, createTween, animation );
8b095871 21007
26dd39fd
IC
21008 if ( jQuery.isFunction( animation.opts.start ) ) {
21009 animation.opts.start.call( elem, animation );
21010 }
8b095871 21011
26dd39fd
IC
21012 // Attach callbacks from options
21013 animation
21014 .progress( animation.opts.progress )
21015 .done( animation.opts.done, animation.opts.complete )
21016 .fail( animation.opts.fail )
21017 .always( animation.opts.always );
21018
21019 jQuery.fx.timer(
21020 jQuery.extend( tick, {
21021 elem: elem,
21022 anim: animation,
21023 queue: animation.opts.queue
21024 } )
21025 );
21026
21027 return animation;
21028}
21029
21030jQuery.Animation = jQuery.extend( Animation, {
21031
21032 tweeners: {
21033 "*": [ function( prop, value ) {
21034 var tween = this.createTween( prop, value );
21035 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21036 return tween;
21037 } ]
21038 },
21039
21040 tweener: function( props, callback ) {
21041 if ( jQuery.isFunction( props ) ) {
21042 callback = props;
21043 props = [ "*" ];
21044 } else {
21045 props = props.match( rnothtmlwhite );
21046 }
8b095871 21047
26dd39fd
IC
21048 var prop,
21049 index = 0,
21050 length = props.length;
8b095871 21051
26dd39fd
IC
21052 for ( ; index < length; index++ ) {
21053 prop = props[ index ];
21054 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21055 Animation.tweeners[ prop ].unshift( callback );
21056 }
21057 },
8b095871 21058
26dd39fd 21059 prefilters: [ defaultPrefilter ],
8b095871 21060
26dd39fd
IC
21061 prefilter: function( callback, prepend ) {
21062 if ( prepend ) {
21063 Animation.prefilters.unshift( callback );
21064 } else {
21065 Animation.prefilters.push( callback );
21066 }
21067 }
21068} );
21069
21070jQuery.speed = function( speed, easing, fn ) {
21071 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21072 complete: fn || !fn && easing ||
21073 jQuery.isFunction( speed ) && speed,
21074 duration: speed,
21075 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21076 };
8b095871 21077
26dd39fd
IC
21078 // Go to the end state if fx are off
21079 if ( jQuery.fx.off ) {
21080 opt.duration = 0;
8b095871 21081
26dd39fd
IC
21082 } else {
21083 if ( typeof opt.duration !== "number" ) {
21084 if ( opt.duration in jQuery.fx.speeds ) {
21085 opt.duration = jQuery.fx.speeds[ opt.duration ];
8b095871 21086
26dd39fd
IC
21087 } else {
21088 opt.duration = jQuery.fx.speeds._default;
21089 }
21090 }
21091 }
8b095871 21092
26dd39fd
IC
21093 // Normalize opt.queue - true/undefined/null -> "fx"
21094 if ( opt.queue == null || opt.queue === true ) {
21095 opt.queue = "fx";
21096 }
8b095871 21097
26dd39fd
IC
21098 // Queueing
21099 opt.old = opt.complete;
8b095871 21100
26dd39fd
IC
21101 opt.complete = function() {
21102 if ( jQuery.isFunction( opt.old ) ) {
21103 opt.old.call( this );
21104 }
563e401a 21105
26dd39fd
IC
21106 if ( opt.queue ) {
21107 jQuery.dequeue( this, opt.queue );
21108 }
21109 };
3af2954a 21110
26dd39fd
IC
21111 return opt;
21112};
21113
21114jQuery.fn.extend( {
21115 fadeTo: function( speed, to, easing, callback ) {
21116
21117 // Show any hidden elements after setting opacity to 0
21118 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21119
21120 // Animate to the value specified
21121 .end().animate( { opacity: to }, speed, easing, callback );
21122 },
21123 animate: function( prop, speed, easing, callback ) {
21124 var empty = jQuery.isEmptyObject( prop ),
21125 optall = jQuery.speed( speed, easing, callback ),
21126 doAnimation = function() {
21127
21128 // Operate on a copy of prop so per-property easing won't be lost
21129 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21130
21131 // Empty animations, or finishing resolves immediately
21132 if ( empty || dataPriv.get( this, "finish" ) ) {
21133 anim.stop( true );
21134 }
21135 };
21136 doAnimation.finish = doAnimation;
21137
21138 return empty || optall.queue === false ?
21139 this.each( doAnimation ) :
21140 this.queue( optall.queue, doAnimation );
21141 },
21142 stop: function( type, clearQueue, gotoEnd ) {
21143 var stopQueue = function( hooks ) {
21144 var stop = hooks.stop;
21145 delete hooks.stop;
21146 stop( gotoEnd );
21147 };
3af2954a 21148
26dd39fd
IC
21149 if ( typeof type !== "string" ) {
21150 gotoEnd = clearQueue;
21151 clearQueue = type;
21152 type = undefined;
21153 }
21154 if ( clearQueue && type !== false ) {
21155 this.queue( type || "fx", [] );
21156 }
3af2954a 21157
26dd39fd
IC
21158 return this.each( function() {
21159 var dequeue = true,
21160 index = type != null && type + "queueHooks",
21161 timers = jQuery.timers,
21162 data = dataPriv.get( this );
21163
21164 if ( index ) {
21165 if ( data[ index ] && data[ index ].stop ) {
21166 stopQueue( data[ index ] );
21167 }
21168 } else {
21169 for ( index in data ) {
21170 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21171 stopQueue( data[ index ] );
21172 }
21173 }
21174 }
3af2954a 21175
26dd39fd
IC
21176 for ( index = timers.length; index--; ) {
21177 if ( timers[ index ].elem === this &&
21178 ( type == null || timers[ index ].queue === type ) ) {
3af2954a 21179
26dd39fd
IC
21180 timers[ index ].anim.stop( gotoEnd );
21181 dequeue = false;
21182 timers.splice( index, 1 );
21183 }
21184 }
3af2954a 21185
26dd39fd
IC
21186 // Start the next in the queue if the last step wasn't forced.
21187 // Timers currently will call their complete callbacks, which
21188 // will dequeue but only if they were gotoEnd.
21189 if ( dequeue || !gotoEnd ) {
21190 jQuery.dequeue( this, type );
21191 }
21192 } );
21193 },
21194 finish: function( type ) {
21195 if ( type !== false ) {
21196 type = type || "fx";
21197 }
21198 return this.each( function() {
21199 var index,
21200 data = dataPriv.get( this ),
21201 queue = data[ type + "queue" ],
21202 hooks = data[ type + "queueHooks" ],
21203 timers = jQuery.timers,
21204 length = queue ? queue.length : 0;
21205
21206 // Enable finishing flag on private data
21207 data.finish = true;
21208
21209 // Empty the queue first
21210 jQuery.queue( this, type, [] );
21211
21212 if ( hooks && hooks.stop ) {
21213 hooks.stop.call( this, true );
21214 }
8b095871 21215
26dd39fd
IC
21216 // Look for any active animations, and finish them
21217 for ( index = timers.length; index--; ) {
21218 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21219 timers[ index ].anim.stop( true );
21220 timers.splice( index, 1 );
21221 }
21222 }
8b095871 21223
26dd39fd
IC
21224 // Look for any animations in the old queue and finish them
21225 for ( index = 0; index < length; index++ ) {
21226 if ( queue[ index ] && queue[ index ].finish ) {
21227 queue[ index ].finish.call( this );
21228 }
21229 }
3af2954a 21230
26dd39fd
IC
21231 // Turn off finishing flag
21232 delete data.finish;
21233 } );
21234 }
21235} );
21236
21237jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21238 var cssFn = jQuery.fn[ name ];
21239 jQuery.fn[ name ] = function( speed, easing, callback ) {
21240 return speed == null || typeof speed === "boolean" ?
21241 cssFn.apply( this, arguments ) :
21242 this.animate( genFx( name, true ), speed, easing, callback );
21243 };
21244} );
21245
21246// Generate shortcuts for custom animations
21247jQuery.each( {
21248 slideDown: genFx( "show" ),
21249 slideUp: genFx( "hide" ),
21250 slideToggle: genFx( "toggle" ),
21251 fadeIn: { opacity: "show" },
21252 fadeOut: { opacity: "hide" },
21253 fadeToggle: { opacity: "toggle" }
21254}, function( name, props ) {
21255 jQuery.fn[ name ] = function( speed, easing, callback ) {
21256 return this.animate( props, speed, easing, callback );
21257 };
21258} );
3af2954a 21259
26dd39fd
IC
21260jQuery.timers = [];
21261jQuery.fx.tick = function() {
21262 var timer,
21263 i = 0,
21264 timers = jQuery.timers;
3af2954a 21265
26dd39fd 21266 fxNow = jQuery.now();
3af2954a 21267
26dd39fd
IC
21268 for ( ; i < timers.length; i++ ) {
21269 timer = timers[ i ];
3af2954a 21270
26dd39fd
IC
21271 // Run the timer and safely remove it when done (allowing for external removal)
21272 if ( !timer() && timers[ i ] === timer ) {
21273 timers.splice( i--, 1 );
21274 }
21275 }
3af2954a 21276
26dd39fd
IC
21277 if ( !timers.length ) {
21278 jQuery.fx.stop();
21279 }
21280 fxNow = undefined;
21281};
3af2954a 21282
26dd39fd
IC
21283jQuery.fx.timer = function( timer ) {
21284 jQuery.timers.push( timer );
21285 jQuery.fx.start();
21286};
3af2954a 21287
26dd39fd
IC
21288jQuery.fx.interval = 13;
21289jQuery.fx.start = function() {
21290 if ( inProgress ) {
21291 return;
21292 }
3af2954a 21293
26dd39fd
IC
21294 inProgress = true;
21295 schedule();
21296};
3af2954a 21297
26dd39fd
IC
21298jQuery.fx.stop = function() {
21299 inProgress = null;
21300};
3af2954a 21301
26dd39fd
IC
21302jQuery.fx.speeds = {
21303 slow: 600,
21304 fast: 200,
8b095871 21305
26dd39fd
IC
21306 // Default speed
21307 _default: 400
21308};
8b095871 21309
3af2954a 21310
26dd39fd
IC
21311// Based off of the plugin by Clint Helfers, with permission.
21312// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21313jQuery.fn.delay = function( time, type ) {
21314 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21315 type = type || "fx";
3af2954a 21316
26dd39fd
IC
21317 return this.queue( type, function( next, hooks ) {
21318 var timeout = window.setTimeout( next, time );
21319 hooks.stop = function() {
21320 window.clearTimeout( timeout );
21321 };
21322 } );
21323};
3af2954a
IC
21324
21325
26dd39fd
IC
21326( function() {
21327 var input = document.createElement( "input" ),
21328 select = document.createElement( "select" ),
21329 opt = select.appendChild( document.createElement( "option" ) );
3af2954a 21330
26dd39fd 21331 input.type = "checkbox";
8b095871 21332
26dd39fd
IC
21333 // Support: Android <=4.3 only
21334 // Default value for a checkbox should be "on"
21335 support.checkOn = input.value !== "";
8b095871 21336
26dd39fd
IC
21337 // Support: IE <=11 only
21338 // Must access selectedIndex to make default options select
21339 support.optSelected = opt.selected;
8b095871 21340
26dd39fd
IC
21341 // Support: IE <=11 only
21342 // An input loses its value after becoming a radio
21343 input = document.createElement( "input" );
21344 input.value = "t";
21345 input.type = "radio";
21346 support.radioValue = input.value === "t";
21347} )();
8b095871 21348
8b095871 21349
26dd39fd
IC
21350var boolHook,
21351 attrHandle = jQuery.expr.attrHandle;
8b095871 21352
26dd39fd
IC
21353jQuery.fn.extend( {
21354 attr: function( name, value ) {
21355 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21356 },
8b095871 21357
26dd39fd
IC
21358 removeAttr: function( name ) {
21359 return this.each( function() {
21360 jQuery.removeAttr( this, name );
21361 } );
21362 }
21363} );
8b095871 21364
26dd39fd
IC
21365jQuery.extend( {
21366 attr: function( elem, name, value ) {
21367 var ret, hooks,
21368 nType = elem.nodeType;
8b095871 21369
26dd39fd
IC
21370 // Don't get/set attributes on text, comment and attribute nodes
21371 if ( nType === 3 || nType === 8 || nType === 2 ) {
21372 return;
21373 }
8b095871 21374
26dd39fd
IC
21375 // Fallback to prop when attributes are not supported
21376 if ( typeof elem.getAttribute === "undefined" ) {
21377 return jQuery.prop( elem, name, value );
21378 }
8b095871 21379
26dd39fd
IC
21380 // Attribute hooks are determined by the lowercase version
21381 // Grab necessary hook if one is defined
21382 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21383 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21384 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21385 }
8b095871 21386
26dd39fd
IC
21387 if ( value !== undefined ) {
21388 if ( value === null ) {
21389 jQuery.removeAttr( elem, name );
21390 return;
21391 }
8b095871 21392
26dd39fd
IC
21393 if ( hooks && "set" in hooks &&
21394 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21395 return ret;
21396 }
8b095871 21397
26dd39fd
IC
21398 elem.setAttribute( name, value + "" );
21399 return value;
21400 }
8b095871 21401
26dd39fd
IC
21402 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21403 return ret;
21404 }
8b095871 21405
26dd39fd
IC
21406 ret = jQuery.find.attr( elem, name );
21407
21408 // Non-existent attributes return null, we normalize to undefined
21409 return ret == null ? undefined : ret;
21410 },
21411
21412 attrHooks: {
21413 type: {
21414 set: function( elem, value ) {
21415 if ( !support.radioValue && value === "radio" &&
21416 nodeName( elem, "input" ) ) {
21417 var val = elem.value;
21418 elem.setAttribute( "type", value );
21419 if ( val ) {
21420 elem.value = val;
21421 }
21422 return value;
21423 }
21424 }
21425 }
21426 },
8b095871 21427
26dd39fd
IC
21428 removeAttr: function( elem, value ) {
21429 var name,
21430 i = 0,
8b095871 21431
26dd39fd
IC
21432 // Attribute names can contain non-HTML whitespace characters
21433 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21434 attrNames = value && value.match( rnothtmlwhite );
8b095871 21435
26dd39fd
IC
21436 if ( attrNames && elem.nodeType === 1 ) {
21437 while ( ( name = attrNames[ i++ ] ) ) {
21438 elem.removeAttribute( name );
21439 }
21440 }
21441 }
21442} );
8b095871 21443
26dd39fd
IC
21444// Hooks for boolean attributes
21445boolHook = {
21446 set: function( elem, value, name ) {
21447 if ( value === false ) {
8b095871 21448
26dd39fd
IC
21449 // Remove boolean attributes when set to false
21450 jQuery.removeAttr( elem, name );
21451 } else {
21452 elem.setAttribute( name, name );
21453 }
21454 return name;
21455 }
21456};
8b095871 21457
26dd39fd
IC
21458jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21459 var getter = attrHandle[ name ] || jQuery.find.attr;
8b095871 21460
26dd39fd
IC
21461 attrHandle[ name ] = function( elem, name, isXML ) {
21462 var ret, handle,
21463 lowercaseName = name.toLowerCase();
8b095871 21464
26dd39fd 21465 if ( !isXML ) {
8b095871 21466
26dd39fd
IC
21467 // Avoid an infinite loop by temporarily removing this function from the getter
21468 handle = attrHandle[ lowercaseName ];
21469 attrHandle[ lowercaseName ] = ret;
21470 ret = getter( elem, name, isXML ) != null ?
21471 lowercaseName :
21472 null;
21473 attrHandle[ lowercaseName ] = handle;
21474 }
21475 return ret;
21476 };
21477} );
8b095871 21478
8b095871 21479
8b095871 21480
8b095871 21481
26dd39fd
IC
21482var rfocusable = /^(?:input|select|textarea|button)$/i,
21483 rclickable = /^(?:a|area)$/i;
8b095871 21484
26dd39fd
IC
21485jQuery.fn.extend( {
21486 prop: function( name, value ) {
21487 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21488 },
8b095871 21489
26dd39fd
IC
21490 removeProp: function( name ) {
21491 return this.each( function() {
21492 delete this[ jQuery.propFix[ name ] || name ];
21493 } );
21494 }
21495} );
8b095871 21496
26dd39fd
IC
21497jQuery.extend( {
21498 prop: function( elem, name, value ) {
21499 var ret, hooks,
21500 nType = elem.nodeType;
8b095871 21501
26dd39fd
IC
21502 // Don't get/set properties on text, comment and attribute nodes
21503 if ( nType === 3 || nType === 8 || nType === 2 ) {
21504 return;
21505 }
8b095871 21506
26dd39fd 21507 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
8b095871 21508
26dd39fd
IC
21509 // Fix name and attach hooks
21510 name = jQuery.propFix[ name ] || name;
21511 hooks = jQuery.propHooks[ name ];
21512 }
8b095871 21513
26dd39fd
IC
21514 if ( value !== undefined ) {
21515 if ( hooks && "set" in hooks &&
21516 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21517 return ret;
21518 }
8b095871 21519
26dd39fd
IC
21520 return ( elem[ name ] = value );
21521 }
8b095871 21522
26dd39fd
IC
21523 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21524 return ret;
21525 }
8b095871 21526
26dd39fd
IC
21527 return elem[ name ];
21528 },
21529
21530 propHooks: {
21531 tabIndex: {
21532 get: function( elem ) {
21533
21534 // Support: IE <=9 - 11 only
21535 // elem.tabIndex doesn't always return the
21536 // correct value when it hasn't been explicitly set
21537 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21538 // Use proper attribute retrieval(#12072)
21539 var tabindex = jQuery.find.attr( elem, "tabindex" );
21540
21541 if ( tabindex ) {
21542 return parseInt( tabindex, 10 );
21543 }
21544
21545 if (
21546 rfocusable.test( elem.nodeName ) ||
21547 rclickable.test( elem.nodeName ) &&
21548 elem.href
21549 ) {
21550 return 0;
21551 }
21552
21553 return -1;
21554 }
21555 }
21556 },
8b095871 21557
26dd39fd
IC
21558 propFix: {
21559 "for": "htmlFor",
21560 "class": "className"
21561 }
21562} );
21563
21564// Support: IE <=11 only
21565// Accessing the selectedIndex property
21566// forces the browser to respect setting selected
21567// on the option
21568// The getter ensures a default option is selected
21569// when in an optgroup
21570// eslint rule "no-unused-expressions" is disabled for this code
21571// since it considers such accessions noop
21572if ( !support.optSelected ) {
21573 jQuery.propHooks.selected = {
21574 get: function( elem ) {
21575
21576 /* eslint no-unused-expressions: "off" */
21577
21578 var parent = elem.parentNode;
21579 if ( parent && parent.parentNode ) {
21580 parent.parentNode.selectedIndex;
21581 }
21582 return null;
21583 },
21584 set: function( elem ) {
8b095871 21585
26dd39fd 21586 /* eslint no-unused-expressions: "off" */
8b095871 21587
26dd39fd
IC
21588 var parent = elem.parentNode;
21589 if ( parent ) {
21590 parent.selectedIndex;
8b095871 21591
26dd39fd
IC
21592 if ( parent.parentNode ) {
21593 parent.parentNode.selectedIndex;
21594 }
21595 }
21596 }
21597 };
21598}
8b095871 21599
26dd39fd
IC
21600jQuery.each( [
21601 "tabIndex",
21602 "readOnly",
21603 "maxLength",
21604 "cellSpacing",
21605 "cellPadding",
21606 "rowSpan",
21607 "colSpan",
21608 "useMap",
21609 "frameBorder",
21610 "contentEditable"
21611], function() {
21612 jQuery.propFix[ this.toLowerCase() ] = this;
21613} );
8b095871 21614
8b095871 21615
8b095871 21616
8b095871 21617
26dd39fd
IC
21618 // Strip and collapse whitespace according to HTML spec
21619 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21620 function stripAndCollapse( value ) {
21621 var tokens = value.match( rnothtmlwhite ) || [];
21622 return tokens.join( " " );
21623 }
8b095871 21624
8b095871 21625
26dd39fd
IC
21626function getClass( elem ) {
21627 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21628}
8b095871 21629
26dd39fd
IC
21630jQuery.fn.extend( {
21631 addClass: function( value ) {
21632 var classes, elem, cur, curValue, clazz, j, finalValue,
21633 i = 0;
8b095871 21634
26dd39fd
IC
21635 if ( jQuery.isFunction( value ) ) {
21636 return this.each( function( j ) {
21637 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21638 } );
21639 }
8b095871 21640
26dd39fd
IC
21641 if ( typeof value === "string" && value ) {
21642 classes = value.match( rnothtmlwhite ) || [];
21643
21644 while ( ( elem = this[ i++ ] ) ) {
21645 curValue = getClass( elem );
21646 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21647
21648 if ( cur ) {
21649 j = 0;
21650 while ( ( clazz = classes[ j++ ] ) ) {
21651 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21652 cur += clazz + " ";
21653 }
21654 }
21655
21656 // Only assign if different to avoid unneeded rendering.
21657 finalValue = stripAndCollapse( cur );
21658 if ( curValue !== finalValue ) {
21659 elem.setAttribute( "class", finalValue );
21660 }
21661 }
21662 }
21663 }
8b095871 21664
26dd39fd
IC
21665 return this;
21666 },
8b095871 21667
26dd39fd
IC
21668 removeClass: function( value ) {
21669 var classes, elem, cur, curValue, clazz, j, finalValue,
21670 i = 0;
8b095871 21671
26dd39fd
IC
21672 if ( jQuery.isFunction( value ) ) {
21673 return this.each( function( j ) {
21674 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21675 } );
21676 }
8b095871 21677
26dd39fd
IC
21678 if ( !arguments.length ) {
21679 return this.attr( "class", "" );
21680 }
8b095871 21681
26dd39fd
IC
21682 if ( typeof value === "string" && value ) {
21683 classes = value.match( rnothtmlwhite ) || [];
8b095871 21684
26dd39fd
IC
21685 while ( ( elem = this[ i++ ] ) ) {
21686 curValue = getClass( elem );
8b095871 21687
26dd39fd
IC
21688 // This expression is here for better compressibility (see addClass)
21689 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8b095871 21690
26dd39fd
IC
21691 if ( cur ) {
21692 j = 0;
21693 while ( ( clazz = classes[ j++ ] ) ) {
8b095871 21694
26dd39fd
IC
21695 // Remove *all* instances
21696 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21697 cur = cur.replace( " " + clazz + " ", " " );
21698 }
21699 }
8b095871 21700
26dd39fd
IC
21701 // Only assign if different to avoid unneeded rendering.
21702 finalValue = stripAndCollapse( cur );
21703 if ( curValue !== finalValue ) {
21704 elem.setAttribute( "class", finalValue );
21705 }
21706 }
21707 }
21708 }
8b095871 21709
26dd39fd
IC
21710 return this;
21711 },
8b095871 21712
26dd39fd
IC
21713 toggleClass: function( value, stateVal ) {
21714 var type = typeof value;
8b095871 21715
26dd39fd
IC
21716 if ( typeof stateVal === "boolean" && type === "string" ) {
21717 return stateVal ? this.addClass( value ) : this.removeClass( value );
21718 }
8b095871 21719
26dd39fd
IC
21720 if ( jQuery.isFunction( value ) ) {
21721 return this.each( function( i ) {
21722 jQuery( this ).toggleClass(
21723 value.call( this, i, getClass( this ), stateVal ),
21724 stateVal
21725 );
21726 } );
21727 }
8b095871 21728
26dd39fd
IC
21729 return this.each( function() {
21730 var className, i, self, classNames;
21731
21732 if ( type === "string" ) {
21733
21734 // Toggle individual class names
21735 i = 0;
21736 self = jQuery( this );
21737 classNames = value.match( rnothtmlwhite ) || [];
21738
21739 while ( ( className = classNames[ i++ ] ) ) {
21740
21741 // Check each className given, space separated list
21742 if ( self.hasClass( className ) ) {
21743 self.removeClass( className );
21744 } else {
21745 self.addClass( className );
21746 }
21747 }
21748
21749 // Toggle whole class name
21750 } else if ( value === undefined || type === "boolean" ) {
21751 className = getClass( this );
21752 if ( className ) {
21753
21754 // Store className if set
21755 dataPriv.set( this, "__className__", className );
21756 }
21757
21758 // If the element has a class name or if we're passed `false`,
21759 // then remove the whole classname (if there was one, the above saved it).
21760 // Otherwise bring back whatever was previously saved (if anything),
21761 // falling back to the empty string if nothing was stored.
21762 if ( this.setAttribute ) {
21763 this.setAttribute( "class",
21764 className || value === false ?
21765 "" :
21766 dataPriv.get( this, "__className__" ) || ""
21767 );
21768 }
21769 }
21770 } );
21771 },
21772
21773 hasClass: function( selector ) {
21774 var className, elem,
21775 i = 0;
21776
21777 className = " " + selector + " ";
21778 while ( ( elem = this[ i++ ] ) ) {
21779 if ( elem.nodeType === 1 &&
21780 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21781 return true;
21782 }
21783 }
8b095871 21784
26dd39fd
IC
21785 return false;
21786 }
21787} );
8b095871 21788
8b095871
IC
21789
21790
21791
26dd39fd 21792var rreturn = /\r/g;
8b095871 21793
26dd39fd
IC
21794jQuery.fn.extend( {
21795 val: function( value ) {
21796 var hooks, ret, isFunction,
21797 elem = this[ 0 ];
8b095871 21798
26dd39fd
IC
21799 if ( !arguments.length ) {
21800 if ( elem ) {
21801 hooks = jQuery.valHooks[ elem.type ] ||
21802 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
8b095871 21803
26dd39fd
IC
21804 if ( hooks &&
21805 "get" in hooks &&
21806 ( ret = hooks.get( elem, "value" ) ) !== undefined
21807 ) {
21808 return ret;
21809 }
8b095871 21810
26dd39fd 21811 ret = elem.value;
8b095871 21812
26dd39fd
IC
21813 // Handle most common string cases
21814 if ( typeof ret === "string" ) {
21815 return ret.replace( rreturn, "" );
21816 }
8b095871 21817
26dd39fd
IC
21818 // Handle cases where value is null/undef or number
21819 return ret == null ? "" : ret;
21820 }
8b095871 21821
26dd39fd
IC
21822 return;
21823 }
8b095871 21824
26dd39fd 21825 isFunction = jQuery.isFunction( value );
8b095871 21826
26dd39fd
IC
21827 return this.each( function( i ) {
21828 var val;
8b095871 21829
26dd39fd
IC
21830 if ( this.nodeType !== 1 ) {
21831 return;
21832 }
8b095871 21833
26dd39fd
IC
21834 if ( isFunction ) {
21835 val = value.call( this, i, jQuery( this ).val() );
21836 } else {
21837 val = value;
21838 }
8b095871 21839
26dd39fd
IC
21840 // Treat null/undefined as ""; convert numbers to string
21841 if ( val == null ) {
21842 val = "";
8b095871 21843
26dd39fd
IC
21844 } else if ( typeof val === "number" ) {
21845 val += "";
8b095871 21846
26dd39fd
IC
21847 } else if ( Array.isArray( val ) ) {
21848 val = jQuery.map( val, function( value ) {
21849 return value == null ? "" : value + "";
21850 } );
21851 }
8b095871 21852
26dd39fd 21853 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
8b095871 21854
26dd39fd
IC
21855 // If set returns undefined, fall back to normal setting
21856 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21857 this.value = val;
21858 }
21859 } );
21860 }
21861} );
21862
21863jQuery.extend( {
21864 valHooks: {
21865 option: {
21866 get: function( elem ) {
21867
21868 var val = jQuery.find.attr( elem, "value" );
21869 return val != null ?
21870 val :
21871
21872 // Support: IE <=10 - 11 only
21873 // option.text throws exceptions (#14686, #14858)
21874 // Strip and collapse whitespace
21875 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
21876 stripAndCollapse( jQuery.text( elem ) );
21877 }
21878 },
21879 select: {
21880 get: function( elem ) {
21881 var value, option, i,
21882 options = elem.options,
21883 index = elem.selectedIndex,
21884 one = elem.type === "select-one",
21885 values = one ? null : [],
21886 max = one ? index + 1 : options.length;
21887
21888 if ( index < 0 ) {
21889 i = max;
21890
21891 } else {
21892 i = one ? index : 0;
21893 }
21894
21895 // Loop through all the selected options
21896 for ( ; i < max; i++ ) {
21897 option = options[ i ];
21898
21899 // Support: IE <=9 only
21900 // IE8-9 doesn't update selected after form reset (#2551)
21901 if ( ( option.selected || i === index ) &&
21902
21903 // Don't return options that are disabled or in a disabled optgroup
21904 !option.disabled &&
21905 ( !option.parentNode.disabled ||
21906 !nodeName( option.parentNode, "optgroup" ) ) ) {
21907
21908 // Get the specific value for the option
21909 value = jQuery( option ).val();
21910
21911 // We don't need an array for one selects
21912 if ( one ) {
21913 return value;
21914 }
21915
21916 // Multi-Selects return an array
21917 values.push( value );
21918 }
21919 }
21920
21921 return values;
21922 },
21923
21924 set: function( elem, value ) {
21925 var optionSet, option,
21926 options = elem.options,
21927 values = jQuery.makeArray( value ),
21928 i = options.length;
21929
21930 while ( i-- ) {
21931 option = options[ i ];
21932
21933 /* eslint-disable no-cond-assign */
21934
21935 if ( option.selected =
21936 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
21937 ) {
21938 optionSet = true;
21939 }
21940
21941 /* eslint-enable no-cond-assign */
21942 }
21943
21944 // Force browsers to behave consistently when non-matching value is set
21945 if ( !optionSet ) {
21946 elem.selectedIndex = -1;
21947 }
21948 return values;
21949 }
21950 }
21951 }
21952} );
21953
21954// Radios and checkboxes getter/setter
21955jQuery.each( [ "radio", "checkbox" ], function() {
21956 jQuery.valHooks[ this ] = {
21957 set: function( elem, value ) {
21958 if ( Array.isArray( value ) ) {
21959 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
21960 }
21961 }
21962 };
21963 if ( !support.checkOn ) {
21964 jQuery.valHooks[ this ].get = function( elem ) {
21965 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
21966 };
21967 }
21968} );
8b095871 21969
8b095871 21970
8b095871 21971
8b095871 21972
26dd39fd 21973// Return jQuery for attributes-only inclusion
8b095871 21974
8b095871 21975
26dd39fd 21976var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
8b095871 21977
26dd39fd 21978jQuery.extend( jQuery.event, {
8b095871 21979
26dd39fd 21980 trigger: function( event, data, elem, onlyHandlers ) {
8b095871 21981
26dd39fd
IC
21982 var i, cur, tmp, bubbleType, ontype, handle, special,
21983 eventPath = [ elem || document ],
21984 type = hasOwn.call( event, "type" ) ? event.type : event,
21985 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
8b095871 21986
26dd39fd 21987 cur = tmp = elem = elem || document;
8b095871 21988
26dd39fd
IC
21989 // Don't do events on text and comment nodes
21990 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
21991 return;
21992 }
8b095871 21993
26dd39fd
IC
21994 // focus/blur morphs to focusin/out; ensure we're not firing them right now
21995 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
21996 return;
21997 }
8b095871 21998
26dd39fd 21999 if ( type.indexOf( "." ) > -1 ) {
8b095871 22000
26dd39fd
IC
22001 // Namespaced trigger; create a regexp to match event type in handle()
22002 namespaces = type.split( "." );
22003 type = namespaces.shift();
22004 namespaces.sort();
22005 }
22006 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22007
22008 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22009 event = event[ jQuery.expando ] ?
22010 event :
22011 new jQuery.Event( type, typeof event === "object" && event );
22012
22013 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22014 event.isTrigger = onlyHandlers ? 2 : 3;
22015 event.namespace = namespaces.join( "." );
22016 event.rnamespace = event.namespace ?
22017 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22018 null;
22019
22020 // Clean up the event in case it is being reused
22021 event.result = undefined;
22022 if ( !event.target ) {
22023 event.target = elem;
22024 }
8b095871 22025
26dd39fd
IC
22026 // Clone any incoming data and prepend the event, creating the handler arg list
22027 data = data == null ?
22028 [ event ] :
22029 jQuery.makeArray( data, [ event ] );
8b095871 22030
26dd39fd
IC
22031 // Allow special events to draw outside the lines
22032 special = jQuery.event.special[ type ] || {};
22033 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22034 return;
22035 }
8b095871 22036
26dd39fd
IC
22037 // Determine event propagation path in advance, per W3C events spec (#9951)
22038 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22039 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
8b095871 22040
26dd39fd
IC
22041 bubbleType = special.delegateType || type;
22042 if ( !rfocusMorph.test( bubbleType + type ) ) {
22043 cur = cur.parentNode;
22044 }
22045 for ( ; cur; cur = cur.parentNode ) {
22046 eventPath.push( cur );
22047 tmp = cur;
22048 }
8b095871 22049
26dd39fd
IC
22050 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22051 if ( tmp === ( elem.ownerDocument || document ) ) {
22052 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22053 }
22054 }
8b095871 22055
26dd39fd
IC
22056 // Fire handlers on the event path
22057 i = 0;
22058 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
8b095871 22059
26dd39fd
IC
22060 event.type = i > 1 ?
22061 bubbleType :
22062 special.bindType || type;
8b095871 22063
26dd39fd
IC
22064 // jQuery handler
22065 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22066 dataPriv.get( cur, "handle" );
22067 if ( handle ) {
22068 handle.apply( cur, data );
22069 }
8b095871 22070
26dd39fd
IC
22071 // Native handler
22072 handle = ontype && cur[ ontype ];
22073 if ( handle && handle.apply && acceptData( cur ) ) {
22074 event.result = handle.apply( cur, data );
22075 if ( event.result === false ) {
22076 event.preventDefault();
22077 }
22078 }
22079 }
22080 event.type = type;
8b095871 22081
26dd39fd
IC
22082 // If nobody prevented the default action, do it now
22083 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
8b095871 22084
26dd39fd
IC
22085 if ( ( !special._default ||
22086 special._default.apply( eventPath.pop(), data ) === false ) &&
22087 acceptData( elem ) ) {
8b095871 22088
26dd39fd
IC
22089 // Call a native DOM method on the target with the same name as the event.
22090 // Don't do default actions on window, that's where global variables be (#6170)
22091 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
8b095871 22092
26dd39fd
IC
22093 // Don't re-trigger an onFOO event when we call its FOO() method
22094 tmp = elem[ ontype ];
8b095871 22095
26dd39fd
IC
22096 if ( tmp ) {
22097 elem[ ontype ] = null;
22098 }
8b095871 22099
26dd39fd
IC
22100 // Prevent re-triggering of the same event, since we already bubbled it above
22101 jQuery.event.triggered = type;
22102 elem[ type ]();
22103 jQuery.event.triggered = undefined;
8b095871 22104
26dd39fd
IC
22105 if ( tmp ) {
22106 elem[ ontype ] = tmp;
22107 }
22108 }
22109 }
22110 }
8b095871 22111
26dd39fd
IC
22112 return event.result;
22113 },
22114
22115 // Piggyback on a donor event to simulate a different one
22116 // Used only for `focus(in | out)` events
22117 simulate: function( type, elem, event ) {
22118 var e = jQuery.extend(
22119 new jQuery.Event(),
22120 event,
22121 {
22122 type: type,
22123 isSimulated: true
22124 }
22125 );
8b095871 22126
26dd39fd
IC
22127 jQuery.event.trigger( e, null, elem );
22128 }
8b095871 22129
26dd39fd 22130} );
8b095871 22131
26dd39fd 22132jQuery.fn.extend( {
8b095871 22133
26dd39fd
IC
22134 trigger: function( type, data ) {
22135 return this.each( function() {
22136 jQuery.event.trigger( type, data, this );
22137 } );
22138 },
22139 triggerHandler: function( type, data ) {
22140 var elem = this[ 0 ];
22141 if ( elem ) {
22142 return jQuery.event.trigger( type, data, elem, true );
22143 }
22144 }
22145} );
8b095871 22146
8b095871 22147
26dd39fd
IC
22148jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22149 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22150 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22151 function( i, name ) {
8b095871 22152
26dd39fd
IC
22153 // Handle event binding
22154 jQuery.fn[ name ] = function( data, fn ) {
22155 return arguments.length > 0 ?
22156 this.on( name, null, data, fn ) :
22157 this.trigger( name );
22158 };
22159} );
8b095871 22160
26dd39fd
IC
22161jQuery.fn.extend( {
22162 hover: function( fnOver, fnOut ) {
22163 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22164 }
22165} );
8b095871 22166
8b095871 22167
8b095871 22168
8b095871 22169
26dd39fd 22170support.focusin = "onfocusin" in window;
8b095871 22171
8b095871 22172
26dd39fd
IC
22173// Support: Firefox <=44
22174// Firefox doesn't have focus(in | out) events
22175// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22176//
22177// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22178// focus(in | out) events fire after focus & blur events,
22179// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22180// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22181if ( !support.focusin ) {
22182 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22183
22184 // Attach a single capturing handler on the document while someone wants focusin/focusout
22185 var handler = function( event ) {
22186 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22187 };
8b095871 22188
26dd39fd
IC
22189 jQuery.event.special[ fix ] = {
22190 setup: function() {
22191 var doc = this.ownerDocument || this,
22192 attaches = dataPriv.access( doc, fix );
22193
22194 if ( !attaches ) {
22195 doc.addEventListener( orig, handler, true );
22196 }
22197 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22198 },
22199 teardown: function() {
22200 var doc = this.ownerDocument || this,
22201 attaches = dataPriv.access( doc, fix ) - 1;
22202
22203 if ( !attaches ) {
22204 doc.removeEventListener( orig, handler, true );
22205 dataPriv.remove( doc, fix );
22206
22207 } else {
22208 dataPriv.access( doc, fix, attaches );
22209 }
22210 }
22211 };
22212 } );
22213}
22214var location = window.location;
8b095871 22215
26dd39fd 22216var nonce = jQuery.now();
8b095871 22217
26dd39fd 22218var rquery = ( /\?/ );
8b095871 22219
8b095871 22220
8b095871 22221
26dd39fd
IC
22222// Cross-browser xml parsing
22223jQuery.parseXML = function( data ) {
22224 var xml;
22225 if ( !data || typeof data !== "string" ) {
22226 return null;
22227 }
8b095871 22228
26dd39fd
IC
22229 // Support: IE 9 - 11 only
22230 // IE throws on parseFromString with invalid input.
22231 try {
22232 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22233 } catch ( e ) {
22234 xml = undefined;
22235 }
8b095871 22236
26dd39fd
IC
22237 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22238 jQuery.error( "Invalid XML: " + data );
22239 }
22240 return xml;
22241};
8b095871 22242
8b095871 22243
26dd39fd
IC
22244var
22245 rbracket = /\[\]$/,
22246 rCRLF = /\r?\n/g,
22247 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22248 rsubmittable = /^(?:input|select|textarea|keygen)/i;
8b095871 22249
26dd39fd
IC
22250function buildParams( prefix, obj, traditional, add ) {
22251 var name;
8b095871 22252
26dd39fd 22253 if ( Array.isArray( obj ) ) {
8b095871 22254
26dd39fd
IC
22255 // Serialize array item.
22256 jQuery.each( obj, function( i, v ) {
22257 if ( traditional || rbracket.test( prefix ) ) {
8b095871 22258
26dd39fd
IC
22259 // Treat each array item as a scalar.
22260 add( prefix, v );
8b095871 22261
26dd39fd 22262 } else {
8b095871 22263
26dd39fd
IC
22264 // Item is non-scalar (array or object), encode its numeric index.
22265 buildParams(
22266 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22267 v,
22268 traditional,
22269 add
22270 );
22271 }
22272 } );
8b095871 22273
26dd39fd 22274 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
8b095871 22275
26dd39fd
IC
22276 // Serialize object item.
22277 for ( name in obj ) {
22278 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22279 }
8b095871 22280
26dd39fd 22281 } else {
8b095871 22282
26dd39fd
IC
22283 // Serialize scalar item.
22284 add( prefix, obj );
22285 }
22286}
8b095871 22287
26dd39fd
IC
22288// Serialize an array of form elements or a set of
22289// key/values into a query string
22290jQuery.param = function( a, traditional ) {
22291 var prefix,
22292 s = [],
22293 add = function( key, valueOrFunction ) {
8b095871 22294
26dd39fd
IC
22295 // If value is a function, invoke it and use its return value
22296 var value = jQuery.isFunction( valueOrFunction ) ?
22297 valueOrFunction() :
22298 valueOrFunction;
8b095871 22299
26dd39fd
IC
22300 s[ s.length ] = encodeURIComponent( key ) + "=" +
22301 encodeURIComponent( value == null ? "" : value );
22302 };
8b095871 22303
26dd39fd
IC
22304 // If an array was passed in, assume that it is an array of form elements.
22305 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
8b095871 22306
26dd39fd
IC
22307 // Serialize the form elements
22308 jQuery.each( a, function() {
22309 add( this.name, this.value );
22310 } );
8b095871 22311
26dd39fd 22312 } else {
8b095871 22313
26dd39fd
IC
22314 // If traditional, encode the "old" way (the way 1.3.2 or older
22315 // did it), otherwise encode params recursively.
22316 for ( prefix in a ) {
22317 buildParams( prefix, a[ prefix ], traditional, add );
22318 }
22319 }
8b095871 22320
26dd39fd
IC
22321 // Return the resulting serialization
22322 return s.join( "&" );
22323};
22324
22325jQuery.fn.extend( {
22326 serialize: function() {
22327 return jQuery.param( this.serializeArray() );
22328 },
22329 serializeArray: function() {
22330 return this.map( function() {
22331
22332 // Can add propHook for "elements" to filter or add form elements
22333 var elements = jQuery.prop( this, "elements" );
22334 return elements ? jQuery.makeArray( elements ) : this;
22335 } )
22336 .filter( function() {
22337 var type = this.type;
22338
22339 // Use .is( ":disabled" ) so that fieldset[disabled] works
22340 return this.name && !jQuery( this ).is( ":disabled" ) &&
22341 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22342 ( this.checked || !rcheckableType.test( type ) );
22343 } )
22344 .map( function( i, elem ) {
22345 var val = jQuery( this ).val();
22346
22347 if ( val == null ) {
22348 return null;
22349 }
8b095871 22350
26dd39fd
IC
22351 if ( Array.isArray( val ) ) {
22352 return jQuery.map( val, function( val ) {
22353 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22354 } );
22355 }
8b095871 22356
26dd39fd
IC
22357 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22358 } ).get();
22359 }
22360} );
22361
22362
22363var
22364 r20 = /%20/g,
22365 rhash = /#.*$/,
22366 rantiCache = /([?&])_=[^&]*/,
22367 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22368
22369 // #7653, #8125, #8152: local protocol detection
22370 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22371 rnoContent = /^(?:GET|HEAD)$/,
22372 rprotocol = /^\/\//,
22373
22374 /* Prefilters
22375 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22376 * 2) These are called:
22377 * - BEFORE asking for a transport
22378 * - AFTER param serialization (s.data is a string if s.processData is true)
22379 * 3) key is the dataType
22380 * 4) the catchall symbol "*" can be used
22381 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22382 */
22383 prefilters = {},
22384
22385 /* Transports bindings
22386 * 1) key is the dataType
22387 * 2) the catchall symbol "*" can be used
22388 * 3) selection will start with transport dataType and THEN go to "*" if needed
22389 */
22390 transports = {},
22391
22392 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22393 allTypes = "*/".concat( "*" ),
22394
22395 // Anchor tag for parsing the document origin
22396 originAnchor = document.createElement( "a" );
22397 originAnchor.href = location.href;
22398
22399// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22400function addToPrefiltersOrTransports( structure ) {
22401
22402 // dataTypeExpression is optional and defaults to "*"
22403 return function( dataTypeExpression, func ) {
22404
22405 if ( typeof dataTypeExpression !== "string" ) {
22406 func = dataTypeExpression;
22407 dataTypeExpression = "*";
22408 }
8b095871 22409
26dd39fd
IC
22410 var dataType,
22411 i = 0,
22412 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
8b095871 22413
26dd39fd 22414 if ( jQuery.isFunction( func ) ) {
8b095871 22415
26dd39fd
IC
22416 // For each dataType in the dataTypeExpression
22417 while ( ( dataType = dataTypes[ i++ ] ) ) {
8b095871 22418
26dd39fd
IC
22419 // Prepend if requested
22420 if ( dataType[ 0 ] === "+" ) {
22421 dataType = dataType.slice( 1 ) || "*";
22422 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
8b095871 22423
26dd39fd
IC
22424 // Otherwise append
22425 } else {
22426 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22427 }
22428 }
22429 }
22430 };
22431}
22432
22433// Base inspection function for prefilters and transports
22434function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
8b095871 22435
26dd39fd
IC
22436 var inspected = {},
22437 seekingTransport = ( structure === transports );
8b095871 22438
26dd39fd
IC
22439 function inspect( dataType ) {
22440 var selected;
22441 inspected[ dataType ] = true;
22442 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22443 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22444 if ( typeof dataTypeOrTransport === "string" &&
22445 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
8b095871 22446
26dd39fd
IC
22447 options.dataTypes.unshift( dataTypeOrTransport );
22448 inspect( dataTypeOrTransport );
22449 return false;
22450 } else if ( seekingTransport ) {
22451 return !( selected = dataTypeOrTransport );
22452 }
22453 } );
22454 return selected;
22455 }
8b095871 22456
26dd39fd
IC
22457 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22458}
8b095871 22459
26dd39fd
IC
22460// A special extend for ajax options
22461// that takes "flat" options (not to be deep extended)
22462// Fixes #9887
22463function ajaxExtend( target, src ) {
22464 var key, deep,
22465 flatOptions = jQuery.ajaxSettings.flatOptions || {};
8b095871 22466
26dd39fd
IC
22467 for ( key in src ) {
22468 if ( src[ key ] !== undefined ) {
22469 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22470 }
22471 }
22472 if ( deep ) {
22473 jQuery.extend( true, target, deep );
22474 }
8b095871 22475
26dd39fd
IC
22476 return target;
22477}
8b095871 22478
26dd39fd
IC
22479/* Handles responses to an ajax request:
22480 * - finds the right dataType (mediates between content-type and expected dataType)
22481 * - returns the corresponding response
22482 */
22483function ajaxHandleResponses( s, jqXHR, responses ) {
8b095871 22484
26dd39fd
IC
22485 var ct, type, finalDataType, firstDataType,
22486 contents = s.contents,
22487 dataTypes = s.dataTypes;
8b095871 22488
26dd39fd
IC
22489 // Remove auto dataType and get content-type in the process
22490 while ( dataTypes[ 0 ] === "*" ) {
22491 dataTypes.shift();
22492 if ( ct === undefined ) {
22493 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22494 }
22495 }
8b095871 22496
26dd39fd
IC
22497 // Check if we're dealing with a known content-type
22498 if ( ct ) {
22499 for ( type in contents ) {
22500 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22501 dataTypes.unshift( type );
22502 break;
22503 }
22504 }
22505 }
8b095871 22506
26dd39fd
IC
22507 // Check to see if we have a response for the expected dataType
22508 if ( dataTypes[ 0 ] in responses ) {
22509 finalDataType = dataTypes[ 0 ];
22510 } else {
8b095871 22511
26dd39fd
IC
22512 // Try convertible dataTypes
22513 for ( type in responses ) {
22514 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22515 finalDataType = type;
22516 break;
22517 }
22518 if ( !firstDataType ) {
22519 firstDataType = type;
22520 }
22521 }
8b095871 22522
26dd39fd
IC
22523 // Or just use first one
22524 finalDataType = finalDataType || firstDataType;
22525 }
8b095871 22526
26dd39fd
IC
22527 // If we found a dataType
22528 // We add the dataType to the list if needed
22529 // and return the corresponding response
22530 if ( finalDataType ) {
22531 if ( finalDataType !== dataTypes[ 0 ] ) {
22532 dataTypes.unshift( finalDataType );
22533 }
22534 return responses[ finalDataType ];
22535 }
22536}
8b095871 22537
26dd39fd
IC
22538/* Chain conversions given the request and the original response
22539 * Also sets the responseXXX fields on the jqXHR instance
22540 */
22541function ajaxConvert( s, response, jqXHR, isSuccess ) {
22542 var conv2, current, conv, tmp, prev,
22543 converters = {},
8b095871 22544
26dd39fd
IC
22545 // Work with a copy of dataTypes in case we need to modify it for conversion
22546 dataTypes = s.dataTypes.slice();
8b095871 22547
26dd39fd
IC
22548 // Create converters map with lowercased keys
22549 if ( dataTypes[ 1 ] ) {
22550 for ( conv in s.converters ) {
22551 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22552 }
22553 }
8b095871 22554
26dd39fd 22555 current = dataTypes.shift();
8b095871 22556
26dd39fd
IC
22557 // Convert to each sequential dataType
22558 while ( current ) {
8b095871 22559
26dd39fd
IC
22560 if ( s.responseFields[ current ] ) {
22561 jqXHR[ s.responseFields[ current ] ] = response;
22562 }
8b095871 22563
26dd39fd
IC
22564 // Apply the dataFilter if provided
22565 if ( !prev && isSuccess && s.dataFilter ) {
22566 response = s.dataFilter( response, s.dataType );
22567 }
8b095871 22568
26dd39fd
IC
22569 prev = current;
22570 current = dataTypes.shift();
22571
22572 if ( current ) {
22573
22574 // There's only work to do if current dataType is non-auto
22575 if ( current === "*" ) {
22576
22577 current = prev;
22578
22579 // Convert response if prev dataType is non-auto and differs from current
22580 } else if ( prev !== "*" && prev !== current ) {
22581
22582 // Seek a direct converter
22583 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22584
22585 // If none found, seek a pair
22586 if ( !conv ) {
22587 for ( conv2 in converters ) {
22588
22589 // If conv2 outputs current
22590 tmp = conv2.split( " " );
22591 if ( tmp[ 1 ] === current ) {
22592
22593 // If prev can be converted to accepted input
22594 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22595 converters[ "* " + tmp[ 0 ] ];
22596 if ( conv ) {
22597
22598 // Condense equivalence converters
22599 if ( conv === true ) {
22600 conv = converters[ conv2 ];
22601
22602 // Otherwise, insert the intermediate dataType
22603 } else if ( converters[ conv2 ] !== true ) {
22604 current = tmp[ 0 ];
22605 dataTypes.unshift( tmp[ 1 ] );
22606 }
22607 break;
22608 }
22609 }
22610 }
22611 }
22612
22613 // Apply converter (if not an equivalence)
22614 if ( conv !== true ) {
22615
22616 // Unless errors are allowed to bubble, catch and return them
22617 if ( conv && s.throws ) {
22618 response = conv( response );
22619 } else {
22620 try {
22621 response = conv( response );
22622 } catch ( e ) {
22623 return {
22624 state: "parsererror",
22625 error: conv ? e : "No conversion from " + prev + " to " + current
22626 };
22627 }
22628 }
22629 }
22630 }
22631 }
22632 }
8b095871 22633
26dd39fd
IC
22634 return { state: "success", data: response };
22635}
22636
22637jQuery.extend( {
22638
22639 // Counter for holding the number of active queries
22640 active: 0,
22641
22642 // Last-Modified header cache for next request
22643 lastModified: {},
22644 etag: {},
22645
22646 ajaxSettings: {
22647 url: location.href,
22648 type: "GET",
22649 isLocal: rlocalProtocol.test( location.protocol ),
22650 global: true,
22651 processData: true,
22652 async: true,
22653 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22654
22655 /*
22656 timeout: 0,
22657 data: null,
22658 dataType: null,
22659 username: null,
22660 password: null,
22661 cache: null,
22662 throws: false,
22663 traditional: false,
22664 headers: {},
22665 */
22666
22667 accepts: {
22668 "*": allTypes,
22669 text: "text/plain",
22670 html: "text/html",
22671 xml: "application/xml, text/xml",
22672 json: "application/json, text/javascript"
22673 },
22674
22675 contents: {
22676 xml: /\bxml\b/,
22677 html: /\bhtml/,
22678 json: /\bjson\b/
22679 },
22680
22681 responseFields: {
22682 xml: "responseXML",
22683 text: "responseText",
22684 json: "responseJSON"
22685 },
22686
22687 // Data converters
22688 // Keys separate source (or catchall "*") and destination types with a single space
22689 converters: {
22690
22691 // Convert anything to text
22692 "* text": String,
22693
22694 // Text to html (true = no transformation)
22695 "text html": true,
22696
22697 // Evaluate text as a json expression
22698 "text json": JSON.parse,
22699
22700 // Parse text as xml
22701 "text xml": jQuery.parseXML
22702 },
22703
22704 // For options that shouldn't be deep extended:
22705 // you can add your own custom options here if
22706 // and when you create one that shouldn't be
22707 // deep extended (see ajaxExtend)
22708 flatOptions: {
22709 url: true,
22710 context: true
22711 }
22712 },
8b095871 22713
26dd39fd
IC
22714 // Creates a full fledged settings object into target
22715 // with both ajaxSettings and settings fields.
22716 // If target is omitted, writes into ajaxSettings.
22717 ajaxSetup: function( target, settings ) {
22718 return settings ?
8b095871 22719
26dd39fd
IC
22720 // Building a settings object
22721 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
8b095871 22722
26dd39fd
IC
22723 // Extending ajaxSettings
22724 ajaxExtend( jQuery.ajaxSettings, target );
22725 },
8b095871 22726
26dd39fd
IC
22727 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22728 ajaxTransport: addToPrefiltersOrTransports( transports ),
8b095871 22729
26dd39fd
IC
22730 // Main method
22731 ajax: function( url, options ) {
8b095871 22732
26dd39fd
IC
22733 // If url is an object, simulate pre-1.5 signature
22734 if ( typeof url === "object" ) {
22735 options = url;
22736 url = undefined;
22737 }
8b095871 22738
26dd39fd
IC
22739 // Force options to be an object
22740 options = options || {};
22741
22742 var transport,
22743
22744 // URL without anti-cache param
22745 cacheURL,
22746
22747 // Response headers
22748 responseHeadersString,
22749 responseHeaders,
22750
22751 // timeout handle
22752 timeoutTimer,
22753
22754 // Url cleanup var
22755 urlAnchor,
22756
22757 // Request state (becomes false upon send and true upon completion)
22758 completed,
22759
22760 // To know if global events are to be dispatched
22761 fireGlobals,
22762
22763 // Loop variable
22764 i,
22765
22766 // uncached part of the url
22767 uncached,
22768
22769 // Create the final options object
22770 s = jQuery.ajaxSetup( {}, options ),
22771
22772 // Callbacks context
22773 callbackContext = s.context || s,
22774
22775 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22776 globalEventContext = s.context &&
22777 ( callbackContext.nodeType || callbackContext.jquery ) ?
22778 jQuery( callbackContext ) :
22779 jQuery.event,
22780
22781 // Deferreds
22782 deferred = jQuery.Deferred(),
22783 completeDeferred = jQuery.Callbacks( "once memory" ),
22784
22785 // Status-dependent callbacks
22786 statusCode = s.statusCode || {},
22787
22788 // Headers (they are sent all at once)
22789 requestHeaders = {},
22790 requestHeadersNames = {},
22791
22792 // Default abort message
22793 strAbort = "canceled",
22794
22795 // Fake xhr
22796 jqXHR = {
22797 readyState: 0,
22798
22799 // Builds headers hashtable if needed
22800 getResponseHeader: function( key ) {
22801 var match;
22802 if ( completed ) {
22803 if ( !responseHeaders ) {
22804 responseHeaders = {};
22805 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22806 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22807 }
22808 }
22809 match = responseHeaders[ key.toLowerCase() ];
22810 }
22811 return match == null ? null : match;
22812 },
22813
22814 // Raw string
22815 getAllResponseHeaders: function() {
22816 return completed ? responseHeadersString : null;
22817 },
22818
22819 // Caches the header
22820 setRequestHeader: function( name, value ) {
22821 if ( completed == null ) {
22822 name = requestHeadersNames[ name.toLowerCase() ] =
22823 requestHeadersNames[ name.toLowerCase() ] || name;
22824 requestHeaders[ name ] = value;
22825 }
22826 return this;
22827 },
22828
22829 // Overrides response content-type header
22830 overrideMimeType: function( type ) {
22831 if ( completed == null ) {
22832 s.mimeType = type;
22833 }
22834 return this;
22835 },
22836
22837 // Status-dependent callbacks
22838 statusCode: function( map ) {
22839 var code;
22840 if ( map ) {
22841 if ( completed ) {
22842
22843 // Execute the appropriate callbacks
22844 jqXHR.always( map[ jqXHR.status ] );
22845 } else {
22846
22847 // Lazy-add the new callbacks in a way that preserves old ones
22848 for ( code in map ) {
22849 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22850 }
22851 }
22852 }
22853 return this;
22854 },
22855
22856 // Cancel the request
22857 abort: function( statusText ) {
22858 var finalText = statusText || strAbort;
22859 if ( transport ) {
22860 transport.abort( finalText );
22861 }
22862 done( 0, finalText );
22863 return this;
22864 }
22865 };
22866
22867 // Attach deferreds
22868 deferred.promise( jqXHR );
22869
22870 // Add protocol if not provided (prefilters might expect it)
22871 // Handle falsy url in the settings object (#10093: consistency with old signature)
22872 // We also use the url parameter if available
22873 s.url = ( ( url || s.url || location.href ) + "" )
22874 .replace( rprotocol, location.protocol + "//" );
22875
22876 // Alias method option to type as per ticket #12004
22877 s.type = options.method || options.type || s.method || s.type;
22878
22879 // Extract dataTypes list
22880 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
22881
22882 // A cross-domain request is in order when the origin doesn't match the current origin.
22883 if ( s.crossDomain == null ) {
22884 urlAnchor = document.createElement( "a" );
22885
22886 // Support: IE <=8 - 11, Edge 12 - 13
22887 // IE throws exception on accessing the href property if url is malformed,
22888 // e.g. http://example.com:80x/
22889 try {
22890 urlAnchor.href = s.url;
22891
22892 // Support: IE <=8 - 11 only
22893 // Anchor's host property isn't correctly set when s.url is relative
22894 urlAnchor.href = urlAnchor.href;
22895 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
22896 urlAnchor.protocol + "//" + urlAnchor.host;
22897 } catch ( e ) {
22898
22899 // If there is an error parsing the URL, assume it is crossDomain,
22900 // it can be rejected by the transport if it is invalid
22901 s.crossDomain = true;
22902 }
22903 }
8b095871 22904
26dd39fd
IC
22905 // Convert data if not already a string
22906 if ( s.data && s.processData && typeof s.data !== "string" ) {
22907 s.data = jQuery.param( s.data, s.traditional );
22908 }
8b095871 22909
26dd39fd
IC
22910 // Apply prefilters
22911 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
8b095871 22912
26dd39fd
IC
22913 // If request was aborted inside a prefilter, stop there
22914 if ( completed ) {
22915 return jqXHR;
22916 }
8b095871 22917
26dd39fd
IC
22918 // We can fire global events as of now if asked to
22919 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
22920 fireGlobals = jQuery.event && s.global;
8b095871 22921
26dd39fd
IC
22922 // Watch for a new set of requests
22923 if ( fireGlobals && jQuery.active++ === 0 ) {
22924 jQuery.event.trigger( "ajaxStart" );
22925 }
8b095871 22926
26dd39fd
IC
22927 // Uppercase the type
22928 s.type = s.type.toUpperCase();
8b095871 22929
26dd39fd
IC
22930 // Determine if request has content
22931 s.hasContent = !rnoContent.test( s.type );
8b095871 22932
26dd39fd
IC
22933 // Save the URL in case we're toying with the If-Modified-Since
22934 // and/or If-None-Match header later on
22935 // Remove hash to simplify url manipulation
22936 cacheURL = s.url.replace( rhash, "" );
8b095871 22937
26dd39fd
IC
22938 // More options handling for requests with no content
22939 if ( !s.hasContent ) {
8b095871 22940
26dd39fd
IC
22941 // Remember the hash so we can put it back
22942 uncached = s.url.slice( cacheURL.length );
8b095871 22943
26dd39fd
IC
22944 // If data is available, append data to url
22945 if ( s.data ) {
22946 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
8b095871 22947
26dd39fd
IC
22948 // #9682: remove data so that it's not used in an eventual retry
22949 delete s.data;
22950 }
8b095871 22951
26dd39fd
IC
22952 // Add or update anti-cache param if needed
22953 if ( s.cache === false ) {
22954 cacheURL = cacheURL.replace( rantiCache, "$1" );
22955 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
22956 }
8b095871 22957
26dd39fd
IC
22958 // Put hash and anti-cache on the URL that will be requested (gh-1732)
22959 s.url = cacheURL + uncached;
8b095871 22960
26dd39fd
IC
22961 // Change '%20' to '+' if this is encoded form body content (gh-2658)
22962 } else if ( s.data && s.processData &&
22963 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
22964 s.data = s.data.replace( r20, "+" );
22965 }
8b095871 22966
26dd39fd
IC
22967 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
22968 if ( s.ifModified ) {
22969 if ( jQuery.lastModified[ cacheURL ] ) {
22970 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
22971 }
22972 if ( jQuery.etag[ cacheURL ] ) {
22973 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
22974 }
22975 }
8b095871 22976
26dd39fd
IC
22977 // Set the correct header, if data is being sent
22978 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
22979 jqXHR.setRequestHeader( "Content-Type", s.contentType );
22980 }
8b095871 22981
26dd39fd
IC
22982 // Set the Accepts header for the server, depending on the dataType
22983 jqXHR.setRequestHeader(
22984 "Accept",
22985 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
22986 s.accepts[ s.dataTypes[ 0 ] ] +
22987 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
22988 s.accepts[ "*" ]
22989 );
22990
22991 // Check for headers option
22992 for ( i in s.headers ) {
22993 jqXHR.setRequestHeader( i, s.headers[ i ] );
22994 }
8b095871 22995
26dd39fd
IC
22996 // Allow custom headers/mimetypes and early abort
22997 if ( s.beforeSend &&
22998 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
8b095871 22999
26dd39fd
IC
23000 // Abort if not done already and return
23001 return jqXHR.abort();
23002 }
8b095871 23003
26dd39fd
IC
23004 // Aborting is no longer a cancellation
23005 strAbort = "abort";
8b095871 23006
26dd39fd
IC
23007 // Install callbacks on deferreds
23008 completeDeferred.add( s.complete );
23009 jqXHR.done( s.success );
23010 jqXHR.fail( s.error );
8b095871 23011
26dd39fd
IC
23012 // Get transport
23013 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
8b095871 23014
26dd39fd
IC
23015 // If no transport, we auto-abort
23016 if ( !transport ) {
23017 done( -1, "No Transport" );
23018 } else {
23019 jqXHR.readyState = 1;
8b095871 23020
26dd39fd
IC
23021 // Send global event
23022 if ( fireGlobals ) {
23023 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23024 }
8b095871 23025
26dd39fd
IC
23026 // If request was aborted inside ajaxSend, stop there
23027 if ( completed ) {
23028 return jqXHR;
23029 }
8b095871 23030
26dd39fd
IC
23031 // Timeout
23032 if ( s.async && s.timeout > 0 ) {
23033 timeoutTimer = window.setTimeout( function() {
23034 jqXHR.abort( "timeout" );
23035 }, s.timeout );
23036 }
8b095871 23037
26dd39fd
IC
23038 try {
23039 completed = false;
23040 transport.send( requestHeaders, done );
23041 } catch ( e ) {
8b095871 23042
26dd39fd
IC
23043 // Rethrow post-completion exceptions
23044 if ( completed ) {
23045 throw e;
23046 }
8b095871 23047
26dd39fd
IC
23048 // Propagate others as results
23049 done( -1, e );
23050 }
23051 }
8b095871 23052
26dd39fd
IC
23053 // Callback for when everything is done
23054 function done( status, nativeStatusText, responses, headers ) {
23055 var isSuccess, success, error, response, modified,
23056 statusText = nativeStatusText;
8b095871 23057
26dd39fd
IC
23058 // Ignore repeat invocations
23059 if ( completed ) {
23060 return;
23061 }
8b095871 23062
26dd39fd 23063 completed = true;
8b095871 23064
26dd39fd
IC
23065 // Clear timeout if it exists
23066 if ( timeoutTimer ) {
23067 window.clearTimeout( timeoutTimer );
23068 }
23069
23070 // Dereference transport for early garbage collection
23071 // (no matter how long the jqXHR object will be used)
23072 transport = undefined;
23073
23074 // Cache response headers
23075 responseHeadersString = headers || "";
23076
23077 // Set readyState
23078 jqXHR.readyState = status > 0 ? 4 : 0;
23079
23080 // Determine if successful
23081 isSuccess = status >= 200 && status < 300 || status === 304;
23082
23083 // Get response data
23084 if ( responses ) {
23085 response = ajaxHandleResponses( s, jqXHR, responses );
23086 }
23087
23088 // Convert no matter what (that way responseXXX fields are always set)
23089 response = ajaxConvert( s, response, jqXHR, isSuccess );
23090
23091 // If successful, handle type chaining
23092 if ( isSuccess ) {
23093
23094 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23095 if ( s.ifModified ) {
23096 modified = jqXHR.getResponseHeader( "Last-Modified" );
23097 if ( modified ) {
23098 jQuery.lastModified[ cacheURL ] = modified;
23099 }
23100 modified = jqXHR.getResponseHeader( "etag" );
23101 if ( modified ) {
23102 jQuery.etag[ cacheURL ] = modified;
23103 }
23104 }
23105
23106 // if no content
23107 if ( status === 204 || s.type === "HEAD" ) {
23108 statusText = "nocontent";
23109
23110 // if not modified
23111 } else if ( status === 304 ) {
23112 statusText = "notmodified";
23113
23114 // If we have data, let's convert it
23115 } else {
23116 statusText = response.state;
23117 success = response.data;
23118 error = response.error;
23119 isSuccess = !error;
23120 }
23121 } else {
23122
23123 // Extract error from statusText and normalize for non-aborts
23124 error = statusText;
23125 if ( status || !statusText ) {
23126 statusText = "error";
23127 if ( status < 0 ) {
23128 status = 0;
23129 }
23130 }
23131 }
8b095871 23132
26dd39fd
IC
23133 // Set data for the fake xhr object
23134 jqXHR.status = status;
23135 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
8b095871 23136
26dd39fd
IC
23137 // Success/Error
23138 if ( isSuccess ) {
23139 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23140 } else {
23141 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23142 }
8b095871 23143
26dd39fd
IC
23144 // Status-dependent callbacks
23145 jqXHR.statusCode( statusCode );
23146 statusCode = undefined;
8b095871 23147
26dd39fd
IC
23148 if ( fireGlobals ) {
23149 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23150 [ jqXHR, s, isSuccess ? success : error ] );
23151 }
8b095871 23152
26dd39fd
IC
23153 // Complete
23154 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
8b095871 23155
26dd39fd
IC
23156 if ( fireGlobals ) {
23157 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
8b095871 23158
26dd39fd
IC
23159 // Handle the global AJAX counter
23160 if ( !( --jQuery.active ) ) {
23161 jQuery.event.trigger( "ajaxStop" );
23162 }
23163 }
23164 }
8b095871 23165
26dd39fd
IC
23166 return jqXHR;
23167 },
8b095871 23168
26dd39fd
IC
23169 getJSON: function( url, data, callback ) {
23170 return jQuery.get( url, data, callback, "json" );
23171 },
8b095871 23172
26dd39fd
IC
23173 getScript: function( url, callback ) {
23174 return jQuery.get( url, undefined, callback, "script" );
23175 }
23176} );
8b095871 23177
26dd39fd
IC
23178jQuery.each( [ "get", "post" ], function( i, method ) {
23179 jQuery[ method ] = function( url, data, callback, type ) {
8b095871 23180
26dd39fd
IC
23181 // Shift arguments if data argument was omitted
23182 if ( jQuery.isFunction( data ) ) {
23183 type = type || callback;
23184 callback = data;
23185 data = undefined;
23186 }
8b095871 23187
26dd39fd
IC
23188 // The url can be an options object (which then must have .url)
23189 return jQuery.ajax( jQuery.extend( {
23190 url: url,
23191 type: method,
23192 dataType: type,
23193 data: data,
23194 success: callback
23195 }, jQuery.isPlainObject( url ) && url ) );
23196 };
23197} );
8b095871 23198
8b095871 23199
26dd39fd
IC
23200jQuery._evalUrl = function( url ) {
23201 return jQuery.ajax( {
23202 url: url,
8b095871 23203
26dd39fd
IC
23204 // Make this explicit, since user can override this through ajaxSetup (#11264)
23205 type: "GET",
23206 dataType: "script",
23207 cache: true,
23208 async: false,
23209 global: false,
23210 "throws": true
23211 } );
23212};
8b095871 23213
8b095871 23214
26dd39fd
IC
23215jQuery.fn.extend( {
23216 wrapAll: function( html ) {
23217 var wrap;
8b095871 23218
26dd39fd
IC
23219 if ( this[ 0 ] ) {
23220 if ( jQuery.isFunction( html ) ) {
23221 html = html.call( this[ 0 ] );
23222 }
8b095871 23223
26dd39fd
IC
23224 // The elements to wrap the target around
23225 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
8b095871 23226
26dd39fd
IC
23227 if ( this[ 0 ].parentNode ) {
23228 wrap.insertBefore( this[ 0 ] );
23229 }
8b095871 23230
26dd39fd
IC
23231 wrap.map( function() {
23232 var elem = this;
8b095871 23233
26dd39fd
IC
23234 while ( elem.firstElementChild ) {
23235 elem = elem.firstElementChild;
23236 }
8b095871 23237
26dd39fd
IC
23238 return elem;
23239 } ).append( this );
23240 }
8b095871 23241
26dd39fd
IC
23242 return this;
23243 },
8b095871 23244
26dd39fd
IC
23245 wrapInner: function( html ) {
23246 if ( jQuery.isFunction( html ) ) {
23247 return this.each( function( i ) {
23248 jQuery( this ).wrapInner( html.call( this, i ) );
23249 } );
23250 }
8b095871 23251
26dd39fd
IC
23252 return this.each( function() {
23253 var self = jQuery( this ),
23254 contents = self.contents();
8b095871 23255
26dd39fd
IC
23256 if ( contents.length ) {
23257 contents.wrapAll( html );
8b095871 23258
26dd39fd
IC
23259 } else {
23260 self.append( html );
23261 }
23262 } );
23263 },
8b095871 23264
26dd39fd
IC
23265 wrap: function( html ) {
23266 var isFunction = jQuery.isFunction( html );
8b095871 23267
26dd39fd
IC
23268 return this.each( function( i ) {
23269 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23270 } );
23271 },
8b095871 23272
26dd39fd
IC
23273 unwrap: function( selector ) {
23274 this.parent( selector ).not( "body" ).each( function() {
23275 jQuery( this ).replaceWith( this.childNodes );
23276 } );
23277 return this;
23278 }
23279} );
23280
23281
23282jQuery.expr.pseudos.hidden = function( elem ) {
23283 return !jQuery.expr.pseudos.visible( elem );
23284};
23285jQuery.expr.pseudos.visible = function( elem ) {
23286 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23287};
23288
23289
23290
23291
23292jQuery.ajaxSettings.xhr = function() {
23293 try {
23294 return new window.XMLHttpRequest();
23295 } catch ( e ) {}
23296};
23297
23298var xhrSuccessStatus = {
23299
23300 // File protocol always yields status code 0, assume 200
23301 0: 200,
23302
23303 // Support: IE <=9 only
23304 // #1450: sometimes IE returns 1223 when it should be 204
23305 1223: 204
23306 },
23307 xhrSupported = jQuery.ajaxSettings.xhr();
23308
23309support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23310support.ajax = xhrSupported = !!xhrSupported;
23311
23312jQuery.ajaxTransport( function( options ) {
23313 var callback, errorCallback;
23314
23315 // Cross domain only allowed if supported through XMLHttpRequest
23316 if ( support.cors || xhrSupported && !options.crossDomain ) {
23317 return {
23318 send: function( headers, complete ) {
23319 var i,
23320 xhr = options.xhr();
23321
23322 xhr.open(
23323 options.type,
23324 options.url,
23325 options.async,
23326 options.username,
23327 options.password
23328 );
23329
23330 // Apply custom fields if provided
23331 if ( options.xhrFields ) {
23332 for ( i in options.xhrFields ) {
23333 xhr[ i ] = options.xhrFields[ i ];
23334 }
23335 }
23336
23337 // Override mime type if needed
23338 if ( options.mimeType && xhr.overrideMimeType ) {
23339 xhr.overrideMimeType( options.mimeType );
23340 }
23341
23342 // X-Requested-With header
23343 // For cross-domain requests, seeing as conditions for a preflight are
23344 // akin to a jigsaw puzzle, we simply never set it to be sure.
23345 // (it can always be set on a per-request basis or even using ajaxSetup)
23346 // For same-domain requests, won't change header if already provided.
23347 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23348 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23349 }
23350
23351 // Set headers
23352 for ( i in headers ) {
23353 xhr.setRequestHeader( i, headers[ i ] );
23354 }
23355
23356 // Callback
23357 callback = function( type ) {
23358 return function() {
23359 if ( callback ) {
23360 callback = errorCallback = xhr.onload =
23361 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23362
23363 if ( type === "abort" ) {
23364 xhr.abort();
23365 } else if ( type === "error" ) {
23366
23367 // Support: IE <=9 only
23368 // On a manual native abort, IE9 throws
23369 // errors on any property access that is not readyState
23370 if ( typeof xhr.status !== "number" ) {
23371 complete( 0, "error" );
23372 } else {
23373 complete(
23374
23375 // File: protocol always yields status 0; see #8605, #14207
23376 xhr.status,
23377 xhr.statusText
23378 );
23379 }
23380 } else {
23381 complete(
23382 xhrSuccessStatus[ xhr.status ] || xhr.status,
23383 xhr.statusText,
23384
23385 // Support: IE <=9 only
23386 // IE9 has no XHR2 but throws on binary (trac-11426)
23387 // For XHR2 non-text, let the caller handle it (gh-2498)
23388 ( xhr.responseType || "text" ) !== "text" ||
23389 typeof xhr.responseText !== "string" ?
23390 { binary: xhr.response } :
23391 { text: xhr.responseText },
23392 xhr.getAllResponseHeaders()
23393 );
23394 }
23395 }
23396 };
23397 };
23398
23399 // Listen to events
23400 xhr.onload = callback();
23401 errorCallback = xhr.onerror = callback( "error" );
23402
23403 // Support: IE 9 only
23404 // Use onreadystatechange to replace onabort
23405 // to handle uncaught aborts
23406 if ( xhr.onabort !== undefined ) {
23407 xhr.onabort = errorCallback;
23408 } else {
23409 xhr.onreadystatechange = function() {
23410
23411 // Check readyState before timeout as it changes
23412 if ( xhr.readyState === 4 ) {
23413
23414 // Allow onerror to be called first,
23415 // but that will not handle a native abort
23416 // Also, save errorCallback to a variable
23417 // as xhr.onerror cannot be accessed
23418 window.setTimeout( function() {
23419 if ( callback ) {
23420 errorCallback();
23421 }
23422 } );
23423 }
23424 };
23425 }
23426
23427 // Create the abort callback
23428 callback = callback( "abort" );
23429
23430 try {
23431
23432 // Do send the request (this may raise an exception)
23433 xhr.send( options.hasContent && options.data || null );
23434 } catch ( e ) {
23435
23436 // #14683: Only rethrow if this hasn't been notified as an error yet
23437 if ( callback ) {
23438 throw e;
23439 }
23440 }
23441 },
23442
23443 abort: function() {
23444 if ( callback ) {
23445 callback();
23446 }
23447 }
23448 };
23449 }
23450} );
8b095871 23451
8b095871 23452
8b095871 23453
8b095871 23454
26dd39fd
IC
23455// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23456jQuery.ajaxPrefilter( function( s ) {
23457 if ( s.crossDomain ) {
23458 s.contents.script = false;
23459 }
23460} );
23461
23462// Install script dataType
23463jQuery.ajaxSetup( {
23464 accepts: {
23465 script: "text/javascript, application/javascript, " +
23466 "application/ecmascript, application/x-ecmascript"
23467 },
23468 contents: {
23469 script: /\b(?:java|ecma)script\b/
23470 },
23471 converters: {
23472 "text script": function( text ) {
23473 jQuery.globalEval( text );
23474 return text;
23475 }
23476 }
23477} );
8b095871 23478
26dd39fd
IC
23479// Handle cache's special case and crossDomain
23480jQuery.ajaxPrefilter( "script", function( s ) {
23481 if ( s.cache === undefined ) {
23482 s.cache = false;
23483 }
23484 if ( s.crossDomain ) {
23485 s.type = "GET";
23486 }
23487} );
23488
23489// Bind script tag hack transport
23490jQuery.ajaxTransport( "script", function( s ) {
23491
23492 // This transport only deals with cross domain requests
23493 if ( s.crossDomain ) {
23494 var script, callback;
23495 return {
23496 send: function( _, complete ) {
23497 script = jQuery( "<script>" ).prop( {
23498 charset: s.scriptCharset,
23499 src: s.url
23500 } ).on(
23501 "load error",
23502 callback = function( evt ) {
23503 script.remove();
23504 callback = null;
23505 if ( evt ) {
23506 complete( evt.type === "error" ? 404 : 200, evt.type );
23507 }
23508 }
23509 );
23510
23511 // Use native DOM manipulation to avoid our domManip AJAX trickery
23512 document.head.appendChild( script[ 0 ] );
23513 },
23514 abort: function() {
23515 if ( callback ) {
23516 callback();
23517 }
23518 }
23519 };
23520 }
23521} );
8b095871 23522
8b095871 23523
8b095871 23524
8b095871 23525
26dd39fd
IC
23526var oldCallbacks = [],
23527 rjsonp = /(=)\?(?=&|$)|\?\?/;
8b095871 23528
26dd39fd
IC
23529// Default jsonp settings
23530jQuery.ajaxSetup( {
23531 jsonp: "callback",
23532 jsonpCallback: function() {
23533 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23534 this[ callback ] = true;
23535 return callback;
23536 }
23537} );
23538
23539// Detect, normalize options and install callbacks for jsonp requests
23540jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23541
23542 var callbackName, overwritten, responseContainer,
23543 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23544 "url" :
23545 typeof s.data === "string" &&
23546 ( s.contentType || "" )
23547 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23548 rjsonp.test( s.data ) && "data"
23549 );
23550
23551 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23552 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23553
23554 // Get callback name, remembering preexisting value associated with it
23555 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23556 s.jsonpCallback() :
23557 s.jsonpCallback;
23558
23559 // Insert callback into url or form data
23560 if ( jsonProp ) {
23561 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23562 } else if ( s.jsonp !== false ) {
23563 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23564 }
8b095871 23565
26dd39fd
IC
23566 // Use data converter to retrieve json after script execution
23567 s.converters[ "script json" ] = function() {
23568 if ( !responseContainer ) {
23569 jQuery.error( callbackName + " was not called" );
23570 }
23571 return responseContainer[ 0 ];
23572 };
8b095871 23573
26dd39fd
IC
23574 // Force json dataType
23575 s.dataTypes[ 0 ] = "json";
8b095871 23576
26dd39fd
IC
23577 // Install callback
23578 overwritten = window[ callbackName ];
23579 window[ callbackName ] = function() {
23580 responseContainer = arguments;
23581 };
8b095871 23582
26dd39fd
IC
23583 // Clean-up function (fires after converters)
23584 jqXHR.always( function() {
8b095871 23585
26dd39fd
IC
23586 // If previous value didn't exist - remove it
23587 if ( overwritten === undefined ) {
23588 jQuery( window ).removeProp( callbackName );
8b095871 23589
26dd39fd
IC
23590 // Otherwise restore preexisting value
23591 } else {
23592 window[ callbackName ] = overwritten;
23593 }
8b095871 23594
26dd39fd
IC
23595 // Save back as free
23596 if ( s[ callbackName ] ) {
8b095871 23597
26dd39fd
IC
23598 // Make sure that re-using the options doesn't screw things around
23599 s.jsonpCallback = originalSettings.jsonpCallback;
8b095871 23600
26dd39fd
IC
23601 // Save the callback name for future use
23602 oldCallbacks.push( callbackName );
23603 }
8b095871 23604
26dd39fd
IC
23605 // Call if it was a function and we have a response
23606 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23607 overwritten( responseContainer[ 0 ] );
23608 }
8b095871 23609
26dd39fd
IC
23610 responseContainer = overwritten = undefined;
23611 } );
8b095871 23612
26dd39fd
IC
23613 // Delegate to script
23614 return "script";
23615 }
23616} );
8b095871 23617
8b095871 23618
8b095871 23619
8b095871 23620
26dd39fd
IC
23621// Support: Safari 8 only
23622// In Safari 8 documents created via document.implementation.createHTMLDocument
23623// collapse sibling forms: the second one becomes a child of the first one.
23624// Because of that, this security measure has to be disabled in Safari 8.
23625// https://bugs.webkit.org/show_bug.cgi?id=137337
23626support.createHTMLDocument = ( function() {
23627 var body = document.implementation.createHTMLDocument( "" ).body;
23628 body.innerHTML = "<form></form><form></form>";
23629 return body.childNodes.length === 2;
23630} )();
8b095871 23631
8b095871 23632
26dd39fd
IC
23633// Argument "data" should be string of html
23634// context (optional): If specified, the fragment will be created in this context,
23635// defaults to document
23636// keepScripts (optional): If true, will include scripts passed in the html string
23637jQuery.parseHTML = function( data, context, keepScripts ) {
23638 if ( typeof data !== "string" ) {
23639 return [];
23640 }
23641 if ( typeof context === "boolean" ) {
23642 keepScripts = context;
23643 context = false;
23644 }
8b095871 23645
26dd39fd 23646 var base, parsed, scripts;
8b095871 23647
26dd39fd 23648 if ( !context ) {
8b095871 23649
26dd39fd
IC
23650 // Stop scripts or inline event handlers from being executed immediately
23651 // by using document.implementation
23652 if ( support.createHTMLDocument ) {
23653 context = document.implementation.createHTMLDocument( "" );
8b095871 23654
26dd39fd
IC
23655 // Set the base href for the created document
23656 // so any parsed elements with URLs
23657 // are based on the document's URL (gh-2965)
23658 base = context.createElement( "base" );
23659 base.href = document.location.href;
23660 context.head.appendChild( base );
23661 } else {
23662 context = document;
23663 }
23664 }
8b095871 23665
26dd39fd
IC
23666 parsed = rsingleTag.exec( data );
23667 scripts = !keepScripts && [];
8b095871 23668
26dd39fd
IC
23669 // Single tag
23670 if ( parsed ) {
23671 return [ context.createElement( parsed[ 1 ] ) ];
23672 }
8b095871 23673
26dd39fd 23674 parsed = buildFragment( [ data ], context, scripts );
8b095871 23675
26dd39fd
IC
23676 if ( scripts && scripts.length ) {
23677 jQuery( scripts ).remove();
23678 }
8b095871 23679
26dd39fd
IC
23680 return jQuery.merge( [], parsed.childNodes );
23681};
8b095871 23682
8b095871 23683
26dd39fd
IC
23684/**
23685 * Load a url into a page
23686 */
23687jQuery.fn.load = function( url, params, callback ) {
23688 var selector, type, response,
23689 self = this,
23690 off = url.indexOf( " " );
23691
23692 if ( off > -1 ) {
23693 selector = stripAndCollapse( url.slice( off ) );
23694 url = url.slice( 0, off );
23695 }
8b095871 23696
26dd39fd
IC
23697 // If it's a function
23698 if ( jQuery.isFunction( params ) ) {
23699
23700 // We assume that it's the callback
23701 callback = params;
23702 params = undefined;
23703
23704 // Otherwise, build a param string
23705 } else if ( params && typeof params === "object" ) {
23706 type = "POST";
23707 }
23708
23709 // If we have elements to modify, make the request
23710 if ( self.length > 0 ) {
23711 jQuery.ajax( {
23712 url: url,
23713
23714 // If "type" variable is undefined, then "GET" method will be used.
23715 // Make value of this field explicit since
23716 // user can override it through ajaxSetup method
23717 type: type || "GET",
23718 dataType: "html",
23719 data: params
23720 } ).done( function( responseText ) {
23721
23722 // Save response for use in complete callback
23723 response = arguments;
23724
23725 self.html( selector ?
23726
23727 // If a selector was specified, locate the right elements in a dummy div
23728 // Exclude scripts to avoid IE 'Permission Denied' errors
23729 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23730
23731 // Otherwise use the full result
23732 responseText );
23733
23734 // If the request succeeds, this function gets "data", "status", "jqXHR"
23735 // but they are ignored because response was set above.
23736 // If it fails, this function gets "jqXHR", "status", "error"
23737 } ).always( callback && function( jqXHR, status ) {
23738 self.each( function() {
23739 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23740 } );
23741 } );
23742 }
23743
23744 return this;
23745};
8b095871 23746
8b095871 23747
8b095871 23748
8b095871 23749
26dd39fd
IC
23750// Attach a bunch of functions for handling common AJAX events
23751jQuery.each( [
23752 "ajaxStart",
23753 "ajaxStop",
23754 "ajaxComplete",
23755 "ajaxError",
23756 "ajaxSuccess",
23757 "ajaxSend"
23758], function( i, type ) {
23759 jQuery.fn[ type ] = function( fn ) {
23760 return this.on( type, fn );
23761 };
23762} );
8b095871 23763
8b095871 23764
8b095871 23765
8b095871 23766
26dd39fd
IC
23767jQuery.expr.pseudos.animated = function( elem ) {
23768 return jQuery.grep( jQuery.timers, function( fn ) {
23769 return elem === fn.elem;
23770 } ).length;
23771};
8b095871 23772
8b095871 23773
8b095871 23774
8b095871 23775
26dd39fd
IC
23776jQuery.offset = {
23777 setOffset: function( elem, options, i ) {
23778 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23779 position = jQuery.css( elem, "position" ),
23780 curElem = jQuery( elem ),
23781 props = {};
8b095871 23782
26dd39fd
IC
23783 // Set position first, in-case top/left are set even on static elem
23784 if ( position === "static" ) {
23785 elem.style.position = "relative";
23786 }
8b095871 23787
26dd39fd
IC
23788 curOffset = curElem.offset();
23789 curCSSTop = jQuery.css( elem, "top" );
23790 curCSSLeft = jQuery.css( elem, "left" );
23791 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23792 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23793
23794 // Need to be able to calculate position if either
23795 // top or left is auto and position is either absolute or fixed
23796 if ( calculatePosition ) {
23797 curPosition = curElem.position();
23798 curTop = curPosition.top;
23799 curLeft = curPosition.left;
23800
23801 } else {
23802 curTop = parseFloat( curCSSTop ) || 0;
23803 curLeft = parseFloat( curCSSLeft ) || 0;
23804 }
8b095871 23805
26dd39fd 23806 if ( jQuery.isFunction( options ) ) {
8b095871 23807
26dd39fd
IC
23808 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23809 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23810 }
8b095871 23811
26dd39fd
IC
23812 if ( options.top != null ) {
23813 props.top = ( options.top - curOffset.top ) + curTop;
23814 }
23815 if ( options.left != null ) {
23816 props.left = ( options.left - curOffset.left ) + curLeft;
23817 }
8b095871 23818
26dd39fd
IC
23819 if ( "using" in options ) {
23820 options.using.call( elem, props );
8b095871 23821
26dd39fd
IC
23822 } else {
23823 curElem.css( props );
23824 }
23825 }
23826};
8b095871 23827
26dd39fd
IC
23828jQuery.fn.extend( {
23829 offset: function( options ) {
8b095871 23830
26dd39fd
IC
23831 // Preserve chaining for setter
23832 if ( arguments.length ) {
23833 return options === undefined ?
23834 this :
23835 this.each( function( i ) {
23836 jQuery.offset.setOffset( this, options, i );
23837 } );
23838 }
8b095871 23839
26dd39fd
IC
23840 var doc, docElem, rect, win,
23841 elem = this[ 0 ];
8b095871 23842
26dd39fd
IC
23843 if ( !elem ) {
23844 return;
23845 }
8b095871 23846
26dd39fd
IC
23847 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23848 // Support: IE <=11 only
23849 // Running getBoundingClientRect on a
23850 // disconnected node in IE throws an error
23851 if ( !elem.getClientRects().length ) {
23852 return { top: 0, left: 0 };
23853 }
8b095871 23854
26dd39fd 23855 rect = elem.getBoundingClientRect();
8b095871 23856
26dd39fd
IC
23857 doc = elem.ownerDocument;
23858 docElem = doc.documentElement;
23859 win = doc.defaultView;
8b095871 23860
26dd39fd
IC
23861 return {
23862 top: rect.top + win.pageYOffset - docElem.clientTop,
23863 left: rect.left + win.pageXOffset - docElem.clientLeft
23864 };
23865 },
8b095871 23866
26dd39fd
IC
23867 position: function() {
23868 if ( !this[ 0 ] ) {
23869 return;
23870 }
8b095871 23871
26dd39fd
IC
23872 var offsetParent, offset,
23873 elem = this[ 0 ],
23874 parentOffset = { top: 0, left: 0 };
8b095871 23875
26dd39fd
IC
23876 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
23877 // because it is its only offset parent
23878 if ( jQuery.css( elem, "position" ) === "fixed" ) {
8b095871 23879
26dd39fd
IC
23880 // Assume getBoundingClientRect is there when computed position is fixed
23881 offset = elem.getBoundingClientRect();
8b095871 23882
26dd39fd 23883 } else {
8b095871 23884
26dd39fd
IC
23885 // Get *real* offsetParent
23886 offsetParent = this.offsetParent();
8b095871 23887
26dd39fd
IC
23888 // Get correct offsets
23889 offset = this.offset();
23890 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
23891 parentOffset = offsetParent.offset();
23892 }
8b095871 23893
26dd39fd
IC
23894 // Add offsetParent borders
23895 parentOffset = {
23896 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
23897 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
23898 };
23899 }
8b095871 23900
26dd39fd
IC
23901 // Subtract parent offsets and element margins
23902 return {
23903 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
23904 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
23905 };
23906 },
23907
23908 // This method will return documentElement in the following cases:
23909 // 1) For the element inside the iframe without offsetParent, this method will return
23910 // documentElement of the parent window
23911 // 2) For the hidden or detached element
23912 // 3) For body or html element, i.e. in case of the html node - it will return itself
23913 //
23914 // but those exceptions were never presented as a real life use-cases
23915 // and might be considered as more preferable results.
23916 //
23917 // This logic, however, is not guaranteed and can change at any point in the future
23918 offsetParent: function() {
23919 return this.map( function() {
23920 var offsetParent = this.offsetParent;
23921
23922 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
23923 offsetParent = offsetParent.offsetParent;
23924 }
8b095871 23925
26dd39fd
IC
23926 return offsetParent || documentElement;
23927 } );
23928 }
23929} );
8b095871 23930
26dd39fd
IC
23931// Create scrollLeft and scrollTop methods
23932jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
23933 var top = "pageYOffset" === prop;
8b095871 23934
26dd39fd
IC
23935 jQuery.fn[ method ] = function( val ) {
23936 return access( this, function( elem, method, val ) {
8b095871 23937
26dd39fd
IC
23938 // Coalesce documents and windows
23939 var win;
23940 if ( jQuery.isWindow( elem ) ) {
23941 win = elem;
23942 } else if ( elem.nodeType === 9 ) {
23943 win = elem.defaultView;
23944 }
8b095871 23945
26dd39fd
IC
23946 if ( val === undefined ) {
23947 return win ? win[ prop ] : elem[ method ];
23948 }
8b095871 23949
26dd39fd
IC
23950 if ( win ) {
23951 win.scrollTo(
23952 !top ? val : win.pageXOffset,
23953 top ? val : win.pageYOffset
23954 );
8b095871 23955
26dd39fd
IC
23956 } else {
23957 elem[ method ] = val;
23958 }
23959 }, method, val, arguments.length );
23960 };
23961} );
23962
23963// Support: Safari <=7 - 9.1, Chrome <=37 - 49
23964// Add the top/left cssHooks using jQuery.fn.position
23965// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
23966// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
23967// getComputedStyle returns percent when specified for top/left/bottom/right;
23968// rather than make the css module depend on the offset module, just check for it here
23969jQuery.each( [ "top", "left" ], function( i, prop ) {
23970 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
23971 function( elem, computed ) {
23972 if ( computed ) {
23973 computed = curCSS( elem, prop );
23974
23975 // If curCSS returns percentage, fallback to offset
23976 return rnumnonpx.test( computed ) ?
23977 jQuery( elem ).position()[ prop ] + "px" :
23978 computed;
23979 }
23980 }
23981 );
23982} );
8b095871 23983
8b095871 23984
26dd39fd
IC
23985// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
23986jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
23987 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
23988 function( defaultExtra, funcName ) {
8b095871 23989
26dd39fd
IC
23990 // Margin is only for outerHeight, outerWidth
23991 jQuery.fn[ funcName ] = function( margin, value ) {
23992 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
23993 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
8b095871 23994
26dd39fd
IC
23995 return access( this, function( elem, type, value ) {
23996 var doc;
8b095871 23997
26dd39fd 23998 if ( jQuery.isWindow( elem ) ) {
8b095871 23999
26dd39fd
IC
24000 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24001 return funcName.indexOf( "outer" ) === 0 ?
24002 elem[ "inner" + name ] :
24003 elem.document.documentElement[ "client" + name ];
24004 }
8b095871 24005
26dd39fd
IC
24006 // Get document width or height
24007 if ( elem.nodeType === 9 ) {
24008 doc = elem.documentElement;
8b095871 24009
26dd39fd
IC
24010 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24011 // whichever is greatest
24012 return Math.max(
24013 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24014 elem.body[ "offset" + name ], doc[ "offset" + name ],
24015 doc[ "client" + name ]
24016 );
24017 }
8b095871 24018
26dd39fd 24019 return value === undefined ?
8b095871 24020
26dd39fd
IC
24021 // Get width or height on the element, requesting but not forcing parseFloat
24022 jQuery.css( elem, type, extra ) :
8b095871 24023
26dd39fd
IC
24024 // Set width or height on the element
24025 jQuery.style( elem, type, value, extra );
24026 }, type, chainable ? margin : undefined, chainable );
24027 };
24028 } );
24029} );
8b095871 24030
8b095871 24031
26dd39fd 24032jQuery.fn.extend( {
8b095871 24033
26dd39fd
IC
24034 bind: function( types, data, fn ) {
24035 return this.on( types, null, data, fn );
24036 },
24037 unbind: function( types, fn ) {
24038 return this.off( types, null, fn );
24039 },
8b095871 24040
26dd39fd
IC
24041 delegate: function( selector, types, data, fn ) {
24042 return this.on( types, selector, data, fn );
24043 },
24044 undelegate: function( selector, types, fn ) {
8b095871 24045
26dd39fd
IC
24046 // ( namespace ) or ( selector, types [, fn] )
24047 return arguments.length === 1 ?
24048 this.off( selector, "**" ) :
24049 this.off( types, selector || "**", fn );
24050 }
24051} );
8b095871 24052
26dd39fd
IC
24053jQuery.holdReady = function( hold ) {
24054 if ( hold ) {
24055 jQuery.readyWait++;
24056 } else {
24057 jQuery.ready( true );
24058 }
24059};
24060jQuery.isArray = Array.isArray;
24061jQuery.parseJSON = JSON.parse;
24062jQuery.nodeName = nodeName;
8b095871 24063
8b095871 24064
8b095871 24065
8b095871 24066
26dd39fd
IC
24067// Register as a named AMD module, since jQuery can be concatenated with other
24068// files that may use define, but not via a proper concatenation script that
24069// understands anonymous AMD modules. A named AMD is safest and most robust
24070// way to register. Lowercase jquery is used because AMD module names are
24071// derived from file names, and jQuery is normally delivered in a lowercase
24072// file name. Do this after creating the global so that if an AMD module wants
24073// to call noConflict to hide this version of jQuery, it will work.
8b095871 24074
26dd39fd
IC
24075// Note that for maximum portability, libraries that are not jQuery should
24076// declare themselves as anonymous modules, and avoid setting a global if an
24077// AMD loader is present. jQuery is a special case. For more information, see
24078// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
8b095871 24079
26dd39fd
IC
24080if ( typeof define === "function" && define.amd ) {
24081 define( "jquery", [], function() {
24082 return jQuery;
24083 } );
24084}
8b095871 24085
8b095871
IC
24086
24087
8b095871 24088
26dd39fd 24089var
8b095871 24090
26dd39fd
IC
24091 // Map over jQuery in case of overwrite
24092 _jQuery = window.jQuery,
8b095871 24093
26dd39fd
IC
24094 // Map over the $ in case of overwrite
24095 _$ = window.$;
8b095871 24096
26dd39fd
IC
24097jQuery.noConflict = function( deep ) {
24098 if ( window.$ === jQuery ) {
24099 window.$ = _$;
24100 }
8b095871 24101
26dd39fd
IC
24102 if ( deep && window.jQuery === jQuery ) {
24103 window.jQuery = _jQuery;
24104 }
8b095871 24105
26dd39fd
IC
24106 return jQuery;
24107};
8b095871 24108
26dd39fd
IC
24109// Expose jQuery and $ identifiers, even in AMD
24110// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24111// and CommonJS for browser emulators (#13566)
24112if ( !noGlobal ) {
24113 window.jQuery = window.$ = jQuery;
24114}
8b095871 24115
8b095871 24116
8b095871 24117
8b095871 24118
26dd39fd
IC
24119return jQuery;
24120} );
24121</script>
24122 <script>/*!
24123 * Bootstrap v3.3.7 (http://getbootstrap.com)
24124 * Copyright 2011-2016 Twitter, Inc.
24125 * Licensed under the MIT license
24126 */
8b095871 24127
26dd39fd
IC
24128if (typeof jQuery === 'undefined') {
24129 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24130}
8b095871 24131
26dd39fd
IC
24132+function ($) {
24133 'use strict';
24134 var version = $.fn.jquery.split(' ')[0].split('.')
24135 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24136 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24137 }
24138}(jQuery);
8b095871 24139
26dd39fd
IC
24140/* ========================================================================
24141 * Bootstrap: transition.js v3.3.7
24142 * http://getbootstrap.com/javascript/#transitions
24143 * ========================================================================
24144 * Copyright 2011-2016 Twitter, Inc.
24145 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24146 * ======================================================================== */
8b095871 24147
8b095871 24148
26dd39fd
IC
24149+function ($) {
24150 'use strict';
24151
24152 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24153 // ============================================================
24154
24155 function transitionEnd() {
24156 var el = document.createElement('bootstrap')
24157
24158 var transEndEventNames = {
24159 WebkitTransition : 'webkitTransitionEnd',
24160 MozTransition : 'transitionend',
24161 OTransition : 'oTransitionEnd otransitionend',
24162 transition : 'transitionend'
24163 }
24164
24165 for (var name in transEndEventNames) {
24166 if (el.style[name] !== undefined) {
24167 return { end: transEndEventNames[name] }
8b095871 24168 }
26dd39fd 24169 }
8b095871 24170
26dd39fd
IC
24171 return false // explicit for ie8 ( ._.)
24172 }
8b095871 24173
26dd39fd
IC
24174 // http://blog.alexmaccaw.com/css-transitions
24175 $.fn.emulateTransitionEnd = function (duration) {
24176 var called = false
24177 var $el = this
24178 $(this).one('bsTransitionEnd', function () { called = true })
24179 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24180 setTimeout(callback, duration)
24181 return this
24182 }
8b095871 24183
26dd39fd
IC
24184 $(function () {
24185 $.support.transition = transitionEnd()
8b095871 24186
26dd39fd 24187 if (!$.support.transition) return
8b095871 24188
26dd39fd
IC
24189 $.event.special.bsTransitionEnd = {
24190 bindType: $.support.transition.end,
24191 delegateType: $.support.transition.end,
24192 handle: function (e) {
24193 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24194 }
24195 }
24196 })
8b095871 24197
26dd39fd 24198}(jQuery);
8b095871 24199
26dd39fd
IC
24200/* ========================================================================
24201 * Bootstrap: alert.js v3.3.7
24202 * http://getbootstrap.com/javascript/#alerts
24203 * ========================================================================
24204 * Copyright 2011-2016 Twitter, Inc.
24205 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24206 * ======================================================================== */
8b095871 24207
8b095871 24208
26dd39fd
IC
24209+function ($) {
24210 'use strict';
8b095871 24211
26dd39fd
IC
24212 // ALERT CLASS DEFINITION
24213 // ======================
8b095871 24214
26dd39fd
IC
24215 var dismiss = '[data-dismiss="alert"]'
24216 var Alert = function (el) {
24217 $(el).on('click', dismiss, this.close)
24218 }
8b095871 24219
26dd39fd 24220 Alert.VERSION = '3.3.7'
8b095871 24221
26dd39fd 24222 Alert.TRANSITION_DURATION = 150
8b095871 24223
26dd39fd
IC
24224 Alert.prototype.close = function (e) {
24225 var $this = $(this)
24226 var selector = $this.attr('data-target')
8b095871 24227
26dd39fd
IC
24228 if (!selector) {
24229 selector = $this.attr('href')
24230 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24231 }
8b095871 24232
26dd39fd 24233 var $parent = $(selector === '#' ? [] : selector)
8b095871 24234
26dd39fd 24235 if (e) e.preventDefault()
8b095871 24236
26dd39fd
IC
24237 if (!$parent.length) {
24238 $parent = $this.closest('.alert')
24239 }
8b095871 24240
26dd39fd 24241 $parent.trigger(e = $.Event('close.bs.alert'))
8b095871 24242
26dd39fd 24243 if (e.isDefaultPrevented()) return
8b095871 24244
26dd39fd 24245 $parent.removeClass('in')
8b095871 24246
26dd39fd
IC
24247 function removeElement() {
24248 // detach from parent, fire event then clean up data
24249 $parent.detach().trigger('closed.bs.alert').remove()
24250 }
8b095871 24251
26dd39fd
IC
24252 $.support.transition && $parent.hasClass('fade') ?
24253 $parent
24254 .one('bsTransitionEnd', removeElement)
24255 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24256 removeElement()
24257 }
8b095871 24258
8b095871 24259
26dd39fd
IC
24260 // ALERT PLUGIN DEFINITION
24261 // =======================
8a1f452d 24262
26dd39fd
IC
24263 function Plugin(option) {
24264 return this.each(function () {
24265 var $this = $(this)
24266 var data = $this.data('bs.alert')
8a1f452d 24267
26dd39fd
IC
24268 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24269 if (typeof option == 'string') data[option].call($this)
24270 })
24271 }
8a1f452d 24272
26dd39fd 24273 var old = $.fn.alert
8a1f452d 24274
26dd39fd
IC
24275 $.fn.alert = Plugin
24276 $.fn.alert.Constructor = Alert
8a1f452d 24277
26dd39fd
IC
24278
24279 // ALERT NO CONFLICT
24280 // =================
24281
24282 $.fn.alert.noConflict = function () {
24283 $.fn.alert = old
24284 return this
8a1f452d 24285 }
24286
8a1f452d 24287
26dd39fd
IC
24288 // ALERT DATA-API
24289 // ==============
8a1f452d 24290
26dd39fd 24291 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
8a1f452d 24292
26dd39fd 24293}(jQuery);
8a1f452d 24294
26dd39fd
IC
24295/* ========================================================================
24296 * Bootstrap: button.js v3.3.7
24297 * http://getbootstrap.com/javascript/#buttons
24298 * ========================================================================
24299 * Copyright 2011-2016 Twitter, Inc.
24300 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24301 * ======================================================================== */
8a1f452d 24302
8a1f452d 24303
26dd39fd
IC
24304+function ($) {
24305 'use strict';
24306
24307 // BUTTON PUBLIC CLASS DEFINITION
24308 // ==============================
24309
24310 var Button = function (element, options) {
24311 this.$element = $(element)
24312 this.options = $.extend({}, Button.DEFAULTS, options)
24313 this.isLoading = false
8a1f452d 24314 }
24315
26dd39fd
IC
24316 Button.VERSION = '3.3.7'
24317
24318 Button.DEFAULTS = {
24319 loadingText: 'loading...'
8a1f452d 24320 }
24321
26dd39fd
IC
24322 Button.prototype.setState = function (state) {
24323 var d = 'disabled'
24324 var $el = this.$element
24325 var val = $el.is('input') ? 'val' : 'html'
24326 var data = $el.data()
8a1f452d 24327
26dd39fd 24328 state += 'Text'
8a1f452d 24329
26dd39fd
IC
24330 if (data.resetText == null) $el.data('resetText', $el[val]())
24331
24332 // push to event loop to allow forms to submit
24333 setTimeout($.proxy(function () {
24334 $el[val](data[state] == null ? this.options[state] : data[state])
24335
24336 if (state == 'loadingText') {
24337 this.isLoading = true
24338 $el.addClass(d).attr(d, d).prop(d, true)
24339 } else if (this.isLoading) {
24340 this.isLoading = false
24341 $el.removeClass(d).removeAttr(d).prop(d, false)
24342 }
24343 }, this), 0)
24344 }
24345
24346 Button.prototype.toggle = function () {
24347 var changed = true
24348 var $parent = this.$element.closest('[data-toggle="buttons"]')
24349
24350 if ($parent.length) {
24351 var $input = this.$element.find('input')
24352 if ($input.prop('type') == 'radio') {
24353 if ($input.prop('checked')) changed = false
24354 $parent.find('.active').removeClass('active')
24355 this.$element.addClass('active')
24356 } else if ($input.prop('type') == 'checkbox') {
24357 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24358 this.$element.toggleClass('active')
24359 }
24360 $input.prop('checked', this.$element.hasClass('active'))
24361 if (changed) $input.trigger('change')
24362 } else {
24363 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24364 this.$element.toggleClass('active')
24365 }
8a1f452d 24366 }
8a1f452d 24367
8a1f452d 24368
26dd39fd
IC
24369 // BUTTON PLUGIN DEFINITION
24370 // ========================
24371
24372 function Plugin(option) {
24373 return this.each(function () {
24374 var $this = $(this)
24375 var data = $this.data('bs.button')
24376 var options = typeof option == 'object' && option
24377
24378 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24379
24380 if (option == 'toggle') data.toggle()
24381 else if (option) data.setState(option)
24382 })
8a1f452d 24383 }
24384
26dd39fd
IC
24385 var old = $.fn.button
24386
24387 $.fn.button = Plugin
24388 $.fn.button.Constructor = Button
24389
24390
24391 // BUTTON NO CONFLICT
24392 // ==================
24393
24394 $.fn.button.noConflict = function () {
24395 $.fn.button = old
24396 return this
8a1f452d 24397 }
24398
8a1f452d 24399
26dd39fd
IC
24400 // BUTTON DATA-API
24401 // ===============
8a1f452d 24402
26dd39fd
IC
24403 $(document)
24404 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24405 var $btn = $(e.target).closest('.btn')
24406 Plugin.call($btn, 'toggle')
24407 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24408 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24409 e.preventDefault()
24410 // The target component still receive the focus
24411 if ($btn.is('input,button')) $btn.trigger('focus')
24412 else $btn.find('input:visible,button:visible').first().trigger('focus')
24413 }
24414 })
24415 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24416 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24417 })
8a1f452d 24418
26dd39fd 24419}(jQuery);
8a1f452d 24420
26dd39fd
IC
24421/* ========================================================================
24422 * Bootstrap: carousel.js v3.3.7
24423 * http://getbootstrap.com/javascript/#carousel
24424 * ========================================================================
24425 * Copyright 2011-2016 Twitter, Inc.
24426 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24427 * ======================================================================== */
8a1f452d 24428
8a1f452d 24429
26dd39fd
IC
24430+function ($) {
24431 'use strict';
8a1f452d 24432
26dd39fd
IC
24433 // CAROUSEL CLASS DEFINITION
24434 // =========================
8a1f452d 24435
26dd39fd
IC
24436 var Carousel = function (element, options) {
24437 this.$element = $(element)
24438 this.$indicators = this.$element.find('.carousel-indicators')
24439 this.options = options
24440 this.paused = null
24441 this.sliding = null
24442 this.interval = null
24443 this.$active = null
24444 this.$items = null
8a1f452d 24445
26dd39fd 24446 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
8a1f452d 24447
26dd39fd
IC
24448 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24449 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24450 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
8a1f452d 24451 }
8a1f452d 24452
26dd39fd 24453 Carousel.VERSION = '3.3.7'
8a1f452d 24454
26dd39fd
IC
24455 Carousel.TRANSITION_DURATION = 600
24456
24457 Carousel.DEFAULTS = {
24458 interval: 5000,
24459 pause: 'hover',
24460 wrap: true,
24461 keyboard: true
24462 }
24463
24464 Carousel.prototype.keydown = function (e) {
24465 if (/input|textarea/i.test(e.target.tagName)) return
24466 switch (e.which) {
24467 case 37: this.prev(); break
24468 case 39: this.next(); break
24469 default: return
8a1f452d 24470 }
26dd39fd
IC
24471
24472 e.preventDefault()
8a1f452d 24473 }
8a1f452d 24474
26dd39fd
IC
24475 Carousel.prototype.cycle = function (e) {
24476 e || (this.paused = false)
8a1f452d 24477
26dd39fd 24478 this.interval && clearInterval(this.interval)
8a1f452d 24479
26dd39fd
IC
24480 this.options.interval
24481 && !this.paused
24482 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24483
24484 return this
8a1f452d 24485 }
24486
26dd39fd
IC
24487 Carousel.prototype.getItemIndex = function (item) {
24488 this.$items = item.parent().children('.item')
24489 return this.$items.index(item || this.$active)
8a1f452d 24490 }
24491
26dd39fd
IC
24492 Carousel.prototype.getItemForDirection = function (direction, active) {
24493 var activeIndex = this.getItemIndex(active)
24494 var willWrap = (direction == 'prev' && activeIndex === 0)
24495 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24496 if (willWrap && !this.options.wrap) return active
24497 var delta = direction == 'prev' ? -1 : 1
24498 var itemIndex = (activeIndex + delta) % this.$items.length
24499 return this.$items.eq(itemIndex)
8a1f452d 24500 }
24501
26dd39fd
IC
24502 Carousel.prototype.to = function (pos) {
24503 var that = this
24504 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
8a1f452d 24505
26dd39fd 24506 if (pos > (this.$items.length - 1) || pos < 0) return
8a1f452d 24507
26dd39fd
IC
24508 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24509 if (activeIndex == pos) return this.pause().cycle()
8a1f452d 24510
26dd39fd 24511 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
8a1f452d 24512 }
8a1f452d 24513
26dd39fd
IC
24514 Carousel.prototype.pause = function (e) {
24515 e || (this.paused = true)
8a1f452d 24516
26dd39fd
IC
24517 if (this.$element.find('.next, .prev').length && $.support.transition) {
24518 this.$element.trigger($.support.transition.end)
24519 this.cycle(true)
24520 }
8a1f452d 24521
26dd39fd 24522 this.interval = clearInterval(this.interval)
8a1f452d 24523
26dd39fd
IC
24524 return this
24525 }
8a1f452d 24526
26dd39fd
IC
24527 Carousel.prototype.next = function () {
24528 if (this.sliding) return
24529 return this.slide('next')
8a1f452d 24530 }
24531
26dd39fd
IC
24532 Carousel.prototype.prev = function () {
24533 if (this.sliding) return
24534 return this.slide('prev')
8a1f452d 24535 }
24536
26dd39fd
IC
24537 Carousel.prototype.slide = function (type, next) {
24538 var $active = this.$element.find('.item.active')
24539 var $next = next || this.getItemForDirection(type, $active)
24540 var isCycling = this.interval
24541 var direction = type == 'next' ? 'left' : 'right'
24542 var that = this
8a1f452d 24543
26dd39fd 24544 if ($next.hasClass('active')) return (this.sliding = false)
8a1f452d 24545
26dd39fd
IC
24546 var relatedTarget = $next[0]
24547 var slideEvent = $.Event('slide.bs.carousel', {
24548 relatedTarget: relatedTarget,
24549 direction: direction
24550 })
24551 this.$element.trigger(slideEvent)
24552 if (slideEvent.isDefaultPrevented()) return
24553
24554 this.sliding = true
24555
24556 isCycling && this.pause()
24557
24558 if (this.$indicators.length) {
24559 this.$indicators.find('.active').removeClass('active')
24560 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24561 $nextIndicator && $nextIndicator.addClass('active')
24562 }
24563
24564 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24565 if ($.support.transition && this.$element.hasClass('slide')) {
24566 $next.addClass(type)
24567 $next[0].offsetWidth // force reflow
24568 $active.addClass(direction)
24569 $next.addClass(direction)
24570 $active
24571 .one('bsTransitionEnd', function () {
24572 $next.removeClass([type, direction].join(' ')).addClass('active')
24573 $active.removeClass(['active', direction].join(' '))
24574 that.sliding = false
24575 setTimeout(function () {
24576 that.$element.trigger(slidEvent)
24577 }, 0)
24578 })
24579 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24580 } else {
24581 $active.removeClass('active')
24582 $next.addClass('active')
24583 this.sliding = false
24584 this.$element.trigger(slidEvent)
24585 }
8a1f452d 24586
26dd39fd 24587 isCycling && this.cycle()
8a1f452d 24588
26dd39fd 24589 return this
8a1f452d 24590 }
8a1f452d 24591
26dd39fd
IC
24592
24593 // CAROUSEL PLUGIN DEFINITION
24594 // ==========================
24595
24596 function Plugin(option) {
24597 return this.each(function () {
24598 var $this = $(this)
24599 var data = $this.data('bs.carousel')
24600 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24601 var action = typeof option == 'string' ? option : options.slide
24602
24603 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24604 if (typeof option == 'number') data.to(option)
24605 else if (action) data[action]()
24606 else if (options.interval) data.pause().cycle()
24607 })
8a1f452d 24608 }
24609
26dd39fd
IC
24610 var old = $.fn.carousel
24611
24612 $.fn.carousel = Plugin
24613 $.fn.carousel.Constructor = Carousel
24614
24615
24616 // CAROUSEL NO CONFLICT
24617 // ====================
24618
24619 $.fn.carousel.noConflict = function () {
24620 $.fn.carousel = old
24621 return this
8a1f452d 24622 }
24623
26dd39fd
IC
24624
24625 // CAROUSEL DATA-API
24626 // =================
24627
24628 var clickHandler = function (e) {
24629 var href
24630 var $this = $(this)
24631 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24632 if (!$target.hasClass('carousel')) return
24633 var options = $.extend({}, $target.data(), $this.data())
24634 var slideIndex = $this.attr('data-slide-to')
24635 if (slideIndex) options.interval = false
24636
24637 Plugin.call($target, options)
24638
24639 if (slideIndex) {
24640 $target.data('bs.carousel').to(slideIndex)
24641 }
24642
24643 e.preventDefault()
8a1f452d 24644 }
24645
26dd39fd
IC
24646 $(document)
24647 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24648 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
8a1f452d 24649
26dd39fd
IC
24650 $(window).on('load', function () {
24651 $('[data-ride="carousel"]').each(function () {
24652 var $carousel = $(this)
24653 Plugin.call($carousel, $carousel.data())
24654 })
24655 })
24656
24657}(jQuery);
24658
24659/* ========================================================================
24660 * Bootstrap: collapse.js v3.3.7
24661 * http://getbootstrap.com/javascript/#collapse
24662 * ========================================================================
24663 * Copyright 2011-2016 Twitter, Inc.
24664 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24665 * ======================================================================== */
8a1f452d 24666
26dd39fd 24667/* jshint latedef: false */
8a1f452d 24668
26dd39fd
IC
24669+function ($) {
24670 'use strict';
8a1f452d 24671
26dd39fd
IC
24672 // COLLAPSE PUBLIC CLASS DEFINITION
24673 // ================================
8a1f452d 24674
26dd39fd
IC
24675 var Collapse = function (element, options) {
24676 this.$element = $(element)
24677 this.options = $.extend({}, Collapse.DEFAULTS, options)
24678 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24679 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24680 this.transitioning = null
24681
24682 if (this.options.parent) {
24683 this.$parent = this.getParent()
24684 } else {
24685 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
8a1f452d 24686 }
26dd39fd
IC
24687
24688 if (this.options.toggle) this.toggle()
8a1f452d 24689 }
24690
26dd39fd 24691 Collapse.VERSION = '3.3.7'
8a1f452d 24692
26dd39fd
IC
24693 Collapse.TRANSITION_DURATION = 350
24694
24695 Collapse.DEFAULTS = {
24696 toggle: true
8a1f452d 24697 }
8a1f452d 24698
26dd39fd
IC
24699 Collapse.prototype.dimension = function () {
24700 var hasWidth = this.$element.hasClass('width')
24701 return hasWidth ? 'width' : 'height'
8a1f452d 24702 }
8a1f452d 24703
26dd39fd
IC
24704 Collapse.prototype.show = function () {
24705 if (this.transitioning || this.$element.hasClass('in')) return
8a1f452d 24706
26dd39fd
IC
24707 var activesData
24708 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
8a1f452d 24709
26dd39fd
IC
24710 if (actives && actives.length) {
24711 activesData = actives.data('bs.collapse')
24712 if (activesData && activesData.transitioning) return
24713 }
8a1f452d 24714
26dd39fd
IC
24715 var startEvent = $.Event('show.bs.collapse')
24716 this.$element.trigger(startEvent)
24717 if (startEvent.isDefaultPrevented()) return
8a1f452d 24718
26dd39fd
IC
24719 if (actives && actives.length) {
24720 Plugin.call(actives, 'hide')
24721 activesData || actives.data('bs.collapse', null)
8a1f452d 24722 }
8a1f452d 24723
26dd39fd 24724 var dimension = this.dimension()
8a1f452d 24725
26dd39fd
IC
24726 this.$element
24727 .removeClass('collapse')
24728 .addClass('collapsing')[dimension](0)
24729 .attr('aria-expanded', true)
8a1f452d 24730
26dd39fd
IC
24731 this.$trigger
24732 .removeClass('collapsed')
24733 .attr('aria-expanded', true)
8a1f452d 24734
26dd39fd 24735 this.transitioning = 1
8a1f452d 24736
26dd39fd
IC
24737 var complete = function () {
24738 this.$element
24739 .removeClass('collapsing')
24740 .addClass('collapse in')[dimension]('')
24741 this.transitioning = 0
24742 this.$element
24743 .trigger('shown.bs.collapse')
8a1f452d 24744 }
26dd39fd
IC
24745
24746 if (!$.support.transition) return complete.call(this)
24747
24748 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24749
24750 this.$element
24751 .one('bsTransitionEnd', $.proxy(complete, this))
24752 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
8a1f452d 24753 }
24754
26dd39fd
IC
24755 Collapse.prototype.hide = function () {
24756 if (this.transitioning || !this.$element.hasClass('in')) return
24757
24758 var startEvent = $.Event('hide.bs.collapse')
24759 this.$element.trigger(startEvent)
24760 if (startEvent.isDefaultPrevented()) return
24761
24762 var dimension = this.dimension()
24763
24764 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24765
24766 this.$element
24767 .addClass('collapsing')
24768 .removeClass('collapse in')
24769 .attr('aria-expanded', false)
24770
24771 this.$trigger
24772 .addClass('collapsed')
24773 .attr('aria-expanded', false)
24774
24775 this.transitioning = 1
24776
24777 var complete = function () {
24778 this.transitioning = 0
24779 this.$element
24780 .removeClass('collapsing')
24781 .addClass('collapse')
24782 .trigger('hidden.bs.collapse')
8a1f452d 24783 }
26dd39fd
IC
24784
24785 if (!$.support.transition) return complete.call(this)
24786
24787 this.$element
24788 [dimension](0)
24789 .one('bsTransitionEnd', $.proxy(complete, this))
24790 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
8a1f452d 24791 }
8a1f452d 24792
26dd39fd
IC
24793 Collapse.prototype.toggle = function () {
24794 this[this.$element.hasClass('in') ? 'hide' : 'show']()
8a1f452d 24795 }
26dd39fd
IC
24796
24797 Collapse.prototype.getParent = function () {
24798 return $(this.options.parent)
24799 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24800 .each($.proxy(function (i, element) {
24801 var $element = $(element)
24802 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24803 }, this))
24804 .end()
8a1f452d 24805 }
26dd39fd
IC
24806
24807 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24808 var isOpen = $element.hasClass('in')
24809
24810 $element.attr('aria-expanded', isOpen)
24811 $trigger
24812 .toggleClass('collapsed', !isOpen)
24813 .attr('aria-expanded', isOpen)
8a1f452d 24814 }
24815
26dd39fd
IC
24816 function getTargetFromTrigger($trigger) {
24817 var href
24818 var target = $trigger.attr('data-target')
24819 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
8a1f452d 24820
26dd39fd 24821 return $(target)
8a1f452d 24822 }
8a1f452d 24823
8a1f452d 24824
26dd39fd
IC
24825 // COLLAPSE PLUGIN DEFINITION
24826 // ==========================
8a1f452d 24827
26dd39fd
IC
24828 function Plugin(option) {
24829 return this.each(function () {
24830 var $this = $(this)
24831 var data = $this.data('bs.collapse')
24832 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
8a1f452d 24833
26dd39fd
IC
24834 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24835 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24836 if (typeof option == 'string') data[option]()
24837 })
8a1f452d 24838 }
24839
26dd39fd 24840 var old = $.fn.collapse
8a1f452d 24841
26dd39fd
IC
24842 $.fn.collapse = Plugin
24843 $.fn.collapse.Constructor = Collapse
8a1f452d 24844
26dd39fd
IC
24845
24846 // COLLAPSE NO CONFLICT
24847 // ====================
24848
24849 $.fn.collapse.noConflict = function () {
24850 $.fn.collapse = old
24851 return this
8a1f452d 24852 }
24853
8a1f452d 24854
26dd39fd
IC
24855 // COLLAPSE DATA-API
24856 // =================
8a1f452d 24857
26dd39fd
IC
24858 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24859 var $this = $(this)
8a1f452d 24860
26dd39fd 24861 if (!$this.attr('data-target')) e.preventDefault()
8a1f452d 24862
26dd39fd
IC
24863 var $target = getTargetFromTrigger($this)
24864 var data = $target.data('bs.collapse')
24865 var option = data ? 'toggle' : $this.data()
8a1f452d 24866
26dd39fd
IC
24867 Plugin.call($target, option)
24868 })
8a1f452d 24869
26dd39fd 24870}(jQuery);
8a1f452d 24871
26dd39fd
IC
24872/* ========================================================================
24873 * Bootstrap: dropdown.js v3.3.7
24874 * http://getbootstrap.com/javascript/#dropdowns
24875 * ========================================================================
24876 * Copyright 2011-2016 Twitter, Inc.
24877 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24878 * ======================================================================== */
8a1f452d 24879
8a1f452d 24880
26dd39fd
IC
24881+function ($) {
24882 'use strict';
8a1f452d 24883
26dd39fd
IC
24884 // DROPDOWN CLASS DEFINITION
24885 // =========================
8a1f452d 24886
26dd39fd
IC
24887 var backdrop = '.dropdown-backdrop'
24888 var toggle = '[data-toggle="dropdown"]'
24889 var Dropdown = function (element) {
24890 $(element).on('click.bs.dropdown', this.toggle)
8a1f452d 24891 }
8a1f452d 24892
26dd39fd 24893 Dropdown.VERSION = '3.3.7'
8a1f452d 24894
26dd39fd
IC
24895 function getParent($this) {
24896 var selector = $this.attr('data-target')
8a1f452d 24897
26dd39fd
IC
24898 if (!selector) {
24899 selector = $this.attr('href')
24900 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24901 }
8a1f452d 24902
26dd39fd 24903 var $parent = selector && $(selector)
8a1f452d 24904
26dd39fd 24905 return $parent && $parent.length ? $parent : $this.parent()
8a1f452d 24906 }
24907
26dd39fd
IC
24908 function clearMenus(e) {
24909 if (e && e.which === 3) return
24910 $(backdrop).remove()
24911 $(toggle).each(function () {
24912 var $this = $(this)
24913 var $parent = getParent($this)
24914 var relatedTarget = { relatedTarget: this }
8a1f452d 24915
26dd39fd 24916 if (!$parent.hasClass('open')) return
8a1f452d 24917
26dd39fd
IC
24918 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
24919
24920 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
24921
24922 if (e.isDefaultPrevented()) return
24923
24924 $this.attr('aria-expanded', 'false')
24925 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
24926 })
8a1f452d 24927 }
24928
26dd39fd
IC
24929 Dropdown.prototype.toggle = function (e) {
24930 var $this = $(this)
8a1f452d 24931
26dd39fd 24932 if ($this.is('.disabled, :disabled')) return
8a1f452d 24933
26dd39fd
IC
24934 var $parent = getParent($this)
24935 var isActive = $parent.hasClass('open')
8a1f452d 24936
26dd39fd 24937 clearMenus()
8a1f452d 24938
26dd39fd
IC
24939 if (!isActive) {
24940 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
24941 // if mobile we use a backdrop because click events don't delegate
24942 $(document.createElement('div'))
24943 .addClass('dropdown-backdrop')
24944 .insertAfter($(this))
24945 .on('click', clearMenus)
24946 }
24947
24948 var relatedTarget = { relatedTarget: this }
24949 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
24950
24951 if (e.isDefaultPrevented()) return
24952
24953 $this
24954 .trigger('focus')
24955 .attr('aria-expanded', 'true')
24956
24957 $parent
24958 .toggleClass('open')
24959 .trigger($.Event('shown.bs.dropdown', relatedTarget))
8a1f452d 24960 }
26dd39fd
IC
24961
24962 return false
8a1f452d 24963 }
24964
26dd39fd
IC
24965 Dropdown.prototype.keydown = function (e) {
24966 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
8a1f452d 24967
26dd39fd 24968 var $this = $(this)
8a1f452d 24969
26dd39fd
IC
24970 e.preventDefault()
24971 e.stopPropagation()
24972
24973 if ($this.is('.disabled, :disabled')) return
24974
24975 var $parent = getParent($this)
24976 var isActive = $parent.hasClass('open')
24977
24978 if (!isActive && e.which != 27 || isActive && e.which == 27) {
24979 if (e.which == 27) $parent.find(toggle).trigger('focus')
24980 return $this.trigger('click')
24981 }
24982
24983 var desc = ' li:not(.disabled):visible a'
24984 var $items = $parent.find('.dropdown-menu' + desc)
24985
24986 if (!$items.length) return
24987
24988 var index = $items.index(e.target)
24989
24990 if (e.which == 38 && index > 0) index-- // up
24991 if (e.which == 40 && index < $items.length - 1) index++ // down
24992 if (!~index) index = 0
24993
24994 $items.eq(index).trigger('focus')
8a1f452d 24995 }
24996
26dd39fd
IC
24997
24998 // DROPDOWN PLUGIN DEFINITION
24999 // ==========================
25000
25001 function Plugin(option) {
25002 return this.each(function () {
25003 var $this = $(this)
25004 var data = $this.data('bs.dropdown')
25005
25006 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25007 if (typeof option == 'string') data[option].call($this)
25008 })
8a1f452d 25009 }
25010
26dd39fd
IC
25011 var old = $.fn.dropdown
25012
25013 $.fn.dropdown = Plugin
25014 $.fn.dropdown.Constructor = Dropdown
25015
25016
25017 // DROPDOWN NO CONFLICT
25018 // ====================
25019
25020 $.fn.dropdown.noConflict = function () {
25021 $.fn.dropdown = old
25022 return this
8a1f452d 25023 }
25024
26dd39fd
IC
25025
25026 // APPLY TO STANDARD DROPDOWN ELEMENTS
25027 // ===================================
25028
25029 $(document)
25030 .on('click.bs.dropdown.data-api', clearMenus)
25031 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25032 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25033 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25034 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25035
25036}(jQuery);
25037
25038/* ========================================================================
25039 * Bootstrap: modal.js v3.3.7
25040 * http://getbootstrap.com/javascript/#modals
25041 * ========================================================================
25042 * Copyright 2011-2016 Twitter, Inc.
25043 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25044 * ======================================================================== */
25045
25046
25047+function ($) {
25048 'use strict';
25049
25050 // MODAL CLASS DEFINITION
25051 // ======================
25052
25053 var Modal = function (element, options) {
25054 this.options = options
25055 this.$body = $(document.body)
25056 this.$element = $(element)
25057 this.$dialog = this.$element.find('.modal-dialog')
25058 this.$backdrop = null
25059 this.isShown = null
25060 this.originalBodyPad = null
25061 this.scrollbarWidth = 0
25062 this.ignoreBackdropClick = false
25063
25064 if (this.options.remote) {
25065 this.$element
25066 .find('.modal-content')
25067 .load(this.options.remote, $.proxy(function () {
25068 this.$element.trigger('loaded.bs.modal')
25069 }, this))
8a1f452d 25070 }
8a1f452d 25071 }
25072
26dd39fd 25073 Modal.VERSION = '3.3.7'
8a1f452d 25074
26dd39fd
IC
25075 Modal.TRANSITION_DURATION = 300
25076 Modal.BACKDROP_TRANSITION_DURATION = 150
8a1f452d 25077
26dd39fd
IC
25078 Modal.DEFAULTS = {
25079 backdrop: true,
25080 keyboard: true,
25081 show: true
8a1f452d 25082 }
25083
26dd39fd
IC
25084 Modal.prototype.toggle = function (_relatedTarget) {
25085 return this.isShown ? this.hide() : this.show(_relatedTarget)
8a1f452d 25086 }
25087
26dd39fd
IC
25088 Modal.prototype.show = function (_relatedTarget) {
25089 var that = this
25090 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25091
25092 this.$element.trigger(e)
25093
25094 if (this.isShown || e.isDefaultPrevented()) return
25095
25096 this.isShown = true
25097
25098 this.checkScrollbar()
25099 this.setScrollbar()
25100 this.$body.addClass('modal-open')
25101
25102 this.escape()
25103 this.resize()
25104
25105 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25106
25107 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25108 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25109 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25110 })
25111 })
25112
25113 this.backdrop(function () {
25114 var transition = $.support.transition && that.$element.hasClass('fade')
25115
25116 if (!that.$element.parent().length) {
25117 that.$element.appendTo(that.$body) // don't move modals dom position
8a1f452d 25118 }
8a1f452d 25119
26dd39fd
IC
25120 that.$element
25121 .show()
25122 .scrollTop(0)
8a1f452d 25123
26dd39fd 25124 that.adjustDialog()
8a1f452d 25125
26dd39fd
IC
25126 if (transition) {
25127 that.$element[0].offsetWidth // force reflow
25128 }
8a1f452d 25129
26dd39fd 25130 that.$element.addClass('in')
8a1f452d 25131
26dd39fd 25132 that.enforceFocus()
8a1f452d 25133
26dd39fd 25134 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
8a1f452d 25135
26dd39fd
IC
25136 transition ?
25137 that.$dialog // wait for modal to slide in
25138 .one('bsTransitionEnd', function () {
25139 that.$element.trigger('focus').trigger(e)
25140 })
25141 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25142 that.$element.trigger('focus').trigger(e)
25143 })
8a1f452d 25144 }
8a1f452d 25145
26dd39fd
IC
25146 Modal.prototype.hide = function (e) {
25147 if (e) e.preventDefault()
25148
25149 e = $.Event('hide.bs.modal')
25150
25151 this.$element.trigger(e)
25152
25153 if (!this.isShown || e.isDefaultPrevented()) return
25154
25155 this.isShown = false
25156
25157 this.escape()
25158 this.resize()
25159
25160 $(document).off('focusin.bs.modal')
8a1f452d 25161
26dd39fd
IC
25162 this.$element
25163 .removeClass('in')
25164 .off('click.dismiss.bs.modal')
25165 .off('mouseup.dismiss.bs.modal')
8a1f452d 25166
26dd39fd 25167 this.$dialog.off('mousedown.dismiss.bs.modal')
8a1f452d 25168
26dd39fd
IC
25169 $.support.transition && this.$element.hasClass('fade') ?
25170 this.$element
25171 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25172 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25173 this.hideModal()
25174 }
8a1f452d 25175
26dd39fd
IC
25176 Modal.prototype.enforceFocus = function () {
25177 $(document)
25178 .off('focusin.bs.modal') // guard against infinite focus loop
25179 .on('focusin.bs.modal', $.proxy(function (e) {
25180 if (document !== e.target &&
25181 this.$element[0] !== e.target &&
25182 !this.$element.has(e.target).length) {
25183 this.$element.trigger('focus')
25184 }
25185 }, this))
25186 }
8a1f452d 25187
26dd39fd
IC
25188 Modal.prototype.escape = function () {
25189 if (this.isShown && this.options.keyboard) {
25190 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25191 e.which == 27 && this.hide()
25192 }, this))
25193 } else if (!this.isShown) {
25194 this.$element.off('keydown.dismiss.bs.modal')
25195 }
25196 }
25197
25198 Modal.prototype.resize = function () {
25199 if (this.isShown) {
25200 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
8a1f452d 25201 } else {
26dd39fd 25202 $(window).off('resize.bs.modal')
8a1f452d 25203 }
8a1f452d 25204 }
25205
26dd39fd
IC
25206 Modal.prototype.hideModal = function () {
25207 var that = this
25208 this.$element.hide()
25209 this.backdrop(function () {
25210 that.$body.removeClass('modal-open')
25211 that.resetAdjustments()
25212 that.resetScrollbar()
25213 that.$element.trigger('hidden.bs.modal')
25214 })
25215 }
8a1f452d 25216
26dd39fd
IC
25217 Modal.prototype.removeBackdrop = function () {
25218 this.$backdrop && this.$backdrop.remove()
25219 this.$backdrop = null
8a1f452d 25220 }
25221
26dd39fd
IC
25222 Modal.prototype.backdrop = function (callback) {
25223 var that = this
25224 var animate = this.$element.hasClass('fade') ? 'fade' : ''
8a1f452d 25225
26dd39fd
IC
25226 if (this.isShown && this.options.backdrop) {
25227 var doAnimate = $.support.transition && animate
8a1f452d 25228
26dd39fd
IC
25229 this.$backdrop = $(document.createElement('div'))
25230 .addClass('modal-backdrop ' + animate)
25231 .appendTo(this.$body)
8a1f452d 25232
26dd39fd
IC
25233 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25234 if (this.ignoreBackdropClick) {
25235 this.ignoreBackdropClick = false
25236 return
25237 }
25238 if (e.target !== e.currentTarget) return
25239 this.options.backdrop == 'static'
25240 ? this.$element[0].focus()
25241 : this.hide()
25242 }, this))
8a1f452d 25243
26dd39fd 25244 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
8a1f452d 25245
26dd39fd 25246 this.$backdrop.addClass('in')
8a1f452d 25247
26dd39fd 25248 if (!callback) return
8a1f452d 25249
26dd39fd
IC
25250 doAnimate ?
25251 this.$backdrop
25252 .one('bsTransitionEnd', callback)
25253 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25254 callback()
25255
25256 } else if (!this.isShown && this.$backdrop) {
25257 this.$backdrop.removeClass('in')
25258
25259 var callbackRemove = function () {
25260 that.removeBackdrop()
25261 callback && callback()
25262 }
25263 $.support.transition && this.$element.hasClass('fade') ?
25264 this.$backdrop
25265 .one('bsTransitionEnd', callbackRemove)
25266 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25267 callbackRemove()
25268
25269 } else if (callback) {
25270 callback()
8a1f452d 25271 }
25272 }
8a1f452d 25273
26dd39fd 25274 // these following methods are used to handle overflowing modals
8a1f452d 25275
26dd39fd
IC
25276 Modal.prototype.handleUpdate = function () {
25277 this.adjustDialog()
8a1f452d 25278 }
8a1f452d 25279
26dd39fd
IC
25280 Modal.prototype.adjustDialog = function () {
25281 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
8a1f452d 25282
26dd39fd
IC
25283 this.$element.css({
25284 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25285 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25286 })
25287 }
8a1f452d 25288
26dd39fd
IC
25289 Modal.prototype.resetAdjustments = function () {
25290 this.$element.css({
25291 paddingLeft: '',
25292 paddingRight: ''
25293 })
25294 }
8a1f452d 25295
26dd39fd
IC
25296 Modal.prototype.checkScrollbar = function () {
25297 var fullWindowWidth = window.innerWidth
25298 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25299 var documentElementRect = document.documentElement.getBoundingClientRect()
25300 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
8a1f452d 25301 }
26dd39fd
IC
25302 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25303 this.scrollbarWidth = this.measureScrollbar()
25304 }
8a1f452d 25305
26dd39fd
IC
25306 Modal.prototype.setScrollbar = function () {
25307 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25308 this.originalBodyPad = document.body.style.paddingRight || ''
25309 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25310 }
8a1f452d 25311
26dd39fd
IC
25312 Modal.prototype.resetScrollbar = function () {
25313 this.$body.css('padding-right', this.originalBodyPad)
8a1f452d 25314 }
25315
26dd39fd
IC
25316 Modal.prototype.measureScrollbar = function () { // thx walsh
25317 var scrollDiv = document.createElement('div')
25318 scrollDiv.className = 'modal-scrollbar-measure'
25319 this.$body.append(scrollDiv)
25320 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25321 this.$body[0].removeChild(scrollDiv)
25322 return scrollbarWidth
25323 }
8a1f452d 25324
8a1f452d 25325
26dd39fd
IC
25326 // MODAL PLUGIN DEFINITION
25327 // =======================
25328
25329 function Plugin(option, _relatedTarget) {
25330 return this.each(function () {
25331 var $this = $(this)
25332 var data = $this.data('bs.modal')
25333 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25334
25335 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25336 if (typeof option == 'string') data[option](_relatedTarget)
25337 else if (options.show) data.show(_relatedTarget)
25338 })
8a1f452d 25339 }
25340
26dd39fd
IC
25341 var old = $.fn.modal
25342
25343 $.fn.modal = Plugin
25344 $.fn.modal.Constructor = Modal
25345
25346
25347 // MODAL NO CONFLICT
25348 // =================
25349
25350 $.fn.modal.noConflict = function () {
25351 $.fn.modal = old
25352 return this
8a1f452d 25353 }
8a1f452d 25354
8a1f452d 25355
26dd39fd
IC
25356 // MODAL DATA-API
25357 // ==============
25358
25359 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25360 var $this = $(this)
25361 var href = $this.attr('href')
25362 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25363 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25364
25365 if ($this.is('a')) e.preventDefault()
25366
25367 $target.one('show.bs.modal', function (showEvent) {
25368 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25369 $target.one('hidden.bs.modal', function () {
25370 $this.is(':visible') && $this.trigger('focus')
25371 })
25372 })
25373 Plugin.call($target, option, this)
25374 })
25375
25376}(jQuery);
25377
25378/* ========================================================================
25379 * Bootstrap: tooltip.js v3.3.7
25380 * http://getbootstrap.com/javascript/#tooltip
25381 * Inspired by the original jQuery.tipsy by Jason Frame
25382 * ========================================================================
25383 * Copyright 2011-2016 Twitter, Inc.
25384 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25385 * ======================================================================== */
25386
25387
25388+function ($) {
25389 'use strict';
25390
25391 // TOOLTIP PUBLIC CLASS DEFINITION
25392 // ===============================
25393
25394 var Tooltip = function (element, options) {
25395 this.type = null
25396 this.options = null
25397 this.enabled = null
25398 this.timeout = null
25399 this.hoverState = null
25400 this.$element = null
25401 this.inState = null
25402
25403 this.init('tooltip', element, options)
8a1f452d 25404 }
8a1f452d 25405
26dd39fd 25406 Tooltip.VERSION = '3.3.7'
8a1f452d 25407
26dd39fd
IC
25408 Tooltip.TRANSITION_DURATION = 150
25409
25410 Tooltip.DEFAULTS = {
25411 animation: true,
25412 placement: 'top',
25413 selector: false,
25414 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25415 trigger: 'hover focus',
25416 title: '',
25417 delay: 0,
25418 html: false,
25419 container: false,
25420 viewport: {
25421 selector: 'body',
25422 padding: 0
25423 }
8a1f452d 25424 }
8a1f452d 25425
26dd39fd
IC
25426 Tooltip.prototype.init = function (type, element, options) {
25427 this.enabled = true
25428 this.type = type
25429 this.$element = $(element)
25430 this.options = this.getOptions(options)
25431 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25432 this.inState = { click: false, hover: false, focus: false }
8a1f452d 25433
26dd39fd
IC
25434 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25435 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25436 }
8a1f452d 25437
26dd39fd
IC
25438 var triggers = this.options.trigger.split(' ')
25439
25440 for (var i = triggers.length; i--;) {
25441 var trigger = triggers[i]
25442
25443 if (trigger == 'click') {
25444 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25445 } else if (trigger != 'manual') {
25446 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25447 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25448
25449 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25450 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25451 }
25452 }
25453
25454 this.options.selector ?
25455 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25456 this.fixTitle()
8a1f452d 25457 }
8a1f452d 25458
26dd39fd
IC
25459 Tooltip.prototype.getDefaults = function () {
25460 return Tooltip.DEFAULTS
8a1f452d 25461 }
8a1f452d 25462
26dd39fd
IC
25463 Tooltip.prototype.getOptions = function (options) {
25464 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
8a1f452d 25465
26dd39fd
IC
25466 if (options.delay && typeof options.delay == 'number') {
25467 options.delay = {
25468 show: options.delay,
25469 hide: options.delay
25470 }
25471 }
25472
25473 return options
8a1f452d 25474 }
25475
26dd39fd
IC
25476 Tooltip.prototype.getDelegateOptions = function () {
25477 var options = {}
25478 var defaults = this.getDefaults()
25479
25480 this._options && $.each(this._options, function (key, value) {
25481 if (defaults[key] != value) options[key] = value
25482 })
25483
25484 return options
8a1f452d 25485 }
25486
26dd39fd
IC
25487 Tooltip.prototype.enter = function (obj) {
25488 var self = obj instanceof this.constructor ?
25489 obj : $(obj.currentTarget).data('bs.' + this.type)
8a1f452d 25490
26dd39fd
IC
25491 if (!self) {
25492 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25493 $(obj.currentTarget).data('bs.' + this.type, self)
25494 }
8a1f452d 25495
26dd39fd
IC
25496 if (obj instanceof $.Event) {
25497 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25498 }
8a1f452d 25499
26dd39fd
IC
25500 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25501 self.hoverState = 'in'
25502 return
25503 }
8a1f452d 25504
26dd39fd 25505 clearTimeout(self.timeout)
8a1f452d 25506
26dd39fd 25507 self.hoverState = 'in'
8a1f452d 25508
26dd39fd 25509 if (!self.options.delay || !self.options.delay.show) return self.show()
8a1f452d 25510
26dd39fd
IC
25511 self.timeout = setTimeout(function () {
25512 if (self.hoverState == 'in') self.show()
25513 }, self.options.delay.show)
8a1f452d 25514 }
25515
26dd39fd
IC
25516 Tooltip.prototype.isInStateTrue = function () {
25517 for (var key in this.inState) {
25518 if (this.inState[key]) return true
25519 }
8a1f452d 25520
26dd39fd
IC
25521 return false
25522 }
8a1f452d 25523
26dd39fd
IC
25524 Tooltip.prototype.leave = function (obj) {
25525 var self = obj instanceof this.constructor ?
25526 obj : $(obj.currentTarget).data('bs.' + this.type)
8a1f452d 25527
26dd39fd
IC
25528 if (!self) {
25529 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25530 $(obj.currentTarget).data('bs.' + this.type, self)
25531 }
8a1f452d 25532
26dd39fd
IC
25533 if (obj instanceof $.Event) {
25534 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25535 }
8a1f452d 25536
26dd39fd 25537 if (self.isInStateTrue()) return
8a1f452d 25538
26dd39fd 25539 clearTimeout(self.timeout)
8a1f452d 25540
26dd39fd 25541 self.hoverState = 'out'
8a1f452d 25542
26dd39fd 25543 if (!self.options.delay || !self.options.delay.hide) return self.hide()
8a1f452d 25544
26dd39fd
IC
25545 self.timeout = setTimeout(function () {
25546 if (self.hoverState == 'out') self.hide()
25547 }, self.options.delay.hide)
8a1f452d 25548 }
8a1f452d 25549
26dd39fd
IC
25550 Tooltip.prototype.show = function () {
25551 var e = $.Event('show.bs.' + this.type)
8a1f452d 25552
26dd39fd
IC
25553 if (this.hasContent() && this.enabled) {
25554 this.$element.trigger(e)
8a1f452d 25555
26dd39fd
IC
25556 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25557 if (e.isDefaultPrevented() || !inDom) return
25558 var that = this
8a1f452d 25559
26dd39fd 25560 var $tip = this.tip()
8a1f452d 25561
26dd39fd 25562 var tipId = this.getUID(this.type)
8a1f452d 25563
26dd39fd
IC
25564 this.setContent()
25565 $tip.attr('id', tipId)
25566 this.$element.attr('aria-describedby', tipId)
8a1f452d 25567
26dd39fd 25568 if (this.options.animation) $tip.addClass('fade')
8a1f452d 25569
26dd39fd
IC
25570 var placement = typeof this.options.placement == 'function' ?
25571 this.options.placement.call(this, $tip[0], this.$element[0]) :
25572 this.options.placement
8a1f452d 25573
26dd39fd
IC
25574 var autoToken = /\s?auto?\s?/i
25575 var autoPlace = autoToken.test(placement)
25576 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
8a1f452d 25577
26dd39fd
IC
25578 $tip
25579 .detach()
25580 .css({ top: 0, left: 0, display: 'block' })
25581 .addClass(placement)
25582 .data('bs.' + this.type, this)
8a1f452d 25583
26dd39fd
IC
25584 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25585 this.$element.trigger('inserted.bs.' + this.type)
8a1f452d 25586
26dd39fd
IC
25587 var pos = this.getPosition()
25588 var actualWidth = $tip[0].offsetWidth
25589 var actualHeight = $tip[0].offsetHeight
8a1f452d 25590
26dd39fd
IC
25591 if (autoPlace) {
25592 var orgPlacement = placement
25593 var viewportDim = this.getPosition(this.$viewport)
8a1f452d 25594
26dd39fd
IC
25595 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25596 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25597 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25598 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25599 placement
8a1f452d 25600
26dd39fd
IC
25601 $tip
25602 .removeClass(orgPlacement)
25603 .addClass(placement)
25604 }
8a1f452d 25605
26dd39fd 25606 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
8a1f452d 25607
26dd39fd 25608 this.applyPlacement(calculatedOffset, placement)
8a1f452d 25609
26dd39fd
IC
25610 var complete = function () {
25611 var prevHoverState = that.hoverState
25612 that.$element.trigger('shown.bs.' + that.type)
25613 that.hoverState = null
8a1f452d 25614
26dd39fd
IC
25615 if (prevHoverState == 'out') that.leave(that)
25616 }
8a1f452d 25617
26dd39fd
IC
25618 $.support.transition && this.$tip.hasClass('fade') ?
25619 $tip
25620 .one('bsTransitionEnd', complete)
25621 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25622 complete()
25623 }
8a1f452d 25624 }
25625
26dd39fd
IC
25626 Tooltip.prototype.applyPlacement = function (offset, placement) {
25627 var $tip = this.tip()
25628 var width = $tip[0].offsetWidth
25629 var height = $tip[0].offsetHeight
8a1f452d 25630
26dd39fd
IC
25631 // manually read margins because getBoundingClientRect includes difference
25632 var marginTop = parseInt($tip.css('margin-top'), 10)
25633 var marginLeft = parseInt($tip.css('margin-left'), 10)
8a1f452d 25634
26dd39fd
IC
25635 // we must check for NaN for ie 8/9
25636 if (isNaN(marginTop)) marginTop = 0
25637 if (isNaN(marginLeft)) marginLeft = 0
8a1f452d 25638
26dd39fd
IC
25639 offset.top += marginTop
25640 offset.left += marginLeft
8a1f452d 25641
26dd39fd
IC
25642 // $.fn.offset doesn't round pixel values
25643 // so we use setOffset directly with our own function B-0
25644 $.offset.setOffset($tip[0], $.extend({
25645 using: function (props) {
25646 $tip.css({
25647 top: Math.round(props.top),
25648 left: Math.round(props.left)
25649 })
25650 }
25651 }, offset), 0)
8a1f452d 25652
26dd39fd 25653 $tip.addClass('in')
8a1f452d 25654
26dd39fd
IC
25655 // check to see if placing tip in new offset caused the tip to resize itself
25656 var actualWidth = $tip[0].offsetWidth
25657 var actualHeight = $tip[0].offsetHeight
8a1f452d 25658
26dd39fd
IC
25659 if (placement == 'top' && actualHeight != height) {
25660 offset.top = offset.top + height - actualHeight
25661 }
8a1f452d 25662
26dd39fd
IC
25663 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25664
25665 if (delta.left) offset.left += delta.left
25666 else offset.top += delta.top
25667
25668 var isVertical = /top|bottom/.test(placement)
25669 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25670 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25671
25672 $tip.offset(offset)
25673 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25674 }
25675
25676 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25677 this.arrow()
25678 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25679 .css(isVertical ? 'top' : 'left', '')
25680 }
8a1f452d 25681
26dd39fd
IC
25682 Tooltip.prototype.setContent = function () {
25683 var $tip = this.tip()
25684 var title = this.getTitle()
8a1f452d 25685
26dd39fd
IC
25686 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25687 $tip.removeClass('fade in top bottom left right')
8a1f452d 25688 }
25689
26dd39fd
IC
25690 Tooltip.prototype.hide = function (callback) {
25691 var that = this
25692 var $tip = $(this.$tip)
25693 var e = $.Event('hide.bs.' + this.type)
25694
25695 function complete() {
25696 if (that.hoverState != 'in') $tip.detach()
25697 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25698 that.$element
25699 .removeAttr('aria-describedby')
25700 .trigger('hidden.bs.' + that.type)
25701 }
25702 callback && callback()
8a1f452d 25703 }
8a1f452d 25704
26dd39fd 25705 this.$element.trigger(e)
8a1f452d 25706
26dd39fd 25707 if (e.isDefaultPrevented()) return
8a1f452d 25708
26dd39fd
IC
25709 $tip.removeClass('in')
25710
25711 $.support.transition && $tip.hasClass('fade') ?
25712 $tip
25713 .one('bsTransitionEnd', complete)
25714 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25715 complete()
25716
25717 this.hoverState = null
25718
25719 return this
8a1f452d 25720 }
25721
26dd39fd
IC
25722 Tooltip.prototype.fixTitle = function () {
25723 var $e = this.$element
25724 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25725 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
8a1f452d 25726 }
8a1f452d 25727 }
25728
26dd39fd
IC
25729 Tooltip.prototype.hasContent = function () {
25730 return this.getTitle()
25731 }
8a1f452d 25732
26dd39fd
IC
25733 Tooltip.prototype.getPosition = function ($element) {
25734 $element = $element || this.$element
8a1f452d 25735
26dd39fd
IC
25736 var el = $element[0]
25737 var isBody = el.tagName == 'BODY'
8a1f452d 25738
26dd39fd
IC
25739 var elRect = el.getBoundingClientRect()
25740 if (elRect.width == null) {
25741 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25742 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25743 }
25744 var isSvg = window.SVGElement && el instanceof window.SVGElement
25745 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25746 // See https://github.com/twbs/bootstrap/issues/20280
25747 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25748 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25749 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
8a1f452d 25750
26dd39fd
IC
25751 return $.extend({}, elRect, scroll, outerDims, elOffset)
25752 }
8a1f452d 25753
26dd39fd
IC
25754 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25755 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25756 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25757 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25758 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
8a1f452d 25759
8a1f452d 25760 }
8a1f452d 25761
26dd39fd
IC
25762 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25763 var delta = { top: 0, left: 0 }
25764 if (!this.$viewport) return delta
8a1f452d 25765
26dd39fd
IC
25766 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25767 var viewportDimensions = this.getPosition(this.$viewport)
8a1f452d 25768
26dd39fd
IC
25769 if (/right|left/.test(placement)) {
25770 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25771 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25772 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25773 delta.top = viewportDimensions.top - topEdgeOffset
25774 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25775 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25776 }
25777 } else {
25778 var leftEdgeOffset = pos.left - viewportPadding
25779 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25780 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25781 delta.left = viewportDimensions.left - leftEdgeOffset
25782 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25783 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25784 }
25785 }
25786
25787 return delta
8a1f452d 25788 }
8a1f452d 25789
26dd39fd
IC
25790 Tooltip.prototype.getTitle = function () {
25791 var title
25792 var $e = this.$element
25793 var o = this.options
8a1f452d 25794
26dd39fd
IC
25795 title = $e.attr('data-original-title')
25796 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
8a1f452d 25797
26dd39fd
IC
25798 return title
25799 }
8a1f452d 25800
26dd39fd
IC
25801 Tooltip.prototype.getUID = function (prefix) {
25802 do prefix += ~~(Math.random() * 1000000)
25803 while (document.getElementById(prefix))
25804 return prefix
25805 }
8a1f452d 25806
26dd39fd
IC
25807 Tooltip.prototype.tip = function () {
25808 if (!this.$tip) {
25809 this.$tip = $(this.options.template)
25810 if (this.$tip.length != 1) {
25811 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25812 }
25813 }
25814 return this.$tip
8a1f452d 25815 }
8a1f452d 25816
26dd39fd
IC
25817 Tooltip.prototype.arrow = function () {
25818 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
8a1f452d 25819 }
25820
26dd39fd
IC
25821 Tooltip.prototype.enable = function () {
25822 this.enabled = true
25823 }
8a1f452d 25824
26dd39fd
IC
25825 Tooltip.prototype.disable = function () {
25826 this.enabled = false
8a1f452d 25827 }
25828
26dd39fd
IC
25829 Tooltip.prototype.toggleEnabled = function () {
25830 this.enabled = !this.enabled
25831 }
8a1f452d 25832
26dd39fd
IC
25833 Tooltip.prototype.toggle = function (e) {
25834 var self = this
25835 if (e) {
25836 self = $(e.currentTarget).data('bs.' + this.type)
25837 if (!self) {
25838 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25839 $(e.currentTarget).data('bs.' + this.type, self)
8a1f452d 25840 }
25841 }
26dd39fd
IC
25842
25843 if (e) {
25844 self.inState.click = !self.inState.click
25845 if (self.isInStateTrue()) self.enter(self)
25846 else self.leave(self)
25847 } else {
25848 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
8a1f452d 25849 }
8a1f452d 25850 }
25851
26dd39fd
IC
25852 Tooltip.prototype.destroy = function () {
25853 var that = this
25854 clearTimeout(this.timeout)
25855 this.hide(function () {
25856 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25857 if (that.$tip) {
25858 that.$tip.detach()
25859 }
25860 that.$tip = null
25861 that.$arrow = null
25862 that.$viewport = null
25863 that.$element = null
25864 })
8a1f452d 25865 }
25866
26dd39fd
IC
25867
25868 // TOOLTIP PLUGIN DEFINITION
25869 // =========================
25870
25871 function Plugin(option) {
25872 return this.each(function () {
25873 var $this = $(this)
25874 var data = $this.data('bs.tooltip')
25875 var options = typeof option == 'object' && option
25876
25877 if (!data && /destroy|hide/.test(option)) return
25878 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
25879 if (typeof option == 'string') data[option]()
25880 })
8a1f452d 25881 }
25882
26dd39fd 25883 var old = $.fn.tooltip
8a1f452d 25884
26dd39fd
IC
25885 $.fn.tooltip = Plugin
25886 $.fn.tooltip.Constructor = Tooltip
8a1f452d 25887
26dd39fd
IC
25888
25889 // TOOLTIP NO CONFLICT
25890 // ===================
25891
25892 $.fn.tooltip.noConflict = function () {
25893 $.fn.tooltip = old
25894 return this
8a1f452d 25895 }
25896
26dd39fd 25897}(jQuery);
8a1f452d 25898
26dd39fd
IC
25899/* ========================================================================
25900 * Bootstrap: popover.js v3.3.7
25901 * http://getbootstrap.com/javascript/#popovers
25902 * ========================================================================
25903 * Copyright 2011-2016 Twitter, Inc.
25904 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25905 * ======================================================================== */
8a1f452d 25906
8a1f452d 25907
26dd39fd
IC
25908+function ($) {
25909 'use strict';
25910
25911 // POPOVER PUBLIC CLASS DEFINITION
25912 // ===============================
25913
25914 var Popover = function (element, options) {
25915 this.init('popover', element, options)
8a1f452d 25916 }
8a1f452d 25917
26dd39fd 25918 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
8a1f452d 25919
26dd39fd 25920 Popover.VERSION = '3.3.7'
8a1f452d 25921
26dd39fd
IC
25922 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
25923 placement: 'right',
25924 trigger: 'click',
25925 content: '',
25926 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
25927 })
8a1f452d 25928
8a1f452d 25929
26dd39fd
IC
25930 // NOTE: POPOVER EXTENDS tooltip.js
25931 // ================================
8a1f452d 25932
26dd39fd 25933 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
8a1f452d 25934
26dd39fd 25935 Popover.prototype.constructor = Popover
8a1f452d 25936
26dd39fd
IC
25937 Popover.prototype.getDefaults = function () {
25938 return Popover.DEFAULTS
25939 }
8a1f452d 25940
26dd39fd
IC
25941 Popover.prototype.setContent = function () {
25942 var $tip = this.tip()
25943 var title = this.getTitle()
25944 var content = this.getContent()
8a1f452d 25945
26dd39fd
IC
25946 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
25947 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
25948 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
25949 ](content)
25950
25951 $tip.removeClass('fade top bottom left right in')
25952
25953 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
25954 // this manually by checking the contents.
25955 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
8a1f452d 25956 }
25957
26dd39fd
IC
25958 Popover.prototype.hasContent = function () {
25959 return this.getTitle() || this.getContent()
25960 }
8a1f452d 25961
26dd39fd
IC
25962 Popover.prototype.getContent = function () {
25963 var $e = this.$element
25964 var o = this.options
25965
25966 return $e.attr('data-content')
25967 || (typeof o.content == 'function' ?
25968 o.content.call($e[0]) :
25969 o.content)
8a1f452d 25970 }
8a1f452d 25971
26dd39fd
IC
25972 Popover.prototype.arrow = function () {
25973 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
25974 }
8a1f452d 25975
26dd39fd
IC
25976
25977 // POPOVER PLUGIN DEFINITION
25978 // =========================
25979
25980 function Plugin(option) {
25981 return this.each(function () {
25982 var $this = $(this)
25983 var data = $this.data('bs.popover')
25984 var options = typeof option == 'object' && option
25985
25986 if (!data && /destroy|hide/.test(option)) return
25987 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
25988 if (typeof option == 'string') data[option]()
25989 })
8a1f452d 25990 }
25991
26dd39fd 25992 var old = $.fn.popover
8a1f452d 25993
26dd39fd
IC
25994 $.fn.popover = Plugin
25995 $.fn.popover.Constructor = Popover
8a1f452d 25996
26dd39fd
IC
25997
25998 // POPOVER NO CONFLICT
25999 // ===================
26000
26001 $.fn.popover.noConflict = function () {
26002 $.fn.popover = old
26003 return this
8a1f452d 26004 }
8a1f452d 26005
26dd39fd 26006}(jQuery);
8a1f452d 26007
26dd39fd
IC
26008/* ========================================================================
26009 * Bootstrap: scrollspy.js v3.3.7
26010 * http://getbootstrap.com/javascript/#scrollspy
26011 * ========================================================================
26012 * Copyright 2011-2016 Twitter, Inc.
26013 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26014 * ======================================================================== */
8a1f452d 26015
8a1f452d 26016
26dd39fd
IC
26017+function ($) {
26018 'use strict';
8a1f452d 26019
26dd39fd
IC
26020 // SCROLLSPY CLASS DEFINITION
26021 // ==========================
8a1f452d 26022
26dd39fd
IC
26023 function ScrollSpy(element, options) {
26024 this.$body = $(document.body)
26025 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26026 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26027 this.selector = (this.options.target || '') + ' .nav li > a'
26028 this.offsets = []
26029 this.targets = []
26030 this.activeTarget = null
26031 this.scrollHeight = 0
8a1f452d 26032
26dd39fd
IC
26033 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26034 this.refresh()
26035 this.process()
8a1f452d 26036 }
8a1f452d 26037
26dd39fd 26038 ScrollSpy.VERSION = '3.3.7'
8a1f452d 26039
26dd39fd
IC
26040 ScrollSpy.DEFAULTS = {
26041 offset: 10
26042 }
8a1f452d 26043
26dd39fd
IC
26044 ScrollSpy.prototype.getScrollHeight = function () {
26045 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26046 }
26047
26048 ScrollSpy.prototype.refresh = function () {
26049 var that = this
26050 var offsetMethod = 'offset'
26051 var offsetBase = 0
26052
26053 this.offsets = []
26054 this.targets = []
26055 this.scrollHeight = this.getScrollHeight()
26056
26057 if (!$.isWindow(this.$scrollElement[0])) {
26058 offsetMethod = 'position'
26059 offsetBase = this.$scrollElement.scrollTop()
8a1f452d 26060 }
26dd39fd
IC
26061
26062 this.$body
26063 .find(this.selector)
26064 .map(function () {
26065 var $el = $(this)
26066 var href = $el.data('target') || $el.attr('href')
26067 var $href = /^#./.test(href) && $(href)
26068
26069 return ($href
26070 && $href.length
26071 && $href.is(':visible')
26072 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26073 })
26074 .sort(function (a, b) { return a[0] - b[0] })
26075 .each(function () {
26076 that.offsets.push(this[0])
26077 that.targets.push(this[1])
26078 })
26079 }
26080
26081 ScrollSpy.prototype.process = function () {
26082 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26083 var scrollHeight = this.getScrollHeight()
26084 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26085 var offsets = this.offsets
26086 var targets = this.targets
26087 var activeTarget = this.activeTarget
26088 var i
26089
26090 if (this.scrollHeight != scrollHeight) {
26091 this.refresh()
8a1f452d 26092 }
26dd39fd
IC
26093
26094 if (scrollTop >= maxScroll) {
26095 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
8a1f452d 26096 }
26097
26dd39fd
IC
26098 if (activeTarget && scrollTop < offsets[0]) {
26099 this.activeTarget = null
26100 return this.clear()
26101 }
26102
26103 for (i = offsets.length; i--;) {
26104 activeTarget != targets[i]
26105 && scrollTop >= offsets[i]
26106 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26107 && this.activate(targets[i])
8a1f452d 26108 }
26109 }
26110
26dd39fd
IC
26111 ScrollSpy.prototype.activate = function (target) {
26112 this.activeTarget = target
8a1f452d 26113
26dd39fd 26114 this.clear()
8a1f452d 26115
26dd39fd
IC
26116 var selector = this.selector +
26117 '[data-target="' + target + '"],' +
26118 this.selector + '[href="' + target + '"]'
8a1f452d 26119
26dd39fd
IC
26120 var active = $(selector)
26121 .parents('li')
26122 .addClass('active')
8a1f452d 26123
26dd39fd
IC
26124 if (active.parent('.dropdown-menu').length) {
26125 active = active
26126 .closest('li.dropdown')
26127 .addClass('active')
26128 }
8a1f452d 26129
26dd39fd
IC
26130 active.trigger('activate.bs.scrollspy')
26131 }
8a1f452d 26132
26dd39fd
IC
26133 ScrollSpy.prototype.clear = function () {
26134 $(this.selector)
26135 .parentsUntil(this.options.target, '.active')
26136 .removeClass('active')
26137 }
26138
26139
26140 // SCROLLSPY PLUGIN DEFINITION
26141 // ===========================
26142
26143 function Plugin(option) {
26144 return this.each(function () {
26145 var $this = $(this)
26146 var data = $this.data('bs.scrollspy')
26147 var options = typeof option == 'object' && option
26148
26149 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26150 if (typeof option == 'string') data[option]()
26151 })
26152 }
26153
26154 var old = $.fn.scrollspy
26155
26156 $.fn.scrollspy = Plugin
26157 $.fn.scrollspy.Constructor = ScrollSpy
26158
26159
26160 // SCROLLSPY NO CONFLICT
26161 // =====================
26162
26163 $.fn.scrollspy.noConflict = function () {
26164 $.fn.scrollspy = old
26165 return this
26166 }
26167
26168
26169 // SCROLLSPY DATA-API
26170 // ==================
26171
26172 $(window).on('load.bs.scrollspy.data-api', function () {
26173 $('[data-spy="scroll"]').each(function () {
26174 var $spy = $(this)
26175 Plugin.call($spy, $spy.data())
26176 })
26177 })
26178
26179}(jQuery);
26180
26181/* ========================================================================
26182 * Bootstrap: tab.js v3.3.7
26183 * http://getbootstrap.com/javascript/#tabs
26184 * ========================================================================
26185 * Copyright 2011-2016 Twitter, Inc.
26186 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26187 * ======================================================================== */
26188
26189
26190+function ($) {
26191 'use strict';
26192
26193 // TAB CLASS DEFINITION
26194 // ====================
26195
26196 var Tab = function (element) {
26197 // jscs:disable requireDollarBeforejQueryAssignment
26198 this.element = $(element)
26199 // jscs:enable requireDollarBeforejQueryAssignment
26200 }
26201
26202 Tab.VERSION = '3.3.7'
26203
26204 Tab.TRANSITION_DURATION = 150
26205
26206 Tab.prototype.show = function () {
26207 var $this = this.element
26208 var $ul = $this.closest('ul:not(.dropdown-menu)')
26209 var selector = $this.data('target')
26210
26211 if (!selector) {
26212 selector = $this.attr('href')
26213 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26214 }
26215
26216 if ($this.parent('li').hasClass('active')) return
26217
26218 var $previous = $ul.find('.active:last a')
26219 var hideEvent = $.Event('hide.bs.tab', {
26220 relatedTarget: $this[0]
26221 })
26222 var showEvent = $.Event('show.bs.tab', {
26223 relatedTarget: $previous[0]
26224 })
26225
26226 $previous.trigger(hideEvent)
26227 $this.trigger(showEvent)
8a1f452d 26228
26dd39fd
IC
26229 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26230
26231 var $target = $(selector)
26232
26233 this.activate($this.closest('li'), $ul)
26234 this.activate($target, $target.parent(), function () {
26235 $previous.trigger({
26236 type: 'hidden.bs.tab',
26237 relatedTarget: $this[0]
26238 })
26239 $this.trigger({
26240 type: 'shown.bs.tab',
26241 relatedTarget: $previous[0]
26242 })
26243 })
8a1f452d 26244 }
26245
26dd39fd
IC
26246 Tab.prototype.activate = function (element, container, callback) {
26247 var $active = container.find('> .active')
26248 var transition = callback
26249 && $.support.transition
26250 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
8a1f452d 26251
26dd39fd
IC
26252 function next() {
26253 $active
26254 .removeClass('active')
26255 .find('> .dropdown-menu > .active')
26256 .removeClass('active')
26257 .end()
26258 .find('[data-toggle="tab"]')
26259 .attr('aria-expanded', false)
26260
26261 element
26262 .addClass('active')
26263 .find('[data-toggle="tab"]')
26264 .attr('aria-expanded', true)
26265
26266 if (transition) {
26267 element[0].offsetWidth // reflow for transition
26268 element.addClass('in')
26269 } else {
26270 element.removeClass('fade')
8a1f452d 26271 }
26272
26dd39fd
IC
26273 if (element.parent('.dropdown-menu').length) {
26274 element
26275 .closest('li.dropdown')
26276 .addClass('active')
26277 .end()
26278 .find('[data-toggle="tab"]')
26279 .attr('aria-expanded', true)
8a1f452d 26280 }
8a1f452d 26281
26dd39fd
IC
26282 callback && callback()
26283 }
8a1f452d 26284
26dd39fd
IC
26285 $active.length && transition ?
26286 $active
26287 .one('bsTransitionEnd', next)
26288 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26289 next()
8a1f452d 26290
26dd39fd 26291 $active.removeClass('in')
8a1f452d 26292 }
26293
8a1f452d 26294
26dd39fd
IC
26295 // TAB PLUGIN DEFINITION
26296 // =====================
8a1f452d 26297
26dd39fd
IC
26298 function Plugin(option) {
26299 return this.each(function () {
26300 var $this = $(this)
26301 var data = $this.data('bs.tab')
8a1f452d 26302
26dd39fd
IC
26303 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26304 if (typeof option == 'string') data[option]()
26305 })
26306 }
8a1f452d 26307
26dd39fd 26308 var old = $.fn.tab
8a1f452d 26309
26dd39fd
IC
26310 $.fn.tab = Plugin
26311 $.fn.tab.Constructor = Tab
8a1f452d 26312
8a1f452d 26313
26dd39fd
IC
26314 // TAB NO CONFLICT
26315 // ===============
26316
26317 $.fn.tab.noConflict = function () {
26318 $.fn.tab = old
26319 return this
8a1f452d 26320 }
26321
26dd39fd
IC
26322
26323 // TAB DATA-API
26324 // ============
26325
26326 var clickHandler = function (e) {
26327 e.preventDefault()
26328 Plugin.call($(this), 'show')
8a1f452d 26329 }
8a1f452d 26330
26dd39fd
IC
26331 $(document)
26332 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26333 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
8a1f452d 26334
26dd39fd 26335}(jQuery);
6e0f24b1 26336
26dd39fd
IC
26337/* ========================================================================
26338 * Bootstrap: affix.js v3.3.7
26339 * http://getbootstrap.com/javascript/#affix
26340 * ========================================================================
26341 * Copyright 2011-2016 Twitter, Inc.
26342 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26343 * ======================================================================== */
6e0f24b1 26344
6e0f24b1 26345
26dd39fd
IC
26346+function ($) {
26347 'use strict';
6e0f24b1 26348
26dd39fd
IC
26349 // AFFIX CLASS DEFINITION
26350 // ======================
6e0f24b1 26351
26dd39fd
IC
26352 var Affix = function (element, options) {
26353 this.options = $.extend({}, Affix.DEFAULTS, options)
6e0f24b1 26354
26dd39fd
IC
26355 this.$target = $(this.options.target)
26356 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26357 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
6e0f24b1 26358
26dd39fd
IC
26359 this.$element = $(element)
26360 this.affixed = null
26361 this.unpin = null
26362 this.pinnedOffset = null
6e0f24b1 26363
26dd39fd
IC
26364 this.checkPosition()
26365 }
6e0f24b1 26366
26dd39fd 26367 Affix.VERSION = '3.3.7'
6e0f24b1 26368
26dd39fd 26369 Affix.RESET = 'affix affix-top affix-bottom'
6e0f24b1 26370
26dd39fd
IC
26371 Affix.DEFAULTS = {
26372 offset: 0,
26373 target: window
26374 }
6e0f24b1 26375
26dd39fd
IC
26376 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26377 var scrollTop = this.$target.scrollTop()
26378 var position = this.$element.offset()
26379 var targetHeight = this.$target.height()
6e0f24b1 26380
26dd39fd 26381 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
6e0f24b1 26382
26dd39fd
IC
26383 if (this.affixed == 'bottom') {
26384 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26385 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26386 }
6e0f24b1 26387
26dd39fd
IC
26388 var initializing = this.affixed == null
26389 var colliderTop = initializing ? scrollTop : position.top
26390 var colliderHeight = initializing ? targetHeight : height
6e0f24b1 26391
26dd39fd
IC
26392 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26393 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
6e0f24b1 26394
26dd39fd
IC
26395 return false
26396 }
6e0f24b1 26397
26dd39fd
IC
26398 Affix.prototype.getPinnedOffset = function () {
26399 if (this.pinnedOffset) return this.pinnedOffset
26400 this.$element.removeClass(Affix.RESET).addClass('affix')
26401 var scrollTop = this.$target.scrollTop()
26402 var position = this.$element.offset()
26403 return (this.pinnedOffset = position.top - scrollTop)
26404 }
6e0f24b1 26405
26dd39fd
IC
26406 Affix.prototype.checkPositionWithEventLoop = function () {
26407 setTimeout($.proxy(this.checkPosition, this), 1)
26408 }
6e0f24b1 26409
26dd39fd
IC
26410 Affix.prototype.checkPosition = function () {
26411 if (!this.$element.is(':visible')) return
6e0f24b1 26412
26dd39fd
IC
26413 var height = this.$element.height()
26414 var offset = this.options.offset
26415 var offsetTop = offset.top
26416 var offsetBottom = offset.bottom
26417 var scrollHeight = Math.max($(document).height(), $(document.body).height())
6e0f24b1 26418
26dd39fd
IC
26419 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26420 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26421 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
6e0f24b1 26422
26dd39fd 26423 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
6e0f24b1 26424
26dd39fd
IC
26425 if (this.affixed != affix) {
26426 if (this.unpin != null) this.$element.css('top', '')
6e0f24b1 26427
26dd39fd
IC
26428 var affixType = 'affix' + (affix ? '-' + affix : '')
26429 var e = $.Event(affixType + '.bs.affix')
6e0f24b1 26430
26dd39fd 26431 this.$element.trigger(e)
6e0f24b1 26432
26dd39fd 26433 if (e.isDefaultPrevented()) return
6e0f24b1 26434
26dd39fd
IC
26435 this.affixed = affix
26436 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
6e0f24b1 26437
26dd39fd
IC
26438 this.$element
26439 .removeClass(Affix.RESET)
26440 .addClass(affixType)
26441 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26442 }
6e0f24b1 26443
26dd39fd
IC
26444 if (affix == 'bottom') {
26445 this.$element.offset({
26446 top: scrollHeight - height - offsetBottom
26447 })
26448 }
26449 }
6e0f24b1 26450
6e0f24b1 26451
26dd39fd
IC
26452 // AFFIX PLUGIN DEFINITION
26453 // =======================
6e0f24b1 26454
26dd39fd
IC
26455 function Plugin(option) {
26456 return this.each(function () {
26457 var $this = $(this)
26458 var data = $this.data('bs.affix')
26459 var options = typeof option == 'object' && option
6e0f24b1 26460
26dd39fd
IC
26461 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26462 if (typeof option == 'string') data[option]()
26463 })
26464 }
6e0f24b1 26465
26dd39fd 26466 var old = $.fn.affix
6e0f24b1 26467
26dd39fd
IC
26468 $.fn.affix = Plugin
26469 $.fn.affix.Constructor = Affix
6e0f24b1 26470
6e0f24b1 26471
26dd39fd
IC
26472 // AFFIX NO CONFLICT
26473 // =================
6e0f24b1 26474
26dd39fd
IC
26475 $.fn.affix.noConflict = function () {
26476 $.fn.affix = old
26477 return this
26478 }
6e0f24b1 26479
6e0f24b1 26480
26dd39fd
IC
26481 // AFFIX DATA-API
26482 // ==============
6e0f24b1 26483
26dd39fd
IC
26484 $(window).on('load', function () {
26485 $('[data-spy="affix"]').each(function () {
26486 var $spy = $(this)
26487 var data = $spy.data()
26488
26489 data.offset = data.offset || {}
26490
26491 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26492 if (data.offsetTop != null) data.offset.top = data.offsetTop
26493
26494 Plugin.call($spy, data)
26495 })
26496 })
26497
26498}(jQuery);
8b095871 26499</script>
8b095871
IC
26500 <script>(function() {
26501 'use strict';
26502
26503 /**
26504 * Extend an Object with another Object's properties.
26505 *
26506 * The source objects are specified as additional arguments.
26507 *
26508 * @param dst Object the object to extend.
26509 *
26510 * @return Object the final object.
26511 */
26512 var _extend = function(dst) {
26513 var sources = Array.prototype.slice.call(arguments, 1);
26514 for (var i=0; i<sources.length; ++i) {
26515 var src = sources[i];
26516 for (var p in src) {
26517 if (src.hasOwnProperty(p)) dst[p] = src[p];
26518 }
26519 }
26520 return dst;
26521 };
26522
26523
26524 /**
26525 * Defer execution of given function.
26526 * @param {Function} func
26527 */
26528 var _defer = function(func) {
26529 if (typeof setImmediate === 'function') {
26530 return setImmediate(func);
26531 } else {
26532 return setTimeout(func, 0);
26533 }
26534 };
26535
26536 /**
26537 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26538 */
26539 var Levenshtein = {
26540 /**
26541 * Calculate levenshtein distance of the two strings.
26542 *
26543 * @param str1 String the first string.
26544 * @param str2 String the second string.
26545 * @return Integer the levenshtein distance (0 and above).
26546 */
26547 get: function(str1, str2) {
26548 // base cases
26549 if (str1 === str2) return 0;
26550 if (str1.length === 0) return str2.length;
26551 if (str2.length === 0) return str1.length;
26552
26553 // two rows
26554 var prevRow = new Array(str2.length + 1),
26555 curCol, nextCol, i, j, tmp;
26556
26557 // initialise previous row
26558 for (i=0; i<prevRow.length; ++i) {
26559 prevRow[i] = i;
26560 }
26561
26562 // calculate current row distance from previous row
26563 for (i=0; i<str1.length; ++i) {
26564 nextCol = i + 1;
26565
26566 for (j=0; j<str2.length; ++j) {
26567 curCol = nextCol;
26568
26569 // substution
26570 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26571 // insertion
26572 tmp = curCol + 1;
26573 if (nextCol > tmp) {
26574 nextCol = tmp;
26575 }
26576 // deletion
26577 tmp = prevRow[j + 1] + 1;
26578 if (nextCol > tmp) {
26579 nextCol = tmp;
26580 }
26581
26582 // copy current col value into previous (in preparation for next iteration)
26583 prevRow[j] = curCol;
26584 }
26585
26586 // copy last col value into previous (in preparation for next iteration)
26587 prevRow[j] = nextCol;
26588 }
26589
26590 return nextCol;
26591 },
26592
26593 /**
26594 * Asynchronously calculate levenshtein distance of the two strings.
26595 *
26596 * @param str1 String the first string.
26597 * @param str2 String the second string.
26598 * @param cb Function callback function with signature: function(Error err, int distance)
26599 * @param [options] Object additional options.
26600 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26601 */
26602 getAsync: function(str1, str2, cb, options) {
26603 options = _extend({}, {
26604 progress: null
26605 }, options);
26606
26607 // base cases
26608 if (str1 === str2) return cb(null, 0);
26609 if (str1.length === 0) return cb(null, str2.length);
26610 if (str2.length === 0) return cb(null, str1.length);
26611
26612 // two rows
26613 var prevRow = new Array(str2.length + 1),
26614 curCol, nextCol,
26615 i, j, tmp,
26616 startTime, currentTime;
26617
26618 // initialise previous row
26619 for (i=0; i<prevRow.length; ++i) {
26620 prevRow[i] = i;
26621 }
26622
26623 nextCol = 1;
26624 i = 0;
26625 j = -1;
26626
26627 var __calculate = function() {
26628 // reset timer
26629 startTime = new Date().valueOf();
26630 currentTime = startTime;
26631
26632 // keep going until one second has elapsed
26633 while (currentTime - startTime < 1000) {
26634 // reached end of current row?
26635 if (str2.length <= (++j)) {
26636 // copy current into previous (in preparation for next iteration)
26637 prevRow[j] = nextCol;
26638
26639 // if already done all chars
26640 if (str1.length <= (++i)) {
26641 return cb(null, nextCol);
26642 }
26643 // else if we have more left to do
26644 else {
26645 nextCol = i + 1;
26646 j = 0;
26647 }
26648 }
26649
26650 // calculation
26651 curCol = nextCol;
26652
26653 // substution
26654 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26655 // insertion
26656 tmp = curCol + 1;
26657 if (nextCol > tmp) {
26658 nextCol = tmp;
26659 }
26660 // deletion
26661 tmp = prevRow[j + 1] + 1;
26662 if (nextCol > tmp) {
26663 nextCol = tmp;
26664 }
26665
26666 // copy current into previous (in preparation for next iteration)
26667 prevRow[j] = curCol;
26668
26669 // get current time
26670 currentTime = new Date().valueOf();
26671 }
26672
26673 // send a progress update?
26674 if (null !== options.progress) {
26675 try {
26676 options.progress.call(null, (i * 100.0/ str1.length));
26677 } catch (err) {
26678 return cb('Progress callback: ' + err.toString());
26679 }
26680 }
26681
26682 // next iteration
26683 _defer(__calculate);
26684 };
26685
26686 __calculate();
26687 }
26688
26689 };
26690
26691 // amd
26692 if (typeof define !== "undefined" && define !== null && define.amd) {
26693 define(function() {
26694 return Levenshtein;
26695 });
26696 }
26697 // commonjs
26698 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26699 module.exports = Levenshtein;
26700 }
26701 // web worker
26702 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26703 self.Levenshtein = Levenshtein;
26704 }
26705 // browser main thread
26706 else if (typeof window !== "undefined" && window !== null) {
26707 window.Levenshtein = Levenshtein;
26708 }
26709}());
26710
26711</script>
26dd39fd
IC
26712 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26713!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>
9987f0c1
IC
26714 <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){
26715(function (global){
26716'use strict';
8b095871 26717
9987f0c1
IC
26718// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26719// original notice:
8b095871 26720
9987f0c1
IC
26721/*!
26722 * The buffer module from node.js, for the browser.
26723 *
26724 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26725 * @license MIT
26726 */
26727function compare(a, b) {
26728 if (a === b) {
26729 return 0;
26730 }
8b095871 26731
9987f0c1
IC
26732 var x = a.length;
26733 var y = b.length;
8b095871 26734
9987f0c1
IC
26735 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26736 if (a[i] !== b[i]) {
26737 x = a[i];
26738 y = b[i];
26739 break;
26740 }
26741 }
8b095871 26742
9987f0c1
IC
26743 if (x < y) {
26744 return -1;
8b095871 26745 }
9987f0c1
IC
26746 if (y < x) {
26747 return 1;
8b095871 26748 }
9987f0c1 26749 return 0;
8b095871 26750}
9987f0c1
IC
26751function isBuffer(b) {
26752 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26753 return global.Buffer.isBuffer(b);
8b095871 26754 }
9987f0c1 26755 return !!(b != null && b._isBuffer);
8b095871
IC
26756}
26757
9987f0c1 26758// based on node assert, original notice:
8b095871 26759
9987f0c1
IC
26760// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26761//
26762// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26763//
26764// Originally from narwhal.js (http://narwhaljs.org)
26765// Copyright (c) 2009 Thomas Robinson <280north.com>
26766//
26767// Permission is hereby granted, free of charge, to any person obtaining a copy
26768// of this software and associated documentation files (the 'Software'), to
26769// deal in the Software without restriction, including without limitation the
26770// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26771// sell copies of the Software, and to permit persons to whom the Software is
26772// furnished to do so, subject to the following conditions:
26773//
26774// The above copyright notice and this permission notice shall be included in
26775// all copies or substantial portions of the Software.
26776//
26777// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26778// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26779// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26780// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26781// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26782// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 26783
9987f0c1
IC
26784var util = require('util/');
26785var hasOwn = Object.prototype.hasOwnProperty;
26786var pSlice = Array.prototype.slice;
26787var functionsHaveNames = (function () {
26788 return function foo() {}.name === 'foo';
26789}());
26790function pToString (obj) {
26791 return Object.prototype.toString.call(obj);
8b095871 26792}
9987f0c1
IC
26793function isView(arrbuf) {
26794 if (isBuffer(arrbuf)) {
26795 return false;
26796 }
26797 if (typeof global.ArrayBuffer !== 'function') {
26798 return false;
26799 }
26800 if (typeof ArrayBuffer.isView === 'function') {
26801 return ArrayBuffer.isView(arrbuf);
26802 }
26803 if (!arrbuf) {
26804 return false;
26805 }
26806 if (arrbuf instanceof DataView) {
26807 return true;
26808 }
26809 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26810 return true;
26811 }
26812 return false;
8b095871 26813}
9987f0c1
IC
26814// 1. The assert module provides functions that throw
26815// AssertionError's when particular conditions are not met. The
26816// assert module must conform to the following interface.
8b095871 26817
9987f0c1 26818var assert = module.exports = ok;
8b095871 26819
9987f0c1
IC
26820// 2. The AssertionError is defined in assert.
26821// new assert.AssertionError({ message: message,
26822// actual: actual,
26823// expected: expected })
8b095871 26824
9987f0c1
IC
26825var regex = /\s*function\s+([^\(\s]*)\s*/;
26826// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26827function getName(func) {
26828 if (!util.isFunction(func)) {
26829 return;
26830 }
26831 if (functionsHaveNames) {
26832 return func.name;
26833 }
26834 var str = func.toString();
26835 var match = str.match(regex);
26836 return match && match[1];
8b095871 26837}
9987f0c1
IC
26838assert.AssertionError = function AssertionError(options) {
26839 this.name = 'AssertionError';
26840 this.actual = options.actual;
26841 this.expected = options.expected;
26842 this.operator = options.operator;
26843 if (options.message) {
26844 this.message = options.message;
26845 this.generatedMessage = false;
26846 } else {
26847 this.message = getMessage(this);
26848 this.generatedMessage = true;
26849 }
26850 var stackStartFunction = options.stackStartFunction || fail;
26851 if (Error.captureStackTrace) {
26852 Error.captureStackTrace(this, stackStartFunction);
26853 } else {
26854 // non v8 browsers so we can have a stacktrace
26855 var err = new Error();
26856 if (err.stack) {
26857 var out = err.stack;
8b095871 26858
9987f0c1
IC
26859 // try to strip useless frames
26860 var fn_name = getName(stackStartFunction);
26861 var idx = out.indexOf('\n' + fn_name);
26862 if (idx >= 0) {
26863 // once we have located the function frame
26864 // we need to strip out everything before it (and its line)
26865 var next_line = out.indexOf('\n', idx + 1);
26866 out = out.substring(next_line + 1);
26867 }
8b095871 26868
9987f0c1 26869 this.stack = out;
8b095871 26870 }
8b095871 26871 }
9987f0c1 26872};
8b095871 26873
9987f0c1
IC
26874// assert.AssertionError instanceof Error
26875util.inherits(assert.AssertionError, Error);
8b095871 26876
9987f0c1
IC
26877function truncate(s, n) {
26878 if (typeof s === 'string') {
26879 return s.length < n ? s : s.slice(0, n);
26880 } else {
26881 return s;
8b095871 26882 }
8b095871 26883}
9987f0c1
IC
26884function inspect(something) {
26885 if (functionsHaveNames || !util.isFunction(something)) {
26886 return util.inspect(something);
26887 }
26888 var rawname = getName(something);
26889 var name = rawname ? ': ' + rawname : '';
26890 return '[Function' + name + ']';
8b095871 26891}
9987f0c1
IC
26892function getMessage(self) {
26893 return truncate(inspect(self.actual), 128) + ' ' +
26894 self.operator + ' ' +
26895 truncate(inspect(self.expected), 128);
8b095871
IC
26896}
26897
9987f0c1
IC
26898// At present only the three keys mentioned above are used and
26899// understood by the spec. Implementations or sub modules can pass
26900// other keys to the AssertionError's constructor - they will be
26901// ignored.
3af2954a 26902
9987f0c1
IC
26903// 3. All of the following functions must throw an AssertionError
26904// when a corresponding condition is not met, with a message that
26905// may be undefined if not provided. All assertion methods provide
26906// both the actual and expected values to the assertion error for
26907// display purposes.
8b095871 26908
9987f0c1
IC
26909function fail(actual, expected, message, operator, stackStartFunction) {
26910 throw new assert.AssertionError({
26911 message: message,
26912 actual: actual,
26913 expected: expected,
26914 operator: operator,
26915 stackStartFunction: stackStartFunction
26916 });
8b095871
IC
26917}
26918
9987f0c1
IC
26919// EXTENSION! allows for well behaved errors defined elsewhere.
26920assert.fail = fail;
8b095871 26921
9987f0c1
IC
26922// 4. Pure assertion tests whether a value is truthy, as determined
26923// by !!guard.
26924// assert.ok(guard, message_opt);
26925// This statement is equivalent to assert.equal(true, !!guard,
26926// message_opt);. To test strictly for the value true, use
26927// assert.strictEqual(true, guard, message_opt);.
8b095871 26928
9987f0c1
IC
26929function ok(value, message) {
26930 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 26931}
9987f0c1 26932assert.ok = ok;
8b095871 26933
9987f0c1
IC
26934// 5. The equality assertion tests shallow, coercive equality with
26935// ==.
26936// assert.equal(actual, expected, message_opt);
26937
26938assert.equal = function equal(actual, expected, message) {
26939 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
26940};
26941
26942// 6. The non-equality assertion tests for whether two objects are not equal
26943// with != assert.notEqual(actual, expected, message_opt);
26944
26945assert.notEqual = function notEqual(actual, expected, message) {
26946 if (actual == expected) {
26947 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 26948 }
9987f0c1 26949};
8b095871 26950
9987f0c1
IC
26951// 7. The equivalence assertion tests a deep equality relation.
26952// assert.deepEqual(actual, expected, message_opt);
26953
26954assert.deepEqual = function deepEqual(actual, expected, message) {
26955 if (!_deepEqual(actual, expected, false)) {
26956 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 26957 }
9987f0c1
IC
26958};
26959
26960assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
26961 if (!_deepEqual(actual, expected, true)) {
26962 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
26963 }
26964};
26965
26966function _deepEqual(actual, expected, strict, memos) {
26967 // 7.1. All identical values are equivalent, as determined by ===.
26968 if (actual === expected) {
26969 return true;
26970 } else if (isBuffer(actual) && isBuffer(expected)) {
26971 return compare(actual, expected) === 0;
26972
26973 // 7.2. If the expected value is a Date object, the actual value is
26974 // equivalent if it is also a Date object that refers to the same time.
26975 } else if (util.isDate(actual) && util.isDate(expected)) {
26976 return actual.getTime() === expected.getTime();
26977
26978 // 7.3 If the expected value is a RegExp object, the actual value is
26979 // equivalent if it is also a RegExp object with the same source and
26980 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
26981 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
26982 return actual.source === expected.source &&
26983 actual.global === expected.global &&
26984 actual.multiline === expected.multiline &&
26985 actual.lastIndex === expected.lastIndex &&
26986 actual.ignoreCase === expected.ignoreCase;
26987
26988 // 7.4. Other pairs that do not both pass typeof value == 'object',
26989 // equivalence is determined by ==.
26990 } else if ((actual === null || typeof actual !== 'object') &&
26991 (expected === null || typeof expected !== 'object')) {
26992 return strict ? actual === expected : actual == expected;
26993
26994 // If both values are instances of typed arrays, wrap their underlying
26995 // ArrayBuffers in a Buffer each to increase performance
26996 // This optimization requires the arrays to have the same type as checked by
26997 // Object.prototype.toString (aka pToString). Never perform binary
26998 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
26999 // bit patterns are not identical.
27000 } else if (isView(actual) && isView(expected) &&
27001 pToString(actual) === pToString(expected) &&
27002 !(actual instanceof Float32Array ||
27003 actual instanceof Float64Array)) {
27004 return compare(new Uint8Array(actual.buffer),
27005 new Uint8Array(expected.buffer)) === 0;
27006
27007 // 7.5 For all other Object pairs, including Array objects, equivalence is
27008 // determined by having the same number of owned properties (as verified
27009 // with Object.prototype.hasOwnProperty.call), the same set of keys
27010 // (although not necessarily the same order), equivalent values for every
27011 // corresponding key, and an identical 'prototype' property. Note: this
27012 // accounts for both named and indexed properties on Arrays.
27013 } else if (isBuffer(actual) !== isBuffer(expected)) {
27014 return false;
27015 } else {
27016 memos = memos || {actual: [], expected: []};
27017
27018 var actualIndex = memos.actual.indexOf(actual);
27019 if (actualIndex !== -1) {
27020 if (actualIndex === memos.expected.indexOf(expected)) {
27021 return true;
27022 }
27023 }
27024
27025 memos.actual.push(actual);
27026 memos.expected.push(expected);
27027
27028 return objEquiv(actual, expected, strict, memos);
27029 }
27030}
27031
27032function isArguments(object) {
27033 return Object.prototype.toString.call(object) == '[object Arguments]';
27034}
27035
27036function objEquiv(a, b, strict, actualVisitedObjects) {
27037 if (a === null || a === undefined || b === null || b === undefined)
27038 return false;
27039 // if one is a primitive, the other must be same
27040 if (util.isPrimitive(a) || util.isPrimitive(b))
27041 return a === b;
27042 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27043 return false;
27044 var aIsArgs = isArguments(a);
27045 var bIsArgs = isArguments(b);
27046 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27047 return false;
27048 if (aIsArgs) {
27049 a = pSlice.call(a);
27050 b = pSlice.call(b);
27051 return _deepEqual(a, b, strict);
27052 }
27053 var ka = objectKeys(a);
27054 var kb = objectKeys(b);
27055 var key, i;
27056 // having the same number of owned properties (keys incorporates
27057 // hasOwnProperty)
27058 if (ka.length !== kb.length)
27059 return false;
27060 //the same set of keys (although not necessarily the same order),
27061 ka.sort();
27062 kb.sort();
27063 //~~~cheap key test
27064 for (i = ka.length - 1; i >= 0; i--) {
27065 if (ka[i] !== kb[i])
27066 return false;
27067 }
27068 //equivalent values for every corresponding key, and
27069 //~~~possibly expensive deep test
27070 for (i = ka.length - 1; i >= 0; i--) {
27071 key = ka[i];
27072 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27073 return false;
27074 }
27075 return true;
27076}
27077
27078// 8. The non-equivalence assertion tests for any deep inequality.
27079// assert.notDeepEqual(actual, expected, message_opt);
27080
27081assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27082 if (_deepEqual(actual, expected, false)) {
27083 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27084 }
27085};
27086
27087assert.notDeepStrictEqual = notDeepStrictEqual;
27088function notDeepStrictEqual(actual, expected, message) {
27089 if (_deepEqual(actual, expected, true)) {
27090 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27091 }
27092}
27093
27094
27095// 9. The strict equality assertion tests strict equality, as determined by ===.
27096// assert.strictEqual(actual, expected, message_opt);
27097
27098assert.strictEqual = function strictEqual(actual, expected, message) {
27099 if (actual !== expected) {
27100 fail(actual, expected, message, '===', assert.strictEqual);
27101 }
27102};
27103
27104// 10. The strict non-equality assertion tests for strict inequality, as
27105// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27106
27107assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27108 if (actual === expected) {
27109 fail(actual, expected, message, '!==', assert.notStrictEqual);
27110 }
27111};
27112
27113function expectedException(actual, expected) {
27114 if (!actual || !expected) {
27115 return false;
27116 }
27117
27118 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27119 return expected.test(actual);
27120 }
27121
27122 try {
27123 if (actual instanceof expected) {
27124 return true;
27125 }
27126 } catch (e) {
27127 // Ignore. The instanceof check doesn't work for arrow functions.
27128 }
27129
27130 if (Error.isPrototypeOf(expected)) {
27131 return false;
27132 }
27133
27134 return expected.call({}, actual) === true;
27135}
27136
27137function _tryBlock(block) {
27138 var error;
27139 try {
27140 block();
27141 } catch (e) {
27142 error = e;
27143 }
27144 return error;
27145}
27146
27147function _throws(shouldThrow, block, expected, message) {
27148 var actual;
27149
27150 if (typeof block !== 'function') {
27151 throw new TypeError('"block" argument must be a function');
27152 }
27153
27154 if (typeof expected === 'string') {
27155 message = expected;
27156 expected = null;
27157 }
27158
27159 actual = _tryBlock(block);
27160
27161 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27162 (message ? ' ' + message : '.');
27163
27164 if (shouldThrow && !actual) {
27165 fail(actual, expected, 'Missing expected exception' + message);
27166 }
27167
27168 var userProvidedMessage = typeof message === 'string';
27169 var isUnwantedException = !shouldThrow && util.isError(actual);
27170 var isUnexpectedException = !shouldThrow && actual && !expected;
27171
27172 if ((isUnwantedException &&
27173 userProvidedMessage &&
27174 expectedException(actual, expected)) ||
27175 isUnexpectedException) {
27176 fail(actual, expected, 'Got unwanted exception' + message);
27177 }
27178
27179 if ((shouldThrow && actual && expected &&
27180 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27181 throw actual;
27182 }
27183}
27184
27185// 11. Expected to throw an error:
27186// assert.throws(block, Error_opt, message_opt);
27187
27188assert.throws = function(block, /*optional*/error, /*optional*/message) {
27189 _throws(true, block, error, message);
27190};
27191
27192// EXTENSION! This is annoying to write outside this module.
27193assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27194 _throws(false, block, error, message);
27195};
27196
27197assert.ifError = function(err) { if (err) throw err; };
27198
27199var objectKeys = Object.keys || function (obj) {
27200 var keys = [];
27201 for (var key in obj) {
27202 if (hasOwn.call(obj, key)) keys.push(key);
27203 }
27204 return keys;
27205};
27206
27207}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044 27208},{"util/":33}],2:[function(require,module,exports){
9987f0c1
IC
27209'use strict'
27210
27211exports.byteLength = byteLength
27212exports.toByteArray = toByteArray
27213exports.fromByteArray = fromByteArray
27214
27215var lookup = []
27216var revLookup = []
27217var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27218
27219var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27220for (var i = 0, len = code.length; i < len; ++i) {
27221 lookup[i] = code[i]
27222 revLookup[code.charCodeAt(i)] = i
27223}
27224
27225revLookup['-'.charCodeAt(0)] = 62
27226revLookup['_'.charCodeAt(0)] = 63
27227
27228function placeHoldersCount (b64) {
27229 var len = b64.length
27230 if (len % 4 > 0) {
27231 throw new Error('Invalid string. Length must be a multiple of 4')
27232 }
27233
27234 // the number of equal signs (place holders)
27235 // if there are two placeholders, than the two characters before it
27236 // represent one byte
27237 // if there is only one, then the three characters before it represent 2 bytes
27238 // this is just a cheap hack to not do indexOf twice
27239 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27240}
27241
27242function byteLength (b64) {
27243 // base64 is 4/3 + up to two characters of the original data
cf6c2044 27244 return b64.length * 3 / 4 - placeHoldersCount(b64)
9987f0c1
IC
27245}
27246
27247function toByteArray (b64) {
cf6c2044 27248 var i, j, l, tmp, placeHolders, arr
9987f0c1
IC
27249 var len = b64.length
27250 placeHolders = placeHoldersCount(b64)
27251
cf6c2044 27252 arr = new Arr(len * 3 / 4 - placeHolders)
9987f0c1
IC
27253
27254 // if there are placeholders, only get up to the last complete 4 chars
27255 l = placeHolders > 0 ? len - 4 : len
27256
27257 var L = 0
27258
cf6c2044 27259 for (i = 0, j = 0; i < l; i += 4, j += 3) {
9987f0c1
IC
27260 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27261 arr[L++] = (tmp >> 16) & 0xFF
27262 arr[L++] = (tmp >> 8) & 0xFF
27263 arr[L++] = tmp & 0xFF
27264 }
27265
27266 if (placeHolders === 2) {
27267 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27268 arr[L++] = tmp & 0xFF
27269 } else if (placeHolders === 1) {
27270 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27271 arr[L++] = (tmp >> 8) & 0xFF
27272 arr[L++] = tmp & 0xFF
27273 }
27274
27275 return arr
27276}
27277
27278function tripletToBase64 (num) {
27279 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27280}
27281
27282function encodeChunk (uint8, start, end) {
27283 var tmp
27284 var output = []
27285 for (var i = start; i < end; i += 3) {
27286 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27287 output.push(tripletToBase64(tmp))
27288 }
27289 return output.join('')
27290}
27291
27292function fromByteArray (uint8) {
27293 var tmp
27294 var len = uint8.length
27295 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27296 var output = ''
27297 var parts = []
27298 var maxChunkLength = 16383 // must be multiple of 3
27299
27300 // go through the array every three bytes, we'll deal with trailing stuff later
27301 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27302 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27303 }
27304
27305 // pad the end with zeros, but make sure to not forget the extra bytes
27306 if (extraBytes === 1) {
27307 tmp = uint8[len - 1]
27308 output += lookup[tmp >> 2]
27309 output += lookup[(tmp << 4) & 0x3F]
27310 output += '=='
27311 } else if (extraBytes === 2) {
27312 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27313 output += lookup[tmp >> 10]
27314 output += lookup[(tmp >> 4) & 0x3F]
27315 output += lookup[(tmp << 2) & 0x3F]
27316 output += '='
27317 }
27318
27319 parts.push(output)
27320
27321 return parts.join('')
27322}
27323
27324},{}],3:[function(require,module,exports){
27325
27326},{}],4:[function(require,module,exports){
cf6c2044
IC
27327(function (global){
27328'use strict';
27329
27330var buffer = require('buffer');
27331var Buffer = buffer.Buffer;
27332var SlowBuffer = buffer.SlowBuffer;
27333var MAX_LEN = buffer.kMaxLength || 2147483647;
27334exports.alloc = function alloc(size, fill, encoding) {
27335 if (typeof Buffer.alloc === 'function') {
27336 return Buffer.alloc(size, fill, encoding);
27337 }
27338 if (typeof encoding === 'number') {
27339 throw new TypeError('encoding must not be number');
27340 }
27341 if (typeof size !== 'number') {
27342 throw new TypeError('size must be a number');
27343 }
27344 if (size > MAX_LEN) {
27345 throw new RangeError('size is too large');
27346 }
27347 var enc = encoding;
27348 var _fill = fill;
27349 if (_fill === undefined) {
27350 enc = undefined;
27351 _fill = 0;
27352 }
27353 var buf = new Buffer(size);
27354 if (typeof _fill === 'string') {
27355 var fillBuf = new Buffer(_fill, enc);
27356 var flen = fillBuf.length;
27357 var i = -1;
27358 while (++i < size) {
27359 buf[i] = fillBuf[i % flen];
27360 }
27361 } else {
27362 buf.fill(_fill);
27363 }
27364 return buf;
27365}
27366exports.allocUnsafe = function allocUnsafe(size) {
27367 if (typeof Buffer.allocUnsafe === 'function') {
27368 return Buffer.allocUnsafe(size);
27369 }
27370 if (typeof size !== 'number') {
27371 throw new TypeError('size must be a number');
27372 }
27373 if (size > MAX_LEN) {
27374 throw new RangeError('size is too large');
27375 }
27376 return new Buffer(size);
27377}
27378exports.from = function from(value, encodingOrOffset, length) {
27379 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27380 return Buffer.from(value, encodingOrOffset, length);
27381 }
27382 if (typeof value === 'number') {
27383 throw new TypeError('"value" argument must not be a number');
27384 }
27385 if (typeof value === 'string') {
27386 return new Buffer(value, encodingOrOffset);
27387 }
27388 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27389 var offset = encodingOrOffset;
27390 if (arguments.length === 1) {
27391 return new Buffer(value);
27392 }
27393 if (typeof offset === 'undefined') {
27394 offset = 0;
27395 }
27396 var len = length;
27397 if (typeof len === 'undefined') {
27398 len = value.byteLength - offset;
27399 }
27400 if (offset >= value.byteLength) {
27401 throw new RangeError('\'offset\' is out of bounds');
27402 }
27403 if (len > value.byteLength - offset) {
27404 throw new RangeError('\'length\' is out of bounds');
27405 }
27406 return new Buffer(value.slice(offset, offset + len));
27407 }
27408 if (Buffer.isBuffer(value)) {
27409 var out = new Buffer(value.length);
27410 value.copy(out, 0, 0, value.length);
27411 return out;
27412 }
27413 if (value) {
27414 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27415 return new Buffer(value);
27416 }
27417 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27418 return new Buffer(value.data);
27419 }
27420 }
27421
27422 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27423}
27424exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27425 if (typeof Buffer.allocUnsafeSlow === 'function') {
27426 return Buffer.allocUnsafeSlow(size);
27427 }
27428 if (typeof size !== 'number') {
27429 throw new TypeError('size must be a number');
27430 }
27431 if (size >= MAX_LEN) {
27432 throw new RangeError('size is too large');
27433 }
27434 return new SlowBuffer(size);
27435}
27436
27437}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27438},{"buffer":5}],5:[function(require,module,exports){
9987f0c1
IC
27439/*!
27440 * The buffer module from node.js, for the browser.
27441 *
27442 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27443 * @license MIT
27444 */
27445/* eslint-disable no-proto */
27446
27447'use strict'
27448
27449var base64 = require('base64-js')
27450var ieee754 = require('ieee754')
27451
27452exports.Buffer = Buffer
27453exports.SlowBuffer = SlowBuffer
27454exports.INSPECT_MAX_BYTES = 50
27455
27456var K_MAX_LENGTH = 0x7fffffff
27457exports.kMaxLength = K_MAX_LENGTH
27458
27459/**
27460 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27461 * === true Use Uint8Array implementation (fastest)
27462 * === false Print warning and recommend using `buffer` v4.x which has an Object
27463 * implementation (most compatible, even IE6)
27464 *
27465 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27466 * Opera 11.6+, iOS 4.2+.
27467 *
27468 * We report that the browser does not support typed arrays if the are not subclassable
27469 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27470 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27471 * for __proto__ and has a buggy typed array implementation.
27472 */
27473Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27474
27475if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27476 typeof console.error === 'function') {
27477 console.error(
27478 'This browser lacks typed array (Uint8Array) support which is required by ' +
27479 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27480 )
27481}
27482
27483function typedArraySupport () {
27484 // Can typed array instances can be augmented?
27485 try {
27486 var arr = new Uint8Array(1)
27487 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27488 return arr.foo() === 42
27489 } catch (e) {
27490 return false
27491 }
27492}
27493
27494function createBuffer (length) {
27495 if (length > K_MAX_LENGTH) {
27496 throw new RangeError('Invalid typed array length')
27497 }
27498 // Return an augmented `Uint8Array` instance
27499 var buf = new Uint8Array(length)
27500 buf.__proto__ = Buffer.prototype
27501 return buf
27502}
27503
27504/**
27505 * The Buffer constructor returns instances of `Uint8Array` that have their
27506 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27507 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27508 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27509 * returns a single octet.
27510 *
27511 * The `Uint8Array` prototype remains unmodified.
27512 */
27513
27514function Buffer (arg, encodingOrOffset, length) {
27515 // Common case.
27516 if (typeof arg === 'number') {
27517 if (typeof encodingOrOffset === 'string') {
27518 throw new Error(
27519 'If encoding is specified then the first argument must be a string'
27520 )
27521 }
27522 return allocUnsafe(arg)
27523 }
27524 return from(arg, encodingOrOffset, length)
27525}
27526
27527// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27528if (typeof Symbol !== 'undefined' && Symbol.species &&
27529 Buffer[Symbol.species] === Buffer) {
27530 Object.defineProperty(Buffer, Symbol.species, {
27531 value: null,
27532 configurable: true,
27533 enumerable: false,
27534 writable: false
27535 })
27536}
27537
27538Buffer.poolSize = 8192 // not used by this implementation
27539
27540function from (value, encodingOrOffset, length) {
27541 if (typeof value === 'number') {
27542 throw new TypeError('"value" argument must not be a number')
27543 }
27544
27545 if (value instanceof ArrayBuffer) {
27546 return fromArrayBuffer(value, encodingOrOffset, length)
27547 }
27548
27549 if (typeof value === 'string') {
27550 return fromString(value, encodingOrOffset)
27551 }
27552
27553 return fromObject(value)
27554}
27555
27556/**
27557 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27558 * if value is a number.
27559 * Buffer.from(str[, encoding])
27560 * Buffer.from(array)
27561 * Buffer.from(buffer)
27562 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27563 **/
27564Buffer.from = function (value, encodingOrOffset, length) {
27565 return from(value, encodingOrOffset, length)
27566}
27567
27568// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27569// https://github.com/feross/buffer/pull/148
27570Buffer.prototype.__proto__ = Uint8Array.prototype
27571Buffer.__proto__ = Uint8Array
27572
27573function assertSize (size) {
27574 if (typeof size !== 'number') {
27575 throw new TypeError('"size" argument must be a number')
27576 } else if (size < 0) {
27577 throw new RangeError('"size" argument must not be negative')
27578 }
27579}
27580
27581function alloc (size, fill, encoding) {
27582 assertSize(size)
27583 if (size <= 0) {
27584 return createBuffer(size)
27585 }
27586 if (fill !== undefined) {
27587 // Only pay attention to encoding if it's a string. This
27588 // prevents accidentally sending in a number that would
27589 // be interpretted as a start offset.
27590 return typeof encoding === 'string'
27591 ? createBuffer(size).fill(fill, encoding)
27592 : createBuffer(size).fill(fill)
27593 }
27594 return createBuffer(size)
27595}
27596
27597/**
27598 * Creates a new filled Buffer instance.
27599 * alloc(size[, fill[, encoding]])
27600 **/
27601Buffer.alloc = function (size, fill, encoding) {
27602 return alloc(size, fill, encoding)
27603}
27604
27605function allocUnsafe (size) {
27606 assertSize(size)
27607 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27608}
27609
27610/**
27611 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27612 * */
27613Buffer.allocUnsafe = function (size) {
27614 return allocUnsafe(size)
27615}
27616/**
27617 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27618 */
27619Buffer.allocUnsafeSlow = function (size) {
27620 return allocUnsafe(size)
27621}
27622
27623function fromString (string, encoding) {
27624 if (typeof encoding !== 'string' || encoding === '') {
27625 encoding = 'utf8'
27626 }
27627
27628 if (!Buffer.isEncoding(encoding)) {
27629 throw new TypeError('"encoding" must be a valid string encoding')
27630 }
27631
27632 var length = byteLength(string, encoding) | 0
27633 var buf = createBuffer(length)
27634
27635 var actual = buf.write(string, encoding)
27636
27637 if (actual !== length) {
27638 // Writing a hex string, for example, that contains invalid characters will
27639 // cause everything after the first invalid character to be ignored. (e.g.
27640 // 'abxxcd' will be treated as 'ab')
27641 buf = buf.slice(0, actual)
27642 }
27643
27644 return buf
27645}
27646
27647function fromArrayLike (array) {
27648 var length = array.length < 0 ? 0 : checked(array.length) | 0
27649 var buf = createBuffer(length)
27650 for (var i = 0; i < length; i += 1) {
27651 buf[i] = array[i] & 255
27652 }
27653 return buf
27654}
27655
27656function fromArrayBuffer (array, byteOffset, length) {
27657 if (byteOffset < 0 || array.byteLength < byteOffset) {
27658 throw new RangeError('\'offset\' is out of bounds')
27659 }
27660
27661 if (array.byteLength < byteOffset + (length || 0)) {
27662 throw new RangeError('\'length\' is out of bounds')
27663 }
27664
27665 var buf
27666 if (byteOffset === undefined && length === undefined) {
27667 buf = new Uint8Array(array)
27668 } else if (length === undefined) {
27669 buf = new Uint8Array(array, byteOffset)
27670 } else {
27671 buf = new Uint8Array(array, byteOffset, length)
27672 }
27673
27674 // Return an augmented `Uint8Array` instance
27675 buf.__proto__ = Buffer.prototype
27676 return buf
27677}
27678
27679function fromObject (obj) {
27680 if (Buffer.isBuffer(obj)) {
27681 var len = checked(obj.length) | 0
27682 var buf = createBuffer(len)
27683
27684 if (buf.length === 0) {
27685 return buf
27686 }
27687
27688 obj.copy(buf, 0, 0, len)
27689 return buf
27690 }
27691
27692 if (obj) {
27693 if (isArrayBufferView(obj) || 'length' in obj) {
27694 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27695 return createBuffer(0)
27696 }
27697 return fromArrayLike(obj)
27698 }
27699
27700 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27701 return fromArrayLike(obj.data)
27702 }
27703 }
27704
27705 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27706}
27707
27708function checked (length) {
27709 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27710 // length is NaN (which is otherwise coerced to zero.)
27711 if (length >= K_MAX_LENGTH) {
27712 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27713 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27714 }
27715 return length | 0
27716}
27717
27718function SlowBuffer (length) {
27719 if (+length != length) { // eslint-disable-line eqeqeq
27720 length = 0
27721 }
27722 return Buffer.alloc(+length)
27723}
27724
27725Buffer.isBuffer = function isBuffer (b) {
27726 return b != null && b._isBuffer === true
27727}
27728
27729Buffer.compare = function compare (a, b) {
27730 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27731 throw new TypeError('Arguments must be Buffers')
27732 }
27733
27734 if (a === b) return 0
27735
27736 var x = a.length
27737 var y = b.length
27738
27739 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27740 if (a[i] !== b[i]) {
27741 x = a[i]
27742 y = b[i]
27743 break
27744 }
8b095871 27745 }
9987f0c1
IC
27746
27747 if (x < y) return -1
27748 if (y < x) return 1
27749 return 0
8b095871
IC
27750}
27751
9987f0c1
IC
27752Buffer.isEncoding = function isEncoding (encoding) {
27753 switch (String(encoding).toLowerCase()) {
27754 case 'hex':
27755 case 'utf8':
27756 case 'utf-8':
27757 case 'ascii':
27758 case 'latin1':
27759 case 'binary':
27760 case 'base64':
27761 case 'ucs2':
27762 case 'ucs-2':
27763 case 'utf16le':
27764 case 'utf-16le':
27765 return true
27766 default:
27767 return false
8b095871 27768 }
9987f0c1
IC
27769}
27770
27771Buffer.concat = function concat (list, length) {
27772 if (!Array.isArray(list)) {
27773 throw new TypeError('"list" argument must be an Array of Buffers')
27774 }
27775
27776 if (list.length === 0) {
27777 return Buffer.alloc(0)
27778 }
27779
27780 var i
27781 if (length === undefined) {
27782 length = 0
27783 for (i = 0; i < list.length; ++i) {
27784 length += list[i].length
8b095871 27785 }
9987f0c1
IC
27786 }
27787
27788 var buffer = Buffer.allocUnsafe(length)
27789 var pos = 0
27790 for (i = 0; i < list.length; ++i) {
27791 var buf = list[i]
27792 if (!Buffer.isBuffer(buf)) {
27793 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 27794 }
9987f0c1
IC
27795 buf.copy(buffer, pos)
27796 pos += buf.length
8b095871 27797 }
9987f0c1 27798 return buffer
8b095871
IC
27799}
27800
9987f0c1
IC
27801function byteLength (string, encoding) {
27802 if (Buffer.isBuffer(string)) {
27803 return string.length
27804 }
27805 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27806 return string.byteLength
27807 }
27808 if (typeof string !== 'string') {
27809 string = '' + string
27810 }
27811
27812 var len = string.length
27813 if (len === 0) return 0
27814
27815 // Use a for loop to avoid recursion
27816 var loweredCase = false
27817 for (;;) {
27818 switch (encoding) {
27819 case 'ascii':
27820 case 'latin1':
27821 case 'binary':
27822 return len
27823 case 'utf8':
27824 case 'utf-8':
27825 case undefined:
27826 return utf8ToBytes(string).length
27827 case 'ucs2':
27828 case 'ucs-2':
27829 case 'utf16le':
27830 case 'utf-16le':
27831 return len * 2
27832 case 'hex':
27833 return len >>> 1
27834 case 'base64':
27835 return base64ToBytes(string).length
27836 default:
27837 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27838 encoding = ('' + encoding).toLowerCase()
27839 loweredCase = true
27840 }
27841 }
8b095871 27842}
9987f0c1 27843Buffer.byteLength = byteLength
8b095871 27844
9987f0c1
IC
27845function slowToString (encoding, start, end) {
27846 var loweredCase = false
27847
27848 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27849 // property of a typed array.
27850
27851 // This behaves neither like String nor Uint8Array in that we set start/end
27852 // to their upper/lower bounds if the value passed is out of range.
27853 // undefined is handled specially as per ECMA-262 6th Edition,
27854 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27855 if (start === undefined || start < 0) {
27856 start = 0
27857 }
27858 // Return early if start > this.length. Done here to prevent potential uint32
27859 // coercion fail below.
27860 if (start > this.length) {
27861 return ''
27862 }
27863
27864 if (end === undefined || end > this.length) {
27865 end = this.length
27866 }
27867
27868 if (end <= 0) {
27869 return ''
27870 }
27871
27872 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
27873 end >>>= 0
27874 start >>>= 0
27875
27876 if (end <= start) {
27877 return ''
27878 }
27879
27880 if (!encoding) encoding = 'utf8'
27881
27882 while (true) {
27883 switch (encoding) {
27884 case 'hex':
27885 return hexSlice(this, start, end)
27886
27887 case 'utf8':
27888 case 'utf-8':
27889 return utf8Slice(this, start, end)
27890
27891 case 'ascii':
27892 return asciiSlice(this, start, end)
27893
27894 case 'latin1':
27895 case 'binary':
27896 return latin1Slice(this, start, end)
27897
27898 case 'base64':
27899 return base64Slice(this, start, end)
27900
27901 case 'ucs2':
27902 case 'ucs-2':
27903 case 'utf16le':
27904 case 'utf-16le':
27905 return utf16leSlice(this, start, end)
27906
27907 default:
27908 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
27909 encoding = (encoding + '').toLowerCase()
27910 loweredCase = true
8b095871
IC
27911 }
27912 }
8b095871
IC
27913}
27914
9987f0c1
IC
27915// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
27916// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
27917// reliably in a browserify context because there could be multiple different
27918// copies of the 'buffer' package in use. This method works even for Buffer
27919// instances that were created from another copy of the `buffer` package.
27920// See: https://github.com/feross/buffer/issues/154
27921Buffer.prototype._isBuffer = true
27922
27923function swap (b, n, m) {
27924 var i = b[n]
27925 b[n] = b[m]
27926 b[m] = i
27927}
27928
27929Buffer.prototype.swap16 = function swap16 () {
27930 var len = this.length
27931 if (len % 2 !== 0) {
27932 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 27933 }
9987f0c1
IC
27934 for (var i = 0; i < len; i += 2) {
27935 swap(this, i, i + 1)
8b095871 27936 }
9987f0c1
IC
27937 return this
27938}
27939
27940Buffer.prototype.swap32 = function swap32 () {
27941 var len = this.length
27942 if (len % 4 !== 0) {
27943 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 27944 }
9987f0c1
IC
27945 for (var i = 0; i < len; i += 4) {
27946 swap(this, i, i + 3)
27947 swap(this, i + 1, i + 2)
27948 }
27949 return this
27950}
27951
27952Buffer.prototype.swap64 = function swap64 () {
27953 var len = this.length
27954 if (len % 8 !== 0) {
27955 throw new RangeError('Buffer size must be a multiple of 64-bits')
27956 }
27957 for (var i = 0; i < len; i += 8) {
27958 swap(this, i, i + 7)
27959 swap(this, i + 1, i + 6)
27960 swap(this, i + 2, i + 5)
27961 swap(this, i + 3, i + 4)
27962 }
27963 return this
27964}
27965
27966Buffer.prototype.toString = function toString () {
27967 var length = this.length
27968 if (length === 0) return ''
27969 if (arguments.length === 0) return utf8Slice(this, 0, length)
27970 return slowToString.apply(this, arguments)
27971}
27972
27973Buffer.prototype.equals = function equals (b) {
27974 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
27975 if (this === b) return true
27976 return Buffer.compare(this, b) === 0
27977}
27978
27979Buffer.prototype.inspect = function inspect () {
27980 var str = ''
27981 var max = exports.INSPECT_MAX_BYTES
27982 if (this.length > 0) {
27983 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
27984 if (this.length > max) str += ' ... '
27985 }
27986 return '<Buffer ' + str + '>'
27987}
27988
27989Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
27990 if (!Buffer.isBuffer(target)) {
27991 throw new TypeError('Argument must be a Buffer')
27992 }
27993
27994 if (start === undefined) {
27995 start = 0
27996 }
27997 if (end === undefined) {
27998 end = target ? target.length : 0
27999 }
28000 if (thisStart === undefined) {
28001 thisStart = 0
28002 }
28003 if (thisEnd === undefined) {
28004 thisEnd = this.length
28005 }
28006
28007 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28008 throw new RangeError('out of range index')
28009 }
28010
28011 if (thisStart >= thisEnd && start >= end) {
28012 return 0
28013 }
28014 if (thisStart >= thisEnd) {
28015 return -1
28016 }
28017 if (start >= end) {
28018 return 1
28019 }
28020
28021 start >>>= 0
28022 end >>>= 0
28023 thisStart >>>= 0
28024 thisEnd >>>= 0
28025
28026 if (this === target) return 0
28027
28028 var x = thisEnd - thisStart
28029 var y = end - start
28030 var len = Math.min(x, y)
28031
28032 var thisCopy = this.slice(thisStart, thisEnd)
28033 var targetCopy = target.slice(start, end)
28034
28035 for (var i = 0; i < len; ++i) {
28036 if (thisCopy[i] !== targetCopy[i]) {
28037 x = thisCopy[i]
28038 y = targetCopy[i]
28039 break
28040 }
28041 }
28042
28043 if (x < y) return -1
28044 if (y < x) return 1
28045 return 0
28046}
28047
28048// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28049// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28050//
28051// Arguments:
28052// - buffer - a Buffer to search
28053// - val - a string, Buffer, or number
28054// - byteOffset - an index into `buffer`; will be clamped to an int32
28055// - encoding - an optional encoding, relevant is val is a string
28056// - dir - true for indexOf, false for lastIndexOf
28057function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28058 // Empty buffer means no match
28059 if (buffer.length === 0) return -1
28060
28061 // Normalize byteOffset
28062 if (typeof byteOffset === 'string') {
28063 encoding = byteOffset
28064 byteOffset = 0
28065 } else if (byteOffset > 0x7fffffff) {
28066 byteOffset = 0x7fffffff
28067 } else if (byteOffset < -0x80000000) {
28068 byteOffset = -0x80000000
28069 }
28070 byteOffset = +byteOffset // Coerce to Number.
28071 if (numberIsNaN(byteOffset)) {
28072 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28073 byteOffset = dir ? 0 : (buffer.length - 1)
28074 }
28075
28076 // Normalize byteOffset: negative offsets start from the end of the buffer
28077 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28078 if (byteOffset >= buffer.length) {
28079 if (dir) return -1
28080 else byteOffset = buffer.length - 1
28081 } else if (byteOffset < 0) {
28082 if (dir) byteOffset = 0
28083 else return -1
28084 }
28085
28086 // Normalize val
28087 if (typeof val === 'string') {
28088 val = Buffer.from(val, encoding)
28089 }
28090
28091 // Finally, search either indexOf (if dir is true) or lastIndexOf
28092 if (Buffer.isBuffer(val)) {
28093 // Special case: looking for empty string/buffer always fails
28094 if (val.length === 0) {
28095 return -1
28096 }
28097 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28098 } else if (typeof val === 'number') {
28099 val = val & 0xFF // Search for a byte value [0-255]
28100 if (typeof Uint8Array.prototype.indexOf === 'function') {
28101 if (dir) {
28102 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28103 } else {
28104 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28105 }
28106 }
28107 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28108 }
28109
28110 throw new TypeError('val must be string, number or Buffer')
28111}
28112
28113function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28114 var indexSize = 1
28115 var arrLength = arr.length
28116 var valLength = val.length
28117
28118 if (encoding !== undefined) {
28119 encoding = String(encoding).toLowerCase()
28120 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28121 encoding === 'utf16le' || encoding === 'utf-16le') {
28122 if (arr.length < 2 || val.length < 2) {
28123 return -1
28124 }
28125 indexSize = 2
28126 arrLength /= 2
28127 valLength /= 2
28128 byteOffset /= 2
28129 }
28130 }
28131
28132 function read (buf, i) {
28133 if (indexSize === 1) {
28134 return buf[i]
28135 } else {
28136 return buf.readUInt16BE(i * indexSize)
28137 }
28138 }
28139
28140 var i
28141 if (dir) {
28142 var foundIndex = -1
28143 for (i = byteOffset; i < arrLength; i++) {
28144 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28145 if (foundIndex === -1) foundIndex = i
28146 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28147 } else {
28148 if (foundIndex !== -1) i -= i - foundIndex
28149 foundIndex = -1
28150 }
28151 }
28152 } else {
28153 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28154 for (i = byteOffset; i >= 0; i--) {
28155 var found = true
28156 for (var j = 0; j < valLength; j++) {
28157 if (read(arr, i + j) !== read(val, j)) {
28158 found = false
28159 break
28160 }
28161 }
28162 if (found) return i
8b095871
IC
28163 }
28164 }
8b095871 28165
9987f0c1 28166 return -1
8b095871
IC
28167}
28168
9987f0c1
IC
28169Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28170 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
28171}
28172
9987f0c1
IC
28173Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28174 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
28175}
28176
9987f0c1
IC
28177Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28178 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
28179}
28180
9987f0c1
IC
28181function hexWrite (buf, string, offset, length) {
28182 offset = Number(offset) || 0
28183 var remaining = buf.length - offset
28184 if (!length) {
28185 length = remaining
28186 } else {
28187 length = Number(length)
28188 if (length > remaining) {
28189 length = remaining
28190 }
28191 }
8b095871 28192
9987f0c1
IC
28193 // must be an even number of digits
28194 var strLen = string.length
28195 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 28196
9987f0c1
IC
28197 if (length > strLen / 2) {
28198 length = strLen / 2
28199 }
28200 for (var i = 0; i < length; ++i) {
28201 var parsed = parseInt(string.substr(i * 2, 2), 16)
28202 if (numberIsNaN(parsed)) return i
28203 buf[offset + i] = parsed
28204 }
28205 return i
8b095871
IC
28206}
28207
9987f0c1
IC
28208function utf8Write (buf, string, offset, length) {
28209 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28210}
8b095871 28211
9987f0c1
IC
28212function asciiWrite (buf, string, offset, length) {
28213 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
28214}
28215
9987f0c1
IC
28216function latin1Write (buf, string, offset, length) {
28217 return asciiWrite(buf, string, offset, length)
8b095871
IC
28218}
28219
9987f0c1
IC
28220function base64Write (buf, string, offset, length) {
28221 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
28222}
28223
9987f0c1
IC
28224function ucs2Write (buf, string, offset, length) {
28225 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
28226}
28227
9987f0c1
IC
28228Buffer.prototype.write = function write (string, offset, length, encoding) {
28229 // Buffer#write(string)
28230 if (offset === undefined) {
28231 encoding = 'utf8'
28232 length = this.length
28233 offset = 0
28234 // Buffer#write(string, encoding)
28235 } else if (length === undefined && typeof offset === 'string') {
28236 encoding = offset
28237 length = this.length
28238 offset = 0
28239 // Buffer#write(string, offset[, length][, encoding])
28240 } else if (isFinite(offset)) {
28241 offset = offset >>> 0
28242 if (isFinite(length)) {
28243 length = length >>> 0
28244 if (encoding === undefined) encoding = 'utf8'
28245 } else {
28246 encoding = length
28247 length = undefined
8b095871 28248 }
9987f0c1
IC
28249 } else {
28250 throw new Error(
28251 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28252 )
8b095871 28253 }
8b095871 28254
9987f0c1
IC
28255 var remaining = this.length - offset
28256 if (length === undefined || length > remaining) length = remaining
8b095871 28257
9987f0c1
IC
28258 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28259 throw new RangeError('Attempt to write outside buffer bounds')
28260 }
8b095871 28261
9987f0c1 28262 if (!encoding) encoding = 'utf8'
8b095871 28263
9987f0c1
IC
28264 var loweredCase = false
28265 for (;;) {
28266 switch (encoding) {
28267 case 'hex':
28268 return hexWrite(this, string, offset, length)
8b095871 28269
9987f0c1
IC
28270 case 'utf8':
28271 case 'utf-8':
28272 return utf8Write(this, string, offset, length)
8b095871 28273
9987f0c1
IC
28274 case 'ascii':
28275 return asciiWrite(this, string, offset, length)
8b095871 28276
9987f0c1
IC
28277 case 'latin1':
28278 case 'binary':
28279 return latin1Write(this, string, offset, length)
8b095871 28280
9987f0c1
IC
28281 case 'base64':
28282 // Warning: maxLength not taken into account in base64Write
28283 return base64Write(this, string, offset, length)
8b095871 28284
9987f0c1
IC
28285 case 'ucs2':
28286 case 'ucs-2':
28287 case 'utf16le':
28288 case 'utf-16le':
28289 return ucs2Write(this, string, offset, length)
8b095871 28290
9987f0c1
IC
28291 default:
28292 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28293 encoding = ('' + encoding).toLowerCase()
28294 loweredCase = true
28295 }
28296 }
8b095871
IC
28297}
28298
9987f0c1
IC
28299Buffer.prototype.toJSON = function toJSON () {
28300 return {
28301 type: 'Buffer',
28302 data: Array.prototype.slice.call(this._arr || this, 0)
28303 }
8b095871
IC
28304}
28305
9987f0c1
IC
28306function base64Slice (buf, start, end) {
28307 if (start === 0 && end === buf.length) {
28308 return base64.fromByteArray(buf)
28309 } else {
28310 return base64.fromByteArray(buf.slice(start, end))
28311 }
8b095871
IC
28312}
28313
9987f0c1
IC
28314function utf8Slice (buf, start, end) {
28315 end = Math.min(buf.length, end)
28316 var res = []
8b095871 28317
9987f0c1
IC
28318 var i = start
28319 while (i < end) {
28320 var firstByte = buf[i]
28321 var codePoint = null
28322 var bytesPerSequence = (firstByte > 0xEF) ? 4
28323 : (firstByte > 0xDF) ? 3
28324 : (firstByte > 0xBF) ? 2
28325 : 1
8b095871 28326
9987f0c1
IC
28327 if (i + bytesPerSequence <= end) {
28328 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 28329
9987f0c1
IC
28330 switch (bytesPerSequence) {
28331 case 1:
28332 if (firstByte < 0x80) {
28333 codePoint = firstByte
28334 }
28335 break
28336 case 2:
28337 secondByte = buf[i + 1]
28338 if ((secondByte & 0xC0) === 0x80) {
28339 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28340 if (tempCodePoint > 0x7F) {
28341 codePoint = tempCodePoint
28342 }
28343 }
28344 break
28345 case 3:
28346 secondByte = buf[i + 1]
28347 thirdByte = buf[i + 2]
28348 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28349 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28350 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28351 codePoint = tempCodePoint
28352 }
28353 }
28354 break
28355 case 4:
28356 secondByte = buf[i + 1]
28357 thirdByte = buf[i + 2]
28358 fourthByte = buf[i + 3]
28359 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28360 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28361 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28362 codePoint = tempCodePoint
28363 }
28364 }
28365 }
8b095871 28366 }
9987f0c1
IC
28367
28368 if (codePoint === null) {
28369 // we did not generate a valid codePoint so insert a
28370 // replacement char (U+FFFD) and advance only 1 byte
28371 codePoint = 0xFFFD
28372 bytesPerSequence = 1
28373 } else if (codePoint > 0xFFFF) {
28374 // encode to utf16 (surrogate pair dance)
28375 codePoint -= 0x10000
28376 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28377 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 28378 }
9987f0c1
IC
28379
28380 res.push(codePoint)
28381 i += bytesPerSequence
8b095871 28382 }
9987f0c1
IC
28383
28384 return decodeCodePointsArray(res)
28385}
28386
28387// Based on http://stackoverflow.com/a/22747272/680742, the browser with
28388// the lowest limit is Chrome, with 0x10000 args.
28389// We go 1 magnitude less, for safety
28390var MAX_ARGUMENTS_LENGTH = 0x1000
28391
28392function decodeCodePointsArray (codePoints) {
28393 var len = codePoints.length
28394 if (len <= MAX_ARGUMENTS_LENGTH) {
28395 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 28396 }
9987f0c1
IC
28397
28398 // Decode in chunks to avoid "call stack size exceeded".
28399 var res = ''
28400 var i = 0
28401 while (i < len) {
28402 res += String.fromCharCode.apply(
28403 String,
28404 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28405 )
28406 }
28407 return res
8b095871
IC
28408}
28409
9987f0c1
IC
28410function asciiSlice (buf, start, end) {
28411 var ret = ''
28412 end = Math.min(buf.length, end)
28413
28414 for (var i = start; i < end; ++i) {
28415 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 28416 }
9987f0c1 28417 return ret
8b095871
IC
28418}
28419
9987f0c1
IC
28420function latin1Slice (buf, start, end) {
28421 var ret = ''
28422 end = Math.min(buf.length, end)
28423
28424 for (var i = start; i < end; ++i) {
28425 ret += String.fromCharCode(buf[i])
8b095871 28426 }
9987f0c1 28427 return ret
8b095871
IC
28428}
28429
9987f0c1
IC
28430function hexSlice (buf, start, end) {
28431 var len = buf.length
8b095871 28432
9987f0c1
IC
28433 if (!start || start < 0) start = 0
28434 if (!end || end < 0 || end > len) end = len
8b095871 28435
9987f0c1
IC
28436 var out = ''
28437 for (var i = start; i < end; ++i) {
28438 out += toHex(buf[i])
28439 }
28440 return out
8b095871
IC
28441}
28442
9987f0c1
IC
28443function utf16leSlice (buf, start, end) {
28444 var bytes = buf.slice(start, end)
28445 var res = ''
28446 for (var i = 0; i < bytes.length; i += 2) {
28447 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 28448 }
9987f0c1 28449 return res
8b095871
IC
28450}
28451
9987f0c1
IC
28452Buffer.prototype.slice = function slice (start, end) {
28453 var len = this.length
28454 start = ~~start
28455 end = end === undefined ? len : ~~end
8b095871 28456
9987f0c1
IC
28457 if (start < 0) {
28458 start += len
28459 if (start < 0) start = 0
28460 } else if (start > len) {
28461 start = len
28462 }
8b095871 28463
9987f0c1
IC
28464 if (end < 0) {
28465 end += len
28466 if (end < 0) end = 0
28467 } else if (end > len) {
28468 end = len
28469 }
28470
28471 if (end < start) end = start
28472
28473 var newBuf = this.subarray(start, end)
28474 // Return an augmented `Uint8Array` instance
28475 newBuf.__proto__ = Buffer.prototype
28476 return newBuf
8b095871
IC
28477}
28478
9987f0c1
IC
28479/*
28480 * Need to make sure that buffer isn't trying to write out of bounds.
28481 */
28482function checkOffset (offset, ext, length) {
28483 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28484 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
28485}
28486
9987f0c1
IC
28487Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28488 offset = offset >>> 0
28489 byteLength = byteLength >>> 0
28490 if (!noAssert) checkOffset(offset, byteLength, this.length)
28491
28492 var val = this[offset]
28493 var mul = 1
28494 var i = 0
28495 while (++i < byteLength && (mul *= 0x100)) {
28496 val += this[offset + i] * mul
28497 }
28498
28499 return val
8b095871
IC
28500}
28501
9987f0c1
IC
28502Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28503 offset = offset >>> 0
28504 byteLength = byteLength >>> 0
28505 if (!noAssert) {
28506 checkOffset(offset, byteLength, this.length)
28507 }
28508
28509 var val = this[offset + --byteLength]
28510 var mul = 1
28511 while (byteLength > 0 && (mul *= 0x100)) {
28512 val += this[offset + --byteLength] * mul
28513 }
28514
28515 return val
8b095871
IC
28516}
28517
9987f0c1
IC
28518Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28519 offset = offset >>> 0
28520 if (!noAssert) checkOffset(offset, 1, this.length)
28521 return this[offset]
8b095871
IC
28522}
28523
9987f0c1
IC
28524Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28525 offset = offset >>> 0
28526 if (!noAssert) checkOffset(offset, 2, this.length)
28527 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
28528}
28529
9987f0c1
IC
28530Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28531 offset = offset >>> 0
28532 if (!noAssert) checkOffset(offset, 2, this.length)
28533 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
28534}
28535
9987f0c1
IC
28536Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28537 offset = offset >>> 0
28538 if (!noAssert) checkOffset(offset, 4, this.length)
28539
28540 return ((this[offset]) |
28541 (this[offset + 1] << 8) |
28542 (this[offset + 2] << 16)) +
28543 (this[offset + 3] * 0x1000000)
8b095871
IC
28544}
28545
9987f0c1
IC
28546Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28547 offset = offset >>> 0
28548 if (!noAssert) checkOffset(offset, 4, this.length)
28549
28550 return (this[offset] * 0x1000000) +
28551 ((this[offset + 1] << 16) |
28552 (this[offset + 2] << 8) |
28553 this[offset + 3])
8b095871
IC
28554}
28555
9987f0c1
IC
28556Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28557 offset = offset >>> 0
28558 byteLength = byteLength >>> 0
28559 if (!noAssert) checkOffset(offset, byteLength, this.length)
28560
28561 var val = this[offset]
28562 var mul = 1
28563 var i = 0
28564 while (++i < byteLength && (mul *= 0x100)) {
28565 val += this[offset + i] * mul
8b095871 28566 }
9987f0c1
IC
28567 mul *= 0x80
28568
28569 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28570
28571 return val
28572}
28573
28574Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28575 offset = offset >>> 0
28576 byteLength = byteLength >>> 0
28577 if (!noAssert) checkOffset(offset, byteLength, this.length)
28578
28579 var i = byteLength
28580 var mul = 1
28581 var val = this[offset + --i]
28582 while (i > 0 && (mul *= 0x100)) {
28583 val += this[offset + --i] * mul
8b095871 28584 }
9987f0c1
IC
28585 mul *= 0x80
28586
28587 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28588
28589 return val
8b095871
IC
28590}
28591
9987f0c1
IC
28592Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28593 offset = offset >>> 0
28594 if (!noAssert) checkOffset(offset, 1, this.length)
28595 if (!(this[offset] & 0x80)) return (this[offset])
28596 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
28597}
28598
9987f0c1
IC
28599Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28600 offset = offset >>> 0
28601 if (!noAssert) checkOffset(offset, 2, this.length)
28602 var val = this[offset] | (this[offset + 1] << 8)
28603 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
28604}
28605
9987f0c1
IC
28606Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28607 offset = offset >>> 0
28608 if (!noAssert) checkOffset(offset, 2, this.length)
28609 var val = this[offset + 1] | (this[offset] << 8)
28610 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
28611}
28612
9987f0c1
IC
28613Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28614 offset = offset >>> 0
28615 if (!noAssert) checkOffset(offset, 4, this.length)
28616
28617 return (this[offset]) |
28618 (this[offset + 1] << 8) |
28619 (this[offset + 2] << 16) |
28620 (this[offset + 3] << 24)
8b095871
IC
28621}
28622
9987f0c1
IC
28623Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28624 offset = offset >>> 0
28625 if (!noAssert) checkOffset(offset, 4, this.length)
28626
28627 return (this[offset] << 24) |
28628 (this[offset + 1] << 16) |
28629 (this[offset + 2] << 8) |
28630 (this[offset + 3])
8b095871
IC
28631}
28632
9987f0c1
IC
28633Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28634 offset = offset >>> 0
28635 if (!noAssert) checkOffset(offset, 4, this.length)
28636 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
28637}
28638
9987f0c1
IC
28639Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28640 offset = offset >>> 0
28641 if (!noAssert) checkOffset(offset, 4, this.length)
28642 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
28643}
28644
9987f0c1
IC
28645Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28646 offset = offset >>> 0
28647 if (!noAssert) checkOffset(offset, 8, this.length)
28648 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
28649}
28650
9987f0c1
IC
28651Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28652 offset = offset >>> 0
28653 if (!noAssert) checkOffset(offset, 8, this.length)
28654 return ieee754.read(this, offset, false, 52, 8)
28655}
8b095871 28656
9987f0c1
IC
28657function checkInt (buf, value, offset, ext, max, min) {
28658 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28659 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28660 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28661}
28662
28663Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28664 value = +value
28665 offset = offset >>> 0
28666 byteLength = byteLength >>> 0
28667 if (!noAssert) {
28668 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28669 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 28670 }
9987f0c1
IC
28671
28672 var mul = 1
28673 var i = 0
28674 this[offset] = value & 0xFF
28675 while (++i < byteLength && (mul *= 0x100)) {
28676 this[offset + i] = (value / mul) & 0xFF
8b095871 28677 }
8b095871 28678
9987f0c1 28679 return offset + byteLength
8b095871
IC
28680}
28681
9987f0c1
IC
28682Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28683 value = +value
28684 offset = offset >>> 0
28685 byteLength = byteLength >>> 0
28686 if (!noAssert) {
28687 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28688 checkInt(this, value, offset, byteLength, maxBytes, 0)
28689 }
8b095871 28690
9987f0c1
IC
28691 var i = byteLength - 1
28692 var mul = 1
28693 this[offset + i] = value & 0xFF
28694 while (--i >= 0 && (mul *= 0x100)) {
28695 this[offset + i] = (value / mul) & 0xFF
28696 }
28697
28698 return offset + byteLength
8b095871
IC
28699}
28700
9987f0c1
IC
28701Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28702 value = +value
28703 offset = offset >>> 0
28704 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28705 this[offset] = (value & 0xff)
28706 return offset + 1
8b095871
IC
28707}
28708
9987f0c1
IC
28709Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28710 value = +value
28711 offset = offset >>> 0
28712 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28713 this[offset] = (value & 0xff)
28714 this[offset + 1] = (value >>> 8)
28715 return offset + 2
8b095871
IC
28716}
28717
9987f0c1
IC
28718Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28719 value = +value
28720 offset = offset >>> 0
28721 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28722 this[offset] = (value >>> 8)
28723 this[offset + 1] = (value & 0xff)
28724 return offset + 2
8b095871
IC
28725}
28726
9987f0c1
IC
28727Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28728 value = +value
28729 offset = offset >>> 0
28730 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28731 this[offset + 3] = (value >>> 24)
28732 this[offset + 2] = (value >>> 16)
28733 this[offset + 1] = (value >>> 8)
28734 this[offset] = (value & 0xff)
28735 return offset + 4
8b095871
IC
28736}
28737
9987f0c1
IC
28738Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28739 value = +value
28740 offset = offset >>> 0
28741 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28742 this[offset] = (value >>> 24)
28743 this[offset + 1] = (value >>> 16)
28744 this[offset + 2] = (value >>> 8)
28745 this[offset + 3] = (value & 0xff)
28746 return offset + 4
8b095871
IC
28747}
28748
9987f0c1
IC
28749Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28750 value = +value
28751 offset = offset >>> 0
28752 if (!noAssert) {
28753 var limit = Math.pow(2, (8 * byteLength) - 1)
28754
28755 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28756 }
28757
28758 var i = 0
28759 var mul = 1
28760 var sub = 0
28761 this[offset] = value & 0xFF
28762 while (++i < byteLength && (mul *= 0x100)) {
28763 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28764 sub = 1
28765 }
28766 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 28767 }
9987f0c1
IC
28768
28769 return offset + byteLength
8b095871
IC
28770}
28771
9987f0c1
IC
28772Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28773 value = +value
28774 offset = offset >>> 0
28775 if (!noAssert) {
28776 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 28777
9987f0c1
IC
28778 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28779 }
28780
28781 var i = byteLength - 1
28782 var mul = 1
28783 var sub = 0
28784 this[offset + i] = value & 0xFF
28785 while (--i >= 0 && (mul *= 0x100)) {
28786 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28787 sub = 1
28788 }
28789 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28790 }
28791
28792 return offset + byteLength
8b095871
IC
28793}
28794
9987f0c1
IC
28795Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28796 value = +value
28797 offset = offset >>> 0
28798 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28799 if (value < 0) value = 0xff + value + 1
28800 this[offset] = (value & 0xff)
28801 return offset + 1
8b095871
IC
28802}
28803
9987f0c1
IC
28804Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28805 value = +value
28806 offset = offset >>> 0
28807 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28808 this[offset] = (value & 0xff)
28809 this[offset + 1] = (value >>> 8)
28810 return offset + 2
8b095871
IC
28811}
28812
9987f0c1
IC
28813Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28814 value = +value
28815 offset = offset >>> 0
28816 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28817 this[offset] = (value >>> 8)
28818 this[offset + 1] = (value & 0xff)
28819 return offset + 2
8b095871
IC
28820}
28821
9987f0c1
IC
28822Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28823 value = +value
28824 offset = offset >>> 0
28825 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28826 this[offset] = (value & 0xff)
28827 this[offset + 1] = (value >>> 8)
28828 this[offset + 2] = (value >>> 16)
28829 this[offset + 3] = (value >>> 24)
28830 return offset + 4
8b095871
IC
28831}
28832
9987f0c1
IC
28833Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28834 value = +value
28835 offset = offset >>> 0
28836 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28837 if (value < 0) value = 0xffffffff + value + 1
28838 this[offset] = (value >>> 24)
28839 this[offset + 1] = (value >>> 16)
28840 this[offset + 2] = (value >>> 8)
28841 this[offset + 3] = (value & 0xff)
28842 return offset + 4
8b095871
IC
28843}
28844
9987f0c1
IC
28845function checkIEEE754 (buf, value, offset, ext, max, min) {
28846 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28847 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
28848}
28849
9987f0c1
IC
28850function writeFloat (buf, value, offset, littleEndian, noAssert) {
28851 value = +value
28852 offset = offset >>> 0
28853 if (!noAssert) {
28854 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 28855 }
9987f0c1
IC
28856 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28857 return offset + 4
8b095871
IC
28858}
28859
9987f0c1
IC
28860Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28861 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
28862}
28863
9987f0c1
IC
28864Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
28865 return writeFloat(this, value, offset, false, noAssert)
28866}
28867
28868function writeDouble (buf, value, offset, littleEndian, noAssert) {
28869 value = +value
28870 offset = offset >>> 0
28871 if (!noAssert) {
28872 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 28873 }
9987f0c1
IC
28874 ieee754.write(buf, value, offset, littleEndian, 52, 8)
28875 return offset + 8
8b095871
IC
28876}
28877
9987f0c1
IC
28878Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
28879 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
28880}
28881
9987f0c1
IC
28882Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
28883 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
28884}
28885
9987f0c1
IC
28886// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
28887Buffer.prototype.copy = function copy (target, targetStart, start, end) {
28888 if (!start) start = 0
28889 if (!end && end !== 0) end = this.length
28890 if (targetStart >= target.length) targetStart = target.length
28891 if (!targetStart) targetStart = 0
28892 if (end > 0 && end < start) end = start
8b095871 28893
9987f0c1
IC
28894 // Copy 0 bytes; we're done
28895 if (end === start) return 0
28896 if (target.length === 0 || this.length === 0) return 0
8b095871 28897
9987f0c1
IC
28898 // Fatal error conditions
28899 if (targetStart < 0) {
28900 throw new RangeError('targetStart out of bounds')
8b095871 28901 }
9987f0c1
IC
28902 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
28903 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 28904
9987f0c1
IC
28905 // Are we oob?
28906 if (end > this.length) end = this.length
28907 if (target.length - targetStart < end - start) {
28908 end = target.length - targetStart + start
28909 }
8b095871 28910
9987f0c1
IC
28911 var len = end - start
28912 var i
28913
28914 if (this === target && start < targetStart && targetStart < end) {
28915 // descending copy from end
28916 for (i = len - 1; i >= 0; --i) {
28917 target[i + targetStart] = this[i + start]
8b095871 28918 }
9987f0c1
IC
28919 } else if (len < 1000) {
28920 // ascending copy from start
28921 for (i = 0; i < len; ++i) {
28922 target[i + targetStart] = this[i + start]
8b095871 28923 }
9987f0c1
IC
28924 } else {
28925 Uint8Array.prototype.set.call(
28926 target,
28927 this.subarray(start, start + len),
28928 targetStart
28929 )
28930 }
8b095871 28931
9987f0c1
IC
28932 return len
28933}
28934
28935// Usage:
28936// buffer.fill(number[, offset[, end]])
28937// buffer.fill(buffer[, offset[, end]])
28938// buffer.fill(string[, offset[, end]][, encoding])
28939Buffer.prototype.fill = function fill (val, start, end, encoding) {
28940 // Handle string cases:
28941 if (typeof val === 'string') {
28942 if (typeof start === 'string') {
28943 encoding = start
28944 start = 0
28945 end = this.length
28946 } else if (typeof end === 'string') {
28947 encoding = end
28948 end = this.length
28949 }
28950 if (val.length === 1) {
28951 var code = val.charCodeAt(0)
28952 if (code < 256) {
28953 val = code
8b095871
IC
28954 }
28955 }
9987f0c1
IC
28956 if (encoding !== undefined && typeof encoding !== 'string') {
28957 throw new TypeError('encoding must be a string')
28958 }
28959 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
28960 throw new TypeError('Unknown encoding: ' + encoding)
28961 }
28962 } else if (typeof val === 'number') {
28963 val = val & 255
8b095871 28964 }
8b095871 28965
9987f0c1
IC
28966 // Invalid ranges are not set to a default, so can range check early.
28967 if (start < 0 || this.length < start || this.length < end) {
28968 throw new RangeError('Out of range index')
8b095871 28969 }
9987f0c1
IC
28970
28971 if (end <= start) {
28972 return this
8b095871 28973 }
8b095871 28974
9987f0c1
IC
28975 start = start >>> 0
28976 end = end === undefined ? this.length : end >>> 0
8b095871 28977
9987f0c1
IC
28978 if (!val) val = 0
28979
28980 var i
28981 if (typeof val === 'number') {
28982 for (i = start; i < end; ++i) {
28983 this[i] = val
8b095871 28984 }
9987f0c1
IC
28985 } else {
28986 var bytes = Buffer.isBuffer(val)
28987 ? val
28988 : new Buffer(val, encoding)
28989 var len = bytes.length
28990 for (i = 0; i < end - start; ++i) {
28991 this[i + start] = bytes[i % len]
8b095871
IC
28992 }
28993 }
9987f0c1
IC
28994
28995 return this
8b095871
IC
28996}
28997
9987f0c1
IC
28998// HELPER FUNCTIONS
28999// ================
8b095871 29000
9987f0c1 29001var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 29002
9987f0c1
IC
29003function base64clean (str) {
29004 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29005 str = str.trim().replace(INVALID_BASE64_RE, '')
29006 // Node converts strings with length < 2 to ''
29007 if (str.length < 2) return ''
29008 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29009 while (str.length % 4 !== 0) {
29010 str = str + '='
8b095871 29011 }
9987f0c1
IC
29012 return str
29013}
29014
29015function toHex (n) {
29016 if (n < 16) return '0' + n.toString(16)
29017 return n.toString(16)
29018}
29019
29020function utf8ToBytes (string, units) {
29021 units = units || Infinity
29022 var codePoint
29023 var length = string.length
29024 var leadSurrogate = null
29025 var bytes = []
29026
29027 for (var i = 0; i < length; ++i) {
29028 codePoint = string.charCodeAt(i)
29029
29030 // is surrogate component
29031 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29032 // last char was a lead
29033 if (!leadSurrogate) {
29034 // no lead yet
29035 if (codePoint > 0xDBFF) {
29036 // unexpected trail
29037 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29038 continue
29039 } else if (i + 1 === length) {
29040 // unpaired lead
29041 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29042 continue
29043 }
29044
29045 // valid lead
29046 leadSurrogate = codePoint
29047
29048 continue
29049 }
29050
29051 // 2 leads in a row
29052 if (codePoint < 0xDC00) {
29053 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29054 leadSurrogate = codePoint
29055 continue
29056 }
29057
29058 // valid surrogate pair
29059 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29060 } else if (leadSurrogate) {
29061 // valid bmp char, but last char was a lead
29062 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29063 }
29064
29065 leadSurrogate = null
29066
29067 // encode utf8
29068 if (codePoint < 0x80) {
29069 if ((units -= 1) < 0) break
29070 bytes.push(codePoint)
29071 } else if (codePoint < 0x800) {
29072 if ((units -= 2) < 0) break
29073 bytes.push(
29074 codePoint >> 0x6 | 0xC0,
29075 codePoint & 0x3F | 0x80
29076 )
29077 } else if (codePoint < 0x10000) {
29078 if ((units -= 3) < 0) break
29079 bytes.push(
29080 codePoint >> 0xC | 0xE0,
29081 codePoint >> 0x6 & 0x3F | 0x80,
29082 codePoint & 0x3F | 0x80
29083 )
29084 } else if (codePoint < 0x110000) {
29085 if ((units -= 4) < 0) break
29086 bytes.push(
29087 codePoint >> 0x12 | 0xF0,
29088 codePoint >> 0xC & 0x3F | 0x80,
29089 codePoint >> 0x6 & 0x3F | 0x80,
29090 codePoint & 0x3F | 0x80
29091 )
29092 } else {
29093 throw new Error('Invalid code point')
29094 }
8b095871 29095 }
9987f0c1
IC
29096
29097 return bytes
8b095871
IC
29098}
29099
9987f0c1
IC
29100function asciiToBytes (str) {
29101 var byteArray = []
29102 for (var i = 0; i < str.length; ++i) {
29103 // Node's code seems to be doing this and not & 0x7F..
29104 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 29105 }
9987f0c1 29106 return byteArray
8b095871
IC
29107}
29108
9987f0c1
IC
29109function utf16leToBytes (str, units) {
29110 var c, hi, lo
29111 var byteArray = []
29112 for (var i = 0; i < str.length; ++i) {
29113 if ((units -= 2) < 0) break
8b095871 29114
9987f0c1
IC
29115 c = str.charCodeAt(i)
29116 hi = c >> 8
29117 lo = c % 256
29118 byteArray.push(lo)
29119 byteArray.push(hi)
29120 }
8b095871 29121
9987f0c1
IC
29122 return byteArray
29123}
8b095871 29124
9987f0c1
IC
29125function base64ToBytes (str) {
29126 return base64.toByteArray(base64clean(str))
29127}
8b095871 29128
9987f0c1
IC
29129function blitBuffer (src, dst, offset, length) {
29130 for (var i = 0; i < length; ++i) {
29131 if ((i + offset >= dst.length) || (i >= src.length)) break
29132 dst[i + offset] = src[i]
29133 }
29134 return i
29135}
29136
29137// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29138function isArrayBufferView (obj) {
29139 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29140}
29141
29142function numberIsNaN (obj) {
29143 return obj !== obj // eslint-disable-line no-self-compare
29144}
8b095871 29145
cf6c2044 29146},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
8b095871 29147(function (Buffer){
9987f0c1
IC
29148// Copyright Joyent, Inc. and other Node contributors.
29149//
29150// Permission is hereby granted, free of charge, to any person obtaining a
29151// copy of this software and associated documentation files (the
29152// "Software"), to deal in the Software without restriction, including
29153// without limitation the rights to use, copy, modify, merge, publish,
29154// distribute, sublicense, and/or sell copies of the Software, and to permit
29155// persons to whom the Software is furnished to do so, subject to the
29156// following conditions:
29157//
29158// The above copyright notice and this permission notice shall be included
29159// in all copies or substantial portions of the Software.
29160//
29161// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29162// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29163// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29164// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29165// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29166// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29167// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 29168
9987f0c1
IC
29169// NOTE: These type checking functions intentionally don't use `instanceof`
29170// because it is fragile and can be easily faked with `Object.create()`.
8b095871 29171
9987f0c1
IC
29172function isArray(arg) {
29173 if (Array.isArray) {
29174 return Array.isArray(arg);
29175 }
29176 return objectToString(arg) === '[object Array]';
8b095871 29177}
9987f0c1 29178exports.isArray = isArray;
8b095871 29179
9987f0c1
IC
29180function isBoolean(arg) {
29181 return typeof arg === 'boolean';
8b095871 29182}
9987f0c1 29183exports.isBoolean = isBoolean;
8b095871 29184
9987f0c1
IC
29185function isNull(arg) {
29186 return arg === null;
8b095871 29187}
9987f0c1 29188exports.isNull = isNull;
8b095871 29189
9987f0c1
IC
29190function isNullOrUndefined(arg) {
29191 return arg == null;
29192}
29193exports.isNullOrUndefined = isNullOrUndefined;
8b095871 29194
9987f0c1
IC
29195function isNumber(arg) {
29196 return typeof arg === 'number';
29197}
29198exports.isNumber = isNumber;
8b095871 29199
9987f0c1
IC
29200function isString(arg) {
29201 return typeof arg === 'string';
29202}
29203exports.isString = isString;
8b095871 29204
9987f0c1
IC
29205function isSymbol(arg) {
29206 return typeof arg === 'symbol';
8b095871 29207}
9987f0c1 29208exports.isSymbol = isSymbol;
8b095871 29209
9987f0c1
IC
29210function isUndefined(arg) {
29211 return arg === void 0;
29212}
29213exports.isUndefined = isUndefined;
8b095871 29214
9987f0c1
IC
29215function isRegExp(re) {
29216 return objectToString(re) === '[object RegExp]';
8b095871 29217}
9987f0c1 29218exports.isRegExp = isRegExp;
8b095871 29219
9987f0c1
IC
29220function isObject(arg) {
29221 return typeof arg === 'object' && arg !== null;
29222}
29223exports.isObject = isObject;
8b095871 29224
9987f0c1
IC
29225function isDate(d) {
29226 return objectToString(d) === '[object Date]';
29227}
29228exports.isDate = isDate;
8b095871 29229
9987f0c1
IC
29230function isError(e) {
29231 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 29232}
9987f0c1 29233exports.isError = isError;
8b095871 29234
9987f0c1
IC
29235function isFunction(arg) {
29236 return typeof arg === 'function';
8b095871 29237}
9987f0c1 29238exports.isFunction = isFunction;
8b095871 29239
9987f0c1
IC
29240function isPrimitive(arg) {
29241 return arg === null ||
29242 typeof arg === 'boolean' ||
29243 typeof arg === 'number' ||
29244 typeof arg === 'string' ||
29245 typeof arg === 'symbol' || // ES6 symbol
29246 typeof arg === 'undefined';
29247}
29248exports.isPrimitive = isPrimitive;
8b095871 29249
9987f0c1 29250exports.isBuffer = Buffer.isBuffer;
8b095871 29251
9987f0c1
IC
29252function objectToString(o) {
29253 return Object.prototype.toString.call(o);
8b095871
IC
29254}
29255
9987f0c1 29256}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
cf6c2044 29257},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
9987f0c1 29258// Copyright Joyent, Inc. and other Node contributors.
8b095871 29259//
9987f0c1
IC
29260// Permission is hereby granted, free of charge, to any person obtaining a
29261// copy of this software and associated documentation files (the
29262// "Software"), to deal in the Software without restriction, including
29263// without limitation the rights to use, copy, modify, merge, publish,
29264// distribute, sublicense, and/or sell copies of the Software, and to permit
29265// persons to whom the Software is furnished to do so, subject to the
29266// following conditions:
8b095871 29267//
9987f0c1
IC
29268// The above copyright notice and this permission notice shall be included
29269// in all copies or substantial portions of the Software.
8b095871 29270//
9987f0c1
IC
29271// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29272// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29273// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29274// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29275// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29276// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29277// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 29278
9987f0c1
IC
29279function EventEmitter() {
29280 this._events = this._events || {};
29281 this._maxListeners = this._maxListeners || undefined;
29282}
29283module.exports = EventEmitter;
8b095871 29284
9987f0c1
IC
29285// Backwards-compat with node 0.10.x
29286EventEmitter.EventEmitter = EventEmitter;
8b095871 29287
9987f0c1
IC
29288EventEmitter.prototype._events = undefined;
29289EventEmitter.prototype._maxListeners = undefined;
8b095871 29290
9987f0c1
IC
29291// By default EventEmitters will print a warning if more than 10 listeners are
29292// added to it. This is a useful default which helps finding memory leaks.
29293EventEmitter.defaultMaxListeners = 10;
8b095871 29294
9987f0c1
IC
29295// Obviously not all Emitters should be limited to 10. This function allows
29296// that to be increased. Set to zero for unlimited.
29297EventEmitter.prototype.setMaxListeners = function(n) {
29298 if (!isNumber(n) || n < 0 || isNaN(n))
29299 throw TypeError('n must be a positive number');
29300 this._maxListeners = n;
29301 return this;
29302};
8b095871 29303
9987f0c1
IC
29304EventEmitter.prototype.emit = function(type) {
29305 var er, handler, len, args, i, listeners;
29306
29307 if (!this._events)
29308 this._events = {};
29309
29310 // If there is no 'error' event listener then throw.
29311 if (type === 'error') {
29312 if (!this._events.error ||
29313 (isObject(this._events.error) && !this._events.error.length)) {
29314 er = arguments[1];
29315 if (er instanceof Error) {
29316 throw er; // Unhandled 'error' event
29317 } else {
29318 // At least give some kind of context to the user
29319 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29320 err.context = er;
29321 throw err;
29322 }
29323 }
8b095871 29324 }
8b095871 29325
9987f0c1
IC
29326 handler = this._events[type];
29327
29328 if (isUndefined(handler))
29329 return false;
29330
29331 if (isFunction(handler)) {
29332 switch (arguments.length) {
29333 // fast cases
29334 case 1:
29335 handler.call(this);
29336 break;
29337 case 2:
29338 handler.call(this, arguments[1]);
29339 break;
29340 case 3:
29341 handler.call(this, arguments[1], arguments[2]);
29342 break;
29343 // slower
29344 default:
29345 args = Array.prototype.slice.call(arguments, 1);
29346 handler.apply(this, args);
29347 }
29348 } else if (isObject(handler)) {
29349 args = Array.prototype.slice.call(arguments, 1);
29350 listeners = handler.slice();
29351 len = listeners.length;
29352 for (i = 0; i < len; i++)
29353 listeners[i].apply(this, args);
8b095871 29354 }
8b095871 29355
9987f0c1
IC
29356 return true;
29357};
29358
29359EventEmitter.prototype.addListener = function(type, listener) {
29360 var m;
29361
29362 if (!isFunction(listener))
29363 throw TypeError('listener must be a function');
29364
29365 if (!this._events)
29366 this._events = {};
29367
29368 // To avoid recursion in the case that type === "newListener"! Before
29369 // adding it to the listeners, first emit "newListener".
29370 if (this._events.newListener)
29371 this.emit('newListener', type,
29372 isFunction(listener.listener) ?
29373 listener.listener : listener);
29374
29375 if (!this._events[type])
29376 // Optimize the case of one listener. Don't need the extra array object.
29377 this._events[type] = listener;
29378 else if (isObject(this._events[type]))
29379 // If we've already got an array, just append.
29380 this._events[type].push(listener);
29381 else
29382 // Adding the second element, need to change to array.
29383 this._events[type] = [this._events[type], listener];
8b095871 29384
9987f0c1
IC
29385 // Check for listener leak
29386 if (isObject(this._events[type]) && !this._events[type].warned) {
29387 if (!isUndefined(this._maxListeners)) {
29388 m = this._maxListeners;
29389 } else {
29390 m = EventEmitter.defaultMaxListeners;
8b095871 29391 }
8b095871 29392
9987f0c1
IC
29393 if (m && m > 0 && this._events[type].length > m) {
29394 this._events[type].warned = true;
29395 console.error('(node) warning: possible EventEmitter memory ' +
29396 'leak detected. %d listeners added. ' +
29397 'Use emitter.setMaxListeners() to increase limit.',
29398 this._events[type].length);
29399 if (typeof console.trace === 'function') {
29400 // not supported in IE 10
29401 console.trace();
29402 }
29403 }
8b095871 29404 }
8b095871 29405
9987f0c1
IC
29406 return this;
29407};
8b095871 29408
9987f0c1 29409EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 29410
9987f0c1
IC
29411EventEmitter.prototype.once = function(type, listener) {
29412 if (!isFunction(listener))
29413 throw TypeError('listener must be a function');
8b095871 29414
9987f0c1 29415 var fired = false;
8b095871 29416
9987f0c1
IC
29417 function g() {
29418 this.removeListener(type, g);
8b095871 29419
9987f0c1
IC
29420 if (!fired) {
29421 fired = true;
29422 listener.apply(this, arguments);
29423 }
29424 }
8b095871 29425
9987f0c1
IC
29426 g.listener = listener;
29427 this.on(type, g);
8b095871 29428
9987f0c1 29429 return this;
8b095871
IC
29430};
29431
9987f0c1
IC
29432// emits a 'removeListener' event iff the listener was removed
29433EventEmitter.prototype.removeListener = function(type, listener) {
29434 var list, position, length, i;
8b095871 29435
9987f0c1
IC
29436 if (!isFunction(listener))
29437 throw TypeError('listener must be a function');
8b095871 29438
9987f0c1
IC
29439 if (!this._events || !this._events[type])
29440 return this;
8b095871 29441
9987f0c1
IC
29442 list = this._events[type];
29443 length = list.length;
29444 position = -1;
8b095871 29445
9987f0c1
IC
29446 if (list === listener ||
29447 (isFunction(list.listener) && list.listener === listener)) {
29448 delete this._events[type];
29449 if (this._events.removeListener)
29450 this.emit('removeListener', type, listener);
8b095871 29451
9987f0c1
IC
29452 } else if (isObject(list)) {
29453 for (i = length; i-- > 0;) {
29454 if (list[i] === listener ||
29455 (list[i].listener && list[i].listener === listener)) {
29456 position = i;
29457 break;
29458 }
8b095871
IC
29459 }
29460
9987f0c1
IC
29461 if (position < 0)
29462 return this;
8b095871 29463
9987f0c1
IC
29464 if (list.length === 1) {
29465 list.length = 0;
29466 delete this._events[type];
29467 } else {
29468 list.splice(position, 1);
29469 }
8b095871 29470
9987f0c1
IC
29471 if (this._events.removeListener)
29472 this.emit('removeListener', type, listener);
29473 }
8b095871 29474
9987f0c1
IC
29475 return this;
29476};
8b095871 29477
9987f0c1
IC
29478EventEmitter.prototype.removeAllListeners = function(type) {
29479 var key, listeners;
8b095871 29480
9987f0c1
IC
29481 if (!this._events)
29482 return this;
8b095871 29483
9987f0c1
IC
29484 // not listening for removeListener, no need to emit
29485 if (!this._events.removeListener) {
29486 if (arguments.length === 0)
29487 this._events = {};
29488 else if (this._events[type])
29489 delete this._events[type];
29490 return this;
8b095871 29491 }
9987f0c1
IC
29492
29493 // emit removeListener for all listeners on all events
29494 if (arguments.length === 0) {
29495 for (key in this._events) {
29496 if (key === 'removeListener') continue;
29497 this.removeAllListeners(key);
29498 }
29499 this.removeAllListeners('removeListener');
29500 this._events = {};
29501 return this;
8b095871 29502 }
8b095871 29503
9987f0c1 29504 listeners = this._events[type];
8b095871 29505
9987f0c1
IC
29506 if (isFunction(listeners)) {
29507 this.removeListener(type, listeners);
29508 } else if (listeners) {
29509 // LIFO order
29510 while (listeners.length)
29511 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 29512 }
9987f0c1 29513 delete this._events[type];
8b095871 29514
9987f0c1
IC
29515 return this;
29516};
8b095871 29517
9987f0c1
IC
29518EventEmitter.prototype.listeners = function(type) {
29519 var ret;
29520 if (!this._events || !this._events[type])
29521 ret = [];
29522 else if (isFunction(this._events[type]))
29523 ret = [this._events[type]];
29524 else
29525 ret = this._events[type].slice();
29526 return ret;
8b095871
IC
29527};
29528
9987f0c1
IC
29529EventEmitter.prototype.listenerCount = function(type) {
29530 if (this._events) {
29531 var evlistener = this._events[type];
8b095871 29532
9987f0c1
IC
29533 if (isFunction(evlistener))
29534 return 1;
29535 else if (evlistener)
29536 return evlistener.length;
8b095871 29537 }
9987f0c1 29538 return 0;
8b095871
IC
29539};
29540
9987f0c1
IC
29541EventEmitter.listenerCount = function(emitter, type) {
29542 return emitter.listenerCount(type);
29543};
8b095871 29544
9987f0c1
IC
29545function isFunction(arg) {
29546 return typeof arg === 'function';
29547}
8b095871 29548
9987f0c1
IC
29549function isNumber(arg) {
29550 return typeof arg === 'number';
8b095871
IC
29551}
29552
9987f0c1
IC
29553function isObject(arg) {
29554 return typeof arg === 'object' && arg !== null;
29555}
8b095871 29556
9987f0c1
IC
29557function isUndefined(arg) {
29558 return arg === void 0;
29559}
8b095871 29560
cf6c2044 29561},{}],8:[function(require,module,exports){
9987f0c1
IC
29562exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29563 var e, m
29564 var eLen = nBytes * 8 - mLen - 1
29565 var eMax = (1 << eLen) - 1
29566 var eBias = eMax >> 1
29567 var nBits = -7
29568 var i = isLE ? (nBytes - 1) : 0
29569 var d = isLE ? -1 : 1
29570 var s = buffer[offset + i]
8b095871 29571
9987f0c1 29572 i += d
8b095871 29573
9987f0c1
IC
29574 e = s & ((1 << (-nBits)) - 1)
29575 s >>= (-nBits)
29576 nBits += eLen
29577 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 29578
9987f0c1
IC
29579 m = e & ((1 << (-nBits)) - 1)
29580 e >>= (-nBits)
29581 nBits += mLen
29582 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 29583
9987f0c1
IC
29584 if (e === 0) {
29585 e = 1 - eBias
29586 } else if (e === eMax) {
29587 return m ? NaN : ((s ? -1 : 1) * Infinity)
29588 } else {
29589 m = m + Math.pow(2, mLen)
29590 e = e - eBias
8b095871 29591 }
9987f0c1 29592 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
29593}
29594
9987f0c1
IC
29595exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29596 var e, m, c
29597 var eLen = nBytes * 8 - mLen - 1
29598 var eMax = (1 << eLen) - 1
29599 var eBias = eMax >> 1
29600 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29601 var i = isLE ? 0 : (nBytes - 1)
29602 var d = isLE ? 1 : -1
29603 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 29604
9987f0c1 29605 value = Math.abs(value)
8b095871 29606
9987f0c1
IC
29607 if (isNaN(value) || value === Infinity) {
29608 m = isNaN(value) ? 1 : 0
29609 e = eMax
29610 } else {
29611 e = Math.floor(Math.log(value) / Math.LN2)
29612 if (value * (c = Math.pow(2, -e)) < 1) {
29613 e--
29614 c *= 2
29615 }
29616 if (e + eBias >= 1) {
29617 value += rt / c
29618 } else {
29619 value += rt * Math.pow(2, 1 - eBias)
29620 }
29621 if (value * c >= 2) {
29622 e++
29623 c /= 2
29624 }
8b095871 29625
9987f0c1
IC
29626 if (e + eBias >= eMax) {
29627 m = 0
29628 e = eMax
29629 } else if (e + eBias >= 1) {
29630 m = (value * c - 1) * Math.pow(2, mLen)
29631 e = e + eBias
29632 } else {
29633 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29634 e = 0
29635 }
8b095871 29636 }
8b095871 29637
9987f0c1
IC
29638 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29639
29640 e = (e << mLen) | m
29641 eLen += mLen
29642 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29643
29644 buffer[offset + i - d] |= s * 128
29645}
8b095871 29646
cf6c2044 29647},{}],9:[function(require,module,exports){
9987f0c1
IC
29648if (typeof Object.create === 'function') {
29649 // implementation from standard node.js 'util' module
29650 module.exports = function inherits(ctor, superCtor) {
29651 ctor.super_ = superCtor
29652 ctor.prototype = Object.create(superCtor.prototype, {
29653 constructor: {
29654 value: ctor,
29655 enumerable: false,
29656 writable: true,
29657 configurable: true
29658 }
29659 });
29660 };
29661} else {
29662 // old school shim for old browsers
29663 module.exports = function inherits(ctor, superCtor) {
29664 ctor.super_ = superCtor
29665 var TempCtor = function () {}
29666 TempCtor.prototype = superCtor.prototype
29667 ctor.prototype = new TempCtor()
29668 ctor.prototype.constructor = ctor
29669 }
29670}
29671
cf6c2044 29672},{}],10:[function(require,module,exports){
8b095871 29673/*!
9987f0c1 29674 * Determine if an object is a Buffer
8b095871
IC
29675 *
29676 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29677 * @license MIT
29678 */
29679
9987f0c1
IC
29680// The _isBuffer check is for Safari 5-7 support, because it's missing
29681// Object.prototype.constructor. Remove this eventually
29682module.exports = function (obj) {
29683 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29684}
8b095871 29685
9987f0c1
IC
29686function isBuffer (obj) {
29687 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
29688}
29689
9987f0c1
IC
29690// For Node v0.10 support. Remove this eventually.
29691function isSlowBuffer (obj) {
29692 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29693}
8b095871 29694
cf6c2044 29695},{}],11:[function(require,module,exports){
9987f0c1 29696var toString = {}.toString;
8b095871 29697
9987f0c1
IC
29698module.exports = Array.isArray || function (arr) {
29699 return toString.call(arr) == '[object Array]';
29700};
8b095871 29701
cf6c2044 29702},{}],12:[function(require,module,exports){
9987f0c1
IC
29703(function (process){
29704'use strict';
8b095871 29705
9987f0c1
IC
29706if (!process.version ||
29707 process.version.indexOf('v0.') === 0 ||
29708 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29709 module.exports = nextTick;
29710} else {
29711 module.exports = process.nextTick;
8b095871
IC
29712}
29713
9987f0c1
IC
29714function nextTick(fn, arg1, arg2, arg3) {
29715 if (typeof fn !== 'function') {
29716 throw new TypeError('"callback" argument must be a function');
29717 }
29718 var len = arguments.length;
29719 var args, i;
29720 switch (len) {
29721 case 0:
29722 case 1:
29723 return process.nextTick(fn);
29724 case 2:
29725 return process.nextTick(function afterTickOne() {
29726 fn.call(null, arg1);
29727 });
29728 case 3:
29729 return process.nextTick(function afterTickTwo() {
29730 fn.call(null, arg1, arg2);
29731 });
29732 case 4:
29733 return process.nextTick(function afterTickThree() {
29734 fn.call(null, arg1, arg2, arg3);
29735 });
29736 default:
29737 args = new Array(len - 1);
29738 i = 0;
29739 while (i < args.length) {
29740 args[i++] = arguments[i];
8b095871 29741 }
9987f0c1
IC
29742 return process.nextTick(function afterTick() {
29743 fn.apply(null, args);
29744 });
8b095871 29745 }
8b095871
IC
29746}
29747
9987f0c1 29748}).call(this,require('_process'))
cf6c2044 29749},{"_process":13}],13:[function(require,module,exports){
9987f0c1
IC
29750// shim for using process in browser
29751var process = module.exports = {};
8b095871 29752
9987f0c1
IC
29753// cached from whatever global is present so that test runners that stub it
29754// don't break things. But we need to wrap it in a try catch in case it is
29755// wrapped in strict mode code which doesn't define any globals. It's inside a
29756// function because try/catches deoptimize in certain engines.
8b095871 29757
9987f0c1
IC
29758var cachedSetTimeout;
29759var cachedClearTimeout;
8b095871 29760
9987f0c1
IC
29761function defaultSetTimout() {
29762 throw new Error('setTimeout has not been defined');
29763}
29764function defaultClearTimeout () {
29765 throw new Error('clearTimeout has not been defined');
29766}
29767(function () {
29768 try {
29769 if (typeof setTimeout === 'function') {
29770 cachedSetTimeout = setTimeout;
29771 } else {
29772 cachedSetTimeout = defaultSetTimout;
29773 }
29774 } catch (e) {
29775 cachedSetTimeout = defaultSetTimout;
29776 }
29777 try {
29778 if (typeof clearTimeout === 'function') {
29779 cachedClearTimeout = clearTimeout;
29780 } else {
29781 cachedClearTimeout = defaultClearTimeout;
29782 }
29783 } catch (e) {
29784 cachedClearTimeout = defaultClearTimeout;
8b095871 29785 }
9987f0c1
IC
29786} ())
29787function runTimeout(fun) {
29788 if (cachedSetTimeout === setTimeout) {
29789 //normal enviroments in sane situations
29790 return setTimeout(fun, 0);
29791 }
29792 // if setTimeout wasn't available but was latter defined
29793 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29794 cachedSetTimeout = setTimeout;
29795 return setTimeout(fun, 0);
29796 }
29797 try {
29798 // when when somebody has screwed with setTimeout but no I.E. maddness
29799 return cachedSetTimeout(fun, 0);
29800 } catch(e){
29801 try {
29802 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29803 return cachedSetTimeout.call(null, fun, 0);
29804 } catch(e){
29805 // 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
29806 return cachedSetTimeout.call(this, fun, 0);
29807 }
8b095871 29808 }
8b095871 29809
8b095871 29810
8b095871 29811}
9987f0c1
IC
29812function runClearTimeout(marker) {
29813 if (cachedClearTimeout === clearTimeout) {
29814 //normal enviroments in sane situations
29815 return clearTimeout(marker);
29816 }
29817 // if clearTimeout wasn't available but was latter defined
29818 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29819 cachedClearTimeout = clearTimeout;
29820 return clearTimeout(marker);
29821 }
29822 try {
29823 // when when somebody has screwed with setTimeout but no I.E. maddness
29824 return cachedClearTimeout(marker);
29825 } catch (e){
29826 try {
29827 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29828 return cachedClearTimeout.call(null, marker);
29829 } catch (e){
29830 // 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.
29831 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29832 return cachedClearTimeout.call(this, marker);
29833 }
29834 }
8b095871 29835
8b095871 29836
8b095871 29837
8b095871 29838}
9987f0c1
IC
29839var queue = [];
29840var draining = false;
29841var currentQueue;
29842var queueIndex = -1;
8b095871 29843
9987f0c1
IC
29844function cleanUpNextTick() {
29845 if (!draining || !currentQueue) {
29846 return;
29847 }
29848 draining = false;
29849 if (currentQueue.length) {
29850 queue = currentQueue.concat(queue);
29851 } else {
29852 queueIndex = -1;
29853 }
29854 if (queue.length) {
29855 drainQueue();
29856 }
8b095871
IC
29857}
29858
9987f0c1
IC
29859function drainQueue() {
29860 if (draining) {
29861 return;
29862 }
29863 var timeout = runTimeout(cleanUpNextTick);
29864 draining = true;
8b095871 29865
9987f0c1
IC
29866 var len = queue.length;
29867 while(len) {
29868 currentQueue = queue;
29869 queue = [];
29870 while (++queueIndex < len) {
29871 if (currentQueue) {
29872 currentQueue[queueIndex].run();
29873 }
29874 }
29875 queueIndex = -1;
29876 len = queue.length;
29877 }
29878 currentQueue = null;
29879 draining = false;
29880 runClearTimeout(timeout);
8b095871
IC
29881}
29882
9987f0c1
IC
29883process.nextTick = function (fun) {
29884 var args = new Array(arguments.length - 1);
29885 if (arguments.length > 1) {
29886 for (var i = 1; i < arguments.length; i++) {
29887 args[i - 1] = arguments[i];
29888 }
29889 }
29890 queue.push(new Item(fun, args));
29891 if (queue.length === 1 && !draining) {
29892 runTimeout(drainQueue);
29893 }
29894};
8b095871 29895
9987f0c1
IC
29896// v8 likes predictible objects
29897function Item(fun, array) {
29898 this.fun = fun;
29899 this.array = array;
8b095871 29900}
9987f0c1
IC
29901Item.prototype.run = function () {
29902 this.fun.apply(null, this.array);
29903};
29904process.title = 'browser';
29905process.browser = true;
29906process.env = {};
29907process.argv = [];
29908process.version = ''; // empty string to avoid regexp issues
29909process.versions = {};
8b095871 29910
9987f0c1 29911function noop() {}
8b095871 29912
9987f0c1
IC
29913process.on = noop;
29914process.addListener = noop;
29915process.once = noop;
29916process.off = noop;
29917process.removeListener = noop;
29918process.removeAllListeners = noop;
29919process.emit = noop;
29920process.prependListener = noop;
29921process.prependOnceListener = noop;
8b095871 29922
9987f0c1 29923process.listeners = function (name) { return [] }
8b095871 29924
9987f0c1
IC
29925process.binding = function (name) {
29926 throw new Error('process.binding is not supported');
29927};
8b095871 29928
9987f0c1
IC
29929process.cwd = function () { return '/' };
29930process.chdir = function (dir) {
29931 throw new Error('process.chdir is not supported');
29932};
29933process.umask = function() { return 0; };
8b095871 29934
cf6c2044 29935},{}],14:[function(require,module,exports){
9987f0c1 29936module.exports = require('./lib/_stream_duplex.js');
8b095871 29937
cf6c2044 29938},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
9987f0c1
IC
29939// a duplex stream is just a stream that is both readable and writable.
29940// Since JS doesn't have multiple prototypal inheritance, this class
29941// prototypally inherits from Readable, and then parasitically from
29942// Writable.
8b095871 29943
9987f0c1 29944'use strict';
8b095871 29945
9987f0c1 29946/*<replacement>*/
8b095871 29947
9987f0c1
IC
29948var objectKeys = Object.keys || function (obj) {
29949 var keys = [];
29950 for (var key in obj) {
29951 keys.push(key);
29952 }return keys;
29953};
29954/*</replacement>*/
8b095871 29955
9987f0c1 29956module.exports = Duplex;
8b095871 29957
cf6c2044
IC
29958/*<replacement>*/
29959var processNextTick = require('process-nextick-args');
29960/*</replacement>*/
29961
9987f0c1
IC
29962/*<replacement>*/
29963var util = require('core-util-is');
29964util.inherits = require('inherits');
29965/*</replacement>*/
8b095871 29966
9987f0c1
IC
29967var Readable = require('./_stream_readable');
29968var Writable = require('./_stream_writable');
8b095871 29969
9987f0c1 29970util.inherits(Duplex, Readable);
8b095871 29971
9987f0c1
IC
29972var keys = objectKeys(Writable.prototype);
29973for (var v = 0; v < keys.length; v++) {
29974 var method = keys[v];
29975 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 29976}
8b095871 29977
9987f0c1
IC
29978function Duplex(options) {
29979 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 29980
9987f0c1
IC
29981 Readable.call(this, options);
29982 Writable.call(this, options);
8b095871 29983
9987f0c1 29984 if (options && options.readable === false) this.readable = false;
8b095871 29985
9987f0c1 29986 if (options && options.writable === false) this.writable = false;
8b095871 29987
9987f0c1
IC
29988 this.allowHalfOpen = true;
29989 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 29990
9987f0c1 29991 this.once('end', onend);
8b095871
IC
29992}
29993
9987f0c1
IC
29994// the no-half-open enforcer
29995function onend() {
29996 // if we allow half-open state, or if the writable side ended,
29997 // then we're ok.
29998 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 29999
9987f0c1
IC
30000 // no more data can be written.
30001 // But allow more writes to happen in this tick.
30002 processNextTick(onEndNT, this);
8b095871
IC
30003}
30004
9987f0c1
IC
30005function onEndNT(self) {
30006 self.end();
8b095871
IC
30007}
30008
9987f0c1
IC
30009function forEach(xs, f) {
30010 for (var i = 0, l = xs.length; i < l; i++) {
30011 f(xs[i], i);
30012 }
8b095871 30013}
cf6c2044 30014},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
9987f0c1
IC
30015// a passthrough stream.
30016// basically just the most minimal sort of Transform stream.
30017// Every written chunk gets output as-is.
8b095871 30018
9987f0c1 30019'use strict';
8b095871 30020
9987f0c1 30021module.exports = PassThrough;
8b095871 30022
9987f0c1 30023var Transform = require('./_stream_transform');
8b095871 30024
9987f0c1
IC
30025/*<replacement>*/
30026var util = require('core-util-is');
30027util.inherits = require('inherits');
30028/*</replacement>*/
8b095871 30029
9987f0c1 30030util.inherits(PassThrough, Transform);
8b095871 30031
9987f0c1
IC
30032function PassThrough(options) {
30033 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 30034
9987f0c1 30035 Transform.call(this, options);
8b095871
IC
30036}
30037
9987f0c1
IC
30038PassThrough.prototype._transform = function (chunk, encoding, cb) {
30039 cb(null, chunk);
30040};
cf6c2044
IC
30041},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30042(function (process){
9987f0c1 30043'use strict';
8b095871 30044
cf6c2044 30045module.exports = Readable;
8b095871 30046
cf6c2044 30047/*<replacement>*/
9987f0c1
IC
30048var processNextTick = require('process-nextick-args');
30049/*</replacement>*/
8b095871 30050
9987f0c1
IC
30051/*<replacement>*/
30052var isArray = require('isarray');
30053/*</replacement>*/
8b095871 30054
9987f0c1
IC
30055/*<replacement>*/
30056var Duplex;
30057/*</replacement>*/
8b095871 30058
9987f0c1 30059Readable.ReadableState = ReadableState;
8b095871 30060
9987f0c1
IC
30061/*<replacement>*/
30062var EE = require('events').EventEmitter;
8b095871 30063
9987f0c1
IC
30064var EElistenerCount = function (emitter, type) {
30065 return emitter.listeners(type).length;
30066};
30067/*</replacement>*/
8b095871 30068
9987f0c1
IC
30069/*<replacement>*/
30070var Stream = require('./internal/streams/stream');
30071/*</replacement>*/
8b095871 30072
cf6c2044 30073var Buffer = require('buffer').Buffer;
9987f0c1 30074/*<replacement>*/
cf6c2044 30075var bufferShim = require('buffer-shims');
9987f0c1 30076/*</replacement>*/
8b095871 30077
9987f0c1
IC
30078/*<replacement>*/
30079var util = require('core-util-is');
30080util.inherits = require('inherits');
30081/*</replacement>*/
30082
30083/*<replacement>*/
30084var debugUtil = require('util');
30085var debug = void 0;
30086if (debugUtil && debugUtil.debuglog) {
30087 debug = debugUtil.debuglog('stream');
30088} else {
30089 debug = function () {};
8b095871 30090}
9987f0c1 30091/*</replacement>*/
8b095871 30092
9987f0c1 30093var BufferList = require('./internal/streams/BufferList');
9987f0c1
IC
30094var StringDecoder;
30095
30096util.inherits(Readable, Stream);
30097
30098var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30099
30100function prependListener(emitter, event, fn) {
30101 // Sadly this is not cacheable as some libraries bundle their own
30102 // event emitter implementation with them.
30103 if (typeof emitter.prependListener === 'function') {
30104 return emitter.prependListener(event, fn);
8b095871 30105 } else {
9987f0c1
IC
30106 // This is a hack to make sure that our error handler is attached before any
30107 // userland ones. NEVER DO THIS. This is here only because this code needs
30108 // to continue to work with older versions of Node.js that do not include
30109 // the prependListener() method. The goal is to eventually remove this hack.
30110 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]];
8b095871
IC
30111 }
30112}
30113
9987f0c1
IC
30114function ReadableState(options, stream) {
30115 Duplex = Duplex || require('./_stream_duplex');
8b095871 30116
9987f0c1 30117 options = options || {};
8b095871 30118
9987f0c1
IC
30119 // object stream flag. Used to make read(n) ignore n and to
30120 // make all the buffer merging and length checks go away
30121 this.objectMode = !!options.objectMode;
8b095871 30122
9987f0c1 30123 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 30124
9987f0c1
IC
30125 // the point at which it stops calling _read() to fill the buffer
30126 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30127 var hwm = options.highWaterMark;
30128 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30129 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 30130
9987f0c1 30131 // cast to ints.
cf6c2044 30132 this.highWaterMark = ~~this.highWaterMark;
8b095871 30133
9987f0c1
IC
30134 // A linked list is used to store data chunks instead of an array because the
30135 // linked list can remove elements from the beginning faster than
30136 // array.shift()
30137 this.buffer = new BufferList();
30138 this.length = 0;
30139 this.pipes = null;
30140 this.pipesCount = 0;
30141 this.flowing = null;
30142 this.ended = false;
30143 this.endEmitted = false;
30144 this.reading = false;
8b095871 30145
cf6c2044
IC
30146 // a flag to be able to tell if the onwrite cb is called immediately,
30147 // or on a later tick. We set this to true at first, because any
30148 // actions that shouldn't happen until "later" should generally also
30149 // not happen before the first write call.
9987f0c1 30150 this.sync = true;
8b095871 30151
9987f0c1
IC
30152 // whenever we return null, then we set a flag to say
30153 // that we're awaiting a 'readable' event emission.
30154 this.needReadable = false;
30155 this.emittedReadable = false;
30156 this.readableListening = false;
30157 this.resumeScheduled = false;
8b095871 30158
9987f0c1
IC
30159 // Crypto is kind of old and crusty. Historically, its default string
30160 // encoding is 'binary' so we have to make this configurable.
30161 // Everything else in the universe uses 'utf8', though.
30162 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 30163
cf6c2044
IC
30164 // when piping, we only care about 'readable' events that happen
30165 // after read()ing all the bytes and not getting any pushback.
30166 this.ranOut = false;
30167
9987f0c1
IC
30168 // the number of writers that are awaiting a drain event in .pipe()s
30169 this.awaitDrain = 0;
8b095871 30170
9987f0c1
IC
30171 // if true, a maybeReadMore has been scheduled
30172 this.readingMore = false;
8b095871 30173
9987f0c1
IC
30174 this.decoder = null;
30175 this.encoding = null;
30176 if (options.encoding) {
30177 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30178 this.decoder = new StringDecoder(options.encoding);
30179 this.encoding = options.encoding;
8b095871 30180 }
8b095871
IC
30181}
30182
9987f0c1
IC
30183function Readable(options) {
30184 Duplex = Duplex || require('./_stream_duplex');
8b095871 30185
9987f0c1 30186 if (!(this instanceof Readable)) return new Readable(options);
8b095871 30187
9987f0c1 30188 this._readableState = new ReadableState(options, this);
8b095871 30189
9987f0c1
IC
30190 // legacy
30191 this.readable = true;
30192
cf6c2044 30193 if (options && typeof options.read === 'function') this._read = options.read;
8b095871 30194
9987f0c1
IC
30195 Stream.call(this);
30196}
8b095871 30197
9987f0c1
IC
30198// Manually shove something into the read() buffer.
30199// This returns true if the highWaterMark has not been hit yet,
30200// similar to how Writable.write() returns true if you should
30201// write() some more.
30202Readable.prototype.push = function (chunk, encoding) {
30203 var state = this._readableState;
9987f0c1 30204
cf6c2044
IC
30205 if (!state.objectMode && typeof chunk === 'string') {
30206 encoding = encoding || state.defaultEncoding;
30207 if (encoding !== state.encoding) {
30208 chunk = bufferShim.from(chunk, encoding);
30209 encoding = '';
9987f0c1 30210 }
9987f0c1 30211 }
8b095871 30212
cf6c2044 30213 return readableAddChunk(this, state, chunk, encoding, false);
9987f0c1 30214};
8b095871 30215
9987f0c1
IC
30216// Unshift should *always* be something directly out of read()
30217Readable.prototype.unshift = function (chunk) {
cf6c2044
IC
30218 var state = this._readableState;
30219 return readableAddChunk(this, state, chunk, '', true);
9987f0c1 30220};
8b095871 30221
cf6c2044
IC
30222Readable.prototype.isPaused = function () {
30223 return this._readableState.flowing === false;
30224};
30225
30226function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30227 var er = chunkInvalid(state, chunk);
30228 if (er) {
30229 stream.emit('error', er);
30230 } else if (chunk === null) {
9987f0c1
IC
30231 state.reading = false;
30232 onEofChunk(stream, state);
cf6c2044
IC
30233 } else if (state.objectMode || chunk && chunk.length > 0) {
30234 if (state.ended && !addToFront) {
30235 var e = new Error('stream.push() after EOF');
30236 stream.emit('error', e);
30237 } else if (state.endEmitted && addToFront) {
30238 var _e = new Error('stream.unshift() after end event');
30239 stream.emit('error', _e);
30240 } else {
30241 var skipAdd;
30242 if (state.decoder && !addToFront && !encoding) {
30243 chunk = state.decoder.write(chunk);
30244 skipAdd = !state.objectMode && chunk.length === 0;
30245 }
30246
30247 if (!addToFront) state.reading = false;
30248
30249 // Don't add to the buffer if we've decoded to an empty string chunk and
30250 // we're not in object mode
30251 if (!skipAdd) {
30252 // if we want the data now, just emit it.
30253 if (state.flowing && state.length === 0 && !state.sync) {
30254 stream.emit('data', chunk);
30255 stream.read(0);
9987f0c1 30256 } else {
cf6c2044
IC
30257 // update the buffer info.
30258 state.length += state.objectMode ? 1 : chunk.length;
30259 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30260
30261 if (state.needReadable) emitReadable(stream);
9987f0c1
IC
30262 }
30263 }
cf6c2044
IC
30264
30265 maybeReadMore(stream, state);
9987f0c1 30266 }
cf6c2044
IC
30267 } else if (!addToFront) {
30268 state.reading = false;
8b095871
IC
30269 }
30270
9987f0c1 30271 return needMoreData(state);
8b095871
IC
30272}
30273
9987f0c1
IC
30274// if it's past the high water mark, we can push in some more.
30275// Also, if we have no data yet, we can stand some
30276// more bytes. This is to work around cases where hwm=0,
30277// such as the repl. Also, if the push() triggered a
30278// readable event, and the user called read(largeNumber) such that
30279// needReadable was set, then we ought to push more, so that another
30280// 'readable' event will be triggered.
30281function needMoreData(state) {
30282 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
30283}
30284
9987f0c1
IC
30285// backwards compatibility.
30286Readable.prototype.setEncoding = function (enc) {
30287 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30288 this._readableState.decoder = new StringDecoder(enc);
30289 this._readableState.encoding = enc;
30290 return this;
30291};
8b095871 30292
9987f0c1
IC
30293// Don't raise the hwm > 8MB
30294var MAX_HWM = 0x800000;
30295function computeNewHighWaterMark(n) {
30296 if (n >= MAX_HWM) {
30297 n = MAX_HWM;
30298 } else {
30299 // Get the next highest power of 2 to prevent increasing hwm excessively in
30300 // tiny amounts
30301 n--;
30302 n |= n >>> 1;
30303 n |= n >>> 2;
30304 n |= n >>> 4;
30305 n |= n >>> 8;
30306 n |= n >>> 16;
30307 n++;
30308 }
30309 return n;
8b095871
IC
30310}
30311
9987f0c1
IC
30312// This function is designed to be inlinable, so please take care when making
30313// changes to the function body.
30314function howMuchToRead(n, state) {
30315 if (n <= 0 || state.length === 0 && state.ended) return 0;
30316 if (state.objectMode) return 1;
30317 if (n !== n) {
30318 // Only flow one buffer at a time
30319 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30320 }
30321 // If we're asking for more than the current hwm, then raise the hwm.
30322 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30323 if (n <= state.length) return n;
30324 // Don't have enough
30325 if (!state.ended) {
30326 state.needReadable = true;
30327 return 0;
30328 }
30329 return state.length;
8b095871
IC
30330}
30331
9987f0c1
IC
30332// you can override either this method, or the async _read(n) below.
30333Readable.prototype.read = function (n) {
30334 debug('read', n);
30335 n = parseInt(n, 10);
30336 var state = this._readableState;
30337 var nOrig = n;
8b095871 30338
9987f0c1
IC
30339 if (n !== 0) state.emittedReadable = false;
30340
30341 // if we're doing read(0) to trigger a readable event, but we
30342 // already have a bunch of data in the buffer, then just trigger
30343 // the 'readable' event and move on.
30344 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30345 debug('read: emitReadable', state.length, state.ended);
30346 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30347 return null;
8b095871 30348 }
8b095871 30349
9987f0c1 30350 n = howMuchToRead(n, state);
8b095871 30351
9987f0c1
IC
30352 // if we've ended, and we're now clear, then finish it up.
30353 if (n === 0 && state.ended) {
30354 if (state.length === 0) endReadable(this);
30355 return null;
30356 }
8b095871 30357
9987f0c1
IC
30358 // All the actual chunk generation logic needs to be
30359 // *below* the call to _read. The reason is that in certain
30360 // synthetic stream cases, such as passthrough streams, _read
30361 // may be a completely synchronous operation which may change
30362 // the state of the read buffer, providing enough data when
30363 // before there was *not* enough.
30364 //
30365 // So, the steps are:
30366 // 1. Figure out what the state of things will be after we do
30367 // a read from the buffer.
30368 //
30369 // 2. If that resulting state will trigger a _read, then call _read.
30370 // Note that this may be asynchronous, or synchronous. Yes, it is
30371 // deeply ugly to write APIs this way, but that still doesn't mean
30372 // that the Readable class should behave improperly, as streams are
30373 // designed to be sync/async agnostic.
30374 // Take note if the _read call is sync or async (ie, if the read call
30375 // has returned yet), so that we know whether or not it's safe to emit
30376 // 'readable' etc.
30377 //
30378 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 30379
9987f0c1
IC
30380 // if we need a readable event, then we need to do some reading.
30381 var doRead = state.needReadable;
30382 debug('need readable', doRead);
8b095871 30383
9987f0c1
IC
30384 // if we currently have less than the highWaterMark, then also read some
30385 if (state.length === 0 || state.length - n < state.highWaterMark) {
30386 doRead = true;
30387 debug('length less than watermark', doRead);
30388 }
8b095871 30389
9987f0c1
IC
30390 // however, if we've ended, then there's no point, and if we're already
30391 // reading, then it's unnecessary.
30392 if (state.ended || state.reading) {
30393 doRead = false;
30394 debug('reading or ended', doRead);
30395 } else if (doRead) {
30396 debug('do read');
30397 state.reading = true;
30398 state.sync = true;
30399 // if the length is currently zero, then we *need* a readable event.
30400 if (state.length === 0) state.needReadable = true;
30401 // call internal read method
30402 this._read(state.highWaterMark);
30403 state.sync = false;
30404 // If _read pushed data synchronously, then `reading` will be false,
30405 // and we need to re-evaluate how much data we can return to the user.
30406 if (!state.reading) n = howMuchToRead(nOrig, state);
30407 }
8b095871 30408
9987f0c1
IC
30409 var ret;
30410 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 30411
9987f0c1
IC
30412 if (ret === null) {
30413 state.needReadable = true;
30414 n = 0;
30415 } else {
30416 state.length -= n;
30417 }
8b095871 30418
9987f0c1
IC
30419 if (state.length === 0) {
30420 // If we have nothing in the buffer, then we want to know
30421 // as soon as we *do* get something into the buffer.
30422 if (!state.ended) state.needReadable = true;
8b095871 30423
9987f0c1
IC
30424 // If we tried to read() past the EOF, then emit end on the next tick.
30425 if (nOrig !== n && state.ended) endReadable(this);
30426 }
8b095871 30427
9987f0c1 30428 if (ret !== null) this.emit('data', ret);
8b095871 30429
9987f0c1
IC
30430 return ret;
30431};
8b095871 30432
cf6c2044
IC
30433function chunkInvalid(state, chunk) {
30434 var er = null;
30435 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30436 er = new TypeError('Invalid non-string/buffer chunk');
30437 }
30438 return er;
30439}
30440
9987f0c1
IC
30441function onEofChunk(stream, state) {
30442 if (state.ended) return;
30443 if (state.decoder) {
30444 var chunk = state.decoder.end();
30445 if (chunk && chunk.length) {
30446 state.buffer.push(chunk);
30447 state.length += state.objectMode ? 1 : chunk.length;
30448 }
30449 }
30450 state.ended = true;
8b095871 30451
9987f0c1
IC
30452 // emit 'readable' now to make sure it gets picked up.
30453 emitReadable(stream);
8b095871
IC
30454}
30455
9987f0c1
IC
30456// Don't emit readable right away in sync mode, because this can trigger
30457// another read() call => stack overflow. This way, it might trigger
30458// a nextTick recursion warning, but that's not so bad.
30459function emitReadable(stream) {
30460 var state = stream._readableState;
30461 state.needReadable = false;
30462 if (!state.emittedReadable) {
30463 debug('emitReadable', state.flowing);
30464 state.emittedReadable = true;
30465 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30466 }
8b095871
IC
30467}
30468
9987f0c1
IC
30469function emitReadable_(stream) {
30470 debug('emit readable');
30471 stream.emit('readable');
30472 flow(stream);
8b095871
IC
30473}
30474
9987f0c1
IC
30475// at this point, the user has presumably seen the 'readable' event,
30476// and called read() to consume some data. that may have triggered
30477// in turn another _read(n) call, in which case reading = true if
30478// it's in progress.
30479// However, if we're not ended, or reading, and the length < hwm,
30480// then go ahead and try to read some more preemptively.
30481function maybeReadMore(stream, state) {
30482 if (!state.readingMore) {
30483 state.readingMore = true;
30484 processNextTick(maybeReadMore_, stream, state);
30485 }
8b095871
IC
30486}
30487
9987f0c1
IC
30488function maybeReadMore_(stream, state) {
30489 var len = state.length;
30490 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30491 debug('maybeReadMore read 0');
30492 stream.read(0);
30493 if (len === state.length)
30494 // didn't get any data, stop spinning.
30495 break;else len = state.length;
30496 }
30497 state.readingMore = false;
8b095871
IC
30498}
30499
9987f0c1
IC
30500// abstract method. to be overridden in specific implementation classes.
30501// call cb(er, data) where data is <= n in length.
30502// for virtual (non-string, non-buffer) streams, "length" is somewhat
30503// arbitrary, and perhaps not very meaningful.
30504Readable.prototype._read = function (n) {
30505 this.emit('error', new Error('_read() is not implemented'));
30506};
8b095871 30507
9987f0c1
IC
30508Readable.prototype.pipe = function (dest, pipeOpts) {
30509 var src = this;
30510 var state = this._readableState;
30511
30512 switch (state.pipesCount) {
30513 case 0:
30514 state.pipes = dest;
30515 break;
30516 case 1:
30517 state.pipes = [state.pipes, dest];
30518 break;
30519 default:
30520 state.pipes.push(dest);
30521 break;
8b095871 30522 }
9987f0c1
IC
30523 state.pipesCount += 1;
30524 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 30525
9987f0c1 30526 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 30527
cf6c2044 30528 var endFn = doEnd ? onend : cleanup;
9987f0c1 30529 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 30530
9987f0c1 30531 dest.on('unpipe', onunpipe);
cf6c2044 30532 function onunpipe(readable) {
9987f0c1
IC
30533 debug('onunpipe');
30534 if (readable === src) {
cf6c2044 30535 cleanup();
9987f0c1 30536 }
8b095871
IC
30537 }
30538
9987f0c1
IC
30539 function onend() {
30540 debug('onend');
30541 dest.end();
30542 }
8b095871 30543
9987f0c1
IC
30544 // when the dest drains, it reduces the awaitDrain counter
30545 // on the source. This would be more elegant with a .once()
30546 // handler in flow(), but adding and removing repeatedly is
30547 // too slow.
30548 var ondrain = pipeOnDrain(src);
30549 dest.on('drain', ondrain);
8b095871 30550
9987f0c1
IC
30551 var cleanedUp = false;
30552 function cleanup() {
30553 debug('cleanup');
30554 // cleanup event handlers once the pipe is broken
30555 dest.removeListener('close', onclose);
30556 dest.removeListener('finish', onfinish);
30557 dest.removeListener('drain', ondrain);
30558 dest.removeListener('error', onerror);
30559 dest.removeListener('unpipe', onunpipe);
30560 src.removeListener('end', onend);
cf6c2044 30561 src.removeListener('end', cleanup);
9987f0c1 30562 src.removeListener('data', ondata);
8b095871 30563
9987f0c1
IC
30564 cleanedUp = true;
30565
30566 // if the reader is waiting for a drain event from this
30567 // specific writer, then it would cause it to never start
30568 // flowing again.
30569 // So, if this is awaiting a drain, then we just call it now.
30570 // If we don't know, then assume that we are waiting for one.
30571 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 30572 }
8b095871 30573
9987f0c1
IC
30574 // If the user pushes more data while we're writing to dest then we'll end up
30575 // in ondata again. However, we only want to increase awaitDrain once because
30576 // dest will only emit one 'drain' event for the multiple writes.
30577 // => Introduce a guard on increasing awaitDrain.
30578 var increasedAwaitDrain = false;
30579 src.on('data', ondata);
30580 function ondata(chunk) {
30581 debug('ondata');
30582 increasedAwaitDrain = false;
30583 var ret = dest.write(chunk);
30584 if (false === ret && !increasedAwaitDrain) {
30585 // If the user unpiped during `dest.write()`, it is possible
30586 // to get stuck in a permanently paused state if that write
30587 // also returned false.
30588 // => Check whether `dest` is still a piping destination.
30589 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30590 debug('false write response, pause', src._readableState.awaitDrain);
30591 src._readableState.awaitDrain++;
30592 increasedAwaitDrain = true;
30593 }
30594 src.pause();
30595 }
8b095871 30596 }
8b095871 30597
9987f0c1
IC
30598 // if the dest has an error, then stop piping into it.
30599 // however, don't suppress the throwing behavior for this.
30600 function onerror(er) {
30601 debug('onerror', er);
30602 unpipe();
30603 dest.removeListener('error', onerror);
30604 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 30605 }
8b095871 30606
9987f0c1
IC
30607 // Make sure our error handler is attached before userland ones.
30608 prependListener(dest, 'error', onerror);
30609
30610 // Both close and finish should trigger unpipe, but only once.
30611 function onclose() {
30612 dest.removeListener('finish', onfinish);
30613 unpipe();
8b095871 30614 }
9987f0c1
IC
30615 dest.once('close', onclose);
30616 function onfinish() {
30617 debug('onfinish');
30618 dest.removeListener('close', onclose);
30619 unpipe();
30620 }
30621 dest.once('finish', onfinish);
8b095871 30622
9987f0c1
IC
30623 function unpipe() {
30624 debug('unpipe');
30625 src.unpipe(dest);
8b095871 30626 }
8b095871 30627
9987f0c1
IC
30628 // tell the dest that it's being piped to
30629 dest.emit('pipe', src);
8b095871 30630
9987f0c1
IC
30631 // start the flow if it hasn't been started already.
30632 if (!state.flowing) {
30633 debug('pipe resume');
30634 src.resume();
8b095871
IC
30635 }
30636
9987f0c1
IC
30637 return dest;
30638};
8b095871 30639
9987f0c1
IC
30640function pipeOnDrain(src) {
30641 return function () {
30642 var state = src._readableState;
30643 debug('pipeOnDrain', state.awaitDrain);
30644 if (state.awaitDrain) state.awaitDrain--;
30645 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30646 state.flowing = true;
30647 flow(src);
30648 }
30649 };
8b095871
IC
30650}
30651
9987f0c1
IC
30652Readable.prototype.unpipe = function (dest) {
30653 var state = this._readableState;
8b095871 30654
9987f0c1
IC
30655 // if we're not piping anywhere, then do nothing.
30656 if (state.pipesCount === 0) return this;
8b095871 30657
9987f0c1
IC
30658 // just one destination. most common case.
30659 if (state.pipesCount === 1) {
30660 // passed in one, but it's not the right one.
30661 if (dest && dest !== state.pipes) return this;
30662
30663 if (!dest) dest = state.pipes;
30664
30665 // got a match.
30666 state.pipes = null;
30667 state.pipesCount = 0;
30668 state.flowing = false;
cf6c2044 30669 if (dest) dest.emit('unpipe', this);
9987f0c1 30670 return this;
8b095871
IC
30671 }
30672
9987f0c1 30673 // slow case. multiple pipe destinations.
8b095871 30674
9987f0c1
IC
30675 if (!dest) {
30676 // remove all.
30677 var dests = state.pipes;
30678 var len = state.pipesCount;
30679 state.pipes = null;
30680 state.pipesCount = 0;
30681 state.flowing = false;
8b095871 30682
9987f0c1 30683 for (var i = 0; i < len; i++) {
cf6c2044 30684 dests[i].emit('unpipe', this);
9987f0c1 30685 }return this;
8b095871 30686 }
8b095871 30687
9987f0c1
IC
30688 // try to find the right one.
30689 var index = indexOf(state.pipes, dest);
30690 if (index === -1) return this;
8b095871 30691
9987f0c1
IC
30692 state.pipes.splice(index, 1);
30693 state.pipesCount -= 1;
30694 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 30695
cf6c2044 30696 dest.emit('unpipe', this);
8b095871 30697
9987f0c1
IC
30698 return this;
30699};
8b095871 30700
9987f0c1
IC
30701// set up data events if they are asked for
30702// Ensure readable listeners eventually get something
30703Readable.prototype.on = function (ev, fn) {
30704 var res = Stream.prototype.on.call(this, ev, fn);
30705
30706 if (ev === 'data') {
30707 // Start flowing on next tick if stream isn't explicitly paused
30708 if (this._readableState.flowing !== false) this.resume();
30709 } else if (ev === 'readable') {
30710 var state = this._readableState;
30711 if (!state.endEmitted && !state.readableListening) {
30712 state.readableListening = state.needReadable = true;
30713 state.emittedReadable = false;
30714 if (!state.reading) {
30715 processNextTick(nReadingNextTick, this);
30716 } else if (state.length) {
cf6c2044 30717 emitReadable(this, state);
9987f0c1
IC
30718 }
30719 }
8b095871 30720 }
8b095871 30721
9987f0c1
IC
30722 return res;
30723};
30724Readable.prototype.addListener = Readable.prototype.on;
8b095871 30725
9987f0c1
IC
30726function nReadingNextTick(self) {
30727 debug('readable nexttick read 0');
30728 self.read(0);
8b095871
IC
30729}
30730
9987f0c1
IC
30731// pause() and resume() are remnants of the legacy readable stream API
30732// If the user uses them, then switch into old mode.
30733Readable.prototype.resume = function () {
30734 var state = this._readableState;
30735 if (!state.flowing) {
30736 debug('resume');
30737 state.flowing = true;
30738 resume(this, state);
30739 }
30740 return this;
30741};
30742
30743function resume(stream, state) {
30744 if (!state.resumeScheduled) {
30745 state.resumeScheduled = true;
30746 processNextTick(resume_, stream, state);
8b095871 30747 }
8b095871
IC
30748}
30749
9987f0c1
IC
30750function resume_(stream, state) {
30751 if (!state.reading) {
30752 debug('resume read 0');
30753 stream.read(0);
30754 }
30755
30756 state.resumeScheduled = false;
30757 state.awaitDrain = 0;
30758 stream.emit('resume');
30759 flow(stream);
30760 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
30761}
30762
9987f0c1
IC
30763Readable.prototype.pause = function () {
30764 debug('call pause flowing=%j', this._readableState.flowing);
30765 if (false !== this._readableState.flowing) {
30766 debug('pause');
30767 this._readableState.flowing = false;
30768 this.emit('pause');
30769 }
30770 return this;
30771};
30772
30773function flow(stream) {
30774 var state = stream._readableState;
30775 debug('flow', state.flowing);
30776 while (state.flowing && stream.read() !== null) {}
8b095871
IC
30777}
30778
9987f0c1
IC
30779// wrap an old-style stream as the async data source.
30780// This is *not* part of the readable stream interface.
30781// It is an ugly unfortunate mess of history.
30782Readable.prototype.wrap = function (stream) {
30783 var state = this._readableState;
30784 var paused = false;
8b095871 30785
9987f0c1
IC
30786 var self = this;
30787 stream.on('end', function () {
30788 debug('wrapped end');
30789 if (state.decoder && !state.ended) {
30790 var chunk = state.decoder.end();
30791 if (chunk && chunk.length) self.push(chunk);
30792 }
8b095871 30793
9987f0c1
IC
30794 self.push(null);
30795 });
8b095871 30796
9987f0c1
IC
30797 stream.on('data', function (chunk) {
30798 debug('wrapped data');
30799 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 30800
9987f0c1
IC
30801 // don't skip over falsy values in objectMode
30802 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 30803
9987f0c1
IC
30804 var ret = self.push(chunk);
30805 if (!ret) {
30806 paused = true;
30807 stream.pause();
8b095871 30808 }
9987f0c1
IC
30809 });
30810
30811 // proxy all the other methods.
30812 // important when wrapping filters and duplexes.
30813 for (var i in stream) {
30814 if (this[i] === undefined && typeof stream[i] === 'function') {
30815 this[i] = function (method) {
30816 return function () {
30817 return stream[method].apply(stream, arguments);
30818 };
30819 }(i);
8b095871 30820 }
8b095871
IC
30821 }
30822
9987f0c1
IC
30823 // proxy certain important events.
30824 for (var n = 0; n < kProxyEvents.length; n++) {
30825 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30826 }
8b095871 30827
9987f0c1
IC
30828 // when we try to consume some more bytes, simply unpause the
30829 // underlying stream.
30830 self._read = function (n) {
30831 debug('wrapped _read', n);
30832 if (paused) {
30833 paused = false;
30834 stream.resume();
30835 }
30836 };
8b095871 30837
9987f0c1
IC
30838 return self;
30839};
8b095871 30840
9987f0c1
IC
30841// exposed for testing purposes only.
30842Readable._fromList = fromList;
8b095871 30843
9987f0c1
IC
30844// Pluck off n bytes from an array of buffers.
30845// Length is the combined lengths of all the buffers in the list.
30846// This function is designed to be inlinable, so please take care when making
30847// changes to the function body.
30848function fromList(n, state) {
30849 // nothing buffered
30850 if (state.length === 0) return null;
8b095871 30851
9987f0c1
IC
30852 var ret;
30853 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30854 // read it all, truncate the list
30855 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);
30856 state.buffer.clear();
8b095871 30857 } else {
9987f0c1
IC
30858 // read part of list
30859 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
30860 }
30861
9987f0c1 30862 return ret;
8b095871
IC
30863}
30864
9987f0c1
IC
30865// Extracts only enough buffered data to satisfy the amount requested.
30866// This function is designed to be inlinable, so please take care when making
30867// changes to the function body.
30868function fromListPartial(n, list, hasStrings) {
30869 var ret;
30870 if (n < list.head.data.length) {
30871 // slice is the same for buffers and strings
30872 ret = list.head.data.slice(0, n);
30873 list.head.data = list.head.data.slice(n);
30874 } else if (n === list.head.data.length) {
30875 // first chunk is a perfect match
30876 ret = list.shift();
8b095871 30877 } else {
9987f0c1
IC
30878 // result spans more than one buffer
30879 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 30880 }
9987f0c1 30881 return ret;
8b095871
IC
30882}
30883
9987f0c1
IC
30884// Copies a specified amount of characters from the list of buffered data
30885// chunks.
30886// This function is designed to be inlinable, so please take care when making
30887// changes to the function body.
30888function copyFromBufferString(n, list) {
30889 var p = list.head;
30890 var c = 1;
30891 var ret = p.data;
30892 n -= ret.length;
30893 while (p = p.next) {
30894 var str = p.data;
30895 var nb = n > str.length ? str.length : n;
30896 if (nb === str.length) ret += str;else ret += str.slice(0, n);
30897 n -= nb;
30898 if (n === 0) {
30899 if (nb === str.length) {
30900 ++c;
30901 if (p.next) list.head = p.next;else list.head = list.tail = null;
30902 } else {
30903 list.head = p;
30904 p.data = str.slice(nb);
30905 }
30906 break;
30907 }
30908 ++c;
8b095871 30909 }
9987f0c1
IC
30910 list.length -= c;
30911 return ret;
8b095871
IC
30912}
30913
9987f0c1
IC
30914// Copies a specified amount of bytes from the list of buffered data chunks.
30915// This function is designed to be inlinable, so please take care when making
30916// changes to the function body.
30917function copyFromBuffer(n, list) {
cf6c2044 30918 var ret = bufferShim.allocUnsafe(n);
9987f0c1
IC
30919 var p = list.head;
30920 var c = 1;
30921 p.data.copy(ret);
30922 n -= p.data.length;
30923 while (p = p.next) {
30924 var buf = p.data;
30925 var nb = n > buf.length ? buf.length : n;
30926 buf.copy(ret, ret.length - n, 0, nb);
30927 n -= nb;
30928 if (n === 0) {
30929 if (nb === buf.length) {
30930 ++c;
30931 if (p.next) list.head = p.next;else list.head = list.tail = null;
30932 } else {
30933 list.head = p;
30934 p.data = buf.slice(nb);
8b095871 30935 }
9987f0c1 30936 break;
8b095871 30937 }
9987f0c1 30938 ++c;
8b095871 30939 }
9987f0c1
IC
30940 list.length -= c;
30941 return ret;
8b095871
IC
30942}
30943
9987f0c1
IC
30944function endReadable(stream) {
30945 var state = stream._readableState;
8b095871 30946
9987f0c1
IC
30947 // If we get here before consuming all the bytes, then that is a
30948 // bug in node. Should never happen.
30949 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 30950
9987f0c1
IC
30951 if (!state.endEmitted) {
30952 state.ended = true;
30953 processNextTick(endReadableNT, state, stream);
8b095871 30954 }
9987f0c1 30955}
8b095871 30956
9987f0c1
IC
30957function endReadableNT(state, stream) {
30958 // Check that we didn't get one last unshift.
30959 if (!state.endEmitted && state.length === 0) {
30960 state.endEmitted = true;
30961 stream.readable = false;
30962 stream.emit('end');
30963 }
8b095871
IC
30964}
30965
9987f0c1
IC
30966function forEach(xs, f) {
30967 for (var i = 0, l = xs.length; i < l; i++) {
30968 f(xs[i], i);
30969 }
8b095871
IC
30970}
30971
9987f0c1
IC
30972function indexOf(xs, x) {
30973 for (var i = 0, l = xs.length; i < l; i++) {
30974 if (xs[i] === x) return i;
8b095871 30975 }
9987f0c1 30976 return -1;
8b095871 30977}
cf6c2044
IC
30978}).call(this,require('_process'))
30979},{"./_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){
9987f0c1
IC
30980// a transform stream is a readable/writable stream where you do
30981// something with the data. Sometimes it's called a "filter",
30982// but that's not a great name for it, since that implies a thing where
30983// some bits pass through, and others are simply ignored. (That would
30984// be a valid example of a transform, of course.)
30985//
30986// While the output is causally related to the input, it's not a
30987// necessarily symmetric or synchronous transformation. For example,
30988// a zlib stream might take multiple plain-text writes(), and then
30989// emit a single compressed chunk some time in the future.
30990//
30991// Here's how this works:
30992//
30993// The Transform stream has all the aspects of the readable and writable
30994// stream classes. When you write(chunk), that calls _write(chunk,cb)
30995// internally, and returns false if there's a lot of pending writes
30996// buffered up. When you call read(), that calls _read(n) until
30997// there's enough pending readable data buffered up.
30998//
30999// In a transform stream, the written data is placed in a buffer. When
31000// _read(n) is called, it transforms the queued up data, calling the
31001// buffered _write cb's as it consumes chunks. If consuming a single
31002// written chunk would result in multiple output chunks, then the first
31003// outputted bit calls the readcb, and subsequent chunks just go into
31004// the read buffer, and will cause it to emit 'readable' if necessary.
31005//
31006// This way, back-pressure is actually determined by the reading side,
31007// since _read has to be called to start processing a new chunk. However,
31008// a pathological inflate type of transform can cause excessive buffering
31009// here. For example, imagine a stream where every byte of input is
31010// interpreted as an integer from 0-255, and then results in that many
31011// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31012// 1kb of data being output. In this case, you could write a very small
31013// amount of input, and end up with a very large amount of output. In
31014// such a pathological inflating mechanism, there'd be no way to tell
31015// the system to stop doing the transform. A single 4MB write could
31016// cause the system to run out of memory.
31017//
31018// However, even in such a pathological case, only a single written chunk
31019// would be consumed, and then the rest would wait (un-transformed) until
31020// the results of the previous transformed chunk were consumed.
8b095871 31021
9987f0c1 31022'use strict';
8b095871 31023
9987f0c1 31024module.exports = Transform;
8b095871 31025
9987f0c1 31026var Duplex = require('./_stream_duplex');
8b095871 31027
9987f0c1
IC
31028/*<replacement>*/
31029var util = require('core-util-is');
31030util.inherits = require('inherits');
31031/*</replacement>*/
8b095871 31032
9987f0c1 31033util.inherits(Transform, Duplex);
8b095871 31034
9987f0c1
IC
31035function TransformState(stream) {
31036 this.afterTransform = function (er, data) {
31037 return afterTransform(stream, er, data);
31038 };
8b095871 31039
9987f0c1
IC
31040 this.needTransform = false;
31041 this.transforming = false;
31042 this.writecb = null;
31043 this.writechunk = null;
31044 this.writeencoding = null;
31045}
8b095871 31046
9987f0c1
IC
31047function afterTransform(stream, er, data) {
31048 var ts = stream._transformState;
31049 ts.transforming = false;
8b095871 31050
9987f0c1 31051 var cb = ts.writecb;
8b095871 31052
cf6c2044 31053 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
8b095871 31054
9987f0c1
IC
31055 ts.writechunk = null;
31056 ts.writecb = null;
8b095871 31057
9987f0c1 31058 if (data !== null && data !== undefined) stream.push(data);
8b095871 31059
9987f0c1 31060 cb(er);
8b095871 31061
9987f0c1
IC
31062 var rs = stream._readableState;
31063 rs.reading = false;
31064 if (rs.needReadable || rs.length < rs.highWaterMark) {
31065 stream._read(rs.highWaterMark);
31066 }
31067}
8b095871 31068
9987f0c1
IC
31069function Transform(options) {
31070 if (!(this instanceof Transform)) return new Transform(options);
8b095871 31071
9987f0c1 31072 Duplex.call(this, options);
8b095871 31073
9987f0c1 31074 this._transformState = new TransformState(this);
8b095871 31075
9987f0c1 31076 var stream = this;
8b095871 31077
9987f0c1
IC
31078 // start out asking for a readable event once data is transformed.
31079 this._readableState.needReadable = true;
8b095871 31080
9987f0c1
IC
31081 // we have implemented the _read method, and done the other things
31082 // that Readable wants before the first _read call, so unset the
31083 // sync guard flag.
31084 this._readableState.sync = false;
8b095871 31085
9987f0c1
IC
31086 if (options) {
31087 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 31088
9987f0c1 31089 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 31090 }
8b095871 31091
9987f0c1
IC
31092 // When the writable side finishes, then flush out anything remaining.
31093 this.once('prefinish', function () {
31094 if (typeof this._flush === 'function') this._flush(function (er, data) {
31095 done(stream, er, data);
31096 });else done(stream);
31097 });
31098}
8b095871 31099
9987f0c1
IC
31100Transform.prototype.push = function (chunk, encoding) {
31101 this._transformState.needTransform = false;
31102 return Duplex.prototype.push.call(this, chunk, encoding);
31103};
8b095871 31104
9987f0c1
IC
31105// This is the part where you do stuff!
31106// override this function in implementation classes.
31107// 'chunk' is an input chunk.
31108//
31109// Call `push(newChunk)` to pass along transformed output
31110// to the readable side. You may call 'push' zero or more times.
31111//
31112// Call `cb(err)` when you are done with this chunk. If you pass
31113// an error, then that'll put the hurt on the whole operation. If you
31114// never call cb(), then you'll never get another chunk.
31115Transform.prototype._transform = function (chunk, encoding, cb) {
31116 throw new Error('_transform() is not implemented');
31117};
8b095871 31118
9987f0c1
IC
31119Transform.prototype._write = function (chunk, encoding, cb) {
31120 var ts = this._transformState;
31121 ts.writecb = cb;
31122 ts.writechunk = chunk;
31123 ts.writeencoding = encoding;
31124 if (!ts.transforming) {
31125 var rs = this._readableState;
31126 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 31127 }
9987f0c1 31128};
8b095871 31129
9987f0c1
IC
31130// Doesn't matter what the args are here.
31131// _transform does all the work.
31132// That we got here means that the readable side wants more data.
31133Transform.prototype._read = function (n) {
31134 var ts = this._transformState;
8b095871 31135
9987f0c1
IC
31136 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31137 ts.transforming = true;
31138 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31139 } else {
31140 // mark that we need a transform, so that any data that comes in
31141 // will get processed, now that we've asked for it.
31142 ts.needTransform = true;
31143 }
31144};
8b095871 31145
9987f0c1
IC
31146function done(stream, er, data) {
31147 if (er) return stream.emit('error', er);
8b095871 31148
9987f0c1 31149 if (data !== null && data !== undefined) stream.push(data);
8b095871 31150
9987f0c1
IC
31151 // if there's nothing in the write buffer, then that means
31152 // that nothing more will ever be provided
31153 var ws = stream._writableState;
31154 var ts = stream._transformState;
8b095871 31155
9987f0c1 31156 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 31157
9987f0c1
IC
31158 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31159
31160 return stream.push(null);
31161}
cf6c2044
IC
31162},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31163(function (process){
9987f0c1
IC
31164// A bit simpler than readable streams.
31165// Implement an async ._write(chunk, encoding, cb), and it'll handle all
31166// the drain event emission and buffering.
31167
31168'use strict';
31169
cf6c2044 31170module.exports = Writable;
9987f0c1 31171
cf6c2044 31172/*<replacement>*/
9987f0c1
IC
31173var processNextTick = require('process-nextick-args');
31174/*</replacement>*/
31175
9987f0c1
IC
31176/*<replacement>*/
31177var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31178/*</replacement>*/
8b095871 31179
9987f0c1
IC
31180/*<replacement>*/
31181var Duplex;
31182/*</replacement>*/
31183
31184Writable.WritableState = WritableState;
31185
31186/*<replacement>*/
31187var util = require('core-util-is');
31188util.inherits = require('inherits');
31189/*</replacement>*/
31190
31191/*<replacement>*/
31192var internalUtil = {
31193 deprecate: require('util-deprecate')
8b095871 31194};
9987f0c1 31195/*</replacement>*/
8b095871 31196
9987f0c1
IC
31197/*<replacement>*/
31198var Stream = require('./internal/streams/stream');
31199/*</replacement>*/
8b095871 31200
cf6c2044 31201var Buffer = require('buffer').Buffer;
9987f0c1 31202/*<replacement>*/
cf6c2044 31203var bufferShim = require('buffer-shims');
9987f0c1 31204/*</replacement>*/
8b095871 31205
9987f0c1 31206util.inherits(Writable, Stream);
8b095871 31207
9987f0c1 31208function nop() {}
8b095871 31209
cf6c2044
IC
31210function WriteReq(chunk, encoding, cb) {
31211 this.chunk = chunk;
31212 this.encoding = encoding;
31213 this.callback = cb;
31214 this.next = null;
31215}
31216
9987f0c1
IC
31217function WritableState(options, stream) {
31218 Duplex = Duplex || require('./_stream_duplex');
8b095871 31219
9987f0c1 31220 options = options || {};
8b095871 31221
9987f0c1
IC
31222 // object stream flag to indicate whether or not this stream
31223 // contains buffers or objects.
31224 this.objectMode = !!options.objectMode;
8b095871 31225
9987f0c1 31226 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 31227
9987f0c1
IC
31228 // the point at which write() starts returning false
31229 // Note: 0 is a valid value, means that we always return false if
31230 // the entire buffer is not flushed immediately on write()
31231 var hwm = options.highWaterMark;
31232 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31233 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 31234
9987f0c1 31235 // cast to ints.
cf6c2044 31236 this.highWaterMark = ~~this.highWaterMark;
8b095871 31237
9987f0c1
IC
31238 // drain event flag.
31239 this.needDrain = false;
31240 // at the start of calling end()
31241 this.ending = false;
31242 // when end() has been called, and returned
31243 this.ended = false;
31244 // when 'finish' is emitted
31245 this.finished = false;
8b095871 31246
9987f0c1
IC
31247 // should we decode strings into buffers before passing to _write?
31248 // this is here so that some node-core streams can optimize string
31249 // handling at a lower level.
31250 var noDecode = options.decodeStrings === false;
31251 this.decodeStrings = !noDecode;
8b095871 31252
9987f0c1
IC
31253 // Crypto is kind of old and crusty. Historically, its default string
31254 // encoding is 'binary' so we have to make this configurable.
31255 // Everything else in the universe uses 'utf8', though.
31256 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 31257
9987f0c1
IC
31258 // not an actual buffer we keep track of, but a measurement
31259 // of how much we're waiting to get pushed to some underlying
31260 // socket or file.
31261 this.length = 0;
8b095871 31262
9987f0c1
IC
31263 // a flag to see when we're in the middle of a write.
31264 this.writing = false;
8b095871 31265
9987f0c1
IC
31266 // when true all writes will be buffered until .uncork() call
31267 this.corked = 0;
8b095871 31268
9987f0c1
IC
31269 // a flag to be able to tell if the onwrite cb is called immediately,
31270 // or on a later tick. We set this to true at first, because any
31271 // actions that shouldn't happen until "later" should generally also
31272 // not happen before the first write call.
31273 this.sync = true;
8b095871 31274
9987f0c1
IC
31275 // a flag to know if we're processing previously buffered items, which
31276 // may call the _write() callback in the same tick, so that we don't
31277 // end up in an overlapped onwrite situation.
31278 this.bufferProcessing = false;
8b095871 31279
9987f0c1
IC
31280 // the callback that's passed to _write(chunk,cb)
31281 this.onwrite = function (er) {
31282 onwrite(stream, er);
31283 };
8b095871 31284
9987f0c1
IC
31285 // the callback that the user supplies to write(chunk,encoding,cb)
31286 this.writecb = null;
8b095871 31287
9987f0c1
IC
31288 // the amount that is being written when _write is called.
31289 this.writelen = 0;
8b095871 31290
9987f0c1
IC
31291 this.bufferedRequest = null;
31292 this.lastBufferedRequest = null;
8b095871 31293
9987f0c1
IC
31294 // number of pending user-supplied write callbacks
31295 // this must be 0 before 'finish' can be emitted
31296 this.pendingcb = 0;
8b095871 31297
9987f0c1
IC
31298 // emit prefinish if the only thing we're waiting for is _write cbs
31299 // This is relevant for synchronous Transform streams
31300 this.prefinished = false;
8b095871 31301
9987f0c1
IC
31302 // True if the error was already emitted and should not be thrown again
31303 this.errorEmitted = false;
8b095871 31304
9987f0c1
IC
31305 // count buffered requests
31306 this.bufferedRequestCount = 0;
8b095871 31307
9987f0c1
IC
31308 // allocate the first CorkedRequest, there is always
31309 // one allocated and free to use, and we maintain at most two
31310 this.corkedRequestsFree = new CorkedRequest(this);
31311}
8b095871 31312
9987f0c1
IC
31313WritableState.prototype.getBuffer = function getBuffer() {
31314 var current = this.bufferedRequest;
31315 var out = [];
31316 while (current) {
31317 out.push(current);
31318 current = current.next;
31319 }
31320 return out;
31321};
31322
31323(function () {
31324 try {
31325 Object.defineProperty(WritableState.prototype, 'buffer', {
31326 get: internalUtil.deprecate(function () {
31327 return this.getBuffer();
cf6c2044 31328 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
9987f0c1
IC
31329 });
31330 } catch (_) {}
31331})();
31332
31333// Test _writableState for inheritance to account for Duplex streams,
31334// whose prototype chain only points to Readable.
31335var realHasInstance;
31336if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31337 realHasInstance = Function.prototype[Symbol.hasInstance];
31338 Object.defineProperty(Writable, Symbol.hasInstance, {
31339 value: function (object) {
31340 if (realHasInstance.call(this, object)) return true;
31341
31342 return object && object._writableState instanceof WritableState;
8b095871 31343 }
9987f0c1
IC
31344 });
31345} else {
31346 realHasInstance = function (object) {
31347 return object instanceof this;
31348 };
31349}
8b095871 31350
9987f0c1
IC
31351function Writable(options) {
31352 Duplex = Duplex || require('./_stream_duplex');
31353
31354 // Writable ctor is applied to Duplexes, too.
31355 // `realHasInstance` is necessary because using plain `instanceof`
31356 // would return false, as no `_writableState` property is attached.
31357
31358 // Trying to use the custom `instanceof` for Writable here will also break the
31359 // Node.js LazyTransform implementation, which has a non-trivial getter for
31360 // `_writableState` that would lead to infinite recursion.
31361 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31362 return new Writable(options);
8b095871
IC
31363 }
31364
9987f0c1
IC
31365 this._writableState = new WritableState(options, this);
31366
31367 // legacy.
31368 this.writable = true;
31369
31370 if (options) {
31371 if (typeof options.write === 'function') this._write = options.write;
31372
31373 if (typeof options.writev === 'function') this._writev = options.writev;
9987f0c1
IC
31374 }
31375
31376 Stream.call(this);
31377}
31378
31379// Otherwise people can pipe Writable streams, which is just wrong.
31380Writable.prototype.pipe = function () {
31381 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
31382};
31383
9987f0c1
IC
31384function writeAfterEnd(stream, cb) {
31385 var er = new Error('write after end');
31386 // TODO: defer error events consistently everywhere, not just the cb
31387 stream.emit('error', er);
31388 processNextTick(cb, er);
31389}
8b095871 31390
9987f0c1
IC
31391// Checks that a user-supplied chunk is valid, especially for the particular
31392// mode the stream is in. Currently this means that `null` is never accepted
31393// and undefined/non-string values are only allowed in object mode.
31394function validChunk(stream, state, chunk, cb) {
31395 var valid = true;
31396 var er = false;
8b095871 31397
9987f0c1
IC
31398 if (chunk === null) {
31399 er = new TypeError('May not write null values to stream');
31400 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31401 er = new TypeError('Invalid non-string/buffer chunk');
31402 }
31403 if (er) {
31404 stream.emit('error', er);
31405 processNextTick(cb, er);
31406 valid = false;
8b095871 31407 }
9987f0c1
IC
31408 return valid;
31409}
8b095871 31410
9987f0c1
IC
31411Writable.prototype.write = function (chunk, encoding, cb) {
31412 var state = this._writableState;
31413 var ret = false;
cf6c2044 31414 var isBuf = Buffer.isBuffer(chunk);
8b095871 31415
9987f0c1
IC
31416 if (typeof encoding === 'function') {
31417 cb = encoding;
31418 encoding = null;
31419 }
8b095871 31420
9987f0c1
IC
31421 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31422
31423 if (typeof cb !== 'function') cb = nop;
31424
31425 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31426 state.pendingcb++;
31427 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 31428 }
8b095871 31429
9987f0c1 31430 return ret;
8b095871
IC
31431};
31432
9987f0c1
IC
31433Writable.prototype.cork = function () {
31434 var state = this._writableState;
31435
31436 state.corked++;
8b095871
IC
31437};
31438
9987f0c1
IC
31439Writable.prototype.uncork = function () {
31440 var state = this._writableState;
31441
31442 if (state.corked) {
31443 state.corked--;
31444
31445 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31446 }
8b095871
IC
31447};
31448
9987f0c1
IC
31449Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31450 // node::ParseEncoding() requires lower case.
31451 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31452 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);
31453 this._writableState.defaultEncoding = encoding;
31454 return this;
31455};
8b095871 31456
9987f0c1
IC
31457function decodeChunk(state, chunk, encoding) {
31458 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
cf6c2044 31459 chunk = bufferShim.from(chunk, encoding);
9987f0c1
IC
31460 }
31461 return chunk;
8b095871
IC
31462}
31463
9987f0c1
IC
31464// if we're already writing something, then just put this
31465// in the queue, and wait our turn. Otherwise, call _write
31466// If we return false, then we need a drain event, so set that flag.
31467function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31468 if (!isBuf) {
cf6c2044
IC
31469 chunk = decodeChunk(state, chunk, encoding);
31470 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
9987f0c1
IC
31471 }
31472 var len = state.objectMode ? 1 : chunk.length;
8b095871 31473
9987f0c1 31474 state.length += len;
8b095871 31475
9987f0c1
IC
31476 var ret = state.length < state.highWaterMark;
31477 // we must ensure that previous needDrain will not be reset to false.
31478 if (!ret) state.needDrain = true;
31479
31480 if (state.writing || state.corked) {
31481 var last = state.lastBufferedRequest;
cf6c2044 31482 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
9987f0c1
IC
31483 if (last) {
31484 last.next = state.lastBufferedRequest;
31485 } else {
31486 state.bufferedRequest = state.lastBufferedRequest;
31487 }
31488 state.bufferedRequestCount += 1;
31489 } else {
31490 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 31491 }
9987f0c1
IC
31492
31493 return ret;
8b095871
IC
31494}
31495
9987f0c1
IC
31496function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31497 state.writelen = len;
31498 state.writecb = cb;
31499 state.writing = true;
31500 state.sync = true;
31501 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31502 state.sync = false;
31503}
8b095871 31504
9987f0c1
IC
31505function onwriteError(stream, state, sync, er, cb) {
31506 --state.pendingcb;
cf6c2044 31507 if (sync) processNextTick(cb, er);else cb(er);
8b095871 31508
cf6c2044
IC
31509 stream._writableState.errorEmitted = true;
31510 stream.emit('error', er);
9987f0c1 31511}
8b095871 31512
9987f0c1
IC
31513function onwriteStateUpdate(state) {
31514 state.writing = false;
31515 state.writecb = null;
31516 state.length -= state.writelen;
31517 state.writelen = 0;
8b095871
IC
31518}
31519
9987f0c1
IC
31520function onwrite(stream, er) {
31521 var state = stream._writableState;
31522 var sync = state.sync;
31523 var cb = state.writecb;
8b095871 31524
9987f0c1 31525 onwriteStateUpdate(state);
8b095871 31526
9987f0c1
IC
31527 if (er) onwriteError(stream, state, sync, er, cb);else {
31528 // Check if we're actually ready to finish, but don't emit yet
31529 var finished = needFinish(state);
31530
31531 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31532 clearBuffer(stream, state);
8b095871 31533 }
9987f0c1
IC
31534
31535 if (sync) {
31536 /*<replacement>*/
31537 asyncWrite(afterWrite, stream, state, finished, cb);
31538 /*</replacement>*/
31539 } else {
31540 afterWrite(stream, state, finished, cb);
8b095871 31541 }
9987f0c1
IC
31542 }
31543}
8b095871 31544
9987f0c1
IC
31545function afterWrite(stream, state, finished, cb) {
31546 if (!finished) onwriteDrain(stream, state);
31547 state.pendingcb--;
31548 cb();
31549 finishMaybe(stream, state);
8b095871 31550}
8b095871 31551
9987f0c1
IC
31552// Must force callback to be called on nextTick, so that we don't
31553// emit 'drain' before the write() consumer gets the 'false' return
31554// value, and has a chance to attach a 'drain' listener.
31555function onwriteDrain(stream, state) {
31556 if (state.length === 0 && state.needDrain) {
31557 state.needDrain = false;
31558 stream.emit('drain');
31559 }
31560}
8b095871 31561
9987f0c1
IC
31562// if there's something in the buffer waiting, then process it
31563function clearBuffer(stream, state) {
31564 state.bufferProcessing = true;
31565 var entry = state.bufferedRequest;
8b095871 31566
9987f0c1
IC
31567 if (stream._writev && entry && entry.next) {
31568 // Fast case, write everything using _writev()
31569 var l = state.bufferedRequestCount;
31570 var buffer = new Array(l);
31571 var holder = state.corkedRequestsFree;
31572 holder.entry = entry;
8b095871 31573
9987f0c1 31574 var count = 0;
9987f0c1
IC
31575 while (entry) {
31576 buffer[count] = entry;
9987f0c1
IC
31577 entry = entry.next;
31578 count += 1;
31579 }
8b095871 31580
9987f0c1 31581 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 31582
9987f0c1
IC
31583 // doWrite is almost always async, defer these to save a bit of time
31584 // as the hot path ends with doWrite
31585 state.pendingcb++;
31586 state.lastBufferedRequest = null;
31587 if (holder.next) {
31588 state.corkedRequestsFree = holder.next;
31589 holder.next = null;
31590 } else {
31591 state.corkedRequestsFree = new CorkedRequest(state);
31592 }
31593 } else {
31594 // Slow case, write chunks one-by-one
31595 while (entry) {
31596 var chunk = entry.chunk;
31597 var encoding = entry.encoding;
31598 var cb = entry.callback;
31599 var len = state.objectMode ? 1 : chunk.length;
8b095871 31600
9987f0c1
IC
31601 doWrite(stream, state, false, len, chunk, encoding, cb);
31602 entry = entry.next;
31603 // if we didn't call the onwrite immediately, then
31604 // it means that we need to wait until it does.
31605 // also, that means that the chunk and cb are currently
31606 // being processed, so move the buffer counter past them.
31607 if (state.writing) {
31608 break;
31609 }
31610 }
8b095871 31611
9987f0c1
IC
31612 if (entry === null) state.lastBufferedRequest = null;
31613 }
8b095871 31614
9987f0c1
IC
31615 state.bufferedRequestCount = 0;
31616 state.bufferedRequest = entry;
31617 state.bufferProcessing = false;
8b095871 31618}
8b095871 31619
9987f0c1
IC
31620Writable.prototype._write = function (chunk, encoding, cb) {
31621 cb(new Error('_write() is not implemented'));
31622};
8b095871 31623
9987f0c1 31624Writable.prototype._writev = null;
8b095871 31625
9987f0c1
IC
31626Writable.prototype.end = function (chunk, encoding, cb) {
31627 var state = this._writableState;
8b095871 31628
9987f0c1
IC
31629 if (typeof chunk === 'function') {
31630 cb = chunk;
31631 chunk = null;
31632 encoding = null;
31633 } else if (typeof encoding === 'function') {
31634 cb = encoding;
31635 encoding = null;
31636 }
8b095871 31637
9987f0c1 31638 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 31639
9987f0c1
IC
31640 // .end() fully uncorks
31641 if (state.corked) {
31642 state.corked = 1;
31643 this.uncork();
31644 }
8b095871 31645
9987f0c1
IC
31646 // ignore unnecessary end() calls.
31647 if (!state.ending && !state.finished) endWritable(this, state, cb);
31648};
8b095871 31649
9987f0c1
IC
31650function needFinish(state) {
31651 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31652}
cf6c2044
IC
31653
31654function prefinish(stream, state) {
31655 if (!state.prefinished) {
9987f0c1
IC
31656 state.prefinished = true;
31657 stream.emit('prefinish');
9987f0c1 31658 }
8b095871
IC
31659}
31660
9987f0c1
IC
31661function finishMaybe(stream, state) {
31662 var need = needFinish(state);
31663 if (need) {
9987f0c1 31664 if (state.pendingcb === 0) {
cf6c2044 31665 prefinish(stream, state);
9987f0c1
IC
31666 state.finished = true;
31667 stream.emit('finish');
cf6c2044
IC
31668 } else {
31669 prefinish(stream, state);
9987f0c1
IC
31670 }
31671 }
31672 return need;
8b095871
IC
31673}
31674
9987f0c1
IC
31675function endWritable(stream, state, cb) {
31676 state.ending = true;
31677 finishMaybe(stream, state);
31678 if (cb) {
31679 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 31680 }
9987f0c1
IC
31681 state.ended = true;
31682 stream.writable = false;
8b095871
IC
31683}
31684
cf6c2044
IC
31685// It seems a linked list but it is not
31686// there will be only 2 of these for each stream
31687function CorkedRequest(state) {
31688 var _this = this;
8b095871 31689
cf6c2044
IC
31690 this.next = null;
31691 this.entry = null;
31692 this.finish = function (err) {
31693 var entry = _this.entry;
31694 _this.entry = null;
31695 while (entry) {
31696 var cb = entry.callback;
31697 state.pendingcb--;
31698 cb(err);
31699 entry = entry.next;
9987f0c1 31700 }
cf6c2044
IC
31701 if (state.corkedRequestsFree) {
31702 state.corkedRequestsFree.next = _this;
31703 } else {
31704 state.corkedRequestsFree = _this;
9987f0c1 31705 }
cf6c2044
IC
31706 };
31707}
31708}).call(this,require('_process'))
31709},{"./_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){
9987f0c1 31710'use strict';
8b095871 31711
cf6c2044 31712var Buffer = require('buffer').Buffer;
8b095871 31713/*<replacement>*/
cf6c2044 31714var bufferShim = require('buffer-shims');
9987f0c1 31715/*</replacement>*/
8b095871 31716
cf6c2044 31717module.exports = BufferList;
8b095871 31718
cf6c2044
IC
31719function BufferList() {
31720 this.head = null;
31721 this.tail = null;
31722 this.length = 0;
31723}
8b095871 31724
cf6c2044
IC
31725BufferList.prototype.push = function (v) {
31726 var entry = { data: v, next: null };
31727 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31728 this.tail = entry;
31729 ++this.length;
31730};
8b095871 31731
cf6c2044
IC
31732BufferList.prototype.unshift = function (v) {
31733 var entry = { data: v, next: this.head };
31734 if (this.length === 0) this.tail = entry;
31735 this.head = entry;
31736 ++this.length;
31737};
9987f0c1 31738
cf6c2044
IC
31739BufferList.prototype.shift = function () {
31740 if (this.length === 0) return;
31741 var ret = this.head.data;
31742 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31743 --this.length;
31744 return ret;
31745};
8b095871 31746
cf6c2044
IC
31747BufferList.prototype.clear = function () {
31748 this.head = this.tail = null;
31749 this.length = 0;
31750};
8b095871 31751
cf6c2044
IC
31752BufferList.prototype.join = function (s) {
31753 if (this.length === 0) return '';
31754 var p = this.head;
31755 var ret = '' + p.data;
31756 while (p = p.next) {
31757 ret += s + p.data;
31758 }return ret;
31759};
8b095871 31760
cf6c2044
IC
31761BufferList.prototype.concat = function (n) {
31762 if (this.length === 0) return bufferShim.alloc(0);
31763 if (this.length === 1) return this.head.data;
31764 var ret = bufferShim.allocUnsafe(n >>> 0);
31765 var p = this.head;
31766 var i = 0;
31767 while (p) {
31768 p.data.copy(ret, i);
31769 i += p.data.length;
31770 p = p.next;
9987f0c1 31771 }
cf6c2044
IC
31772 return ret;
31773};
31774},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31775module.exports = require('events').EventEmitter;
8b095871 31776
cf6c2044
IC
31777},{"events":7}],22:[function(require,module,exports){
31778'use strict';
8b095871 31779
cf6c2044 31780var Buffer = require('safe-buffer').Buffer;
8b095871 31781
cf6c2044
IC
31782var isEncoding = Buffer.isEncoding || function (encoding) {
31783 encoding = '' + encoding;
31784 switch (encoding && encoding.toLowerCase()) {
31785 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':
31786 return true;
31787 default:
31788 return false;
9987f0c1 31789 }
cf6c2044 31790};
8b095871 31791
cf6c2044
IC
31792function _normalizeEncoding(enc) {
31793 if (!enc) return 'utf8';
31794 var retried;
31795 while (true) {
31796 switch (enc) {
31797 case 'utf8':
31798 case 'utf-8':
31799 return 'utf8';
31800 case 'ucs2':
31801 case 'ucs-2':
31802 case 'utf16le':
31803 case 'utf-16le':
31804 return 'utf16le';
31805 case 'latin1':
31806 case 'binary':
31807 return 'latin1';
31808 case 'base64':
31809 case 'ascii':
31810 case 'hex':
31811 return enc;
31812 default:
31813 if (retried) return; // undefined
31814 enc = ('' + enc).toLowerCase();
31815 retried = true;
9987f0c1 31816 }
9987f0c1 31817 }
cf6c2044 31818};
8b095871 31819
cf6c2044
IC
31820// Do not cache `Buffer.isEncoding` when checking encoding names as some
31821// modules monkey-patch it to support additional encodings
31822function normalizeEncoding(enc) {
31823 var nenc = _normalizeEncoding(enc);
31824 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31825 return nenc || enc;
9987f0c1 31826}
8b095871 31827
cf6c2044
IC
31828// StringDecoder provides an interface for efficiently splitting a series of
31829// buffers into a series of JS strings without breaking apart multi-byte
31830// characters.
31831exports.StringDecoder = StringDecoder;
31832function StringDecoder(encoding) {
31833 this.encoding = normalizeEncoding(encoding);
31834 var nb;
31835 switch (this.encoding) {
31836 case 'utf16le':
31837 this.text = utf16Text;
31838 this.end = utf16End;
31839 nb = 4;
31840 break;
31841 case 'utf8':
31842 this.fillLast = utf8FillLast;
31843 nb = 4;
31844 break;
31845 case 'base64':
31846 this.text = base64Text;
31847 this.end = base64End;
31848 nb = 3;
31849 break;
31850 default:
31851 this.write = simpleWrite;
31852 this.end = simpleEnd;
31853 return;
31854 }
31855 this.lastNeed = 0;
31856 this.lastTotal = 0;
31857 this.lastChar = Buffer.allocUnsafe(nb);
9987f0c1 31858}
8b095871 31859
cf6c2044
IC
31860StringDecoder.prototype.write = function (buf) {
31861 if (buf.length === 0) return '';
31862 var r;
31863 var i;
31864 if (this.lastNeed) {
31865 r = this.fillLast(buf);
31866 if (r === undefined) return '';
31867 i = this.lastNeed;
31868 this.lastNeed = 0;
31869 } else {
31870 i = 0;
31871 }
31872 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
31873 return r || '';
9987f0c1 31874};
8b095871 31875
cf6c2044 31876StringDecoder.prototype.end = utf8End;
8b095871 31877
cf6c2044
IC
31878// Returns only complete characters in a Buffer
31879StringDecoder.prototype.text = utf8Text;
8b095871 31880
cf6c2044
IC
31881// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
31882StringDecoder.prototype.fillLast = function (buf) {
31883 if (this.lastNeed <= buf.length) {
31884 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
31885 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
9987f0c1 31886 }
cf6c2044
IC
31887 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
31888 this.lastNeed -= buf.length;
31889};
8b095871 31890
cf6c2044
IC
31891// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
31892// continuation byte.
31893function utf8CheckByte(byte) {
31894 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;
31895 return -1;
9987f0c1 31896}
8b095871 31897
cf6c2044
IC
31898// Checks at most 3 bytes at the end of a Buffer in order to detect an
31899// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
31900// needed to complete the UTF-8 character (if applicable) are returned.
31901function utf8CheckIncomplete(self, buf, i) {
31902 var j = buf.length - 1;
31903 if (j < i) return 0;
31904 var nb = utf8CheckByte(buf[j]);
31905 if (nb >= 0) {
31906 if (nb > 0) self.lastNeed = nb - 1;
31907 return nb;
9987f0c1
IC
31908 }
31909 if (--j < i) return 0;
31910 nb = utf8CheckByte(buf[j]);
31911 if (nb >= 0) {
31912 if (nb > 0) self.lastNeed = nb - 2;
31913 return nb;
31914 }
31915 if (--j < i) return 0;
31916 nb = utf8CheckByte(buf[j]);
31917 if (nb >= 0) {
31918 if (nb > 0) {
31919 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 31920 }
9987f0c1 31921 return nb;
8b095871 31922 }
9987f0c1
IC
31923 return 0;
31924}
8b095871 31925
9987f0c1
IC
31926// Validates as many continuation bytes for a multi-byte UTF-8 character as
31927// needed or are available. If we see a non-continuation byte where we expect
31928// one, we "replace" the validated continuation bytes we've seen so far with
31929// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
31930// behavior. The continuation byte check is included three times in the case
31931// where all of the continuation bytes for a character exist in the same buffer.
31932// It is also done this way as a slight performance increase instead of using a
31933// loop.
31934function utf8CheckExtraBytes(self, buf, p) {
31935 if ((buf[0] & 0xC0) !== 0x80) {
31936 self.lastNeed = 0;
31937 return '\ufffd'.repeat(p);
31938 }
31939 if (self.lastNeed > 1 && buf.length > 1) {
31940 if ((buf[1] & 0xC0) !== 0x80) {
31941 self.lastNeed = 1;
31942 return '\ufffd'.repeat(p + 1);
31943 }
31944 if (self.lastNeed > 2 && buf.length > 2) {
31945 if ((buf[2] & 0xC0) !== 0x80) {
31946 self.lastNeed = 2;
31947 return '\ufffd'.repeat(p + 2);
31948 }
31949 }
31950 }
8b095871
IC
31951}
31952
9987f0c1
IC
31953// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
31954function utf8FillLast(buf) {
31955 var p = this.lastTotal - this.lastNeed;
31956 var r = utf8CheckExtraBytes(this, buf, p);
31957 if (r !== undefined) return r;
31958 if (this.lastNeed <= buf.length) {
31959 buf.copy(this.lastChar, p, 0, this.lastNeed);
31960 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 31961 }
9987f0c1
IC
31962 buf.copy(this.lastChar, p, 0, buf.length);
31963 this.lastNeed -= buf.length;
8b095871
IC
31964}
31965
9987f0c1
IC
31966// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
31967// partial character, the character's bytes are buffered until the required
31968// number of bytes are available.
31969function utf8Text(buf, i) {
31970 var total = utf8CheckIncomplete(this, buf, i);
31971 if (!this.lastNeed) return buf.toString('utf8', i);
31972 this.lastTotal = total;
31973 var end = buf.length - (total - this.lastNeed);
31974 buf.copy(this.lastChar, 0, end);
31975 return buf.toString('utf8', i, end);
8b095871
IC
31976}
31977
9987f0c1
IC
31978// For UTF-8, a replacement character for each buffered byte of a (partial)
31979// character needs to be added to the output.
31980function utf8End(buf) {
31981 var r = buf && buf.length ? this.write(buf) : '';
31982 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
31983 return r;
31984}
8b095871 31985
9987f0c1
IC
31986// UTF-16LE typically needs two bytes per character, but even if we have an even
31987// number of bytes available, we need to check if we end on a leading/high
31988// surrogate. In that case, we need to wait for the next two bytes in order to
31989// decode the last character properly.
31990function utf16Text(buf, i) {
31991 if ((buf.length - i) % 2 === 0) {
31992 var r = buf.toString('utf16le', i);
31993 if (r) {
31994 var c = r.charCodeAt(r.length - 1);
31995 if (c >= 0xD800 && c <= 0xDBFF) {
31996 this.lastNeed = 2;
31997 this.lastTotal = 4;
31998 this.lastChar[0] = buf[buf.length - 2];
31999 this.lastChar[1] = buf[buf.length - 1];
32000 return r.slice(0, -1);
32001 }
32002 }
32003 return r;
8b095871 32004 }
9987f0c1
IC
32005 this.lastNeed = 1;
32006 this.lastTotal = 2;
32007 this.lastChar[0] = buf[buf.length - 1];
32008 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
32009}
32010
9987f0c1
IC
32011// For UTF-16LE we do not explicitly append special replacement characters if we
32012// end on a partial character, we simply let v8 handle that.
32013function utf16End(buf) {
32014 var r = buf && buf.length ? this.write(buf) : '';
32015 if (this.lastNeed) {
32016 var end = this.lastTotal - this.lastNeed;
32017 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 32018 }
9987f0c1 32019 return r;
8b095871
IC
32020}
32021
9987f0c1
IC
32022function base64Text(buf, i) {
32023 var n = (buf.length - i) % 3;
32024 if (n === 0) return buf.toString('base64', i);
32025 this.lastNeed = 3 - n;
32026 this.lastTotal = 3;
32027 if (n === 1) {
32028 this.lastChar[0] = buf[buf.length - 1];
32029 } else {
32030 this.lastChar[0] = buf[buf.length - 2];
32031 this.lastChar[1] = buf[buf.length - 1];
32032 }
32033 return buf.toString('base64', i, buf.length - n);
32034}
8b095871 32035
9987f0c1
IC
32036function base64End(buf) {
32037 var r = buf && buf.length ? this.write(buf) : '';
32038 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32039 return r;
32040}
8b095871 32041
9987f0c1
IC
32042// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32043function simpleWrite(buf) {
32044 return buf.toString(this.encoding);
32045}
8b095871 32046
9987f0c1
IC
32047function simpleEnd(buf) {
32048 return buf && buf.length ? this.write(buf) : '';
32049}
cf6c2044
IC
32050},{"safe-buffer":27}],23:[function(require,module,exports){
32051module.exports = require('./readable').PassThrough
8b095871 32052
cf6c2044
IC
32053},{"./readable":24}],24:[function(require,module,exports){
32054exports = module.exports = require('./lib/_stream_readable.js');
32055exports.Stream = exports;
32056exports.Readable = exports;
32057exports.Writable = require('./lib/_stream_writable.js');
32058exports.Duplex = require('./lib/_stream_duplex.js');
32059exports.Transform = require('./lib/_stream_transform.js');
32060exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 32061
cf6c2044
IC
32062},{"./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){
32063module.exports = require('./readable').Transform
8b095871 32064
cf6c2044
IC
32065},{"./readable":24}],26:[function(require,module,exports){
32066module.exports = require('./lib/_stream_writable.js');
8b095871 32067
cf6c2044
IC
32068},{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32069module.exports = require('buffer')
8b095871 32070
cf6c2044 32071},{"buffer":5}],28:[function(require,module,exports){
9987f0c1
IC
32072// Copyright Joyent, Inc. and other Node contributors.
32073//
32074// Permission is hereby granted, free of charge, to any person obtaining a
32075// copy of this software and associated documentation files (the
32076// "Software"), to deal in the Software without restriction, including
32077// without limitation the rights to use, copy, modify, merge, publish,
32078// distribute, sublicense, and/or sell copies of the Software, and to permit
32079// persons to whom the Software is furnished to do so, subject to the
32080// following conditions:
32081//
32082// The above copyright notice and this permission notice shall be included
32083// in all copies or substantial portions of the Software.
32084//
32085// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32086// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32087// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32088// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32089// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32090// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32091// USE OR OTHER DEALINGS IN THE SOFTWARE.
32092
cf6c2044
IC
32093module.exports = Stream;
32094
32095var EE = require('events').EventEmitter;
32096var inherits = require('inherits');
32097
32098inherits(Stream, EE);
32099Stream.Readable = require('readable-stream/readable.js');
32100Stream.Writable = require('readable-stream/writable.js');
32101Stream.Duplex = require('readable-stream/duplex.js');
32102Stream.Transform = require('readable-stream/transform.js');
32103Stream.PassThrough = require('readable-stream/passthrough.js');
32104
32105// Backwards-compat with node 0.4.x
32106Stream.Stream = Stream;
32107
32108
32109
32110// old-style streams. Note that the pipe method (the only relevant
32111// part of this class) is overridden in the Readable class.
32112
32113function Stream() {
32114 EE.call(this);
32115}
32116
32117Stream.prototype.pipe = function(dest, options) {
32118 var source = this;
32119
32120 function ondata(chunk) {
32121 if (dest.writable) {
32122 if (false === dest.write(chunk) && source.pause) {
32123 source.pause();
32124 }
8b095871
IC
32125 }
32126 }
32127
cf6c2044
IC
32128 source.on('data', ondata);
32129
32130 function ondrain() {
32131 if (source.readable && source.resume) {
32132 source.resume();
9987f0c1
IC
32133 }
32134 }
8b095871 32135
cf6c2044 32136 dest.on('drain', ondrain);
8b095871 32137
cf6c2044
IC
32138 // If the 'end' option is not supplied, dest.end() will be called when
32139 // source gets the 'end' or 'close' events. Only dest.end() once.
32140 if (!dest._isStdio && (!options || options.end !== false)) {
32141 source.on('end', onend);
32142 source.on('close', onclose);
8b095871 32143 }
8b095871 32144
cf6c2044
IC
32145 var didOnEnd = false;
32146 function onend() {
32147 if (didOnEnd) return;
32148 didOnEnd = true;
8b095871 32149
cf6c2044 32150 dest.end();
8b095871
IC
32151 }
32152
8b095871 32153
cf6c2044
IC
32154 function onclose() {
32155 if (didOnEnd) return;
32156 didOnEnd = true;
8b095871 32157
cf6c2044 32158 if (typeof dest.destroy === 'function') dest.destroy();
9987f0c1 32159 }
cf6c2044
IC
32160
32161 // don't leave dangling pipes when there are errors.
32162 function onerror(er) {
32163 cleanup();
32164 if (EE.listenerCount(this, 'error') === 0) {
32165 throw er; // Unhandled stream error in pipe.
32166 }
32167 }
32168
32169 source.on('error', onerror);
32170 dest.on('error', onerror);
32171
32172 // remove all the event listeners that were added.
32173 function cleanup() {
32174 source.removeListener('data', ondata);
32175 dest.removeListener('drain', ondrain);
32176
32177 source.removeListener('end', onend);
32178 source.removeListener('close', onclose);
32179
32180 source.removeListener('error', onerror);
32181 dest.removeListener('error', onerror);
32182
32183 source.removeListener('end', cleanup);
32184 source.removeListener('close', cleanup);
32185
32186 dest.removeListener('close', cleanup);
32187 }
32188
32189 source.on('end', cleanup);
32190 source.on('close', cleanup);
32191
32192 dest.on('close', cleanup);
32193
32194 dest.emit('pipe', source);
32195
32196 // Allow for unix-like usage: A.pipe(B).pipe(C)
32197 return dest;
32198};
32199
32200},{"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){
32201// Copyright Joyent, Inc. and other Node contributors.
32202//
32203// Permission is hereby granted, free of charge, to any person obtaining a
32204// copy of this software and associated documentation files (the
32205// "Software"), to deal in the Software without restriction, including
32206// without limitation the rights to use, copy, modify, merge, publish,
32207// distribute, sublicense, and/or sell copies of the Software, and to permit
32208// persons to whom the Software is furnished to do so, subject to the
32209// following conditions:
32210//
32211// The above copyright notice and this permission notice shall be included
32212// in all copies or substantial portions of the Software.
32213//
32214// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32215// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32216// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32217// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32218// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32219// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32220// USE OR OTHER DEALINGS IN THE SOFTWARE.
32221
32222var Buffer = require('buffer').Buffer;
32223
32224var isBufferEncoding = Buffer.isEncoding
32225 || function(encoding) {
32226 switch (encoding && encoding.toLowerCase()) {
32227 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;
32228 default: return false;
32229 }
32230 }
32231
32232
32233function assertEncoding(encoding) {
32234 if (encoding && !isBufferEncoding(encoding)) {
32235 throw new Error('Unknown encoding: ' + encoding);
32236 }
32237}
32238
32239// StringDecoder provides an interface for efficiently splitting a series of
32240// buffers into a series of JS strings without breaking apart multi-byte
32241// characters. CESU-8 is handled as part of the UTF-8 encoding.
32242//
32243// @TODO Handling all encodings inside a single object makes it very difficult
32244// to reason about this code, so it should be split up in the future.
32245// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32246// points as used by CESU-8.
32247var StringDecoder = exports.StringDecoder = function(encoding) {
32248 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32249 assertEncoding(encoding);
32250 switch (this.encoding) {
32251 case 'utf8':
32252 // CESU-8 represents each of Surrogate Pair by 3-bytes
32253 this.surrogateSize = 3;
32254 break;
32255 case 'ucs2':
32256 case 'utf16le':
32257 // UTF-16 represents each of Surrogate Pair by 2-bytes
32258 this.surrogateSize = 2;
32259 this.detectIncompleteChar = utf16DetectIncompleteChar;
32260 break;
32261 case 'base64':
32262 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32263 this.surrogateSize = 3;
32264 this.detectIncompleteChar = base64DetectIncompleteChar;
32265 break;
32266 default:
32267 this.write = passThroughWrite;
32268 return;
32269 }
32270
32271 // Enough space to store all bytes of a single character. UTF-8 needs 4
32272 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32273 this.charBuffer = new Buffer(6);
32274 // Number of bytes received for the current incomplete multi-byte character.
32275 this.charReceived = 0;
32276 // Number of bytes expected for the current incomplete multi-byte character.
32277 this.charLength = 0;
32278};
32279
32280
32281// write decodes the given buffer and returns it as JS string that is
32282// guaranteed to not contain any partial multi-byte characters. Any partial
32283// character found at the end of the buffer is buffered up, and will be
32284// returned when calling write again with the remaining bytes.
32285//
32286// Note: Converting a Buffer containing an orphan surrogate to a String
32287// currently works, but converting a String to a Buffer (via `new Buffer`, or
32288// Buffer#write) will replace incomplete surrogates with the unicode
32289// replacement character. See https://codereview.chromium.org/121173009/ .
32290StringDecoder.prototype.write = function(buffer) {
32291 var charStr = '';
32292 // if our last write ended with an incomplete multibyte character
32293 while (this.charLength) {
32294 // determine how many remaining bytes this buffer has to offer for this char
32295 var available = (buffer.length >= this.charLength - this.charReceived) ?
32296 this.charLength - this.charReceived :
32297 buffer.length;
32298
32299 // add the new bytes to the char buffer
32300 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32301 this.charReceived += available;
32302
32303 if (this.charReceived < this.charLength) {
32304 // still not enough chars in this buffer? wait for more ...
32305 return '';
32306 }
32307
32308 // remove bytes belonging to the current character from the buffer
32309 buffer = buffer.slice(available, buffer.length);
32310
32311 // get the character that was split
32312 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32313
32314 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32315 var charCode = charStr.charCodeAt(charStr.length - 1);
32316 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32317 this.charLength += this.surrogateSize;
32318 charStr = '';
32319 continue;
32320 }
32321 this.charReceived = this.charLength = 0;
32322
32323 // if there are no more bytes in this buffer, just emit our char
32324 if (buffer.length === 0) {
32325 return charStr;
32326 }
32327 break;
32328 }
32329
32330 // determine and set charLength / charReceived
32331 this.detectIncompleteChar(buffer);
32332
32333 var end = buffer.length;
32334 if (this.charLength) {
32335 // buffer the incomplete character bytes we got
32336 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32337 end -= this.charReceived;
32338 }
32339
32340 charStr += buffer.toString(this.encoding, 0, end);
32341
32342 var end = charStr.length - 1;
32343 var charCode = charStr.charCodeAt(end);
32344 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32345 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32346 var size = this.surrogateSize;
32347 this.charLength += size;
32348 this.charReceived += size;
32349 this.charBuffer.copy(this.charBuffer, size, 0, size);
32350 buffer.copy(this.charBuffer, 0, 0, size);
32351 return charStr.substring(0, end);
32352 }
32353
32354 // or just emit the charStr
32355 return charStr;
32356};
32357
32358// detectIncompleteChar determines if there is an incomplete UTF-8 character at
32359// the end of the given buffer. If so, it sets this.charLength to the byte
32360// length that character, and sets this.charReceived to the number of bytes
32361// that are available for this character.
32362StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32363 // determine how many bytes we have to check at the end of this buffer
32364 var i = (buffer.length >= 3) ? 3 : buffer.length;
32365
32366 // Figure out if one of the last i bytes of our buffer announces an
32367 // incomplete char.
32368 for (; i > 0; i--) {
32369 var c = buffer[buffer.length - i];
32370
32371 // See http://en.wikipedia.org/wiki/UTF-8#Description
32372
32373 // 110XXXXX
32374 if (i == 1 && c >> 5 == 0x06) {
32375 this.charLength = 2;
32376 break;
32377 }
32378
32379 // 1110XXXX
32380 if (i <= 2 && c >> 4 == 0x0E) {
32381 this.charLength = 3;
32382 break;
32383 }
32384
32385 // 11110XXX
32386 if (i <= 3 && c >> 3 == 0x1E) {
32387 this.charLength = 4;
32388 break;
32389 }
32390 }
32391 this.charReceived = i;
32392};
32393
32394StringDecoder.prototype.end = function(buffer) {
32395 var res = '';
32396 if (buffer && buffer.length)
32397 res = this.write(buffer);
32398
32399 if (this.charReceived) {
32400 var cr = this.charReceived;
32401 var buf = this.charBuffer;
32402 var enc = this.encoding;
32403 res += buf.slice(0, cr).toString(enc);
32404 }
32405
32406 return res;
32407};
32408
32409function passThroughWrite(buffer) {
32410 return buffer.toString(this.encoding);
32411}
32412
32413function utf16DetectIncompleteChar(buffer) {
32414 this.charReceived = buffer.length % 2;
32415 this.charLength = this.charReceived ? 2 : 0;
32416}
32417
32418function base64DetectIncompleteChar(buffer) {
32419 this.charReceived = buffer.length % 3;
32420 this.charLength = this.charReceived ? 3 : 0;
32421}
32422
32423},{"buffer":5}],30:[function(require,module,exports){
32424(function (global){
32425
32426/**
32427 * Module exports.
32428 */
32429
32430module.exports = deprecate;
32431
32432/**
32433 * Mark that a method should not be used.
32434 * Returns a modified function which warns once by default.
32435 *
32436 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32437 *
32438 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32439 * will throw an Error when invoked.
32440 *
32441 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32442 * will invoke `console.trace()` instead of `console.error()`.
32443 *
32444 * @param {Function} fn - the function to deprecate
32445 * @param {String} msg - the string to print to the console when `fn` is invoked
32446 * @returns {Function} a new "deprecated" version of `fn`
32447 * @api public
32448 */
32449
32450function deprecate (fn, msg) {
32451 if (config('noDeprecation')) {
32452 return fn;
32453 }
32454
32455 var warned = false;
32456 function deprecated() {
32457 if (!warned) {
32458 if (config('throwDeprecation')) {
32459 throw new Error(msg);
32460 } else if (config('traceDeprecation')) {
32461 console.trace(msg);
32462 } else {
32463 console.warn(msg);
32464 }
32465 warned = true;
32466 }
32467 return fn.apply(this, arguments);
32468 }
32469
32470 return deprecated;
32471}
32472
32473/**
32474 * Checks `localStorage` for boolean values for the given `name`.
32475 *
32476 * @param {String} name
32477 * @returns {Boolean}
32478 * @api private
32479 */
32480
32481function config (name) {
32482 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32483 try {
32484 if (!global.localStorage) return false;
32485 } catch (_) {
32486 return false;
32487 }
32488 var val = global.localStorage[name];
32489 if (null == val) return false;
32490 return String(val).toLowerCase() === 'true';
32491}
32492
32493}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32494},{}],31:[function(require,module,exports){
32495arguments[4][9][0].apply(exports,arguments)
32496},{"dup":9}],32:[function(require,module,exports){
32497module.exports = function isBuffer(arg) {
32498 return arg && typeof arg === 'object'
32499 && typeof arg.copy === 'function'
32500 && typeof arg.fill === 'function'
32501 && typeof arg.readUInt8 === 'function';
32502}
32503},{}],33:[function(require,module,exports){
32504(function (process,global){
32505// Copyright Joyent, Inc. and other Node contributors.
32506//
32507// Permission is hereby granted, free of charge, to any person obtaining a
32508// copy of this software and associated documentation files (the
32509// "Software"), to deal in the Software without restriction, including
32510// without limitation the rights to use, copy, modify, merge, publish,
32511// distribute, sublicense, and/or sell copies of the Software, and to permit
32512// persons to whom the Software is furnished to do so, subject to the
32513// following conditions:
32514//
32515// The above copyright notice and this permission notice shall be included
32516// in all copies or substantial portions of the Software.
32517//
32518// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32519// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32520// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32521// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32522// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32523// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32524// USE OR OTHER DEALINGS IN THE SOFTWARE.
32525
32526var formatRegExp = /%[sdj%]/g;
32527exports.format = function(f) {
32528 if (!isString(f)) {
32529 var objects = [];
32530 for (var i = 0; i < arguments.length; i++) {
32531 objects.push(inspect(arguments[i]));
32532 }
32533 return objects.join(' ');
32534 }
32535
32536 var i = 1;
32537 var args = arguments;
32538 var len = args.length;
32539 var str = String(f).replace(formatRegExp, function(x) {
32540 if (x === '%%') return '%';
32541 if (i >= len) return x;
32542 switch (x) {
32543 case '%s': return String(args[i++]);
32544 case '%d': return Number(args[i++]);
32545 case '%j':
32546 try {
32547 return JSON.stringify(args[i++]);
32548 } catch (_) {
32549 return '[Circular]';
32550 }
32551 default:
32552 return x;
32553 }
32554 });
32555 for (var x = args[i]; i < len; x = args[++i]) {
32556 if (isNull(x) || !isObject(x)) {
32557 str += ' ' + x;
32558 } else {
32559 str += ' ' + inspect(x);
32560 }
32561 }
32562 return str;
32563};
32564
32565
32566// Mark that a method should not be used.
32567// Returns a modified function which warns once by default.
32568// If --no-deprecation is set, then it is a no-op.
32569exports.deprecate = function(fn, msg) {
32570 // Allow for deprecating things in the process of starting up.
32571 if (isUndefined(global.process)) {
32572 return function() {
32573 return exports.deprecate(fn, msg).apply(this, arguments);
32574 };
32575 }
32576
32577 if (process.noDeprecation === true) {
32578 return fn;
32579 }
32580
32581 var warned = false;
32582 function deprecated() {
32583 if (!warned) {
32584 if (process.throwDeprecation) {
32585 throw new Error(msg);
32586 } else if (process.traceDeprecation) {
32587 console.trace(msg);
32588 } else {
32589 console.error(msg);
32590 }
32591 warned = true;
32592 }
32593 return fn.apply(this, arguments);
32594 }
32595
32596 return deprecated;
32597};
32598
32599
32600var debugs = {};
32601var debugEnviron;
32602exports.debuglog = function(set) {
32603 if (isUndefined(debugEnviron))
32604 debugEnviron = process.env.NODE_DEBUG || '';
32605 set = set.toUpperCase();
32606 if (!debugs[set]) {
32607 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32608 var pid = process.pid;
32609 debugs[set] = function() {
32610 var msg = exports.format.apply(exports, arguments);
32611 console.error('%s %d: %s', set, pid, msg);
32612 };
32613 } else {
32614 debugs[set] = function() {};
32615 }
32616 }
32617 return debugs[set];
32618};
8b095871 32619
8b095871 32620
9987f0c1
IC
32621/**
32622 * Echos the value of a value. Trys to print the value out
32623 * in the best way possible given the different types.
32624 *
32625 * @param {Object} obj The object to print out.
32626 * @param {Object} opts Optional options object that alters the output.
32627 */
32628/* legacy: obj, showHidden, depth, colors*/
32629function inspect(obj, opts) {
32630 // default options
32631 var ctx = {
32632 seen: [],
32633 stylize: stylizeNoColor
32634 };
32635 // legacy...
32636 if (arguments.length >= 3) ctx.depth = arguments[2];
32637 if (arguments.length >= 4) ctx.colors = arguments[3];
32638 if (isBoolean(opts)) {
32639 // legacy...
32640 ctx.showHidden = opts;
32641 } else if (opts) {
32642 // got an "options" object
32643 exports._extend(ctx, opts);
32644 }
32645 // set default options
32646 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32647 if (isUndefined(ctx.depth)) ctx.depth = 2;
32648 if (isUndefined(ctx.colors)) ctx.colors = false;
32649 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32650 if (ctx.colors) ctx.stylize = stylizeWithColor;
32651 return formatValue(ctx, obj, ctx.depth);
32652}
32653exports.inspect = inspect;
8b095871 32654
8b095871 32655
9987f0c1
IC
32656// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32657inspect.colors = {
32658 'bold' : [1, 22],
32659 'italic' : [3, 23],
32660 'underline' : [4, 24],
32661 'inverse' : [7, 27],
32662 'white' : [37, 39],
32663 'grey' : [90, 39],
32664 'black' : [30, 39],
32665 'blue' : [34, 39],
32666 'cyan' : [36, 39],
32667 'green' : [32, 39],
32668 'magenta' : [35, 39],
32669 'red' : [31, 39],
32670 'yellow' : [33, 39]
32671};
8b095871 32672
9987f0c1
IC
32673// Don't use 'blue' not visible on cmd.exe
32674inspect.styles = {
32675 'special': 'cyan',
32676 'number': 'yellow',
32677 'boolean': 'yellow',
32678 'undefined': 'grey',
32679 'null': 'bold',
32680 'string': 'green',
32681 'date': 'magenta',
32682 // "name": intentionally not styling
32683 'regexp': 'red'
32684};
8b095871 32685
8b095871 32686
9987f0c1
IC
32687function stylizeWithColor(str, styleType) {
32688 var style = inspect.styles[styleType];
8b095871 32689
9987f0c1
IC
32690 if (style) {
32691 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32692 '\u001b[' + inspect.colors[style][1] + 'm';
32693 } else {
32694 return str;
8b095871 32695 }
9987f0c1 32696}
8b095871 32697
8b095871 32698
9987f0c1
IC
32699function stylizeNoColor(str, styleType) {
32700 return str;
32701}
8b095871 32702
8b095871 32703
9987f0c1
IC
32704function arrayToHash(array) {
32705 var hash = {};
8b095871 32706
9987f0c1
IC
32707 array.forEach(function(val, idx) {
32708 hash[val] = true;
32709 });
8b095871 32710
9987f0c1
IC
32711 return hash;
32712}
8b095871 32713
8b095871 32714
9987f0c1
IC
32715function formatValue(ctx, value, recurseTimes) {
32716 // Provide a hook for user-specified inspect functions.
32717 // Check that value is an object with an inspect function on it
32718 if (ctx.customInspect &&
32719 value &&
32720 isFunction(value.inspect) &&
32721 // Filter out the util module, it's inspect function is special
32722 value.inspect !== exports.inspect &&
32723 // Also filter out any prototype objects using the circular check.
32724 !(value.constructor && value.constructor.prototype === value)) {
32725 var ret = value.inspect(recurseTimes, ctx);
32726 if (!isString(ret)) {
32727 ret = formatValue(ctx, ret, recurseTimes);
8b095871 32728 }
9987f0c1 32729 return ret;
8b095871 32730 }
8b095871 32731
9987f0c1
IC
32732 // Primitive types cannot have properties
32733 var primitive = formatPrimitive(ctx, value);
32734 if (primitive) {
32735 return primitive;
8b095871 32736 }
8b095871 32737
9987f0c1
IC
32738 // Look up the keys of the object.
32739 var keys = Object.keys(value);
32740 var visibleKeys = arrayToHash(keys);
8b095871 32741
9987f0c1
IC
32742 if (ctx.showHidden) {
32743 keys = Object.getOwnPropertyNames(value);
8b095871 32744 }
8b095871 32745
9987f0c1
IC
32746 // IE doesn't make error fields non-enumerable
32747 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32748 if (isError(value)
32749 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32750 return formatError(value);
8b095871 32751 }
8b095871 32752
9987f0c1
IC
32753 // Some type of object without properties can be shortcutted.
32754 if (keys.length === 0) {
32755 if (isFunction(value)) {
32756 var name = value.name ? ': ' + value.name : '';
32757 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 32758 }
9987f0c1
IC
32759 if (isRegExp(value)) {
32760 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 32761 }
9987f0c1
IC
32762 if (isDate(value)) {
32763 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32764 }
32765 if (isError(value)) {
32766 return formatError(value);
8b095871
IC
32767 }
32768 }
32769
9987f0c1 32770 var base = '', array = false, braces = ['{', '}'];
8b095871 32771
9987f0c1
IC
32772 // Make Array say that they are Array
32773 if (isArray(value)) {
32774 array = true;
32775 braces = ['[', ']'];
32776 }
8b095871 32777
9987f0c1
IC
32778 // Make functions say that they are functions
32779 if (isFunction(value)) {
32780 var n = value.name ? ': ' + value.name : '';
32781 base = ' [Function' + n + ']';
32782 }
8b095871 32783
9987f0c1
IC
32784 // Make RegExps say that they are RegExps
32785 if (isRegExp(value)) {
32786 base = ' ' + RegExp.prototype.toString.call(value);
32787 }
8b095871 32788
9987f0c1
IC
32789 // Make dates with properties first say the date
32790 if (isDate(value)) {
32791 base = ' ' + Date.prototype.toUTCString.call(value);
32792 }
8b095871 32793
9987f0c1
IC
32794 // Make error with message first say the error
32795 if (isError(value)) {
32796 base = ' ' + formatError(value);
32797 }
8b095871 32798
9987f0c1
IC
32799 if (keys.length === 0 && (!array || value.length == 0)) {
32800 return braces[0] + base + braces[1];
32801 }
8b095871 32802
9987f0c1
IC
32803 if (recurseTimes < 0) {
32804 if (isRegExp(value)) {
32805 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 32806 } else {
9987f0c1
IC
32807 return ctx.stylize('[Object]', 'special');
32808 }
32809 }
8b095871 32810
9987f0c1 32811 ctx.seen.push(value);
8b095871 32812
9987f0c1
IC
32813 var output;
32814 if (array) {
32815 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32816 } else {
32817 output = keys.map(function(key) {
32818 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32819 });
8b095871
IC
32820 }
32821
9987f0c1 32822 ctx.seen.pop();
8b095871 32823
9987f0c1
IC
32824 return reduceToSingleString(output, base, braces);
32825}
8b095871 32826
8b095871 32827
9987f0c1
IC
32828function formatPrimitive(ctx, value) {
32829 if (isUndefined(value))
32830 return ctx.stylize('undefined', 'undefined');
32831 if (isString(value)) {
32832 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32833 .replace(/'/g, "\\'")
32834 .replace(/\\"/g, '"') + '\'';
32835 return ctx.stylize(simple, 'string');
8b095871 32836 }
9987f0c1
IC
32837 if (isNumber(value))
32838 return ctx.stylize('' + value, 'number');
32839 if (isBoolean(value))
32840 return ctx.stylize('' + value, 'boolean');
32841 // For some reason typeof null is "object", so special case here.
32842 if (isNull(value))
32843 return ctx.stylize('null', 'null');
8b095871
IC
32844}
32845
9987f0c1
IC
32846
32847function formatError(value) {
32848 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
32849}
32850
9987f0c1
IC
32851
32852function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32853 var output = [];
32854 for (var i = 0, l = value.length; i < l; ++i) {
32855 if (hasOwnProperty(value, String(i))) {
32856 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32857 String(i), true));
32858 } else {
32859 output.push('');
32860 }
8b095871 32861 }
9987f0c1
IC
32862 keys.forEach(function(key) {
32863 if (!key.match(/^\d+$/)) {
32864 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32865 key, true));
32866 }
32867 });
32868 return output;
8b095871
IC
32869}
32870
8b095871 32871
9987f0c1
IC
32872function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
32873 var name, str, desc;
32874 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
32875 if (desc.get) {
32876 if (desc.set) {
32877 str = ctx.stylize('[Getter/Setter]', 'special');
32878 } else {
32879 str = ctx.stylize('[Getter]', 'special');
32880 }
32881 } else {
32882 if (desc.set) {
32883 str = ctx.stylize('[Setter]', 'special');
32884 }
32885 }
32886 if (!hasOwnProperty(visibleKeys, key)) {
32887 name = '[' + key + ']';
32888 }
32889 if (!str) {
32890 if (ctx.seen.indexOf(desc.value) < 0) {
32891 if (isNull(recurseTimes)) {
32892 str = formatValue(ctx, desc.value, null);
32893 } else {
32894 str = formatValue(ctx, desc.value, recurseTimes - 1);
32895 }
32896 if (str.indexOf('\n') > -1) {
32897 if (array) {
32898 str = str.split('\n').map(function(line) {
32899 return ' ' + line;
32900 }).join('\n').substr(2);
32901 } else {
32902 str = '\n' + str.split('\n').map(function(line) {
32903 return ' ' + line;
32904 }).join('\n');
32905 }
32906 }
32907 } else {
32908 str = ctx.stylize('[Circular]', 'special');
32909 }
32910 }
32911 if (isUndefined(name)) {
32912 if (array && key.match(/^\d+$/)) {
32913 return str;
32914 }
32915 name = JSON.stringify('' + key);
32916 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
32917 name = name.substr(1, name.length - 2);
32918 name = ctx.stylize(name, 'name');
32919 } else {
32920 name = name.replace(/'/g, "\\'")
32921 .replace(/\\"/g, '"')
32922 .replace(/(^"|"$)/g, "'");
32923 name = ctx.stylize(name, 'string');
32924 }
32925 }
8b095871 32926
9987f0c1
IC
32927 return name + ': ' + str;
32928}
8b095871 32929
8b095871 32930
9987f0c1
IC
32931function reduceToSingleString(output, base, braces) {
32932 var numLinesEst = 0;
32933 var length = output.reduce(function(prev, cur) {
32934 numLinesEst++;
32935 if (cur.indexOf('\n') >= 0) numLinesEst++;
32936 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
32937 }, 0);
8b095871 32938
9987f0c1
IC
32939 if (length > 60) {
32940 return braces[0] +
32941 (base === '' ? '' : base + '\n ') +
32942 ' ' +
32943 output.join(',\n ') +
32944 ' ' +
32945 braces[1];
32946 }
8b095871 32947
9987f0c1
IC
32948 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
32949}
8b095871 32950
8b095871 32951
9987f0c1
IC
32952// NOTE: These type checking functions intentionally don't use `instanceof`
32953// because it is fragile and can be easily faked with `Object.create()`.
32954function isArray(ar) {
32955 return Array.isArray(ar);
8b095871 32956}
9987f0c1 32957exports.isArray = isArray;
8b095871 32958
9987f0c1
IC
32959function isBoolean(arg) {
32960 return typeof arg === 'boolean';
32961}
32962exports.isBoolean = isBoolean;
8b095871 32963
9987f0c1
IC
32964function isNull(arg) {
32965 return arg === null;
32966}
32967exports.isNull = isNull;
8b095871 32968
9987f0c1
IC
32969function isNullOrUndefined(arg) {
32970 return arg == null;
32971}
32972exports.isNullOrUndefined = isNullOrUndefined;
8b095871 32973
9987f0c1
IC
32974function isNumber(arg) {
32975 return typeof arg === 'number';
32976}
32977exports.isNumber = isNumber;
8b095871 32978
9987f0c1
IC
32979function isString(arg) {
32980 return typeof arg === 'string';
32981}
32982exports.isString = isString;
8b095871 32983
9987f0c1
IC
32984function isSymbol(arg) {
32985 return typeof arg === 'symbol';
32986}
32987exports.isSymbol = isSymbol;
8b095871 32988
9987f0c1
IC
32989function isUndefined(arg) {
32990 return arg === void 0;
8b095871 32991}
9987f0c1 32992exports.isUndefined = isUndefined;
8b095871 32993
9987f0c1
IC
32994function isRegExp(re) {
32995 return isObject(re) && objectToString(re) === '[object RegExp]';
32996}
32997exports.isRegExp = isRegExp;
8b095871 32998
9987f0c1
IC
32999function isObject(arg) {
33000 return typeof arg === 'object' && arg !== null;
33001}
33002exports.isObject = isObject;
8b095871 33003
9987f0c1
IC
33004function isDate(d) {
33005 return isObject(d) && objectToString(d) === '[object Date]';
33006}
33007exports.isDate = isDate;
8b095871 33008
9987f0c1
IC
33009function isError(e) {
33010 return isObject(e) &&
33011 (objectToString(e) === '[object Error]' || e instanceof Error);
33012}
33013exports.isError = isError;
8b095871 33014
9987f0c1
IC
33015function isFunction(arg) {
33016 return typeof arg === 'function';
33017}
33018exports.isFunction = isFunction;
8b095871 33019
9987f0c1
IC
33020function isPrimitive(arg) {
33021 return arg === null ||
33022 typeof arg === 'boolean' ||
33023 typeof arg === 'number' ||
33024 typeof arg === 'string' ||
33025 typeof arg === 'symbol' || // ES6 symbol
33026 typeof arg === 'undefined';
33027}
33028exports.isPrimitive = isPrimitive;
8b095871 33029
9987f0c1 33030exports.isBuffer = require('./support/isBuffer');
8b095871 33031
9987f0c1
IC
33032function objectToString(o) {
33033 return Object.prototype.toString.call(o);
8b095871
IC
33034}
33035
8b095871 33036
9987f0c1
IC
33037function pad(n) {
33038 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33039}
8b095871 33040
8b095871 33041
9987f0c1
IC
33042var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33043 'Oct', 'Nov', 'Dec'];
8b095871 33044
9987f0c1
IC
33045// 26 Feb 16:19:34
33046function timestamp() {
33047 var d = new Date();
33048 var time = [pad(d.getHours()),
33049 pad(d.getMinutes()),
33050 pad(d.getSeconds())].join(':');
33051 return [d.getDate(), months[d.getMonth()], time].join(' ');
33052}
33053
33054
33055// log is just a thin wrapper to console.log that prepends a timestamp
33056exports.log = function() {
33057 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
33058};
33059
33060
9987f0c1
IC
33061/**
33062 * Inherit the prototype methods from one constructor into another.
33063 *
33064 * The Function.prototype.inherits from lang.js rewritten as a standalone
33065 * function (not on Function.prototype). NOTE: If this file is to be loaded
33066 * during bootstrapping this function needs to be rewritten using some native
33067 * functions as prototype setup using normal JavaScript does not work as
33068 * expected during bootstrapping (see mirror.js in r114903).
33069 *
33070 * @param {function} ctor Constructor function which needs to inherit the
33071 * prototype.
33072 * @param {function} superCtor Constructor function to inherit prototype from.
33073 */
33074exports.inherits = require('inherits');
8b095871 33075
9987f0c1
IC
33076exports._extend = function(origin, add) {
33077 // Don't do anything if add isn't an object
33078 if (!add || !isObject(add)) return origin;
8b095871 33079
9987f0c1
IC
33080 var keys = Object.keys(add);
33081 var i = keys.length;
33082 while (i--) {
33083 origin[keys[i]] = add[keys[i]];
33084 }
33085 return origin;
33086};
8b095871 33087
9987f0c1
IC
33088function hasOwnProperty(obj, prop) {
33089 return Object.prototype.hasOwnProperty.call(obj, prop);
33090}
8b095871 33091
9987f0c1 33092}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044
IC
33093},{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33094bitcoin = {
9987f0c1
IC
33095 base58: require('bs58'),
33096 bitcoin: require('bitcoinjs-lib'),
33097 ecurve: require('ecurve'),
cf6c2044
IC
33098 BigInteger: require('bigi'),
33099 Buffer: require('buffer'),
33100 elliptic: require('elliptic'),
33101 bs58check: require('bs58check'),
8b095871
IC
33102}
33103
cf6c2044
IC
33104module.exports = bitcoin;
33105
33106},{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
9987f0c1
IC
33107// base-x encoding
33108// Forked from https://github.com/cryptocoinjs/bs58
33109// Originally written by Mike Hearn for BitcoinJ
33110// Copyright (c) 2011 Google Inc
33111// Ported to JavaScript by Stefan Thomas
33112// Merged Buffer refactorings from base58-native by Stephen Pair
33113// Copyright (c) 2013 BitPay Inc
8b095871 33114
9987f0c1 33115var Buffer = require('safe-buffer').Buffer
8b095871 33116
9987f0c1
IC
33117module.exports = function base (ALPHABET) {
33118 var ALPHABET_MAP = {}
33119 var BASE = ALPHABET.length
33120 var LEADER = ALPHABET.charAt(0)
8b095871 33121
9987f0c1
IC
33122 // pre-compute lookup table
33123 for (var z = 0; z < ALPHABET.length; z++) {
33124 var x = ALPHABET.charAt(z)
8b095871 33125
9987f0c1
IC
33126 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33127 ALPHABET_MAP[x] = z
33128 }
8b095871 33129
9987f0c1
IC
33130 function encode (source) {
33131 if (source.length === 0) return ''
8b095871 33132
9987f0c1
IC
33133 var digits = [0]
33134 for (var i = 0; i < source.length; ++i) {
33135 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33136 carry += digits[j] << 8
33137 digits[j] = carry % BASE
33138 carry = (carry / BASE) | 0
33139 }
8b095871 33140
9987f0c1
IC
33141 while (carry > 0) {
33142 digits.push(carry % BASE)
33143 carry = (carry / BASE) | 0
33144 }
33145 }
8b095871 33146
9987f0c1 33147 var string = ''
8b095871 33148
9987f0c1
IC
33149 // deal with leading zeros
33150 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
33151 // convert digits to a string
33152 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 33153
9987f0c1
IC
33154 return string
33155 }
8b095871 33156
9987f0c1
IC
33157 function decodeUnsafe (string) {
33158 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 33159
9987f0c1
IC
33160 var bytes = [0]
33161 for (var i = 0; i < string.length; i++) {
33162 var value = ALPHABET_MAP[string[i]]
33163 if (value === undefined) return
8b095871 33164
9987f0c1
IC
33165 for (var j = 0, carry = value; j < bytes.length; ++j) {
33166 carry += bytes[j] * BASE
33167 bytes[j] = carry & 0xff
33168 carry >>= 8
33169 }
8b095871 33170
9987f0c1
IC
33171 while (carry > 0) {
33172 bytes.push(carry & 0xff)
33173 carry >>= 8
33174 }
33175 }
8b095871 33176
9987f0c1
IC
33177 // deal with leading zeros
33178 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33179 bytes.push(0)
33180 }
8b095871 33181
9987f0c1
IC
33182 return Buffer.from(bytes.reverse())
33183 }
8b095871 33184
9987f0c1
IC
33185 function decode (string) {
33186 var buffer = decodeUnsafe(string)
33187 if (buffer) return buffer
8b095871 33188
9987f0c1
IC
33189 throw new Error('Non-base' + BASE + ' character')
33190 }
8b095871 33191
9987f0c1
IC
33192 return {
33193 encode: encode,
33194 decodeUnsafe: decodeUnsafe,
33195 decode: decode
33196 }
33197}
8b095871 33198
cf6c2044
IC
33199},{"safe-buffer":128}],36:[function(require,module,exports){
33200'use strict'
33201let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33202
33203// pre-compute lookup table
33204let ALPHABET_MAP = {}
33205for (let z = 0; z < ALPHABET.length; z++) {
33206 let x = ALPHABET.charAt(z)
33207
33208 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33209 ALPHABET_MAP[x] = z
33210}
33211
33212function polymodStep (pre) {
33213 let b = pre >> 25
33214 return ((pre & 0x1FFFFFF) << 5) ^
33215 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33216 (-((b >> 1) & 1) & 0x26508e6d) ^
33217 (-((b >> 2) & 1) & 0x1ea119fa) ^
33218 (-((b >> 3) & 1) & 0x3d4233dd) ^
33219 (-((b >> 4) & 1) & 0x2a1462b3)
33220}
33221
33222function prefixChk (prefix) {
33223 let chk = 1
33224 for (let i = 0; i < prefix.length; ++i) {
33225 let c = prefix.charCodeAt(i)
33226 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33227
33228 chk = polymodStep(chk) ^ (c >> 5)
33229 }
33230 chk = polymodStep(chk)
33231
33232 for (let i = 0; i < prefix.length; ++i) {
33233 let v = prefix.charCodeAt(i)
33234 chk = polymodStep(chk) ^ (v & 0x1f)
33235 }
33236 return chk
33237}
33238
33239function encode (prefix, words) {
33240 // too long?
33241 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
33242 prefix = prefix.toLowerCase()
33243
33244 // determine chk mod
33245 let chk = prefixChk(prefix)
33246 let result = prefix + '1'
33247 for (let i = 0; i < words.length; ++i) {
33248 let x = words[i]
33249 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33250
33251 chk = polymodStep(chk) ^ x
33252 result += ALPHABET.charAt(x)
33253 }
33254
33255 for (let i = 0; i < 6; ++i) {
33256 chk = polymodStep(chk)
33257 }
33258 chk ^= 1
33259
33260 for (let i = 0; i < 6; ++i) {
33261 let v = (chk >> ((5 - i) * 5)) & 0x1f
33262 result += ALPHABET.charAt(v)
33263 }
33264
33265 return result
33266}
33267
33268function decode (str) {
33269 if (str.length < 8) throw new TypeError(str + ' too short')
33270 if (str.length > 90) throw new TypeError(str + ' too long')
33271
33272 // don't allow mixed case
33273 let lowered = str.toLowerCase()
33274 let uppered = str.toUpperCase()
33275 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33276 str = lowered
33277
33278 let split = str.lastIndexOf('1')
33279 if (split === 0) throw new Error('Missing prefix for ' + str)
33280
33281 let prefix = str.slice(0, split)
33282 let wordChars = str.slice(split + 1)
33283 if (wordChars.length < 6) throw new Error('Data too short')
33284
33285 let chk = prefixChk(prefix)
33286 let words = []
33287 for (let i = 0; i < wordChars.length; ++i) {
33288 let c = wordChars.charAt(i)
33289 let v = ALPHABET_MAP[c]
33290 if (v === undefined) throw new Error('Unknown character ' + c)
33291 chk = polymodStep(chk) ^ v
33292
33293 // not in the checksum?
33294 if (i + 6 >= wordChars.length) continue
33295 words.push(v)
33296 }
33297
33298 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33299 return { prefix, words }
33300}
33301
33302function convert (data, inBits, outBits, pad) {
33303 let value = 0
33304 let bits = 0
33305 let maxV = (1 << outBits) - 1
33306
33307 let result = []
33308 for (let i = 0; i < data.length; ++i) {
33309 value = (value << inBits) | data[i]
33310 bits += inBits
33311
33312 while (bits >= outBits) {
33313 bits -= outBits
33314 result.push((value >> bits) & maxV)
33315 }
33316 }
33317
33318 if (pad) {
33319 if (bits > 0) {
33320 result.push((value << (outBits - bits)) & maxV)
33321 }
33322 } else {
33323 if (bits >= inBits) throw new Error('Excess padding')
33324 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33325 }
33326
33327 return result
33328}
33329
33330function toWords (bytes) {
33331 return convert(bytes, 8, 5, true)
33332}
33333
33334function fromWords (words) {
33335 return convert(words, 5, 8, false)
33336}
33337
33338module.exports = { decode, encode, toWords, fromWords }
33339
33340},{}],37:[function(require,module,exports){
9987f0c1
IC
33341// (public) Constructor
33342function BigInteger(a, b, c) {
33343 if (!(this instanceof BigInteger))
33344 return new BigInteger(a, b, c)
8b095871 33345
9987f0c1
IC
33346 if (a != null) {
33347 if ("number" == typeof a) this.fromNumber(a, b, c)
33348 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33349 else this.fromString(a, b)
33350 }
33351}
8b095871 33352
9987f0c1 33353var proto = BigInteger.prototype
8b095871 33354
9987f0c1
IC
33355// duck-typed isBigInteger
33356proto.__bigi = require('../package.json').version
33357BigInteger.isBigInteger = function (obj, check_ver) {
33358 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33359}
8b095871 33360
9987f0c1
IC
33361// Bits per digit
33362var dbits
8b095871 33363
9987f0c1
IC
33364// am: Compute w_j += (x*this_i), propagate carries,
33365// c is initial carry, returns final carry.
33366// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33367// We need to select the fastest one that works in this environment.
8b095871 33368
9987f0c1
IC
33369// am1: use a single mult and divide to get the high bits,
33370// max digit bits should be 26 because
33371// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33372function am1(i, x, w, j, c, n) {
33373 while (--n >= 0) {
33374 var v = x * this[i++] + w[j] + c
33375 c = Math.floor(v / 0x4000000)
33376 w[j++] = v & 0x3ffffff
33377 }
33378 return c
33379}
33380// am2 avoids a big mult-and-extract completely.
33381// Max digit bits should be <= 30 because we do bitwise ops
33382// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33383function am2(i, x, w, j, c, n) {
33384 var xl = x & 0x7fff,
33385 xh = x >> 15
33386 while (--n >= 0) {
33387 var l = this[i] & 0x7fff
33388 var h = this[i++] >> 15
33389 var m = xh * l + h * xl
33390 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33391 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33392 w[j++] = l & 0x3fffffff
33393 }
33394 return c
33395}
33396// Alternately, set max digit bits to 28 since some
33397// browsers slow down when dealing with 32-bit numbers.
33398function am3(i, x, w, j, c, n) {
33399 var xl = x & 0x3fff,
33400 xh = x >> 14
33401 while (--n >= 0) {
33402 var l = this[i] & 0x3fff
33403 var h = this[i++] >> 14
33404 var m = xh * l + h * xl
33405 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33406 c = (l >> 28) + (m >> 14) + xh * h
33407 w[j++] = l & 0xfffffff
33408 }
33409 return c
33410}
8b095871 33411
9987f0c1
IC
33412// wtf?
33413BigInteger.prototype.am = am1
33414dbits = 26
8b095871 33415
9987f0c1
IC
33416BigInteger.prototype.DB = dbits
33417BigInteger.prototype.DM = ((1 << dbits) - 1)
33418var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 33419
9987f0c1
IC
33420var BI_FP = 52
33421BigInteger.prototype.FV = Math.pow(2, BI_FP)
33422BigInteger.prototype.F1 = BI_FP - dbits
33423BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 33424
9987f0c1
IC
33425// Digit conversions
33426var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33427var BI_RC = new Array()
33428var rr, vv
33429rr = "0".charCodeAt(0)
33430for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33431rr = "a".charCodeAt(0)
33432for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33433rr = "A".charCodeAt(0)
33434for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 33435
9987f0c1
IC
33436function int2char(n) {
33437 return BI_RM.charAt(n)
33438}
8b095871 33439
9987f0c1
IC
33440function intAt(s, i) {
33441 var c = BI_RC[s.charCodeAt(i)]
33442 return (c == null) ? -1 : c
33443}
8b095871 33444
9987f0c1
IC
33445// (protected) copy this to r
33446function bnpCopyTo(r) {
33447 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33448 r.t = this.t
33449 r.s = this.s
33450}
8b095871 33451
9987f0c1
IC
33452// (protected) set from integer value x, -DV <= x < DV
33453function bnpFromInt(x) {
33454 this.t = 1
33455 this.s = (x < 0) ? -1 : 0
33456 if (x > 0) this[0] = x
33457 else if (x < -1) this[0] = x + DV
33458 else this.t = 0
33459}
8b095871 33460
9987f0c1
IC
33461// return bigint initialized to value
33462function nbv(i) {
33463 var r = new BigInteger()
33464 r.fromInt(i)
33465 return r
8b095871
IC
33466}
33467
9987f0c1
IC
33468// (protected) set from string and radix
33469function bnpFromString(s, b) {
33470 var self = this
8b095871 33471
9987f0c1
IC
33472 var k
33473 if (b == 16) k = 4
33474 else if (b == 8) k = 3
33475 else if (b == 256) k = 8; // byte array
33476 else if (b == 2) k = 1
33477 else if (b == 32) k = 5
33478 else if (b == 4) k = 2
33479 else {
33480 self.fromRadix(s, b)
33481 return
33482 }
33483 self.t = 0
33484 self.s = 0
33485 var i = s.length,
33486 mi = false,
33487 sh = 0
33488 while (--i >= 0) {
33489 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33490 if (x < 0) {
33491 if (s.charAt(i) == "-") mi = true
33492 continue
33493 }
33494 mi = false
33495 if (sh == 0)
33496 self[self.t++] = x
33497 else if (sh + k > self.DB) {
33498 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33499 self[self.t++] = (x >> (self.DB - sh))
33500 } else
33501 self[self.t - 1] |= x << sh
33502 sh += k
33503 if (sh >= self.DB) sh -= self.DB
33504 }
33505 if (k == 8 && (s[0] & 0x80) != 0) {
33506 self.s = -1
33507 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33508 }
33509 self.clamp()
33510 if (mi) BigInteger.ZERO.subTo(self, self)
33511}
8b095871 33512
9987f0c1
IC
33513// (protected) clamp off excess high words
33514function bnpClamp() {
33515 var c = this.s & this.DM
33516 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
33517}
33518
9987f0c1
IC
33519// (public) return string representation in given radix
33520function bnToString(b) {
33521 var self = this
33522 if (self.s < 0) return "-" + self.negate()
33523 .toString(b)
33524 var k
33525 if (b == 16) k = 4
33526 else if (b == 8) k = 3
33527 else if (b == 2) k = 1
33528 else if (b == 32) k = 5
33529 else if (b == 4) k = 2
33530 else return self.toRadix(b)
33531 var km = (1 << k) - 1,
33532 d, m = false,
33533 r = "",
33534 i = self.t
33535 var p = self.DB - (i * self.DB) % k
33536 if (i-- > 0) {
33537 if (p < self.DB && (d = self[i] >> p) > 0) {
33538 m = true
33539 r = int2char(d)
33540 }
33541 while (i >= 0) {
33542 if (p < k) {
33543 d = (self[i] & ((1 << p) - 1)) << (k - p)
33544 d |= self[--i] >> (p += self.DB - k)
33545 } else {
33546 d = (self[i] >> (p -= k)) & km
33547 if (p <= 0) {
33548 p += self.DB
33549 --i
33550 }
33551 }
33552 if (d > 0) m = true
33553 if (m) r += int2char(d)
33554 }
8b095871 33555 }
9987f0c1 33556 return m ? r : "0"
8b095871
IC
33557}
33558
9987f0c1
IC
33559// (public) -this
33560function bnNegate() {
33561 var r = new BigInteger()
33562 BigInteger.ZERO.subTo(this, r)
33563 return r
33564}
8b095871 33565
9987f0c1
IC
33566// (public) |this|
33567function bnAbs() {
33568 return (this.s < 0) ? this.negate() : this
33569}
8b095871 33570
9987f0c1
IC
33571// (public) return + if this > a, - if this < a, 0 if equal
33572function bnCompareTo(a) {
33573 var r = this.s - a.s
33574 if (r != 0) return r
33575 var i = this.t
33576 r = i - a.t
33577 if (r != 0) return (this.s < 0) ? -r : r
33578 while (--i >= 0)
33579 if ((r = this[i] - a[i]) != 0) return r
33580 return 0
33581}
8b095871 33582
9987f0c1
IC
33583// returns bit length of the integer x
33584function nbits(x) {
33585 var r = 1,
33586 t
33587 if ((t = x >>> 16) != 0) {
33588 x = t
33589 r += 16
33590 }
33591 if ((t = x >> 8) != 0) {
33592 x = t
33593 r += 8
33594 }
33595 if ((t = x >> 4) != 0) {
33596 x = t
33597 r += 4
33598 }
33599 if ((t = x >> 2) != 0) {
33600 x = t
33601 r += 2
33602 }
33603 if ((t = x >> 1) != 0) {
33604 x = t
33605 r += 1
8b095871 33606 }
9987f0c1
IC
33607 return r
33608}
8b095871 33609
9987f0c1
IC
33610// (public) return the number of bits in "this"
33611function bnBitLength() {
33612 if (this.t <= 0) return 0
33613 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33614}
8b095871 33615
9987f0c1
IC
33616// (public) return the number of bytes in "this"
33617function bnByteLength() {
33618 return this.bitLength() >> 3
33619}
8b095871 33620
9987f0c1
IC
33621// (protected) r = this << n*DB
33622function bnpDLShiftTo(n, r) {
33623 var i
33624 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33625 for (i = n - 1; i >= 0; --i) r[i] = 0
33626 r.t = this.t + n
33627 r.s = this.s
33628}
8b095871 33629
9987f0c1
IC
33630// (protected) r = this >> n*DB
33631function bnpDRShiftTo(n, r) {
33632 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33633 r.t = Math.max(this.t - n, 0)
33634 r.s = this.s
33635}
8b095871 33636
9987f0c1
IC
33637// (protected) r = this << n
33638function bnpLShiftTo(n, r) {
33639 var self = this
33640 var bs = n % self.DB
33641 var cbs = self.DB - bs
33642 var bm = (1 << cbs) - 1
33643 var ds = Math.floor(n / self.DB),
33644 c = (self.s << bs) & self.DM,
33645 i
33646 for (i = self.t - 1; i >= 0; --i) {
33647 r[i + ds + 1] = (self[i] >> cbs) | c
33648 c = (self[i] & bm) << bs
33649 }
33650 for (i = ds - 1; i >= 0; --i) r[i] = 0
33651 r[ds] = c
33652 r.t = self.t + ds + 1
33653 r.s = self.s
33654 r.clamp()
33655}
8b095871 33656
9987f0c1
IC
33657// (protected) r = this >> n
33658function bnpRShiftTo(n, r) {
33659 var self = this
33660 r.s = self.s
33661 var ds = Math.floor(n / self.DB)
33662 if (ds >= self.t) {
33663 r.t = 0
33664 return
8b095871 33665 }
9987f0c1
IC
33666 var bs = n % self.DB
33667 var cbs = self.DB - bs
33668 var bm = (1 << bs) - 1
33669 r[0] = self[ds] >> bs
33670 for (var i = ds + 1; i < self.t; ++i) {
33671 r[i - ds - 1] |= (self[i] & bm) << cbs
33672 r[i - ds] = self[i] >> bs
33673 }
33674 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33675 r.t = self.t - ds
33676 r.clamp()
33677}
8b095871 33678
9987f0c1
IC
33679// (protected) r = this - a
33680function bnpSubTo(a, r) {
33681 var self = this
33682 var i = 0,
33683 c = 0,
33684 m = Math.min(a.t, self.t)
33685 while (i < m) {
33686 c += self[i] - a[i]
33687 r[i++] = c & self.DM
33688 c >>= self.DB
8b095871 33689 }
9987f0c1
IC
33690 if (a.t < self.t) {
33691 c -= a.s
33692 while (i < self.t) {
33693 c += self[i]
33694 r[i++] = c & self.DM
33695 c >>= self.DB
33696 }
33697 c += self.s
33698 } else {
33699 c += self.s
33700 while (i < a.t) {
33701 c -= a[i]
33702 r[i++] = c & self.DM
33703 c >>= self.DB
33704 }
33705 c -= a.s
33706 }
33707 r.s = (c < 0) ? -1 : 0
33708 if (c < -1) r[i++] = self.DV + c
33709 else if (c > 0) r[i++] = c
33710 r.t = i
33711 r.clamp()
8b095871
IC
33712}
33713
9987f0c1
IC
33714// (protected) r = this * a, r != this,a (HAC 14.12)
33715// "this" should be the larger one if appropriate.
33716function bnpMultiplyTo(a, r) {
33717 var x = this.abs(),
33718 y = a.abs()
33719 var i = x.t
33720 r.t = i + y.t
33721 while (--i >= 0) r[i] = 0
33722 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33723 r.s = 0
33724 r.clamp()
33725 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33726}
8b095871 33727
9987f0c1
IC
33728// (protected) r = this^2, r != this (HAC 14.16)
33729function bnpSquareTo(r) {
33730 var x = this.abs()
33731 var i = r.t = 2 * x.t
33732 while (--i >= 0) r[i] = 0
33733 for (i = 0; i < x.t - 1; ++i) {
33734 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33735 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33736 r[i + x.t] -= x.DV
33737 r[i + x.t + 1] = 1
33738 }
33739 }
33740 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33741 r.s = 0
33742 r.clamp()
33743}
8b095871 33744
9987f0c1
IC
33745// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33746// r != q, this != m. q or r may be null.
33747function bnpDivRemTo(m, q, r) {
33748 var self = this
33749 var pm = m.abs()
33750 if (pm.t <= 0) return
33751 var pt = self.abs()
33752 if (pt.t < pm.t) {
33753 if (q != null) q.fromInt(0)
33754 if (r != null) self.copyTo(r)
33755 return
33756 }
33757 if (r == null) r = new BigInteger()
33758 var y = new BigInteger(),
33759 ts = self.s,
33760 ms = m.s
33761 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33762 if (nsh > 0) {
33763 pm.lShiftTo(nsh, y)
33764 pt.lShiftTo(nsh, r)
33765 } else {
33766 pm.copyTo(y)
33767 pt.copyTo(r)
33768 }
33769 var ys = y.t
33770 var y0 = y[ys - 1]
33771 if (y0 == 0) return
33772 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33773 var d1 = self.FV / yt,
33774 d2 = (1 << self.F1) / yt,
33775 e = 1 << self.F2
33776 var i = r.t,
33777 j = i - ys,
33778 t = (q == null) ? new BigInteger() : q
33779 y.dlShiftTo(j, t)
33780 if (r.compareTo(t) >= 0) {
33781 r[r.t++] = 1
33782 r.subTo(t, r)
33783 }
33784 BigInteger.ONE.dlShiftTo(ys, t)
33785 t.subTo(y, y); // "negative" y so we can replace sub with am later
33786 while (y.t < ys) y[y.t++] = 0
33787 while (--j >= 0) {
33788 // Estimate quotient digit
33789 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33790 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33791 y.dlShiftTo(j, t)
33792 r.subTo(t, r)
33793 while (r[i] < --qd) r.subTo(t, r)
33794 }
33795 }
33796 if (q != null) {
33797 r.drShiftTo(ys, q)
33798 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33799 }
33800 r.t = ys
33801 r.clamp()
33802 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33803 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33804}
8b095871 33805
9987f0c1
IC
33806// (public) this mod a
33807function bnMod(a) {
33808 var r = new BigInteger()
33809 this.abs()
33810 .divRemTo(a, null, r)
33811 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33812 return r
33813}
8b095871 33814
9987f0c1
IC
33815// Modular reduction using "classic" algorithm
33816function Classic(m) {
33817 this.m = m
8b095871
IC
33818}
33819
9987f0c1
IC
33820function cConvert(x) {
33821 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33822 else return x
8b095871
IC
33823}
33824
9987f0c1
IC
33825function cRevert(x) {
33826 return x
33827}
8b095871 33828
9987f0c1
IC
33829function cReduce(x) {
33830 x.divRemTo(this.m, null, x)
8b095871
IC
33831}
33832
9987f0c1
IC
33833function cMulTo(x, y, r) {
33834 x.multiplyTo(y, r)
33835 this.reduce(r)
8b095871
IC
33836}
33837
9987f0c1
IC
33838function cSqrTo(x, r) {
33839 x.squareTo(r)
33840 this.reduce(r)
33841}
8b095871 33842
9987f0c1
IC
33843Classic.prototype.convert = cConvert
33844Classic.prototype.revert = cRevert
33845Classic.prototype.reduce = cReduce
33846Classic.prototype.mulTo = cMulTo
33847Classic.prototype.sqrTo = cSqrTo
8b095871 33848
9987f0c1
IC
33849// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33850// justification:
33851// xy == 1 (mod m)
33852// xy = 1+km
33853// xy(2-xy) = (1+km)(1-km)
33854// x[y(2-xy)] = 1-k^2m^2
33855// x[y(2-xy)] == 1 (mod m^2)
33856// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33857// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33858// JS multiply "overflows" differently from C/C++, so care is needed here.
33859function bnpInvDigit() {
33860 if (this.t < 1) return 0
33861 var x = this[0]
33862 if ((x & 1) == 0) return 0
33863 var y = x & 3; // y == 1/x mod 2^2
33864 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
33865 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
33866 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
33867 // last step - calculate inverse mod DV directly
33868 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
33869 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
33870 // we really want the negative inverse, and -DV < y < DV
33871 return (y > 0) ? this.DV - y : -y
33872}
8b095871 33873
9987f0c1
IC
33874// Montgomery reduction
33875function Montgomery(m) {
33876 this.m = m
33877 this.mp = m.invDigit()
33878 this.mpl = this.mp & 0x7fff
33879 this.mph = this.mp >> 15
33880 this.um = (1 << (m.DB - 15)) - 1
33881 this.mt2 = 2 * m.t
33882}
8b095871 33883
9987f0c1
IC
33884// xR mod m
33885function montConvert(x) {
33886 var r = new BigInteger()
33887 x.abs()
33888 .dlShiftTo(this.m.t, r)
33889 r.divRemTo(this.m, null, r)
33890 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
33891 return r
8b095871
IC
33892}
33893
9987f0c1
IC
33894// x/R mod m
33895function montRevert(x) {
33896 var r = new BigInteger()
33897 x.copyTo(r)
33898 this.reduce(r)
33899 return r
8b095871
IC
33900}
33901
9987f0c1
IC
33902// x = x/R mod m (HAC 14.32)
33903function montReduce(x) {
33904 while (x.t <= this.mt2) // pad x so am has enough room later
33905 x[x.t++] = 0
33906 for (var i = 0; i < this.m.t; ++i) {
33907 // faster way of calculating u0 = x[i]*mp mod DV
33908 var j = x[i] & 0x7fff
33909 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
33910 // use am to combine the multiply-shift-add into one call
33911 j = i + this.m.t
33912 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
33913 // propagate carry
33914 while (x[j] >= x.DV) {
33915 x[j] -= x.DV
33916 x[++j]++
33917 }
8b095871 33918 }
9987f0c1
IC
33919 x.clamp()
33920 x.drShiftTo(this.m.t, x)
33921 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
33922}
33923
9987f0c1
IC
33924// r = "x^2/R mod m"; x != r
33925function montSqrTo(x, r) {
33926 x.squareTo(r)
33927 this.reduce(r)
33928}
8b095871 33929
9987f0c1
IC
33930// r = "xy/R mod m"; x,y != r
33931function montMulTo(x, y, r) {
33932 x.multiplyTo(y, r)
33933 this.reduce(r)
33934}
8b095871 33935
9987f0c1
IC
33936Montgomery.prototype.convert = montConvert
33937Montgomery.prototype.revert = montRevert
33938Montgomery.prototype.reduce = montReduce
33939Montgomery.prototype.mulTo = montMulTo
33940Montgomery.prototype.sqrTo = montSqrTo
8b095871 33941
9987f0c1
IC
33942// (protected) true iff this is even
33943function bnpIsEven() {
33944 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
33945}
8b095871 33946
9987f0c1
IC
33947// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
33948function bnpExp(e, z) {
33949 if (e > 0xffffffff || e < 1) return BigInteger.ONE
33950 var r = new BigInteger(),
33951 r2 = new BigInteger(),
33952 g = z.convert(this),
33953 i = nbits(e) - 1
33954 g.copyTo(r)
33955 while (--i >= 0) {
33956 z.sqrTo(r, r2)
33957 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
33958 else {
33959 var t = r
33960 r = r2
33961 r2 = t
8b095871 33962 }
8b095871 33963 }
9987f0c1 33964 return z.revert(r)
8b095871
IC
33965}
33966
9987f0c1
IC
33967// (public) this^e % m, 0 <= e < 2^32
33968function bnModPowInt(e, m) {
33969 var z
33970 if (e < 256 || m.isEven()) z = new Classic(m)
33971 else z = new Montgomery(m)
33972 return this.exp(e, z)
33973}
8b095871 33974
9987f0c1
IC
33975// protected
33976proto.copyTo = bnpCopyTo
33977proto.fromInt = bnpFromInt
33978proto.fromString = bnpFromString
33979proto.clamp = bnpClamp
33980proto.dlShiftTo = bnpDLShiftTo
33981proto.drShiftTo = bnpDRShiftTo
33982proto.lShiftTo = bnpLShiftTo
33983proto.rShiftTo = bnpRShiftTo
33984proto.subTo = bnpSubTo
33985proto.multiplyTo = bnpMultiplyTo
33986proto.squareTo = bnpSquareTo
33987proto.divRemTo = bnpDivRemTo
33988proto.invDigit = bnpInvDigit
33989proto.isEven = bnpIsEven
33990proto.exp = bnpExp
8b095871 33991
9987f0c1
IC
33992// public
33993proto.toString = bnToString
33994proto.negate = bnNegate
33995proto.abs = bnAbs
33996proto.compareTo = bnCompareTo
33997proto.bitLength = bnBitLength
33998proto.byteLength = bnByteLength
33999proto.mod = bnMod
34000proto.modPowInt = bnModPowInt
8b095871 34001
9987f0c1
IC
34002// (public)
34003function bnClone() {
34004 var r = new BigInteger()
34005 this.copyTo(r)
34006 return r
34007}
8b095871 34008
9987f0c1
IC
34009// (public) return value as integer
34010function bnIntValue() {
34011 if (this.s < 0) {
34012 if (this.t == 1) return this[0] - this.DV
34013 else if (this.t == 0) return -1
34014 } else if (this.t == 1) return this[0]
34015 else if (this.t == 0) return 0
34016 // assumes 16 < DB < 32
34017 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34018}
8b095871 34019
9987f0c1
IC
34020// (public) return value as byte
34021function bnByteValue() {
34022 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34023}
8b095871 34024
9987f0c1
IC
34025// (public) return value as short (assumes DB>=16)
34026function bnShortValue() {
34027 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34028}
8b095871 34029
9987f0c1
IC
34030// (protected) return x s.t. r^x < DV
34031function bnpChunkSize(r) {
34032 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
34033}
34034
9987f0c1
IC
34035// (public) 0 if this == 0, 1 if this > 0
34036function bnSigNum() {
34037 if (this.s < 0) return -1
34038 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34039 else return 1
8b095871
IC
34040}
34041
9987f0c1
IC
34042// (protected) convert to radix string
34043function bnpToRadix(b) {
34044 if (b == null) b = 10
34045 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34046 var cs = this.chunkSize(b)
34047 var a = Math.pow(b, cs)
34048 var d = nbv(a),
34049 y = new BigInteger(),
34050 z = new BigInteger(),
34051 r = ""
34052 this.divRemTo(d, y, z)
34053 while (y.signum() > 0) {
34054 r = (a + z.intValue())
34055 .toString(b)
34056 .substr(1) + r
34057 y.divRemTo(d, y, z)
8b095871 34058 }
9987f0c1
IC
34059 return z.intValue()
34060 .toString(b) + r
8b095871
IC
34061}
34062
9987f0c1
IC
34063// (protected) convert from radix string
34064function bnpFromRadix(s, b) {
34065 var self = this
34066 self.fromInt(0)
34067 if (b == null) b = 10
34068 var cs = self.chunkSize(b)
34069 var d = Math.pow(b, cs),
34070 mi = false,
34071 j = 0,
34072 w = 0
34073 for (var i = 0; i < s.length; ++i) {
34074 var x = intAt(s, i)
34075 if (x < 0) {
34076 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34077 continue
34078 }
34079 w = b * w + x
34080 if (++j >= cs) {
34081 self.dMultiply(d)
34082 self.dAddOffset(w, 0)
34083 j = 0
34084 w = 0
34085 }
8b095871 34086 }
9987f0c1
IC
34087 if (j > 0) {
34088 self.dMultiply(Math.pow(b, j))
34089 self.dAddOffset(w, 0)
34090 }
34091 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
34092}
34093
9987f0c1
IC
34094// (protected) alternate constructor
34095function bnpFromNumber(a, b, c) {
34096 var self = this
34097 if ("number" == typeof b) {
34098 // new BigInteger(int,int,RNG)
34099 if (a < 2) self.fromInt(1)
34100 else {
34101 self.fromNumber(a, c)
34102 if (!self.testBit(a - 1)) // force MSB set
34103 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34104 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34105 while (!self.isProbablePrime(b)) {
34106 self.dAddOffset(2, 0)
34107 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34108 }
34109 }
34110 } else {
34111 // new BigInteger(int,RNG)
34112 var x = new Array(),
34113 t = a & 7
34114 x.length = (a >> 3) + 1
34115 b.nextBytes(x)
34116 if (t > 0) x[0] &= ((1 << t) - 1)
34117 else x[0] = 0
34118 self.fromString(x, 256)
34119 }
8b095871 34120}
8b095871 34121
9987f0c1
IC
34122// (public) convert to bigendian byte array
34123function bnToByteArray() {
34124 var self = this
34125 var i = self.t,
34126 r = new Array()
34127 r[0] = self.s
34128 var p = self.DB - (i * self.DB) % 8,
34129 d, k = 0
34130 if (i-- > 0) {
34131 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34132 r[k++] = d | (self.s << (self.DB - p))
34133 while (i >= 0) {
34134 if (p < 8) {
34135 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34136 d |= self[--i] >> (p += self.DB - 8)
34137 } else {
34138 d = (self[i] >> (p -= 8)) & 0xff
34139 if (p <= 0) {
34140 p += self.DB
34141 --i
34142 }
34143 }
34144 if ((d & 0x80) != 0) d |= -256
34145 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34146 if (k > 0 || d != self.s) r[k++] = d
34147 }
34148 }
34149 return r
8b095871 34150}
8b095871 34151
9987f0c1
IC
34152function bnEquals(a) {
34153 return (this.compareTo(a) == 0)
8b095871 34154}
8b095871 34155
9987f0c1
IC
34156function bnMin(a) {
34157 return (this.compareTo(a) < 0) ? this : a
8b095871 34158}
8b095871 34159
9987f0c1
IC
34160function bnMax(a) {
34161 return (this.compareTo(a) > 0) ? this : a
8b095871 34162}
8b095871 34163
9987f0c1
IC
34164// (protected) r = this op a (bitwise)
34165function bnpBitwiseTo(a, op, r) {
34166 var self = this
34167 var i, f, m = Math.min(a.t, self.t)
34168 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34169 if (a.t < self.t) {
34170 f = a.s & self.DM
34171 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34172 r.t = self.t
34173 } else {
34174 f = self.s & self.DM
34175 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34176 r.t = a.t
34177 }
34178 r.s = op(self.s, a.s)
34179 r.clamp()
8b095871 34180}
8b095871 34181
9987f0c1
IC
34182// (public) this & a
34183function op_and(x, y) {
34184 return x & y
8b095871 34185}
8b095871 34186
9987f0c1
IC
34187function bnAnd(a) {
34188 var r = new BigInteger()
34189 this.bitwiseTo(a, op_and, r)
34190 return r
8b095871 34191}
8b095871 34192
9987f0c1
IC
34193// (public) this | a
34194function op_or(x, y) {
34195 return x | y
8b095871 34196}
8b095871 34197
9987f0c1
IC
34198function bnOr(a) {
34199 var r = new BigInteger()
34200 this.bitwiseTo(a, op_or, r)
34201 return r
8b095871 34202}
8b095871 34203
9987f0c1
IC
34204// (public) this ^ a
34205function op_xor(x, y) {
34206 return x ^ y
8b095871 34207}
8b095871 34208
9987f0c1
IC
34209function bnXor(a) {
34210 var r = new BigInteger()
34211 this.bitwiseTo(a, op_xor, r)
34212 return r
8b095871 34213}
8b095871 34214
9987f0c1
IC
34215// (public) this & ~a
34216function op_andnot(x, y) {
34217 return x & ~y
8b095871 34218}
8b095871 34219
9987f0c1
IC
34220function bnAndNot(a) {
34221 var r = new BigInteger()
34222 this.bitwiseTo(a, op_andnot, r)
34223 return r
8b095871 34224}
8b095871 34225
9987f0c1
IC
34226// (public) ~this
34227function bnNot() {
34228 var r = new BigInteger()
34229 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34230 r.t = this.t
34231 r.s = ~this.s
34232 return r
8b095871 34233}
8b095871 34234
9987f0c1
IC
34235// (public) this << n
34236function bnShiftLeft(n) {
34237 var r = new BigInteger()
34238 if (n < 0) this.rShiftTo(-n, r)
34239 else this.lShiftTo(n, r)
34240 return r
8b095871 34241}
8b095871 34242
9987f0c1
IC
34243// (public) this >> n
34244function bnShiftRight(n) {
34245 var r = new BigInteger()
34246 if (n < 0) this.lShiftTo(-n, r)
34247 else this.rShiftTo(n, r)
34248 return r
8b095871
IC
34249}
34250
9987f0c1
IC
34251// return index of lowest 1-bit in x, x < 2^31
34252function lbit(x) {
34253 if (x == 0) return -1
34254 var r = 0
34255 if ((x & 0xffff) == 0) {
34256 x >>= 16
34257 r += 16
8b095871 34258 }
9987f0c1
IC
34259 if ((x & 0xff) == 0) {
34260 x >>= 8
34261 r += 8
8b095871 34262 }
9987f0c1
IC
34263 if ((x & 0xf) == 0) {
34264 x >>= 4
34265 r += 4
8b095871 34266 }
9987f0c1
IC
34267 if ((x & 3) == 0) {
34268 x >>= 2
34269 r += 2
34270 }
34271 if ((x & 1) == 0)++r
34272 return r
34273}
8b095871 34274
9987f0c1
IC
34275// (public) returns index of lowest 1-bit (or -1 if none)
34276function bnGetLowestSetBit() {
34277 for (var i = 0; i < this.t; ++i)
34278 if (this[i] != 0) return i * this.DB + lbit(this[i])
34279 if (this.s < 0) return this.t * this.DB
34280 return -1
34281}
8b095871 34282
9987f0c1
IC
34283// return number of 1 bits in x
34284function cbit(x) {
34285 var r = 0
34286 while (x != 0) {
34287 x &= x - 1
34288 ++r
8b095871 34289 }
9987f0c1
IC
34290 return r
34291}
8b095871 34292
9987f0c1
IC
34293// (public) return number of set bits
34294function bnBitCount() {
34295 var r = 0,
34296 x = this.s & this.DM
34297 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34298 return r
34299}
8b095871 34300
9987f0c1
IC
34301// (public) true iff nth bit is set
34302function bnTestBit(n) {
34303 var j = Math.floor(n / this.DB)
34304 if (j >= this.t) return (this.s != 0)
34305 return ((this[j] & (1 << (n % this.DB))) != 0)
34306}
8b095871 34307
9987f0c1
IC
34308// (protected) this op (1<<n)
34309function bnpChangeBit(n, op) {
34310 var r = BigInteger.ONE.shiftLeft(n)
34311 this.bitwiseTo(r, op, r)
34312 return r
34313}
8b095871 34314
9987f0c1
IC
34315// (public) this | (1<<n)
34316function bnSetBit(n) {
34317 return this.changeBit(n, op_or)
34318}
8b095871 34319
9987f0c1
IC
34320// (public) this & ~(1<<n)
34321function bnClearBit(n) {
34322 return this.changeBit(n, op_andnot)
34323}
8b095871 34324
9987f0c1
IC
34325// (public) this ^ (1<<n)
34326function bnFlipBit(n) {
34327 return this.changeBit(n, op_xor)
34328}
8b095871 34329
9987f0c1
IC
34330// (protected) r = this + a
34331function bnpAddTo(a, r) {
34332 var self = this
8b095871 34333
9987f0c1
IC
34334 var i = 0,
34335 c = 0,
34336 m = Math.min(a.t, self.t)
34337 while (i < m) {
34338 c += self[i] + a[i]
34339 r[i++] = c & self.DM
34340 c >>= self.DB
34341 }
34342 if (a.t < self.t) {
34343 c += a.s
34344 while (i < self.t) {
34345 c += self[i]
34346 r[i++] = c & self.DM
34347 c >>= self.DB
34348 }
34349 c += self.s
34350 } else {
34351 c += self.s
34352 while (i < a.t) {
34353 c += a[i]
34354 r[i++] = c & self.DM
34355 c >>= self.DB
34356 }
34357 c += a.s
34358 }
34359 r.s = (c < 0) ? -1 : 0
34360 if (c > 0) r[i++] = c
34361 else if (c < -1) r[i++] = self.DV + c
34362 r.t = i
34363 r.clamp()
34364}
8b095871 34365
9987f0c1
IC
34366// (public) this + a
34367function bnAdd(a) {
34368 var r = new BigInteger()
34369 this.addTo(a, r)
34370 return r
34371}
8b095871 34372
9987f0c1
IC
34373// (public) this - a
34374function bnSubtract(a) {
34375 var r = new BigInteger()
34376 this.subTo(a, r)
34377 return r
34378}
8b095871 34379
9987f0c1
IC
34380// (public) this * a
34381function bnMultiply(a) {
34382 var r = new BigInteger()
34383 this.multiplyTo(a, r)
34384 return r
34385}
8b095871 34386
9987f0c1
IC
34387// (public) this^2
34388function bnSquare() {
34389 var r = new BigInteger()
34390 this.squareTo(r)
34391 return r
34392}
8b095871 34393
9987f0c1
IC
34394// (public) this / a
34395function bnDivide(a) {
34396 var r = new BigInteger()
34397 this.divRemTo(a, r, null)
34398 return r
34399}
8b095871 34400
9987f0c1
IC
34401// (public) this % a
34402function bnRemainder(a) {
34403 var r = new BigInteger()
34404 this.divRemTo(a, null, r)
34405 return r
34406}
8b095871 34407
9987f0c1
IC
34408// (public) [this/a,this%a]
34409function bnDivideAndRemainder(a) {
34410 var q = new BigInteger(),
34411 r = new BigInteger()
34412 this.divRemTo(a, q, r)
34413 return new Array(q, r)
34414}
8b095871 34415
9987f0c1
IC
34416// (protected) this *= n, this >= 0, 1 < n < DV
34417function bnpDMultiply(n) {
34418 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34419 ++this.t
34420 this.clamp()
8b095871
IC
34421}
34422
9987f0c1
IC
34423// (protected) this += n << w words, this >= 0
34424function bnpDAddOffset(n, w) {
34425 if (n == 0) return
34426 while (this.t <= w) this[this.t++] = 0
34427 this[w] += n
34428 while (this[w] >= this.DV) {
34429 this[w] -= this.DV
34430 if (++w >= this.t) this[this.t++] = 0
34431 ++this[w]
8b095871 34432 }
9987f0c1 34433}
8b095871 34434
9987f0c1
IC
34435// A "null" reducer
34436function NullExp() {}
8b095871 34437
9987f0c1
IC
34438function nNop(x) {
34439 return x
34440}
8b095871 34441
9987f0c1
IC
34442function nMulTo(x, y, r) {
34443 x.multiplyTo(y, r)
34444}
8b095871 34445
9987f0c1
IC
34446function nSqrTo(x, r) {
34447 x.squareTo(r)
34448}
8b095871 34449
9987f0c1
IC
34450NullExp.prototype.convert = nNop
34451NullExp.prototype.revert = nNop
34452NullExp.prototype.mulTo = nMulTo
34453NullExp.prototype.sqrTo = nSqrTo
8b095871 34454
9987f0c1
IC
34455// (public) this^e
34456function bnPow(e) {
34457 return this.exp(e, new NullExp())
34458}
8b095871 34459
9987f0c1
IC
34460// (protected) r = lower n words of "this * a", a.t <= n
34461// "this" should be the larger one if appropriate.
34462function bnpMultiplyLowerTo(a, n, r) {
34463 var i = Math.min(this.t + a.t, n)
34464 r.s = 0; // assumes a,this >= 0
34465 r.t = i
34466 while (i > 0) r[--i] = 0
34467 var j
34468 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34469 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34470 r.clamp()
34471}
8b095871 34472
9987f0c1
IC
34473// (protected) r = "this * a" without lower n words, n > 0
34474// "this" should be the larger one if appropriate.
34475function bnpMultiplyUpperTo(a, n, r) {
34476 --n
34477 var i = r.t = this.t + a.t - n
34478 r.s = 0; // assumes a,this >= 0
34479 while (--i >= 0) r[i] = 0
34480 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34481 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34482 r.clamp()
34483 r.drShiftTo(1, r)
34484}
8b095871 34485
9987f0c1
IC
34486// Barrett modular reduction
34487function Barrett(m) {
34488 // setup Barrett
34489 this.r2 = new BigInteger()
34490 this.q3 = new BigInteger()
34491 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34492 this.mu = this.r2.divide(m)
34493 this.m = m
34494}
8b095871 34495
9987f0c1
IC
34496function barrettConvert(x) {
34497 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34498 else if (x.compareTo(this.m) < 0) return x
34499 else {
34500 var r = new BigInteger()
34501 x.copyTo(r)
34502 this.reduce(r)
34503 return r
8b095871 34504 }
9987f0c1 34505}
8b095871 34506
9987f0c1
IC
34507function barrettRevert(x) {
34508 return x
34509}
8b095871 34510
9987f0c1
IC
34511// x = x mod m (HAC 14.42)
34512function barrettReduce(x) {
34513 var self = this
34514 x.drShiftTo(self.m.t - 1, self.r2)
34515 if (x.t > self.m.t + 1) {
34516 x.t = self.m.t + 1
34517 x.clamp()
8b095871 34518 }
9987f0c1
IC
34519 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34520 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34521 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34522 x.subTo(self.r2, x)
34523 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34524}
8b095871 34525
9987f0c1
IC
34526// r = x^2 mod m; x != r
34527function barrettSqrTo(x, r) {
34528 x.squareTo(r)
34529 this.reduce(r)
34530}
8b095871 34531
9987f0c1
IC
34532// r = x*y mod m; x,y != r
34533function barrettMulTo(x, y, r) {
34534 x.multiplyTo(y, r)
34535 this.reduce(r)
34536}
8b095871 34537
9987f0c1
IC
34538Barrett.prototype.convert = barrettConvert
34539Barrett.prototype.revert = barrettRevert
34540Barrett.prototype.reduce = barrettReduce
34541Barrett.prototype.mulTo = barrettMulTo
34542Barrett.prototype.sqrTo = barrettSqrTo
8b095871 34543
9987f0c1
IC
34544// (public) this^e % m (HAC 14.85)
34545function bnModPow(e, m) {
34546 var i = e.bitLength(),
34547 k, r = nbv(1),
34548 z
34549 if (i <= 0) return r
34550 else if (i < 18) k = 1
34551 else if (i < 48) k = 3
34552 else if (i < 144) k = 4
34553 else if (i < 768) k = 5
34554 else k = 6
34555 if (i < 8)
34556 z = new Classic(m)
34557 else if (m.isEven())
34558 z = new Barrett(m)
34559 else
34560 z = new Montgomery(m)
8b095871 34561
9987f0c1
IC
34562 // precomputation
34563 var g = new Array(),
34564 n = 3,
34565 k1 = k - 1,
34566 km = (1 << k) - 1
34567 g[1] = z.convert(this)
34568 if (k > 1) {
34569 var g2 = new BigInteger()
34570 z.sqrTo(g[1], g2)
34571 while (n <= km) {
34572 g[n] = new BigInteger()
34573 z.mulTo(g2, g[n - 2], g[n])
34574 n += 2
8b095871 34575 }
9987f0c1 34576 }
8b095871 34577
9987f0c1
IC
34578 var j = e.t - 1,
34579 w, is1 = true,
34580 r2 = new BigInteger(),
34581 t
34582 i = nbits(e[j]) - 1
34583 while (j >= 0) {
34584 if (i >= k1) w = (e[j] >> (i - k1)) & km
34585 else {
34586 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34587 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
34588 }
34589
9987f0c1
IC
34590 n = k
34591 while ((w & 1) == 0) {
34592 w >>= 1
34593 --n
34594 }
34595 if ((i -= n) < 0) {
34596 i += this.DB
34597 --j
34598 }
34599 if (is1) { // ret == 1, don't bother squaring or multiplying it
34600 g[w].copyTo(r)
34601 is1 = false
34602 } else {
34603 while (n > 1) {
34604 z.sqrTo(r, r2)
34605 z.sqrTo(r2, r)
34606 n -= 2
34607 }
34608 if (n > 0) z.sqrTo(r, r2)
34609 else {
34610 t = r
34611 r = r2
34612 r2 = t
34613 }
34614 z.mulTo(r2, g[w], r)
8b095871 34615 }
8b095871 34616
9987f0c1
IC
34617 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34618 z.sqrTo(r, r2)
34619 t = r
34620 r = r2
34621 r2 = t
34622 if (--i < 0) {
34623 i = this.DB - 1
34624 --j
34625 }
34626 }
34627 }
34628 return z.revert(r)
8b095871
IC
34629}
34630
9987f0c1
IC
34631// (public) gcd(this,a) (HAC 14.54)
34632function bnGCD(a) {
34633 var x = (this.s < 0) ? this.negate() : this.clone()
34634 var y = (a.s < 0) ? a.negate() : a.clone()
34635 if (x.compareTo(y) < 0) {
34636 var t = x
34637 x = y
34638 y = t
34639 }
34640 var i = x.getLowestSetBit(),
34641 g = y.getLowestSetBit()
34642 if (g < 0) return x
34643 if (i < g) g = i
34644 if (g > 0) {
34645 x.rShiftTo(g, x)
34646 y.rShiftTo(g, y)
34647 }
34648 while (x.signum() > 0) {
34649 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34650 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34651 if (x.compareTo(y) >= 0) {
34652 x.subTo(y, x)
34653 x.rShiftTo(1, x)
34654 } else {
34655 y.subTo(x, y)
34656 y.rShiftTo(1, y)
34657 }
34658 }
34659 if (g > 0) y.lShiftTo(g, y)
34660 return y
8b095871
IC
34661}
34662
9987f0c1
IC
34663// (protected) this % n, n < 2^26
34664function bnpModInt(n) {
34665 if (n <= 0) return 0
34666 var d = this.DV % n,
34667 r = (this.s < 0) ? n - 1 : 0
34668 if (this.t > 0)
34669 if (d == 0) r = this[0] % n
34670 else
34671 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34672 return r
8b095871 34673}
8b095871 34674
9987f0c1
IC
34675// (public) 1/this % m (HAC 14.61)
34676function bnModInverse(m) {
34677 var ac = m.isEven()
34678 if (this.signum() === 0) throw new Error('division by zero')
34679 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34680 var u = m.clone(),
34681 v = this.clone()
34682 var a = nbv(1),
34683 b = nbv(0),
34684 c = nbv(0),
34685 d = nbv(1)
34686 while (u.signum() != 0) {
34687 while (u.isEven()) {
34688 u.rShiftTo(1, u)
34689 if (ac) {
34690 if (!a.isEven() || !b.isEven()) {
34691 a.addTo(this, a)
34692 b.subTo(m, b)
34693 }
34694 a.rShiftTo(1, a)
34695 } else if (!b.isEven()) b.subTo(m, b)
34696 b.rShiftTo(1, b)
8b095871 34697 }
9987f0c1
IC
34698 while (v.isEven()) {
34699 v.rShiftTo(1, v)
34700 if (ac) {
34701 if (!c.isEven() || !d.isEven()) {
34702 c.addTo(this, c)
34703 d.subTo(m, d)
8b095871 34704 }
9987f0c1
IC
34705 c.rShiftTo(1, c)
34706 } else if (!d.isEven()) d.subTo(m, d)
34707 d.rShiftTo(1, d)
8b095871 34708 }
9987f0c1
IC
34709 if (u.compareTo(v) >= 0) {
34710 u.subTo(v, u)
34711 if (ac) a.subTo(c, a)
34712 b.subTo(d, b)
8b095871 34713 } else {
9987f0c1
IC
34714 v.subTo(u, v)
34715 if (ac) c.subTo(a, c)
34716 d.subTo(b, d)
8b095871
IC
34717 }
34718 }
9987f0c1
IC
34719 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34720 while (d.compareTo(m) >= 0) d.subTo(m, d)
34721 while (d.signum() < 0) d.addTo(m, d)
34722 return d
34723}
8b095871 34724
9987f0c1
IC
34725var lowprimes = [
34726 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34727 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34728 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34729 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34730 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34731 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34732 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34733 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34734 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34735 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34736 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34737]
8b095871 34738
9987f0c1 34739var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 34740
9987f0c1
IC
34741// (public) test primality with certainty >= 1-.5^t
34742function bnIsProbablePrime(t) {
34743 var i, x = this.abs()
34744 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34745 for (i = 0; i < lowprimes.length; ++i)
34746 if (x[0] == lowprimes[i]) return true
34747 return false
8b095871 34748 }
9987f0c1
IC
34749 if (x.isEven()) return false
34750 i = 1
34751 while (i < lowprimes.length) {
34752 var m = lowprimes[i],
34753 j = i + 1
34754 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34755 m = x.modInt(m)
34756 while (i < j) if (m % lowprimes[i++] == 0) return false
34757 }
34758 return x.millerRabin(t)
34759}
8b095871 34760
9987f0c1
IC
34761// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34762function bnpMillerRabin(t) {
34763 var n1 = this.subtract(BigInteger.ONE)
34764 var k = n1.getLowestSetBit()
34765 if (k <= 0) return false
34766 var r = n1.shiftRight(k)
34767 t = (t + 1) >> 1
34768 if (t > lowprimes.length) t = lowprimes.length
34769 var a = new BigInteger(null)
34770 var j, bases = []
34771 for (var i = 0; i < t; ++i) {
34772 for (;;) {
34773 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34774 if (bases.indexOf(j) == -1) break
34775 }
34776 bases.push(j)
34777 a.fromInt(j)
34778 var y = a.modPow(r, this)
34779 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34780 var j = 1
34781 while (j++ < k && y.compareTo(n1) != 0) {
34782 y = y.modPowInt(2, this)
34783 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 34784 }
9987f0c1 34785 if (y.compareTo(n1) != 0) return false
8b095871 34786 }
8b095871 34787 }
9987f0c1
IC
34788 return true
34789}
8b095871 34790
9987f0c1
IC
34791// protected
34792proto.chunkSize = bnpChunkSize
34793proto.toRadix = bnpToRadix
34794proto.fromRadix = bnpFromRadix
34795proto.fromNumber = bnpFromNumber
34796proto.bitwiseTo = bnpBitwiseTo
34797proto.changeBit = bnpChangeBit
34798proto.addTo = bnpAddTo
34799proto.dMultiply = bnpDMultiply
34800proto.dAddOffset = bnpDAddOffset
34801proto.multiplyLowerTo = bnpMultiplyLowerTo
34802proto.multiplyUpperTo = bnpMultiplyUpperTo
34803proto.modInt = bnpModInt
34804proto.millerRabin = bnpMillerRabin
8b095871 34805
9987f0c1
IC
34806// public
34807proto.clone = bnClone
34808proto.intValue = bnIntValue
34809proto.byteValue = bnByteValue
34810proto.shortValue = bnShortValue
34811proto.signum = bnSigNum
34812proto.toByteArray = bnToByteArray
34813proto.equals = bnEquals
34814proto.min = bnMin
34815proto.max = bnMax
34816proto.and = bnAnd
34817proto.or = bnOr
34818proto.xor = bnXor
34819proto.andNot = bnAndNot
34820proto.not = bnNot
34821proto.shiftLeft = bnShiftLeft
34822proto.shiftRight = bnShiftRight
34823proto.getLowestSetBit = bnGetLowestSetBit
34824proto.bitCount = bnBitCount
34825proto.testBit = bnTestBit
34826proto.setBit = bnSetBit
34827proto.clearBit = bnClearBit
34828proto.flipBit = bnFlipBit
34829proto.add = bnAdd
34830proto.subtract = bnSubtract
34831proto.multiply = bnMultiply
34832proto.divide = bnDivide
34833proto.remainder = bnRemainder
34834proto.divideAndRemainder = bnDivideAndRemainder
34835proto.modPow = bnModPow
34836proto.modInverse = bnModInverse
34837proto.pow = bnPow
34838proto.gcd = bnGCD
34839proto.isProbablePrime = bnIsProbablePrime
8b095871 34840
9987f0c1
IC
34841// JSBN-specific extension
34842proto.square = bnSquare
34843
34844// constants
34845BigInteger.ZERO = nbv(0)
34846BigInteger.ONE = nbv(1)
34847BigInteger.valueOf = nbv
8b095871 34848
9987f0c1
IC
34849module.exports = BigInteger
34850
cf6c2044 34851},{"../package.json":40}],38:[function(require,module,exports){
9987f0c1
IC
34852(function (Buffer){
34853// FIXME: Kind of a weird way to throw exceptions, consider removing
34854var assert = require('assert')
34855var BigInteger = require('./bigi')
8b095871
IC
34856
34857/**
9987f0c1 34858 * Turns a byte array into a big integer.
8b095871 34859 *
9987f0c1
IC
34860 * This function will interpret a byte array as a big integer in big
34861 * endian notation.
8b095871 34862 */
9987f0c1
IC
34863BigInteger.fromByteArrayUnsigned = function(byteArray) {
34864 // BigInteger expects a DER integer conformant byte array
34865 if (byteArray[0] & 0x80) {
34866 return new BigInteger([0].concat(byteArray))
8b095871 34867 }
8b095871 34868
9987f0c1
IC
34869 return new BigInteger(byteArray)
34870}
8b095871 34871
9987f0c1
IC
34872/**
34873 * Returns a byte array representation of the big integer.
34874 *
34875 * This returns the absolute of the contained value in big endian
34876 * form. A value of zero results in an empty array.
34877 */
34878BigInteger.prototype.toByteArrayUnsigned = function() {
34879 var byteArray = this.toByteArray()
34880 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
34881}
8b095871 34882
9987f0c1
IC
34883BigInteger.fromDERInteger = function(byteArray) {
34884 return new BigInteger(byteArray)
34885}
8b095871 34886
9987f0c1
IC
34887/*
34888 * Converts BigInteger to a DER integer representation.
34889 *
34890 * The format for this value uses the most significant bit as a sign
34891 * bit. If the most significant bit is already set and the integer is
34892 * positive, a 0x00 is prepended.
34893 *
34894 * Examples:
34895 *
34896 * 0 => 0x00
34897 * 1 => 0x01
34898 * -1 => 0xff
34899 * 127 => 0x7f
34900 * -127 => 0x81
34901 * 128 => 0x0080
34902 * -128 => 0x80
34903 * 255 => 0x00ff
34904 * -255 => 0xff01
34905 * 16300 => 0x3fac
34906 * -16300 => 0xc054
34907 * 62300 => 0x00f35c
34908 * -62300 => 0xff0ca4
34909*/
34910BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 34911
9987f0c1
IC
34912BigInteger.fromBuffer = function(buffer) {
34913 // BigInteger expects a DER integer conformant byte array
34914 if (buffer[0] & 0x80) {
34915 var byteArray = Array.prototype.slice.call(buffer)
8b095871 34916
9987f0c1 34917 return new BigInteger([0].concat(byteArray))
8b095871 34918 }
9987f0c1
IC
34919
34920 return new BigInteger(buffer)
8b095871
IC
34921}
34922
9987f0c1
IC
34923BigInteger.fromHex = function(hex) {
34924 if (hex === '') return BigInteger.ZERO
8b095871 34925
9987f0c1
IC
34926 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
34927 assert.equal(hex.length % 2, 0, 'Incomplete hex')
34928 return new BigInteger(hex, 16)
8b095871
IC
34929}
34930
9987f0c1
IC
34931BigInteger.prototype.toBuffer = function(size) {
34932 var byteArray = this.toByteArrayUnsigned()
34933 var zeros = []
8b095871 34934
9987f0c1
IC
34935 var padding = size - byteArray.length
34936 while (zeros.length < padding) zeros.push(0)
8b095871 34937
9987f0c1
IC
34938 return new Buffer(zeros.concat(byteArray))
34939}
8b095871 34940
9987f0c1
IC
34941BigInteger.prototype.toHex = function(size) {
34942 return this.toBuffer(size).toString('hex')
8b095871
IC
34943}
34944
9987f0c1 34945}).call(this,require("buffer").Buffer)
cf6c2044 34946},{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
9987f0c1 34947var BigInteger = require('./bigi')
8b095871 34948
9987f0c1
IC
34949//addons
34950require('./convert')
34951
34952module.exports = BigInteger
cf6c2044 34953},{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
9987f0c1
IC
34954module.exports={
34955 "_args": [
34956 [
34957 "bigi",
34958 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
34959 ]
34960 ],
34961 "_from": "bigi@latest",
34962 "_id": "bigi@1.4.2",
34963 "_inCache": true,
34964 "_installable": true,
34965 "_location": "/bigi",
34966 "_nodeVersion": "6.1.0",
34967 "_npmOperationalInternal": {
34968 "host": "packages-12-west.internal.npmjs.com",
34969 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
34970 },
34971 "_npmUser": {
34972 "email": "jprichardson@gmail.com",
34973 "name": "jprichardson"
34974 },
34975 "_npmVersion": "3.8.6",
34976 "_phantomChildren": {},
34977 "_requested": {
34978 "name": "bigi",
34979 "raw": "bigi",
34980 "rawSpec": "",
34981 "scope": null,
34982 "spec": "latest",
34983 "type": "tag"
34984 },
34985 "_requiredBy": [
34986 "#USER",
34987 "/bitcoinjs-lib",
34988 "/ecurve"
34989 ],
34990 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
34991 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
34992 "_shrinkwrap": null,
34993 "_spec": "bigi",
34994 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
34995 "bugs": {
34996 "url": "https://github.com/cryptocoinjs/bigi/issues"
34997 },
34998 "dependencies": {},
34999 "description": "Big integers.",
35000 "devDependencies": {
35001 "coveralls": "^2.11.2",
35002 "istanbul": "^0.3.5",
35003 "jshint": "^2.5.1",
35004 "mocha": "^2.1.0",
35005 "mochify": "^2.1.0"
35006 },
35007 "directories": {},
35008 "dist": {
35009 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35010 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35011 },
35012 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35013 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35014 "keywords": [
35015 "cryptography",
35016 "math",
35017 "bitcoin",
35018 "arbitrary",
35019 "precision",
35020 "arithmetic",
35021 "big",
35022 "integer",
35023 "int",
35024 "number",
35025 "biginteger",
35026 "bigint",
35027 "bignumber",
35028 "decimal",
35029 "float"
35030 ],
35031 "main": "./lib/index.js",
35032 "maintainers": [
35033 {
35034 "email": "boydb@midnightdesign.ws",
35035 "name": "midnightlightning"
35036 },
35037 {
35038 "email": "sidazhang89@gmail.com",
35039 "name": "sidazhang"
35040 },
35041 {
35042 "email": "npm@shesek.info",
35043 "name": "nadav"
35044 },
35045 {
35046 "email": "jprichardson@gmail.com",
35047 "name": "jprichardson"
8b095871 35048 }
9987f0c1
IC
35049 ],
35050 "name": "bigi",
35051 "optionalDependencies": {},
35052 "readme": "ERROR: No README data found!",
35053 "repository": {
35054 "type": "git",
35055 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35056 },
35057 "scripts": {
35058 "browser-test": "mochify --wd -R spec",
35059 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35060 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35061 "jshint": "jshint --config jshint.json lib/*.js ; true",
35062 "test": "_mocha -- test/*.js",
35063 "unit": "mocha"
35064 },
35065 "testling": {
35066 "browsers": [
35067 "ie/9..latest",
35068 "firefox/latest",
35069 "chrome/latest",
35070 "safari/6.0..latest",
35071 "iphone/6.0..latest",
35072 "android-browser/4.2..latest"
35073 ],
35074 "files": "test/*.js",
35075 "harness": "mocha"
35076 },
35077 "version": "1.4.2"
35078}
8b095871 35079
cf6c2044 35080},{}],41:[function(require,module,exports){
9987f0c1
IC
35081// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35082// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35083// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 35084
9987f0c1 35085var Buffer = require('safe-buffer').Buffer
8b095871 35086
9987f0c1
IC
35087function check (buffer) {
35088 if (buffer.length < 8) return false
35089 if (buffer.length > 72) return false
35090 if (buffer[0] !== 0x30) return false
35091 if (buffer[1] !== buffer.length - 2) return false
35092 if (buffer[2] !== 0x02) return false
8b095871 35093
9987f0c1
IC
35094 var lenR = buffer[3]
35095 if (lenR === 0) return false
35096 if (5 + lenR >= buffer.length) return false
35097 if (buffer[4 + lenR] !== 0x02) return false
8b095871 35098
9987f0c1
IC
35099 var lenS = buffer[5 + lenR]
35100 if (lenS === 0) return false
35101 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 35102
9987f0c1
IC
35103 if (buffer[4] & 0x80) return false
35104 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 35105
9987f0c1
IC
35106 if (buffer[lenR + 6] & 0x80) return false
35107 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35108 return true
35109}
8b095871 35110
9987f0c1
IC
35111function decode (buffer) {
35112 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35113 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35114 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35115 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35116 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 35117
9987f0c1
IC
35118 var lenR = buffer[3]
35119 if (lenR === 0) throw new Error('R length is zero')
35120 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35121 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 35122
9987f0c1
IC
35123 var lenS = buffer[5 + lenR]
35124 if (lenS === 0) throw new Error('S length is zero')
35125 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 35126
9987f0c1
IC
35127 if (buffer[4] & 0x80) throw new Error('R value is negative')
35128 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 35129
9987f0c1
IC
35130 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35131 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 35132
9987f0c1
IC
35133 // non-BIP66 - extract R, S values
35134 return {
35135 r: buffer.slice(4, 4 + lenR),
35136 s: buffer.slice(6 + lenR)
8b095871 35137 }
9987f0c1 35138}
8b095871 35139
9987f0c1
IC
35140/*
35141 * Expects r and s to be positive DER integers.
35142 *
35143 * The DER format uses the most significant bit as a sign bit (& 0x80).
35144 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35145 *
35146 * Examples:
35147 *
35148 * 0 => 0x00
35149 * 1 => 0x01
35150 * -1 => 0xff
35151 * 127 => 0x7f
35152 * -127 => 0x81
35153 * 128 => 0x0080
35154 * -128 => 0x80
35155 * 255 => 0x00ff
35156 * -255 => 0xff01
35157 * 16300 => 0x3fac
35158 * -16300 => 0xc054
35159 * 62300 => 0x00f35c
35160 * -62300 => 0xff0ca4
35161*/
35162function encode (r, s) {
35163 var lenR = r.length
35164 var lenS = s.length
35165 if (lenR === 0) throw new Error('R length is zero')
35166 if (lenS === 0) throw new Error('S length is zero')
35167 if (lenR > 33) throw new Error('R length is too long')
35168 if (lenS > 33) throw new Error('S length is too long')
35169 if (r[0] & 0x80) throw new Error('R value is negative')
35170 if (s[0] & 0x80) throw new Error('S value is negative')
35171 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35172 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 35173
9987f0c1 35174 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 35175
9987f0c1
IC
35176 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35177 signature[0] = 0x30
35178 signature[1] = signature.length - 2
35179 signature[2] = 0x02
35180 signature[3] = r.length
35181 r.copy(signature, 4)
35182 signature[4 + lenR] = 0x02
35183 signature[5 + lenR] = s.length
35184 s.copy(signature, 6 + lenR)
8b095871 35185
9987f0c1 35186 return signature
8b095871
IC
35187}
35188
9987f0c1
IC
35189module.exports = {
35190 check: check,
35191 decode: decode,
35192 encode: encode
8b095871
IC
35193}
35194
cf6c2044 35195},{"safe-buffer":128}],42:[function(require,module,exports){
9987f0c1
IC
35196module.exports={
35197 "OP_FALSE": 0,
35198 "OP_0": 0,
35199 "OP_PUSHDATA1": 76,
35200 "OP_PUSHDATA2": 77,
35201 "OP_PUSHDATA4": 78,
35202 "OP_1NEGATE": 79,
35203 "OP_RESERVED": 80,
35204 "OP_1": 81,
35205 "OP_TRUE": 81,
35206 "OP_2": 82,
35207 "OP_3": 83,
35208 "OP_4": 84,
35209 "OP_5": 85,
35210 "OP_6": 86,
35211 "OP_7": 87,
35212 "OP_8": 88,
35213 "OP_9": 89,
35214 "OP_10": 90,
35215 "OP_11": 91,
35216 "OP_12": 92,
35217 "OP_13": 93,
35218 "OP_14": 94,
35219 "OP_15": 95,
35220 "OP_16": 96,
35221
35222 "OP_NOP": 97,
35223 "OP_VER": 98,
35224 "OP_IF": 99,
35225 "OP_NOTIF": 100,
35226 "OP_VERIF": 101,
35227 "OP_VERNOTIF": 102,
35228 "OP_ELSE": 103,
35229 "OP_ENDIF": 104,
35230 "OP_VERIFY": 105,
35231 "OP_RETURN": 106,
35232
35233 "OP_TOALTSTACK": 107,
35234 "OP_FROMALTSTACK": 108,
35235 "OP_2DROP": 109,
35236 "OP_2DUP": 110,
35237 "OP_3DUP": 111,
35238 "OP_2OVER": 112,
35239 "OP_2ROT": 113,
35240 "OP_2SWAP": 114,
35241 "OP_IFDUP": 115,
35242 "OP_DEPTH": 116,
35243 "OP_DROP": 117,
35244 "OP_DUP": 118,
35245 "OP_NIP": 119,
35246 "OP_OVER": 120,
35247 "OP_PICK": 121,
35248 "OP_ROLL": 122,
35249 "OP_ROT": 123,
35250 "OP_SWAP": 124,
35251 "OP_TUCK": 125,
35252
35253 "OP_CAT": 126,
35254 "OP_SUBSTR": 127,
35255 "OP_LEFT": 128,
35256 "OP_RIGHT": 129,
35257 "OP_SIZE": 130,
35258
35259 "OP_INVERT": 131,
35260 "OP_AND": 132,
35261 "OP_OR": 133,
35262 "OP_XOR": 134,
35263 "OP_EQUAL": 135,
35264 "OP_EQUALVERIFY": 136,
35265 "OP_RESERVED1": 137,
35266 "OP_RESERVED2": 138,
35267
35268 "OP_1ADD": 139,
35269 "OP_1SUB": 140,
35270 "OP_2MUL": 141,
35271 "OP_2DIV": 142,
35272 "OP_NEGATE": 143,
35273 "OP_ABS": 144,
35274 "OP_NOT": 145,
35275 "OP_0NOTEQUAL": 146,
35276 "OP_ADD": 147,
35277 "OP_SUB": 148,
35278 "OP_MUL": 149,
35279 "OP_DIV": 150,
35280 "OP_MOD": 151,
35281 "OP_LSHIFT": 152,
35282 "OP_RSHIFT": 153,
35283
35284 "OP_BOOLAND": 154,
35285 "OP_BOOLOR": 155,
35286 "OP_NUMEQUAL": 156,
35287 "OP_NUMEQUALVERIFY": 157,
35288 "OP_NUMNOTEQUAL": 158,
35289 "OP_LESSTHAN": 159,
35290 "OP_GREATERTHAN": 160,
35291 "OP_LESSTHANOREQUAL": 161,
35292 "OP_GREATERTHANOREQUAL": 162,
35293 "OP_MIN": 163,
35294 "OP_MAX": 164,
35295
35296 "OP_WITHIN": 165,
35297
35298 "OP_RIPEMD160": 166,
35299 "OP_SHA1": 167,
35300 "OP_SHA256": 168,
35301 "OP_HASH160": 169,
35302 "OP_HASH256": 170,
35303 "OP_CODESEPARATOR": 171,
35304 "OP_CHECKSIG": 172,
35305 "OP_CHECKSIGVERIFY": 173,
35306 "OP_CHECKMULTISIG": 174,
35307 "OP_CHECKMULTISIGVERIFY": 175,
35308
35309 "OP_NOP1": 176,
35310 "OP_NOP2": 177,
35311 "OP_CHECKLOCKTIMEVERIFY": 177,
35312
35313 "OP_NOP3": 178,
35314 "OP_NOP4": 179,
35315 "OP_NOP5": 180,
35316 "OP_NOP6": 181,
35317 "OP_NOP7": 182,
35318 "OP_NOP8": 183,
35319 "OP_NOP9": 184,
35320 "OP_NOP10": 185,
35321
35322 "OP_PUBKEYHASH": 253,
35323 "OP_PUBKEY": 254,
35324 "OP_INVALIDOPCODE": 255
35325}
35326
cf6c2044 35327},{}],43:[function(require,module,exports){
9987f0c1
IC
35328var OPS = require('./index.json')
35329
35330var map = {}
35331for (var op in OPS) {
35332 var code = OPS[op]
35333 map[code] = op
35334}
35335
35336module.exports = map
35337
cf6c2044 35338},{"./index.json":42}],44:[function(require,module,exports){
9987f0c1 35339var Buffer = require('safe-buffer').Buffer
cf6c2044 35340var bech32 = require('bech32')
9987f0c1
IC
35341var bs58check = require('bs58check')
35342var bscript = require('./script')
cf6c2044 35343var btemplates = require('./templates')
9987f0c1
IC
35344var networks = require('./networks')
35345var typeforce = require('typeforce')
35346var types = require('./types')
8b095871 35347
9987f0c1
IC
35348function fromBase58Check (address) {
35349 var payload = bs58check.decode(address)
cf6c2044
IC
35350
35351 // TODO: 4.0.0, move to "toOutputScript"
9987f0c1
IC
35352 if (payload.length < 21) throw new TypeError(address + ' is too short')
35353 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 35354
9987f0c1
IC
35355 var version = payload.readUInt8(0)
35356 var hash = payload.slice(1)
8b095871 35357
cf6c2044
IC
35358 return { version: version, hash: hash }
35359}
35360
35361function fromBech32 (address) {
35362 var result = bech32.decode(address)
35363 var data = bech32.fromWords(result.words.slice(1))
35364
35365 return {
35366 version: result.words[0],
35367 prefix: result.prefix,
35368 data: Buffer.from(data)
35369 }
8b095871
IC
35370}
35371
9987f0c1
IC
35372function toBase58Check (hash, version) {
35373 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 35374
9987f0c1
IC
35375 var payload = Buffer.allocUnsafe(21)
35376 payload.writeUInt8(version, 0)
35377 hash.copy(payload, 1)
8b095871 35378
9987f0c1 35379 return bs58check.encode(payload)
8b095871
IC
35380}
35381
cf6c2044
IC
35382function toBech32 (data, version, prefix) {
35383 var words = bech32.toWords(data)
35384 words.unshift(version)
35385
35386 return bech32.encode(prefix, words)
35387}
35388
9987f0c1
IC
35389function fromOutputScript (outputScript, network) {
35390 network = network || networks.bitcoin
8b095871 35391
cf6c2044
IC
35392 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35393 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35394 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35395 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
8b095871 35396
9987f0c1 35397 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
35398}
35399
9987f0c1
IC
35400function toOutputScript (address, network) {
35401 network = network || networks.bitcoin
8b095871 35402
cf6c2044
IC
35403 var decode
35404 try {
35405 decode = fromBase58Check(address)
35406 } catch (e) {}
35407
35408 if (decode) {
35409 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35410 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35411 } else {
35412 try {
35413 decode = fromBech32(address)
35414 } catch (e) {}
35415
35416 if (decode) {
35417 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35418 if (decode.version === 0) {
35419 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35420 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35421 }
35422 }
35423 }
8b095871 35424
9987f0c1 35425 throw new Error(address + ' has no matching Script')
8b095871 35426}
8b095871 35427
9987f0c1
IC
35428module.exports = {
35429 fromBase58Check: fromBase58Check,
cf6c2044 35430 fromBech32: fromBech32,
9987f0c1
IC
35431 fromOutputScript: fromOutputScript,
35432 toBase58Check: toBase58Check,
cf6c2044 35433 toBech32: toBech32,
9987f0c1 35434 toOutputScript: toOutputScript
8b095871 35435}
8b095871 35436
cf6c2044 35437},{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
9987f0c1
IC
35438var Buffer = require('safe-buffer').Buffer
35439var bcrypto = require('./crypto')
35440var fastMerkleRoot = require('merkle-lib/fastRoot')
35441var typeforce = require('typeforce')
35442var types = require('./types')
35443var varuint = require('varuint-bitcoin')
8b095871 35444
9987f0c1 35445var Transaction = require('./transaction')
8b095871 35446
9987f0c1
IC
35447function Block () {
35448 this.version = 1
35449 this.prevHash = null
35450 this.merkleRoot = null
35451 this.timestamp = 0
35452 this.bits = 0
35453 this.nonce = 0
8b095871 35454}
8b095871 35455
9987f0c1
IC
35456Block.fromBuffer = function (buffer) {
35457 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 35458
9987f0c1
IC
35459 var offset = 0
35460 function readSlice (n) {
35461 offset += n
35462 return buffer.slice(offset - n, offset)
35463 }
8b095871 35464
9987f0c1
IC
35465 function readUInt32 () {
35466 var i = buffer.readUInt32LE(offset)
35467 offset += 4
35468 return i
35469 }
8b095871 35470
9987f0c1
IC
35471 function readInt32 () {
35472 var i = buffer.readInt32LE(offset)
35473 offset += 4
35474 return i
35475 }
8b095871 35476
9987f0c1
IC
35477 var block = new Block()
35478 block.version = readInt32()
35479 block.prevHash = readSlice(32)
35480 block.merkleRoot = readSlice(32)
35481 block.timestamp = readUInt32()
35482 block.bits = readUInt32()
35483 block.nonce = readUInt32()
8b095871 35484
9987f0c1 35485 if (buffer.length === 80) return block
8b095871 35486
9987f0c1
IC
35487 function readVarInt () {
35488 var vi = varuint.decode(buffer, offset)
35489 offset += varuint.decode.bytes
35490 return vi
35491 }
8b095871 35492
9987f0c1
IC
35493 function readTransaction () {
35494 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35495 offset += tx.byteLength()
35496 return tx
35497 }
8b095871 35498
9987f0c1
IC
35499 var nTransactions = readVarInt()
35500 block.transactions = []
8b095871 35501
9987f0c1
IC
35502 for (var i = 0; i < nTransactions; ++i) {
35503 var tx = readTransaction()
35504 block.transactions.push(tx)
35505 }
8b095871 35506
9987f0c1 35507 return block
8b095871
IC
35508}
35509
9987f0c1
IC
35510Block.prototype.byteLength = function (headersOnly) {
35511 if (headersOnly || !this.transactions) return 80
8b095871 35512
9987f0c1
IC
35513 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35514 return a + x.byteLength()
35515 }, 0)
8b095871
IC
35516}
35517
9987f0c1
IC
35518Block.fromHex = function (hex) {
35519 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35520}
8b095871 35521
9987f0c1
IC
35522Block.prototype.getHash = function () {
35523 return bcrypto.hash256(this.toBuffer(true))
35524}
8b095871 35525
9987f0c1
IC
35526Block.prototype.getId = function () {
35527 return this.getHash().reverse().toString('hex')
8b095871
IC
35528}
35529
9987f0c1
IC
35530Block.prototype.getUTCDate = function () {
35531 var date = new Date(0) // epoch
35532 date.setUTCSeconds(this.timestamp)
8b095871 35533
9987f0c1 35534 return date
8b095871 35535}
8b095871 35536
9987f0c1
IC
35537// TODO: buffer, offset compatibility
35538Block.prototype.toBuffer = function (headersOnly) {
35539 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35540
35541 var offset = 0
35542 function writeSlice (slice) {
35543 slice.copy(buffer, offset)
35544 offset += slice.length
35545 }
8b095871 35546
9987f0c1
IC
35547 function writeInt32 (i) {
35548 buffer.writeInt32LE(i, offset)
35549 offset += 4
35550 }
35551 function writeUInt32 (i) {
35552 buffer.writeUInt32LE(i, offset)
35553 offset += 4
35554 }
8b095871 35555
9987f0c1
IC
35556 writeInt32(this.version)
35557 writeSlice(this.prevHash)
35558 writeSlice(this.merkleRoot)
35559 writeUInt32(this.timestamp)
35560 writeUInt32(this.bits)
35561 writeUInt32(this.nonce)
8b095871 35562
9987f0c1 35563 if (headersOnly || !this.transactions) return buffer
8b095871 35564
9987f0c1
IC
35565 varuint.encode(this.transactions.length, buffer, offset)
35566 offset += varuint.encode.bytes
8b095871 35567
9987f0c1
IC
35568 this.transactions.forEach(function (tx) {
35569 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35570 tx.toBuffer(buffer, offset)
35571 offset += txSize
35572 })
8b095871 35573
9987f0c1
IC
35574 return buffer
35575}
8b095871 35576
9987f0c1
IC
35577Block.prototype.toHex = function (headersOnly) {
35578 return this.toBuffer(headersOnly).toString('hex')
35579}
8b095871 35580
9987f0c1
IC
35581Block.calculateTarget = function (bits) {
35582 var exponent = ((bits & 0xff000000) >> 24) - 3
35583 var mantissa = bits & 0x007fffff
35584 var target = Buffer.alloc(32, 0)
35585 target.writeUInt32BE(mantissa, 28 - exponent)
35586 return target
8b095871
IC
35587}
35588
9987f0c1
IC
35589Block.calculateMerkleRoot = function (transactions) {
35590 typeforce([{ getHash: types.Function }], transactions)
35591 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 35592
9987f0c1
IC
35593 var hashes = transactions.map(function (transaction) {
35594 return transaction.getHash()
35595 })
8b095871 35596
9987f0c1
IC
35597 return fastMerkleRoot(hashes, bcrypto.hash256)
35598}
8b095871 35599
9987f0c1
IC
35600Block.prototype.checkMerkleRoot = function () {
35601 if (!this.transactions) return false
8b095871 35602
9987f0c1
IC
35603 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35604 return this.merkleRoot.compare(actualMerkleRoot) === 0
35605}
8b095871 35606
9987f0c1
IC
35607Block.prototype.checkProofOfWork = function () {
35608 var hash = this.getHash().reverse()
35609 var target = Block.calculateTarget(this.bits)
8b095871 35610
9987f0c1
IC
35611 return hash.compare(target) <= 0
35612}
8b095871 35613
9987f0c1 35614module.exports = Block
8b095871 35615
cf6c2044 35616},{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
9987f0c1
IC
35617var pushdata = require('pushdata-bitcoin')
35618var varuint = require('varuint-bitcoin')
8b095871 35619
9987f0c1
IC
35620// https://github.com/feross/buffer/blob/master/index.js#L1127
35621function verifuint (value, max) {
35622 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35623 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35624 if (value > max) throw new Error('RangeError: value out of range')
35625 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
35626}
35627
9987f0c1
IC
35628function readUInt64LE (buffer, offset) {
35629 var a = buffer.readUInt32LE(offset)
35630 var b = buffer.readUInt32LE(offset + 4)
35631 b *= 0x100000000
8b095871 35632
9987f0c1 35633 verifuint(b + a, 0x001fffffffffffff)
8b095871 35634
9987f0c1 35635 return b + a
8b095871
IC
35636}
35637
9987f0c1
IC
35638function writeUInt64LE (buffer, value, offset) {
35639 verifuint(value, 0x001fffffffffffff)
8b095871 35640
9987f0c1
IC
35641 buffer.writeInt32LE(value & -1, offset)
35642 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35643 return offset + 8
8b095871
IC
35644}
35645
9987f0c1
IC
35646// TODO: remove in 4.0.0?
35647function readVarInt (buffer, offset) {
35648 var result = varuint.decode(buffer, offset)
8b095871 35649
9987f0c1
IC
35650 return {
35651 number: result,
35652 size: varuint.decode.bytes
8b095871 35653 }
9987f0c1 35654}
8b095871 35655
9987f0c1
IC
35656// TODO: remove in 4.0.0?
35657function writeVarInt (buffer, number, offset) {
35658 varuint.encode(number, buffer, offset)
35659 return varuint.encode.bytes
8b095871
IC
35660}
35661
35662module.exports = {
9987f0c1
IC
35663 pushDataSize: pushdata.encodingLength,
35664 readPushDataInt: pushdata.decode,
35665 readUInt64LE: readUInt64LE,
35666 readVarInt: readVarInt,
35667 varIntBuffer: varuint.encode,
35668 varIntSize: varuint.encodingLength,
35669 writePushDataInt: pushdata.encode,
35670 writeUInt64LE: writeUInt64LE,
35671 writeVarInt: writeVarInt
8b095871
IC
35672}
35673
cf6c2044 35674},{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
9987f0c1 35675var createHash = require('create-hash')
8b095871 35676
9987f0c1
IC
35677function ripemd160 (buffer) {
35678 return createHash('rmd160').update(buffer).digest()
35679}
8b095871 35680
9987f0c1
IC
35681function sha1 (buffer) {
35682 return createHash('sha1').update(buffer).digest()
8b095871
IC
35683}
35684
9987f0c1
IC
35685function sha256 (buffer) {
35686 return createHash('sha256').update(buffer).digest()
35687}
8b095871 35688
9987f0c1
IC
35689function hash160 (buffer) {
35690 return ripemd160(sha256(buffer))
35691}
8b095871 35692
9987f0c1
IC
35693function hash256 (buffer) {
35694 return sha256(sha256(buffer))
8b095871
IC
35695}
35696
9987f0c1
IC
35697module.exports = {
35698 hash160: hash160,
35699 hash256: hash256,
35700 ripemd160: ripemd160,
35701 sha1: sha1,
35702 sha256: sha256
8b095871
IC
35703}
35704
cf6c2044 35705},{"create-hash":87}],48:[function(require,module,exports){
9987f0c1
IC
35706var Buffer = require('safe-buffer').Buffer
35707var createHmac = require('create-hmac')
35708var typeforce = require('typeforce')
35709var types = require('./types')
8b095871 35710
9987f0c1
IC
35711var BigInteger = require('bigi')
35712var ECSignature = require('./ecsignature')
8b095871 35713
9987f0c1
IC
35714var ZERO = Buffer.alloc(1, 0)
35715var ONE = Buffer.alloc(1, 1)
8b095871 35716
9987f0c1
IC
35717var ecurve = require('ecurve')
35718var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 35719
9987f0c1
IC
35720// https://tools.ietf.org/html/rfc6979#section-3.2
35721function deterministicGenerateK (hash, x, checkSig) {
35722 typeforce(types.tuple(
35723 types.Hash256bit,
35724 types.Buffer256bit,
35725 types.Function
35726 ), arguments)
8b095871 35727
9987f0c1
IC
35728 // Step A, ignored as hash already provided
35729 // Step B
35730 // Step C
35731 var k = Buffer.alloc(32, 0)
35732 var v = Buffer.alloc(32, 1)
8b095871 35733
9987f0c1
IC
35734 // Step D
35735 k = createHmac('sha256', k)
35736 .update(v)
35737 .update(ZERO)
35738 .update(x)
35739 .update(hash)
35740 .digest()
8b095871 35741
9987f0c1
IC
35742 // Step E
35743 v = createHmac('sha256', k).update(v).digest()
8b095871 35744
9987f0c1
IC
35745 // Step F
35746 k = createHmac('sha256', k)
35747 .update(v)
35748 .update(ONE)
35749 .update(x)
35750 .update(hash)
35751 .digest()
8b095871 35752
9987f0c1
IC
35753 // Step G
35754 v = createHmac('sha256', k).update(v).digest()
8b095871 35755
9987f0c1
IC
35756 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35757 // Step H2b
35758 v = createHmac('sha256', k).update(v).digest()
8b095871 35759
9987f0c1 35760 var T = BigInteger.fromBuffer(v)
8b095871 35761
9987f0c1
IC
35762 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35763 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35764 k = createHmac('sha256', k)
35765 .update(v)
35766 .update(ZERO)
35767 .digest()
35768
35769 v = createHmac('sha256', k).update(v).digest()
35770
35771 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35772 // Step H2b again
35773 v = createHmac('sha256', k).update(v).digest()
35774 T = BigInteger.fromBuffer(v)
8b095871
IC
35775 }
35776
9987f0c1 35777 return T
8b095871
IC
35778}
35779
9987f0c1 35780var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 35781
9987f0c1
IC
35782function sign (hash, d) {
35783 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 35784
9987f0c1
IC
35785 var x = d.toBuffer(32)
35786 var e = BigInteger.fromBuffer(hash)
35787 var n = secp256k1.n
35788 var G = secp256k1.G
8b095871 35789
9987f0c1
IC
35790 var r, s
35791 deterministicGenerateK(hash, x, function (k) {
35792 var Q = G.multiply(k)
8b095871 35793
9987f0c1 35794 if (secp256k1.isInfinity(Q)) return false
8b095871 35795
9987f0c1
IC
35796 r = Q.affineX.mod(n)
35797 if (r.signum() === 0) return false
8b095871 35798
9987f0c1
IC
35799 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35800 if (s.signum() === 0) return false
8b095871 35801
9987f0c1
IC
35802 return true
35803 })
35804
35805 // enforce low S values, see bip62: 'low s values in signatures'
35806 if (s.compareTo(N_OVER_TWO) > 0) {
35807 s = n.subtract(s)
8b095871 35808 }
8b095871 35809
9987f0c1 35810 return new ECSignature(r, s)
8b095871 35811}
8b095871 35812
9987f0c1
IC
35813function verify (hash, signature, Q) {
35814 typeforce(types.tuple(
35815 types.Hash256bit,
35816 types.ECSignature,
35817 types.ECPoint
35818 ), arguments)
8b095871 35819
9987f0c1
IC
35820 var n = secp256k1.n
35821 var G = secp256k1.G
8b095871 35822
9987f0c1
IC
35823 var r = signature.r
35824 var s = signature.s
8b095871 35825
9987f0c1
IC
35826 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35827 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35828 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 35829
9987f0c1
IC
35830 // 1.4.2 H = Hash(M), already done by the user
35831 // 1.4.3 e = H
35832 var e = BigInteger.fromBuffer(hash)
8b095871 35833
9987f0c1
IC
35834 // Compute s^-1
35835 var sInv = s.modInverse(n)
8b095871 35836
9987f0c1
IC
35837 // 1.4.4 Compute u1 = es^−1 mod n
35838 // u2 = rs^−1 mod n
35839 var u1 = e.multiply(sInv).mod(n)
35840 var u2 = r.multiply(sInv).mod(n)
8b095871 35841
9987f0c1
IC
35842 // 1.4.5 Compute R = (xR, yR)
35843 // R = u1G + u2Q
35844 var R = G.multiplyTwo(u1, Q, u2)
8b095871 35845
9987f0c1
IC
35846 // 1.4.5 (cont.) Enforce R is not at infinity
35847 if (secp256k1.isInfinity(R)) return false
8b095871 35848
9987f0c1
IC
35849 // 1.4.6 Convert the field element R.x to an integer
35850 var xR = R.affineX
8b095871 35851
9987f0c1
IC
35852 // 1.4.7 Set v = xR mod n
35853 var v = xR.mod(n)
8b095871 35854
9987f0c1
IC
35855 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35856 return v.equals(r)
8b095871
IC
35857}
35858
9987f0c1
IC
35859module.exports = {
35860 deterministicGenerateK: deterministicGenerateK,
35861 sign: sign,
35862 verify: verify,
8b095871 35863
9987f0c1
IC
35864 // TODO: remove
35865 __curve: secp256k1
35866}
8b095871 35867
cf6c2044 35868},{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
9987f0c1
IC
35869var baddress = require('./address')
35870var bcrypto = require('./crypto')
35871var ecdsa = require('./ecdsa')
35872var randomBytes = require('randombytes')
35873var typeforce = require('typeforce')
35874var types = require('./types')
35875var wif = require('wif')
8b095871 35876
9987f0c1
IC
35877var NETWORKS = require('./networks')
35878var BigInteger = require('bigi')
8b095871 35879
9987f0c1
IC
35880var ecurve = require('ecurve')
35881var secp256k1 = ecdsa.__curve
8b095871 35882
9987f0c1
IC
35883function ECPair (d, Q, options) {
35884 if (options) {
35885 typeforce({
35886 compressed: types.maybe(types.Boolean),
35887 network: types.maybe(types.Network)
35888 }, options)
35889 }
8b095871 35890
9987f0c1 35891 options = options || {}
8b095871 35892
9987f0c1
IC
35893 if (d) {
35894 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
35895 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
35896 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 35897
9987f0c1
IC
35898 this.d = d
35899 } else {
35900 typeforce(types.ECPoint, Q)
8b095871 35901
9987f0c1 35902 this.__Q = Q
8b095871 35903 }
8b095871 35904
9987f0c1
IC
35905 this.compressed = options.compressed === undefined ? true : options.compressed
35906 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
35907}
35908
9987f0c1
IC
35909Object.defineProperty(ECPair.prototype, 'Q', {
35910 get: function () {
35911 if (!this.__Q && this.d) {
35912 this.__Q = secp256k1.G.multiply(this.d)
35913 }
8b095871 35914
9987f0c1 35915 return this.__Q
8b095871 35916 }
9987f0c1 35917})
8b095871 35918
9987f0c1
IC
35919ECPair.fromPublicKeyBuffer = function (buffer, network) {
35920 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 35921
9987f0c1
IC
35922 return new ECPair(null, Q, {
35923 compressed: Q.compressed,
35924 network: network
35925 })
35926}
8b095871 35927
9987f0c1
IC
35928ECPair.fromWIF = function (string, network) {
35929 var decoded = wif.decode(string)
35930 var version = decoded.version
8b095871 35931
9987f0c1
IC
35932 // list of networks?
35933 if (types.Array(network)) {
35934 network = network.filter(function (x) {
35935 return version === x.wif
35936 }).pop()
35937
35938 if (!network) throw new Error('Unknown network version')
35939
35940 // otherwise, assume a network object (or default to bitcoin)
35941 } else {
35942 network = network || NETWORKS.bitcoin
35943
35944 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
35945 }
35946
9987f0c1
IC
35947 var d = BigInteger.fromBuffer(decoded.privateKey)
35948
35949 return new ECPair(d, null, {
35950 compressed: decoded.compressed,
35951 network: network
35952 })
8b095871
IC
35953}
35954
9987f0c1
IC
35955ECPair.makeRandom = function (options) {
35956 options = options || {}
35957
35958 var rng = options.rng || randomBytes
35959
35960 var d
35961 do {
35962 var buffer = rng(32)
35963 typeforce(types.Buffer256bit, buffer)
35964
35965 d = BigInteger.fromBuffer(buffer)
35966 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
35967
35968 return new ECPair(d, null, options)
8b095871
IC
35969}
35970
9987f0c1
IC
35971ECPair.prototype.getAddress = function () {
35972 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
35973}
35974
9987f0c1
IC
35975ECPair.prototype.getNetwork = function () {
35976 return this.network
8b095871
IC
35977}
35978
9987f0c1
IC
35979ECPair.prototype.getPublicKeyBuffer = function () {
35980 return this.Q.getEncoded(this.compressed)
8b095871
IC
35981}
35982
9987f0c1
IC
35983ECPair.prototype.sign = function (hash) {
35984 if (!this.d) throw new Error('Missing private key')
35985
35986 return ecdsa.sign(hash, this.d)
8b095871
IC
35987}
35988
9987f0c1
IC
35989ECPair.prototype.toWIF = function () {
35990 if (!this.d) throw new Error('Missing private key')
35991
35992 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
35993}
35994
9987f0c1
IC
35995ECPair.prototype.verify = function (hash, signature) {
35996 return ecdsa.verify(hash, signature, this.Q)
35997}
8b095871 35998
9987f0c1 35999module.exports = ECPair
8b095871 36000
cf6c2044 36001},{"./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){
9987f0c1
IC
36002(function (Buffer){
36003var bip66 = require('bip66')
36004var typeforce = require('typeforce')
36005var types = require('./types')
8b095871 36006
9987f0c1 36007var BigInteger = require('bigi')
8b095871 36008
9987f0c1
IC
36009function ECSignature (r, s) {
36010 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 36011
9987f0c1
IC
36012 this.r = r
36013 this.s = s
36014}
36015
36016ECSignature.parseCompact = function (buffer) {
cf6c2044 36017 typeforce(types.BufferN(65), buffer)
9987f0c1
IC
36018
36019 var flagByte = buffer.readUInt8(0) - 27
36020 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36021
36022 var compressed = !!(flagByte & 4)
36023 var recoveryParam = flagByte & 3
cf6c2044 36024 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
9987f0c1
IC
36025
36026 return {
36027 compressed: compressed,
36028 i: recoveryParam,
cf6c2044 36029 signature: signature
8b095871 36030 }
9987f0c1 36031}
8b095871 36032
cf6c2044
IC
36033ECSignature.fromRSBuffer = function (buffer) {
36034 typeforce(types.BufferN(64), buffer)
36035
36036 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36037 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36038 return new ECSignature(r, s)
36039}
36040
9987f0c1
IC
36041ECSignature.fromDER = function (buffer) {
36042 var decode = bip66.decode(buffer)
36043 var r = BigInteger.fromDERInteger(decode.r)
36044 var s = BigInteger.fromDERInteger(decode.s)
8b095871 36045
9987f0c1
IC
36046 return new ECSignature(r, s)
36047}
36048
36049// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36050ECSignature.parseScriptSignature = function (buffer) {
36051 var hashType = buffer.readUInt8(buffer.length - 1)
36052 var hashTypeMod = hashType & ~0x80
36053
36054 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36055
36056 return {
36057 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36058 hashType: hashType
8b095871 36059 }
9987f0c1 36060}
8b095871 36061
9987f0c1
IC
36062ECSignature.prototype.toCompact = function (i, compressed) {
36063 if (compressed) {
36064 i += 4
36065 }
36066
36067 i += 27
36068
36069 var buffer = Buffer.alloc(65)
36070 buffer.writeUInt8(i, 0)
cf6c2044 36071 this.toRSBuffer(buffer, 1)
9987f0c1 36072 return buffer
8b095871
IC
36073}
36074
9987f0c1
IC
36075ECSignature.prototype.toDER = function () {
36076 var r = Buffer.from(this.r.toDERInteger())
36077 var s = Buffer.from(this.s.toDERInteger())
36078
36079 return bip66.encode(r, s)
36080}
36081
cf6c2044
IC
36082ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36083 buffer = buffer || Buffer.alloc(64)
36084 this.r.toBuffer(32).copy(buffer, offset)
36085 this.s.toBuffer(32).copy(buffer, offset + 32)
36086 return buffer
36087}
36088
9987f0c1
IC
36089ECSignature.prototype.toScriptSignature = function (hashType) {
36090 var hashTypeMod = hashType & ~0x80
36091 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36092
36093 var hashTypeBuffer = Buffer.alloc(1)
36094 hashTypeBuffer.writeUInt8(hashType, 0)
36095
36096 return Buffer.concat([this.toDER(), hashTypeBuffer])
36097}
36098
36099module.exports = ECSignature
8b095871
IC
36100
36101}).call(this,require("buffer").Buffer)
cf6c2044 36102},{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
9987f0c1
IC
36103var Buffer = require('safe-buffer').Buffer
36104var base58check = require('bs58check')
36105var bcrypto = require('./crypto')
36106var createHmac = require('create-hmac')
36107var typeforce = require('typeforce')
36108var types = require('./types')
36109var NETWORKS = require('./networks')
36110
36111var BigInteger = require('bigi')
36112var ECPair = require('./ecpair')
36113
36114var ecurve = require('ecurve')
36115var curve = ecurve.getCurveByName('secp256k1')
36116
36117function HDNode (keyPair, chainCode) {
36118 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36119
36120 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36121
36122 this.keyPair = keyPair
36123 this.chainCode = chainCode
36124 this.depth = 0
36125 this.index = 0
36126 this.parentFingerprint = 0x00000000
8b095871
IC
36127}
36128
9987f0c1
IC
36129HDNode.HIGHEST_BIT = 0x80000000
36130HDNode.LENGTH = 78
36131HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 36132
9987f0c1
IC
36133HDNode.fromSeedBuffer = function (seed, network) {
36134 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 36135
9987f0c1
IC
36136 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36137 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 36138
9987f0c1
IC
36139 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36140 var IL = I.slice(0, 32)
36141 var IR = I.slice(32)
8b095871 36142
9987f0c1
IC
36143 // In case IL is 0 or >= n, the master key is invalid
36144 // This is handled by the ECPair constructor
36145 var pIL = BigInteger.fromBuffer(IL)
36146 var keyPair = new ECPair(pIL, null, {
36147 network: network
36148 })
8b095871 36149
9987f0c1
IC
36150 return new HDNode(keyPair, IR)
36151}
8b095871 36152
9987f0c1
IC
36153HDNode.fromSeedHex = function (hex, network) {
36154 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
36155}
36156
9987f0c1
IC
36157HDNode.fromBase58 = function (string, networks) {
36158 var buffer = base58check.decode(string)
36159 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 36160
9987f0c1
IC
36161 // 4 bytes: version bytes
36162 var version = buffer.readUInt32BE(0)
36163 var network
8b095871 36164
9987f0c1
IC
36165 // list of networks?
36166 if (Array.isArray(networks)) {
36167 network = networks.filter(function (x) {
36168 return version === x.bip32.private ||
36169 version === x.bip32.public
36170 }).pop()
8b095871 36171
9987f0c1
IC
36172 if (!network) throw new Error('Unknown network version')
36173
36174 // otherwise, assume a network object (or default to bitcoin)
36175 } else {
36176 network = networks || NETWORKS.bitcoin
8b095871
IC
36177 }
36178
9987f0c1
IC
36179 if (version !== network.bip32.private &&
36180 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 36181
9987f0c1
IC
36182 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36183 var depth = buffer[4]
8b095871 36184
9987f0c1
IC
36185 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36186 var parentFingerprint = buffer.readUInt32BE(5)
36187 if (depth === 0) {
36188 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36189 }
8b095871 36190
9987f0c1
IC
36191 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36192 // This is encoded in MSB order. (0x00000000 if master key)
36193 var index = buffer.readUInt32BE(9)
36194 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36195
36196 // 32 bytes: the chain code
36197 var chainCode = buffer.slice(13, 45)
36198 var keyPair
36199
36200 // 33 bytes: private key data (0x00 + k)
36201 if (version === network.bip32.private) {
36202 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36203
36204 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36205 keyPair = new ECPair(d, null, { network: network })
36206
36207 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36208 } else {
36209 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36210 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36211
36212 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36213 // If not, the extended public key is invalid.
36214 curve.validate(Q)
36215
36216 keyPair = new ECPair(null, Q, { network: network })
36217 }
36218
36219 var hd = new HDNode(keyPair, chainCode)
36220 hd.depth = depth
36221 hd.index = index
36222 hd.parentFingerprint = parentFingerprint
36223
36224 return hd
8b095871
IC
36225}
36226
9987f0c1
IC
36227HDNode.prototype.getAddress = function () {
36228 return this.keyPair.getAddress()
36229}
8b095871 36230
9987f0c1
IC
36231HDNode.prototype.getIdentifier = function () {
36232 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36233}
8b095871 36234
9987f0c1
IC
36235HDNode.prototype.getFingerprint = function () {
36236 return this.getIdentifier().slice(0, 4)
36237}
8b095871 36238
9987f0c1
IC
36239HDNode.prototype.getNetwork = function () {
36240 return this.keyPair.getNetwork()
8b095871
IC
36241}
36242
9987f0c1
IC
36243HDNode.prototype.getPublicKeyBuffer = function () {
36244 return this.keyPair.getPublicKeyBuffer()
36245}
8b095871 36246
9987f0c1
IC
36247HDNode.prototype.neutered = function () {
36248 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36249 network: this.keyPair.network
36250 })
8b095871 36251
9987f0c1
IC
36252 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36253 neutered.depth = this.depth
36254 neutered.index = this.index
36255 neutered.parentFingerprint = this.parentFingerprint
8b095871 36256
9987f0c1
IC
36257 return neutered
36258}
8b095871 36259
9987f0c1
IC
36260HDNode.prototype.sign = function (hash) {
36261 return this.keyPair.sign(hash)
36262}
8b095871 36263
9987f0c1
IC
36264HDNode.prototype.verify = function (hash, signature) {
36265 return this.keyPair.verify(hash, signature)
8b095871
IC
36266}
36267
9987f0c1
IC
36268HDNode.prototype.toBase58 = function (__isPrivate) {
36269 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 36270
9987f0c1
IC
36271 // Version
36272 var network = this.keyPair.network
36273 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36274 var buffer = Buffer.allocUnsafe(78)
8b095871 36275
9987f0c1
IC
36276 // 4 bytes: version bytes
36277 buffer.writeUInt32BE(version, 0)
8b095871 36278
9987f0c1
IC
36279 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36280 buffer.writeUInt8(this.depth, 4)
36281
36282 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36283 buffer.writeUInt32BE(this.parentFingerprint, 5)
36284
36285 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36286 // This is encoded in big endian. (0x00000000 if master key)
36287 buffer.writeUInt32BE(this.index, 9)
36288
36289 // 32 bytes: the chain code
36290 this.chainCode.copy(buffer, 13)
36291
36292 // 33 bytes: the public key or private key data
36293 if (!this.isNeutered()) {
36294 // 0x00 + k for private keys
36295 buffer.writeUInt8(0, 45)
36296 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36297
36298 // 33 bytes: the public key
36299 } else {
36300 // X9.62 encoding for public keys
36301 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36302 }
36303
36304 return base58check.encode(buffer)
8b095871
IC
36305}
36306
9987f0c1
IC
36307// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36308HDNode.prototype.derive = function (index) {
36309 typeforce(types.UInt32, index)
36310
36311 var isHardened = index >= HDNode.HIGHEST_BIT
36312 var data = Buffer.allocUnsafe(37)
36313
36314 // Hardened child
36315 if (isHardened) {
36316 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 36317
9987f0c1
IC
36318 // data = 0x00 || ser256(kpar) || ser32(index)
36319 data[0] = 0x00
36320 this.keyPair.d.toBuffer(32).copy(data, 1)
36321 data.writeUInt32BE(index, 33)
8b095871 36322
9987f0c1
IC
36323 // Normal child
36324 } else {
36325 // data = serP(point(kpar)) || ser32(index)
36326 // = serP(Kpar) || ser32(index)
36327 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36328 data.writeUInt32BE(index, 33)
36329 }
8b095871 36330
9987f0c1
IC
36331 var I = createHmac('sha512', this.chainCode).update(data).digest()
36332 var IL = I.slice(0, 32)
36333 var IR = I.slice(32)
8b095871 36334
9987f0c1 36335 var pIL = BigInteger.fromBuffer(IL)
8b095871 36336
9987f0c1
IC
36337 // In case parse256(IL) >= n, proceed with the next value for i
36338 if (pIL.compareTo(curve.n) >= 0) {
36339 return this.derive(index + 1)
8b095871
IC
36340 }
36341
9987f0c1
IC
36342 // Private parent key -> private child key
36343 var derivedKeyPair
36344 if (!this.isNeutered()) {
36345 // ki = parse256(IL) + kpar (mod n)
36346 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 36347
9987f0c1
IC
36348 // In case ki == 0, proceed with the next value for i
36349 if (ki.signum() === 0) {
36350 return this.derive(index + 1)
36351 }
36352
36353 derivedKeyPair = new ECPair(ki, null, {
36354 network: this.keyPair.network
36355 })
36356
36357 // Public parent key -> public child key
36358 } else {
36359 // Ki = point(parse256(IL)) + Kpar
36360 // = G*IL + Kpar
36361 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36362
36363 // In case Ki is the point at infinity, proceed with the next value for i
36364 if (curve.isInfinity(Ki)) {
36365 return this.derive(index + 1)
36366 }
36367
36368 derivedKeyPair = new ECPair(null, Ki, {
36369 network: this.keyPair.network
36370 })
36371 }
36372
36373 var hd = new HDNode(derivedKeyPair, IR)
36374 hd.depth = this.depth + 1
36375 hd.index = index
36376 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36377
36378 return hd
8b095871
IC
36379}
36380
9987f0c1
IC
36381HDNode.prototype.deriveHardened = function (index) {
36382 typeforce(types.UInt31, index)
8b095871 36383
9987f0c1
IC
36384 // Only derives hardened private keys by default
36385 return this.derive(index + HDNode.HIGHEST_BIT)
36386}
8b095871 36387
9987f0c1
IC
36388// Private === not neutered
36389// Public === neutered
36390HDNode.prototype.isNeutered = function () {
36391 return !(this.keyPair.d)
8b095871
IC
36392}
36393
9987f0c1
IC
36394HDNode.prototype.derivePath = function (path) {
36395 typeforce(types.BIP32Path, path)
8b095871 36396
9987f0c1
IC
36397 var splitPath = path.split('/')
36398 if (splitPath[0] === 'm') {
36399 if (this.parentFingerprint) {
36400 throw new Error('Not a master node')
36401 }
8b095871 36402
9987f0c1
IC
36403 splitPath = splitPath.slice(1)
36404 }
8b095871 36405
9987f0c1
IC
36406 return splitPath.reduce(function (prevHd, indexStr) {
36407 var index
36408 if (indexStr.slice(-1) === "'") {
36409 index = parseInt(indexStr.slice(0, -1), 10)
36410 return prevHd.deriveHardened(index)
36411 } else {
36412 index = parseInt(indexStr, 10)
36413 return prevHd.derive(index)
36414 }
36415 }, this)
36416}
8b095871 36417
9987f0c1 36418module.exports = HDNode
8b095871 36419
cf6c2044
IC
36420},{"./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){
36421var script = require('./script')
36422
36423var templates = require('./templates')
36424for (var key in templates) {
36425 script[key] = templates[key]
36426}
36427
9987f0c1 36428module.exports = {
cf6c2044
IC
36429 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36430
9987f0c1
IC
36431 Block: require('./block'),
36432 ECPair: require('./ecpair'),
36433 ECSignature: require('./ecsignature'),
36434 HDNode: require('./hdnode'),
36435 Transaction: require('./transaction'),
36436 TransactionBuilder: require('./transaction_builder'),
8b095871 36437
9987f0c1 36438 address: require('./address'),
9987f0c1
IC
36439 crypto: require('./crypto'),
36440 networks: require('./networks'),
36441 opcodes: require('bitcoin-ops'),
cf6c2044 36442 script: script
8b095871
IC
36443}
36444
cf6c2044 36445},{"./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){
9987f0c1
IC
36446// https://en.bitcoin.it/wiki/List_of_address_prefixes
36447// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 36448
9987f0c1
IC
36449module.exports = {
36450 bitcoin: {
36451 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 36452 bech32: 'bc',
9987f0c1
IC
36453 bip32: {
36454 public: 0x0488b21e,
36455 private: 0x0488ade4
36456 },
36457 pubKeyHash: 0x00,
36458 scriptHash: 0x05,
36459 wif: 0x80
36460 },
36461 testnet: {
36462 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 36463 bech32: 'tb',
9987f0c1
IC
36464 bip32: {
36465 public: 0x043587cf,
36466 private: 0x04358394
36467 },
36468 pubKeyHash: 0x6f,
36469 scriptHash: 0xc4,
36470 wif: 0xef
36471 },
36472 litecoin: {
36473 messagePrefix: '\x19Litecoin Signed Message:\n',
36474 bip32: {
36475 public: 0x019da462,
36476 private: 0x019d9cfe
36477 },
36478 pubKeyHash: 0x30,
36479 scriptHash: 0x32,
36480 wif: 0xb0
36481 }
36482}
8b095871 36483
cf6c2044 36484},{}],54:[function(require,module,exports){
9987f0c1
IC
36485var Buffer = require('safe-buffer').Buffer
36486var bip66 = require('bip66')
36487var pushdata = require('pushdata-bitcoin')
36488var typeforce = require('typeforce')
36489var types = require('./types')
36490var scriptNumber = require('./script_number')
36491
36492var OPS = require('bitcoin-ops')
36493var REVERSE_OPS = require('bitcoin-ops/map')
36494var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36495
36496function isOPInt (value) {
36497 return types.Number(value) &&
36498 ((value === OPS.OP_0) ||
36499 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36500 (value === OPS.OP_1NEGATE))
8b095871
IC
36501}
36502
9987f0c1
IC
36503function isPushOnlyChunk (value) {
36504 return types.Buffer(value) || isOPInt(value)
8b095871
IC
36505}
36506
9987f0c1
IC
36507function isPushOnly (value) {
36508 return types.Array(value) && value.every(isPushOnlyChunk)
36509}
8b095871 36510
cf6c2044
IC
36511function asMinimalOP (buffer) {
36512 if (buffer.length === 0) return OPS.OP_0
36513 if (buffer.length !== 1) return
36514 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36515 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36516}
36517
9987f0c1
IC
36518function compile (chunks) {
36519 // TODO: remove me
36520 if (Buffer.isBuffer(chunks)) return chunks
8b095871 36521
9987f0c1 36522 typeforce(types.Array, chunks)
8b095871 36523
9987f0c1
IC
36524 var bufferSize = chunks.reduce(function (accum, chunk) {
36525 // data chunk
36526 if (Buffer.isBuffer(chunk)) {
36527 // adhere to BIP62.3, minimal push policy
cf6c2044 36528 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
9987f0c1
IC
36529 return accum + 1
36530 }
8b095871 36531
9987f0c1
IC
36532 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36533 }
8b095871 36534
9987f0c1
IC
36535 // opcode
36536 return accum + 1
36537 }, 0.0)
8b095871 36538
9987f0c1
IC
36539 var buffer = Buffer.allocUnsafe(bufferSize)
36540 var offset = 0
8b095871 36541
9987f0c1
IC
36542 chunks.forEach(function (chunk) {
36543 // data chunk
36544 if (Buffer.isBuffer(chunk)) {
36545 // adhere to BIP62.3, minimal push policy
cf6c2044
IC
36546 var opcode = asMinimalOP(chunk)
36547 if (opcode !== undefined) {
9987f0c1
IC
36548 buffer.writeUInt8(opcode, offset)
36549 offset += 1
36550 return
36551 }
8b095871 36552
9987f0c1 36553 offset += pushdata.encode(buffer, chunk.length, offset)
9987f0c1
IC
36554 chunk.copy(buffer, offset)
36555 offset += chunk.length
8b095871 36556
9987f0c1
IC
36557 // opcode
36558 } else {
36559 buffer.writeUInt8(chunk, offset)
36560 offset += 1
36561 }
36562 })
8b095871 36563
9987f0c1
IC
36564 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36565 return buffer
36566}
8b095871 36567
9987f0c1
IC
36568function decompile (buffer) {
36569 // TODO: remove me
36570 if (types.Array(buffer)) return buffer
8b095871 36571
9987f0c1 36572 typeforce(types.Buffer, buffer)
8b095871 36573
9987f0c1
IC
36574 var chunks = []
36575 var i = 0
8b095871 36576
9987f0c1
IC
36577 while (i < buffer.length) {
36578 var opcode = buffer[i]
8b095871 36579
9987f0c1
IC
36580 // data chunk
36581 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36582 var d = pushdata.decode(buffer, i)
8b095871 36583
9987f0c1
IC
36584 // did reading a pushDataInt fail? empty script
36585 if (d === null) return []
36586 i += d.size
8b095871 36587
9987f0c1
IC
36588 // attempt to read too much data? empty script
36589 if (i + d.number > buffer.length) return []
8b095871 36590
9987f0c1
IC
36591 var data = buffer.slice(i, i + d.number)
36592 i += d.number
8b095871 36593
cf6c2044
IC
36594 // decompile minimally
36595 var op = asMinimalOP(data)
36596 if (op !== undefined) {
36597 chunks.push(op)
36598 } else {
36599 chunks.push(data)
36600 }
8b095871 36601
9987f0c1
IC
36602 // opcode
36603 } else {
36604 chunks.push(opcode)
8b095871 36605
9987f0c1
IC
36606 i += 1
36607 }
36608 }
36609
36610 return chunks
8b095871
IC
36611}
36612
9987f0c1
IC
36613function toASM (chunks) {
36614 if (Buffer.isBuffer(chunks)) {
36615 chunks = decompile(chunks)
36616 }
8b095871 36617
9987f0c1
IC
36618 return chunks.map(function (chunk) {
36619 // data?
cf6c2044
IC
36620 if (Buffer.isBuffer(chunk)) {
36621 var op = asMinimalOP(chunk)
36622 if (op === undefined) return chunk.toString('hex')
36623 chunk = op
36624 }
8b095871 36625
9987f0c1
IC
36626 // opcode!
36627 return REVERSE_OPS[chunk]
36628 }).join(' ')
36629}
8b095871 36630
9987f0c1
IC
36631function fromASM (asm) {
36632 typeforce(types.String, asm)
8b095871 36633
9987f0c1
IC
36634 return compile(asm.split(' ').map(function (chunkStr) {
36635 // opcode?
36636 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36637 typeforce(types.Hex, chunkStr)
8b095871 36638
9987f0c1
IC
36639 // data!
36640 return Buffer.from(chunkStr, 'hex')
36641 }))
36642}
8b095871 36643
9987f0c1
IC
36644function toStack (chunks) {
36645 chunks = decompile(chunks)
36646 typeforce(isPushOnly, chunks)
8b095871 36647
9987f0c1
IC
36648 return chunks.map(function (op) {
36649 if (Buffer.isBuffer(op)) return op
36650 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36651
36652 return scriptNumber.encode(op - OP_INT_BASE)
36653 })
8b095871
IC
36654}
36655
9987f0c1
IC
36656function isCanonicalPubKey (buffer) {
36657 if (!Buffer.isBuffer(buffer)) return false
36658 if (buffer.length < 33) return false
8b095871 36659
9987f0c1
IC
36660 switch (buffer[0]) {
36661 case 0x02:
36662 case 0x03:
36663 return buffer.length === 33
36664 case 0x04:
36665 return buffer.length === 65
36666 }
8b095871 36667
9987f0c1 36668 return false
8b095871
IC
36669}
36670
9987f0c1
IC
36671function isDefinedHashType (hashType) {
36672 var hashTypeMod = hashType & ~0x80
8b095871 36673
9987f0c1
IC
36674// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36675 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
36676}
36677
9987f0c1
IC
36678function isCanonicalSignature (buffer) {
36679 if (!Buffer.isBuffer(buffer)) return false
36680 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 36681
9987f0c1 36682 return bip66.check(buffer.slice(0, -1))
8b095871
IC
36683}
36684
9987f0c1
IC
36685module.exports = {
36686 compile: compile,
36687 decompile: decompile,
36688 fromASM: fromASM,
36689 toASM: toASM,
36690 toStack: toStack,
8b095871 36691
9987f0c1 36692 number: require('./script_number'),
8b095871 36693
9987f0c1
IC
36694 isCanonicalPubKey: isCanonicalPubKey,
36695 isCanonicalSignature: isCanonicalSignature,
36696 isPushOnly: isPushOnly,
36697 isDefinedHashType: isDefinedHashType
8b095871
IC
36698}
36699
cf6c2044 36700},{"./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){
9987f0c1 36701var Buffer = require('safe-buffer').Buffer
8b095871 36702
9987f0c1
IC
36703function decode (buffer, maxLength, minimal) {
36704 maxLength = maxLength || 4
36705 minimal = minimal === undefined ? true : minimal
8b095871 36706
9987f0c1
IC
36707 var length = buffer.length
36708 if (length === 0) return 0
36709 if (length > maxLength) throw new TypeError('Script number overflow')
36710 if (minimal) {
36711 if ((buffer[length - 1] & 0x7f) === 0) {
36712 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36713 }
36714 }
8b095871 36715
9987f0c1
IC
36716 // 40-bit
36717 if (length === 5) {
36718 var a = buffer.readUInt32LE(0)
36719 var b = buffer.readUInt8(4)
8b095871 36720
9987f0c1
IC
36721 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36722 return (b * 0x100000000) + a
36723 }
8b095871 36724
9987f0c1 36725 var result = 0
8b095871 36726
9987f0c1
IC
36727 // 32-bit / 24-bit / 16-bit / 8-bit
36728 for (var i = 0; i < length; ++i) {
36729 result |= buffer[i] << (8 * i)
8b095871
IC
36730 }
36731
9987f0c1
IC
36732 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36733 return result
36734}
8b095871 36735
9987f0c1
IC
36736function scriptNumSize (i) {
36737 return i > 0x7fffffff ? 5
36738 : i > 0x7fffff ? 4
36739 : i > 0x7fff ? 3
36740 : i > 0x7f ? 2
36741 : i > 0x00 ? 1
36742 : 0
8b095871
IC
36743}
36744
9987f0c1
IC
36745function encode (number) {
36746 var value = Math.abs(number)
36747 var size = scriptNumSize(value)
36748 var buffer = Buffer.allocUnsafe(size)
36749 var negative = number < 0
8b095871 36750
9987f0c1
IC
36751 for (var i = 0; i < size; ++i) {
36752 buffer.writeUInt8(value & 0xff, i)
36753 value >>= 8
36754 }
8b095871 36755
9987f0c1
IC
36756 if (buffer[size - 1] & 0x80) {
36757 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36758 } else if (negative) {
36759 buffer[size - 1] |= 0x80
36760 }
36761
36762 return buffer
8b095871
IC
36763}
36764
9987f0c1
IC
36765module.exports = {
36766 decode: decode,
36767 encode: encode
36768}
8b095871 36769
cf6c2044 36770},{"safe-buffer":128}],56:[function(require,module,exports){
9987f0c1
IC
36771var decompile = require('../script').decompile
36772var multisig = require('./multisig')
36773var nullData = require('./nulldata')
36774var pubKey = require('./pubkey')
36775var pubKeyHash = require('./pubkeyhash')
36776var scriptHash = require('./scripthash')
36777var witnessPubKeyHash = require('./witnesspubkeyhash')
36778var witnessScriptHash = require('./witnessscripthash')
36779var witnessCommitment = require('./witnesscommitment')
36780
36781var types = {
36782 MULTISIG: 'multisig',
36783 NONSTANDARD: 'nonstandard',
36784 NULLDATA: 'nulldata',
36785 P2PK: 'pubkey',
36786 P2PKH: 'pubkeyhash',
36787 P2SH: 'scripthash',
36788 P2WPKH: 'witnesspubkeyhash',
36789 P2WSH: 'witnessscripthash',
36790 WITNESS_COMMITMENT: 'witnesscommitment'
36791}
8b095871 36792
9987f0c1
IC
36793function classifyOutput (script) {
36794 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36795 if (witnessScriptHash.output.check(script)) return types.P2WSH
36796 if (pubKeyHash.output.check(script)) return types.P2PKH
36797 if (scriptHash.output.check(script)) return types.P2SH
8b095871 36798
9987f0c1
IC
36799 // XXX: optimization, below functions .decompile before use
36800 var chunks = decompile(script)
36801 if (multisig.output.check(chunks)) return types.MULTISIG
36802 if (pubKey.output.check(chunks)) return types.P2PK
36803 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36804 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 36805
9987f0c1 36806 return types.NONSTANDARD
8b095871
IC
36807}
36808
9987f0c1
IC
36809function classifyInput (script, allowIncomplete) {
36810 // XXX: optimization, below functions .decompile before use
36811 var chunks = decompile(script)
8b095871 36812
9987f0c1
IC
36813 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36814 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36815 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36816 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 36817
9987f0c1 36818 return types.NONSTANDARD
8b095871
IC
36819}
36820
9987f0c1
IC
36821function classifyWitness (script, allowIncomplete) {
36822 // XXX: optimization, below functions .decompile before use
36823 var chunks = decompile(script)
8b095871 36824
9987f0c1
IC
36825 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36826 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 36827
9987f0c1
IC
36828 return types.NONSTANDARD
36829}
8b095871 36830
9987f0c1
IC
36831module.exports = {
36832 classifyInput: classifyInput,
36833 classifyOutput: classifyOutput,
36834 classifyWitness: classifyWitness,
36835 multisig: multisig,
36836 nullData: nullData,
36837 pubKey: pubKey,
36838 pubKeyHash: pubKeyHash,
36839 scriptHash: scriptHash,
36840 witnessPubKeyHash: witnessPubKeyHash,
36841 witnessScriptHash: witnessScriptHash,
36842 witnessCommitment: witnessCommitment,
36843 types: types
36844}
36845
cf6c2044 36846},{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
9987f0c1
IC
36847module.exports = {
36848 input: require('./input'),
36849 output: require('./output')
8b095871
IC
36850}
36851
cf6c2044 36852},{"./input":58,"./output":59}],58:[function(require,module,exports){
9987f0c1 36853// OP_0 [signatures ...]
8b095871 36854
9987f0c1
IC
36855var Buffer = require('safe-buffer').Buffer
36856var bscript = require('../../script')
cf6c2044 36857var p2mso = require('./output')
9987f0c1
IC
36858var typeforce = require('typeforce')
36859var OPS = require('bitcoin-ops')
8b095871 36860
9987f0c1
IC
36861function partialSignature (value) {
36862 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
36863}
8b095871 36864
9987f0c1
IC
36865function check (script, allowIncomplete) {
36866 var chunks = bscript.decompile(script)
36867 if (chunks.length < 2) return false
36868 if (chunks[0] !== OPS.OP_0) return false
8b095871 36869
9987f0c1
IC
36870 if (allowIncomplete) {
36871 return chunks.slice(1).every(partialSignature)
36872 }
8b095871 36873
9987f0c1 36874 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 36875}
9987f0c1 36876check.toJSON = function () { return 'multisig input' }
8b095871 36877
9987f0c1 36878var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 36879
9987f0c1
IC
36880function encodeStack (signatures, scriptPubKey) {
36881 typeforce([partialSignature], signatures)
8b095871 36882
9987f0c1 36883 if (scriptPubKey) {
cf6c2044 36884 var scriptData = p2mso.decode(scriptPubKey)
9987f0c1
IC
36885
36886 if (signatures.length < scriptData.m) {
36887 throw new TypeError('Not enough signatures provided')
36888 }
8b095871 36889
9987f0c1
IC
36890 if (signatures.length > scriptData.pubKeys.length) {
36891 throw new TypeError('Too many signatures provided')
36892 }
36893 }
36894
cf6c2044
IC
36895 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
36896 if (sig === OPS.OP_0) {
36897 return EMPTY_BUFFER
36898 }
36899 return sig
36900 }))
8b095871
IC
36901}
36902
9987f0c1
IC
36903function encode (signatures, scriptPubKey) {
36904 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
36905}
36906
9987f0c1
IC
36907function decodeStack (stack, allowIncomplete) {
36908 typeforce(check, stack, allowIncomplete)
36909 return stack.slice(1)
8b095871
IC
36910}
36911
9987f0c1
IC
36912function decode (buffer, allowIncomplete) {
36913 var stack = bscript.decompile(buffer)
36914 return decodeStack(stack, allowIncomplete)
36915}
8b095871 36916
9987f0c1
IC
36917module.exports = {
36918 check: check,
36919 decode: decode,
36920 decodeStack: decodeStack,
36921 encode: encode,
36922 encodeStack: encodeStack
36923}
8b095871 36924
cf6c2044 36925},{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
9987f0c1 36926// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 36927
9987f0c1
IC
36928var bscript = require('../../script')
36929var types = require('../../types')
36930var typeforce = require('typeforce')
36931var OPS = require('bitcoin-ops')
36932var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36933
36934function check (script, allowIncomplete) {
36935 var chunks = bscript.decompile(script)
36936
36937 if (chunks.length < 4) return false
36938 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
36939 if (!types.Number(chunks[0])) return false
36940 if (!types.Number(chunks[chunks.length - 2])) return false
36941 var m = chunks[0] - OP_INT_BASE
36942 var n = chunks[chunks.length - 2] - OP_INT_BASE
36943
36944 if (m <= 0) return false
36945 if (n > 16) return false
36946 if (m > n) return false
36947 if (n !== chunks.length - 3) return false
36948 if (allowIncomplete) return true
36949
36950 var keys = chunks.slice(1, -2)
36951 return keys.every(bscript.isCanonicalPubKey)
36952}
36953check.toJSON = function () { return 'multi-sig output' }
36954
36955function encode (m, pubKeys) {
36956 typeforce({
36957 m: types.Number,
36958 pubKeys: [bscript.isCanonicalPubKey]
36959 }, {
36960 m: m,
36961 pubKeys: pubKeys
36962 })
8b095871 36963
9987f0c1
IC
36964 var n = pubKeys.length
36965 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 36966
9987f0c1
IC
36967 return bscript.compile([].concat(
36968 OP_INT_BASE + m,
36969 pubKeys,
36970 OP_INT_BASE + n,
36971 OPS.OP_CHECKMULTISIG
36972 ))
36973}
8b095871 36974
9987f0c1
IC
36975function decode (buffer, allowIncomplete) {
36976 var chunks = bscript.decompile(buffer)
36977 typeforce(check, chunks, allowIncomplete)
8b095871 36978
9987f0c1
IC
36979 return {
36980 m: chunks[0] - OP_INT_BASE,
36981 pubKeys: chunks.slice(1, -2)
8b095871 36982 }
9987f0c1 36983}
8b095871 36984
9987f0c1
IC
36985module.exports = {
36986 check: check,
36987 decode: decode,
36988 encode: encode
36989}
8b095871 36990
cf6c2044 36991},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
9987f0c1 36992// OP_RETURN {data}
8b095871 36993
9987f0c1
IC
36994var bscript = require('../script')
36995var types = require('../types')
36996var typeforce = require('typeforce')
36997var OPS = require('bitcoin-ops')
8b095871 36998
9987f0c1
IC
36999function check (script) {
37000 var buffer = bscript.compile(script)
8b095871 37001
9987f0c1
IC
37002 return buffer.length > 1 &&
37003 buffer[0] === OPS.OP_RETURN
37004}
37005check.toJSON = function () { return 'null data output' }
8b095871 37006
9987f0c1
IC
37007function encode (data) {
37008 typeforce(types.Buffer, data)
8b095871 37009
9987f0c1
IC
37010 return bscript.compile([OPS.OP_RETURN, data])
37011}
8b095871 37012
9987f0c1
IC
37013function decode (buffer) {
37014 typeforce(check, buffer)
37015
37016 return buffer.slice(2)
37017}
8b095871 37018
9987f0c1
IC
37019module.exports = {
37020 output: {
37021 check: check,
37022 decode: decode,
37023 encode: encode
8b095871 37024 }
9987f0c1 37025}
8b095871 37026
cf6c2044
IC
37027},{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
37028arguments[4][57][0].apply(exports,arguments)
37029},{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
9987f0c1 37030// {signature}
8b095871 37031
9987f0c1 37032var bscript = require('../../script')
9987f0c1 37033var typeforce = require('typeforce')
8b095871 37034
9987f0c1
IC
37035function check (script) {
37036 var chunks = bscript.decompile(script)
8b095871 37037
9987f0c1
IC
37038 return chunks.length === 1 &&
37039 bscript.isCanonicalSignature(chunks[0])
37040}
37041check.toJSON = function () { return 'pubKey input' }
8b095871 37042
9987f0c1 37043function encodeStack (signature) {
cf6c2044 37044 typeforce(bscript.isCanonicalSignature, signature)
9987f0c1 37045 return [signature]
8b095871
IC
37046}
37047
9987f0c1
IC
37048function encode (signature) {
37049 return bscript.compile(encodeStack(signature))
37050}
8b095871 37051
9987f0c1
IC
37052function decodeStack (stack) {
37053 typeforce(check, stack)
37054 return stack[0]
37055}
8b095871 37056
9987f0c1
IC
37057function decode (buffer) {
37058 var stack = bscript.decompile(buffer)
37059 return decodeStack(stack)
37060}
8b095871 37061
9987f0c1
IC
37062module.exports = {
37063 check: check,
37064 decode: decode,
37065 decodeStack: decodeStack,
37066 encode: encode,
37067 encodeStack: encodeStack
8b095871
IC
37068}
37069
cf6c2044 37070},{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
9987f0c1 37071// {pubKey} OP_CHECKSIG
8b095871 37072
9987f0c1
IC
37073var bscript = require('../../script')
37074var typeforce = require('typeforce')
37075var OPS = require('bitcoin-ops')
8b095871 37076
9987f0c1
IC
37077function check (script) {
37078 var chunks = bscript.decompile(script)
8b095871 37079
9987f0c1
IC
37080 return chunks.length === 2 &&
37081 bscript.isCanonicalPubKey(chunks[0]) &&
37082 chunks[1] === OPS.OP_CHECKSIG
37083}
37084check.toJSON = function () { return 'pubKey output' }
8b095871 37085
9987f0c1
IC
37086function encode (pubKey) {
37087 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 37088
9987f0c1
IC
37089 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37090}
8b095871 37091
9987f0c1
IC
37092function decode (buffer) {
37093 var chunks = bscript.decompile(buffer)
37094 typeforce(check, chunks)
8b095871 37095
9987f0c1
IC
37096 return chunks[0]
37097}
8b095871 37098
9987f0c1
IC
37099module.exports = {
37100 check: check,
37101 decode: decode,
37102 encode: encode
37103}
8b095871 37104
cf6c2044
IC
37105},{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
37106arguments[4][57][0].apply(exports,arguments)
37107},{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
9987f0c1 37108// {signature} {pubKey}
8b095871 37109
9987f0c1 37110var bscript = require('../../script')
9987f0c1 37111var typeforce = require('typeforce')
8b095871 37112
9987f0c1
IC
37113function check (script) {
37114 var chunks = bscript.decompile(script)
8b095871 37115
9987f0c1
IC
37116 return chunks.length === 2 &&
37117 bscript.isCanonicalSignature(chunks[0]) &&
37118 bscript.isCanonicalPubKey(chunks[1])
8b095871 37119}
9987f0c1 37120check.toJSON = function () { return 'pubKeyHash input' }
8b095871 37121
9987f0c1
IC
37122function encodeStack (signature, pubKey) {
37123 typeforce({
cf6c2044
IC
37124 signature: bscript.isCanonicalSignature,
37125 pubKey: bscript.isCanonicalPubKey
9987f0c1 37126 }, {
cf6c2044
IC
37127 signature: signature,
37128 pubKey: pubKey
9987f0c1 37129 })
8b095871 37130
9987f0c1 37131 return [signature, pubKey]
8b095871
IC
37132}
37133
9987f0c1
IC
37134function encode (signature, pubKey) {
37135 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
37136}
37137
9987f0c1
IC
37138function decodeStack (stack) {
37139 typeforce(check, stack)
8b095871 37140
9987f0c1
IC
37141 return {
37142 signature: stack[0],
37143 pubKey: stack[1]
37144 }
8b095871
IC
37145}
37146
9987f0c1
IC
37147function decode (buffer) {
37148 var stack = bscript.decompile(buffer)
37149 return decodeStack(stack)
8b095871
IC
37150}
37151
9987f0c1
IC
37152module.exports = {
37153 check: check,
37154 decode: decode,
37155 decodeStack: decodeStack,
37156 encode: encode,
37157 encodeStack: encodeStack
8b095871
IC
37158}
37159
cf6c2044 37160},{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
9987f0c1 37161// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 37162
9987f0c1
IC
37163var bscript = require('../../script')
37164var types = require('../../types')
37165var typeforce = require('typeforce')
37166var OPS = require('bitcoin-ops')
8b095871 37167
9987f0c1
IC
37168function check (script) {
37169 var buffer = bscript.compile(script)
8b095871 37170
9987f0c1
IC
37171 return buffer.length === 25 &&
37172 buffer[0] === OPS.OP_DUP &&
37173 buffer[1] === OPS.OP_HASH160 &&
37174 buffer[2] === 0x14 &&
37175 buffer[23] === OPS.OP_EQUALVERIFY &&
37176 buffer[24] === OPS.OP_CHECKSIG
8b095871 37177}
9987f0c1 37178check.toJSON = function () { return 'pubKeyHash output' }
8b095871 37179
9987f0c1
IC
37180function encode (pubKeyHash) {
37181 typeforce(types.Hash160bit, pubKeyHash)
8b095871 37182
9987f0c1
IC
37183 return bscript.compile([
37184 OPS.OP_DUP,
37185 OPS.OP_HASH160,
37186 pubKeyHash,
37187 OPS.OP_EQUALVERIFY,
37188 OPS.OP_CHECKSIG
37189 ])
8b095871
IC
37190}
37191
9987f0c1
IC
37192function decode (buffer) {
37193 typeforce(check, buffer)
8b095871 37194
9987f0c1 37195 return buffer.slice(3, 23)
8b095871
IC
37196}
37197
9987f0c1
IC
37198module.exports = {
37199 check: check,
37200 decode: decode,
37201 encode: encode
8b095871
IC
37202}
37203
cf6c2044
IC
37204},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
37205arguments[4][57][0].apply(exports,arguments)
37206},{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
9987f0c1 37207// <scriptSig> {serialized scriptPubKey script}
8b095871 37208
9987f0c1
IC
37209var Buffer = require('safe-buffer').Buffer
37210var bscript = require('../../script')
37211var typeforce = require('typeforce')
8b095871 37212
cf6c2044
IC
37213var p2ms = require('../multisig/')
37214var p2pk = require('../pubkey/')
37215var p2pkh = require('../pubkeyhash/')
37216var p2wpkho = require('../witnesspubkeyhash/output')
37217var p2wsho = require('../witnessscripthash/output')
37218
9987f0c1
IC
37219function check (script, allowIncomplete) {
37220 var chunks = bscript.decompile(script)
37221 if (chunks.length < 1) return false
8b095871 37222
9987f0c1
IC
37223 var lastChunk = chunks[chunks.length - 1]
37224 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 37225
9987f0c1
IC
37226 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37227 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 37228
9987f0c1
IC
37229 // is redeemScript a valid script?
37230 if (redeemScriptChunks.length === 0) return false
37231
37232 // is redeemScriptSig push only?
37233 if (!bscript.isPushOnly(scriptSigChunks)) return false
37234
cf6c2044 37235 // is witness?
9987f0c1 37236 if (chunks.length === 1) {
cf6c2044
IC
37237 return p2wsho.check(redeemScriptChunks) ||
37238 p2wpkho.check(redeemScriptChunks)
9987f0c1 37239 }
cf6c2044
IC
37240
37241 // match types
37242 if (p2pkh.input.check(scriptSigChunks) &&
37243 p2pkh.output.check(redeemScriptChunks)) return true
37244
37245 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37246 p2ms.output.check(redeemScriptChunks)) return true
37247
37248 if (p2pk.input.check(scriptSigChunks) &&
37249 p2pk.output.check(redeemScriptChunks)) return true
37250
37251 return false
8b095871 37252}
9987f0c1 37253check.toJSON = function () { return 'scriptHash input' }
8b095871 37254
9987f0c1
IC
37255function encodeStack (redeemScriptStack, redeemScript) {
37256 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 37257
9987f0c1
IC
37258 return [].concat(redeemScriptStack, serializedScriptPubKey)
37259}
8b095871 37260
9987f0c1
IC
37261function encode (redeemScriptSig, redeemScript) {
37262 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 37263
9987f0c1
IC
37264 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37265}
8b095871 37266
9987f0c1
IC
37267function decodeStack (stack) {
37268 typeforce(check, stack)
37269
37270 return {
37271 redeemScriptStack: stack.slice(0, -1),
37272 redeemScript: stack[stack.length - 1]
37273 }
8b095871
IC
37274}
37275
9987f0c1
IC
37276function decode (buffer) {
37277 var stack = bscript.decompile(buffer)
37278 var result = decodeStack(stack)
37279 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37280 delete result.redeemScriptStack
37281 return result
37282}
8b095871 37283
9987f0c1
IC
37284module.exports = {
37285 check: check,
37286 decode: decode,
37287 decodeStack: decodeStack,
37288 encode: encode,
37289 encodeStack: encodeStack
37290}
8b095871 37291
cf6c2044 37292},{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
9987f0c1 37293// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 37294
9987f0c1
IC
37295var bscript = require('../../script')
37296var types = require('../../types')
37297var typeforce = require('typeforce')
37298var OPS = require('bitcoin-ops')
8b095871 37299
9987f0c1
IC
37300function check (script) {
37301 var buffer = bscript.compile(script)
8b095871 37302
9987f0c1
IC
37303 return buffer.length === 23 &&
37304 buffer[0] === OPS.OP_HASH160 &&
37305 buffer[1] === 0x14 &&
37306 buffer[22] === OPS.OP_EQUAL
8b095871 37307}
9987f0c1 37308check.toJSON = function () { return 'scriptHash output' }
8b095871 37309
9987f0c1
IC
37310function encode (scriptHash) {
37311 typeforce(types.Hash160bit, scriptHash)
8b095871 37312
9987f0c1
IC
37313 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37314}
8b095871 37315
9987f0c1
IC
37316function decode (buffer) {
37317 typeforce(check, buffer)
8b095871 37318
9987f0c1
IC
37319 return buffer.slice(2, 22)
37320}
8b095871 37321
9987f0c1
IC
37322module.exports = {
37323 check: check,
37324 decode: decode,
37325 encode: encode
8b095871
IC
37326}
37327
cf6c2044 37328},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
9987f0c1
IC
37329module.exports = {
37330 output: require('./output')
37331}
8b095871 37332
cf6c2044 37333},{"./output":71}],71:[function(require,module,exports){
9987f0c1 37334// OP_RETURN {aa21a9ed} {commitment}
8b095871 37335
9987f0c1
IC
37336var Buffer = require('safe-buffer').Buffer
37337var bscript = require('../../script')
37338var types = require('../../types')
37339var typeforce = require('typeforce')
37340var OPS = require('bitcoin-ops')
8b095871 37341
9987f0c1 37342var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 37343
9987f0c1
IC
37344function check (script) {
37345 var buffer = bscript.compile(script)
37346
37347 return buffer.length > 37 &&
37348 buffer[0] === OPS.OP_RETURN &&
37349 buffer[1] === 0x24 &&
37350 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
37351}
37352
9987f0c1 37353check.toJSON = function () { return 'Witness commitment output' }
8b095871 37354
9987f0c1
IC
37355function encode (commitment) {
37356 typeforce(types.Hash256bit, commitment)
8b095871 37357
9987f0c1
IC
37358 var buffer = Buffer.allocUnsafe(36)
37359 HEADER.copy(buffer, 0)
37360 commitment.copy(buffer, 4)
8b095871 37361
9987f0c1
IC
37362 return bscript.compile([OPS.OP_RETURN, buffer])
37363}
8b095871 37364
9987f0c1
IC
37365function decode (buffer) {
37366 typeforce(check, buffer)
8b095871 37367
9987f0c1
IC
37368 return bscript.decompile(buffer)[1].slice(4, 36)
37369}
8b095871 37370
9987f0c1
IC
37371module.exports = {
37372 check: check,
37373 decode: decode,
37374 encode: encode
37375}
8b095871 37376
cf6c2044
IC
37377},{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
37378arguments[4][57][0].apply(exports,arguments)
37379},{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
9987f0c1 37380// {signature} {pubKey}
8b095871 37381
cf6c2044
IC
37382var bscript = require('../../script')
37383var typeforce = require('typeforce')
37384
37385function isCompressedCanonicalPubKey (pubKey) {
37386 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37387}
37388
37389function check (script) {
37390 var chunks = bscript.decompile(script)
37391
37392 return chunks.length === 2 &&
37393 bscript.isCanonicalSignature(chunks[0]) &&
37394 isCompressedCanonicalPubKey(chunks[1])
37395}
37396check.toJSON = function () { return 'witnessPubKeyHash input' }
37397
37398function encodeStack (signature, pubKey) {
37399 typeforce({
37400 signature: bscript.isCanonicalSignature,
37401 pubKey: isCompressedCanonicalPubKey
37402 }, {
37403 signature: signature,
37404 pubKey: pubKey
37405 })
37406
37407 return [signature, pubKey]
37408}
37409
37410function decodeStack (stack) {
37411 typeforce(check, stack)
37412
37413 return {
37414 signature: stack[0],
37415 pubKey: stack[1]
37416 }
37417}
8b095871 37418
9987f0c1 37419module.exports = {
cf6c2044
IC
37420 check: check,
37421 decodeStack: decodeStack,
37422 encodeStack: encodeStack
8b095871
IC
37423}
37424
cf6c2044 37425},{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
9987f0c1 37426// OP_0 {pubKeyHash}
8b095871 37427
9987f0c1
IC
37428var bscript = require('../../script')
37429var types = require('../../types')
37430var typeforce = require('typeforce')
37431var OPS = require('bitcoin-ops')
8b095871 37432
9987f0c1
IC
37433function check (script) {
37434 var buffer = bscript.compile(script)
8b095871 37435
9987f0c1
IC
37436 return buffer.length === 22 &&
37437 buffer[0] === OPS.OP_0 &&
37438 buffer[1] === 0x14
37439}
37440check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 37441
9987f0c1
IC
37442function encode (pubKeyHash) {
37443 typeforce(types.Hash160bit, pubKeyHash)
8b095871 37444
9987f0c1
IC
37445 return bscript.compile([OPS.OP_0, pubKeyHash])
37446}
8b095871 37447
9987f0c1
IC
37448function decode (buffer) {
37449 typeforce(check, buffer)
37450
37451 return buffer.slice(2)
8b095871
IC
37452}
37453
9987f0c1
IC
37454module.exports = {
37455 check: check,
37456 decode: decode,
37457 encode: encode
37458}
8b095871 37459
cf6c2044
IC
37460},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
37461arguments[4][57][0].apply(exports,arguments)
37462},{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37463(function (Buffer){
37464// <scriptSig> {serialized scriptPubKey script}
37465
37466var bscript = require('../../script')
37467var types = require('../../types')
37468var typeforce = require('typeforce')
37469
37470var p2ms = require('../multisig/')
37471var p2pk = require('../pubkey/')
37472var p2pkh = require('../pubkeyhash/')
37473
37474function check (chunks, allowIncomplete) {
37475 typeforce(types.Array, chunks)
37476 if (chunks.length < 1) return false
37477
37478 var witnessScript = chunks[chunks.length - 1]
37479 if (!Buffer.isBuffer(witnessScript)) return false
37480
37481 var witnessScriptChunks = bscript.decompile(witnessScript)
37482
37483 // is witnessScript a valid script?
37484 if (witnessScriptChunks.length === 0) return false
37485
37486 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37487
37488 // match types
37489 if (p2pkh.input.check(witnessRawScriptSig) &&
37490 p2pkh.output.check(witnessScriptChunks)) return true
37491
37492 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37493 p2ms.output.check(witnessScriptChunks)) return true
37494
37495 if (p2pk.input.check(witnessRawScriptSig) &&
37496 p2pk.output.check(witnessScriptChunks)) return true
37497
37498 return false
37499}
37500check.toJSON = function () { return 'witnessScriptHash input' }
37501
37502function encodeStack (witnessData, witnessScript) {
37503 typeforce({
37504 witnessData: [types.Buffer],
37505 witnessScript: types.Buffer
37506 }, {
37507 witnessData: witnessData,
37508 witnessScript: witnessScript
37509 })
37510
37511 return [].concat(witnessData, witnessScript)
37512}
8b095871 37513
cf6c2044
IC
37514function decodeStack (chunks) {
37515 typeforce(check, chunks)
37516 return {
37517 witnessData: chunks.slice(0, -1),
37518 witnessScript: chunks[chunks.length - 1]
37519 }
37520}
8b095871 37521
9987f0c1 37522module.exports = {
cf6c2044
IC
37523 check: check,
37524 decodeStack: decodeStack,
37525 encodeStack: encodeStack
9987f0c1 37526}
8b095871 37527
cf6c2044
IC
37528}).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37529},{"../../../../../../../../.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){
9987f0c1 37530// OP_0 {scriptHash}
8b095871 37531
9987f0c1
IC
37532var bscript = require('../../script')
37533var types = require('../../types')
37534var typeforce = require('typeforce')
37535var OPS = require('bitcoin-ops')
8b095871 37536
9987f0c1
IC
37537function check (script) {
37538 var buffer = bscript.compile(script)
37539
37540 return buffer.length === 34 &&
37541 buffer[0] === OPS.OP_0 &&
37542 buffer[1] === 0x20
8b095871 37543}
9987f0c1 37544check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 37545
9987f0c1
IC
37546function encode (scriptHash) {
37547 typeforce(types.Hash256bit, scriptHash)
8b095871 37548
9987f0c1
IC
37549 return bscript.compile([OPS.OP_0, scriptHash])
37550}
8b095871 37551
9987f0c1
IC
37552function decode (buffer) {
37553 typeforce(check, buffer)
8b095871 37554
9987f0c1
IC
37555 return buffer.slice(2)
37556}
8b095871 37557
9987f0c1
IC
37558module.exports = {
37559 check: check,
37560 decode: decode,
37561 encode: encode
37562}
8b095871 37563
cf6c2044 37564},{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
9987f0c1
IC
37565var Buffer = require('safe-buffer').Buffer
37566var bcrypto = require('./crypto')
37567var bscript = require('./script')
37568var bufferutils = require('./bufferutils')
37569var opcodes = require('bitcoin-ops')
37570var typeforce = require('typeforce')
37571var types = require('./types')
37572var varuint = require('varuint-bitcoin')
8b095871 37573
9987f0c1
IC
37574function varSliceSize (someScript) {
37575 var length = someScript.length
8b095871 37576
9987f0c1
IC
37577 return varuint.encodingLength(length) + length
37578}
8b095871 37579
9987f0c1
IC
37580function vectorSize (someVector) {
37581 var length = someVector.length
37582
37583 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37584 return sum + varSliceSize(witness)
37585 }, 0)
8b095871
IC
37586}
37587
9987f0c1
IC
37588function Transaction () {
37589 this.version = 1
37590 this.locktime = 0
37591 this.ins = []
37592 this.outs = []
37593}
8b095871 37594
9987f0c1
IC
37595Transaction.DEFAULT_SEQUENCE = 0xffffffff
37596Transaction.SIGHASH_ALL = 0x01
37597Transaction.SIGHASH_NONE = 0x02
37598Transaction.SIGHASH_SINGLE = 0x03
37599Transaction.SIGHASH_ANYONECANPAY = 0x80
37600Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37601Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 37602
9987f0c1
IC
37603var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37604var EMPTY_WITNESS = []
37605var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37606var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37607var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37608var BLANK_OUTPUT = {
37609 script: EMPTY_SCRIPT,
37610 valueBuffer: VALUE_UINT64_MAX
37611}
8b095871 37612
9987f0c1
IC
37613Transaction.fromBuffer = function (buffer, __noStrict) {
37614 var offset = 0
37615 function readSlice (n) {
37616 offset += n
37617 return buffer.slice(offset - n, offset)
37618 }
8b095871 37619
9987f0c1
IC
37620 function readUInt32 () {
37621 var i = buffer.readUInt32LE(offset)
37622 offset += 4
37623 return i
37624 }
8b095871 37625
9987f0c1
IC
37626 function readInt32 () {
37627 var i = buffer.readInt32LE(offset)
37628 offset += 4
37629 return i
37630 }
8b095871 37631
9987f0c1
IC
37632 function readUInt64 () {
37633 var i = bufferutils.readUInt64LE(buffer, offset)
37634 offset += 8
37635 return i
8b095871
IC
37636 }
37637
9987f0c1
IC
37638 function readVarInt () {
37639 var vi = varuint.decode(buffer, offset)
37640 offset += varuint.decode.bytes
37641 return vi
37642 }
8b095871 37643
9987f0c1
IC
37644 function readVarSlice () {
37645 return readSlice(readVarInt())
37646 }
8b095871 37647
9987f0c1
IC
37648 function readVector () {
37649 var count = readVarInt()
37650 var vector = []
37651 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37652 return vector
37653 }
8b095871 37654
9987f0c1
IC
37655 var tx = new Transaction()
37656 tx.version = readInt32()
8b095871 37657
9987f0c1
IC
37658 var marker = buffer.readUInt8(offset)
37659 var flag = buffer.readUInt8(offset + 1)
8b095871 37660
9987f0c1
IC
37661 var hasWitnesses = false
37662 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37663 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37664 offset += 2
37665 hasWitnesses = true
37666 }
8b095871 37667
9987f0c1
IC
37668 var vinLen = readVarInt()
37669 for (var i = 0; i < vinLen; ++i) {
37670 tx.ins.push({
37671 hash: readSlice(32),
37672 index: readUInt32(),
37673 script: readVarSlice(),
37674 sequence: readUInt32(),
37675 witness: EMPTY_WITNESS
37676 })
37677 }
8b095871 37678
9987f0c1
IC
37679 var voutLen = readVarInt()
37680 for (i = 0; i < voutLen; ++i) {
37681 tx.outs.push({
37682 value: readUInt64(),
37683 script: readVarSlice()
37684 })
8b095871
IC
37685 }
37686
9987f0c1
IC
37687 if (hasWitnesses) {
37688 for (i = 0; i < vinLen; ++i) {
37689 tx.ins[i].witness = readVector()
37690 }
8b095871 37691
9987f0c1
IC
37692 // was this pointless?
37693 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37694 }
8b095871 37695
9987f0c1 37696 tx.locktime = readUInt32()
8b095871 37697
9987f0c1
IC
37698 if (__noStrict) return tx
37699 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 37700
9987f0c1
IC
37701 return tx
37702}
8b095871 37703
9987f0c1
IC
37704Transaction.fromHex = function (hex) {
37705 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 37706}
8b095871 37707
9987f0c1
IC
37708Transaction.isCoinbaseHash = function (buffer) {
37709 typeforce(types.Hash256bit, buffer)
37710 for (var i = 0; i < 32; ++i) {
37711 if (buffer[i] !== 0) return false
8b095871 37712 }
9987f0c1 37713 return true
8b095871 37714}
9987f0c1
IC
37715
37716Transaction.prototype.isCoinbase = function () {
37717 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
37718}
37719
9987f0c1
IC
37720Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37721 typeforce(types.tuple(
37722 types.Hash256bit,
37723 types.UInt32,
37724 types.maybe(types.UInt32),
37725 types.maybe(types.Buffer)
37726 ), arguments)
8b095871 37727
9987f0c1
IC
37728 if (types.Null(sequence)) {
37729 sequence = Transaction.DEFAULT_SEQUENCE
37730 }
37731
37732 // Add the input and return the input's index
37733 return (this.ins.push({
37734 hash: hash,
37735 index: index,
37736 script: scriptSig || EMPTY_SCRIPT,
37737 sequence: sequence,
37738 witness: EMPTY_WITNESS
37739 }) - 1)
8b095871
IC
37740}
37741
9987f0c1
IC
37742Transaction.prototype.addOutput = function (scriptPubKey, value) {
37743 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 37744
9987f0c1
IC
37745 // Add the output and return the output's index
37746 return (this.outs.push({
37747 script: scriptPubKey,
37748 value: value
37749 }) - 1)
8b095871
IC
37750}
37751
9987f0c1
IC
37752Transaction.prototype.hasWitnesses = function () {
37753 return this.ins.some(function (x) {
37754 return x.witness.length !== 0
37755 })
37756}
8b095871 37757
9987f0c1
IC
37758Transaction.prototype.weight = function () {
37759 var base = this.__byteLength(false)
37760 var total = this.__byteLength(true)
37761 return base * 3 + total
8b095871
IC
37762}
37763
9987f0c1
IC
37764Transaction.prototype.virtualSize = function () {
37765 return Math.ceil(this.weight() / 4)
37766}
8b095871 37767
9987f0c1
IC
37768Transaction.prototype.byteLength = function () {
37769 return this.__byteLength(true)
8b095871
IC
37770}
37771
9987f0c1
IC
37772Transaction.prototype.__byteLength = function (__allowWitness) {
37773 var hasWitnesses = __allowWitness && this.hasWitnesses()
37774
37775 return (
37776 (hasWitnesses ? 10 : 8) +
37777 varuint.encodingLength(this.ins.length) +
37778 varuint.encodingLength(this.outs.length) +
37779 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37780 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37781 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37782 )
8b095871
IC
37783}
37784
9987f0c1
IC
37785Transaction.prototype.clone = function () {
37786 var newTx = new Transaction()
37787 newTx.version = this.version
37788 newTx.locktime = this.locktime
37789
37790 newTx.ins = this.ins.map(function (txIn) {
37791 return {
37792 hash: txIn.hash,
37793 index: txIn.index,
37794 script: txIn.script,
37795 sequence: txIn.sequence,
37796 witness: txIn.witness
8b095871 37797 }
9987f0c1 37798 })
8b095871 37799
9987f0c1
IC
37800 newTx.outs = this.outs.map(function (txOut) {
37801 return {
37802 script: txOut.script,
37803 value: txOut.value
37804 }
37805 })
8b095871 37806
9987f0c1
IC
37807 return newTx
37808}
37809
37810/**
37811 * Hash transaction for signing a specific input.
37812 *
37813 * Bitcoin uses a different hash for each signed transaction input.
37814 * This method copies the transaction, makes the necessary changes based on the
37815 * hashType, and then hashes the result.
37816 * This hash can then be used to sign the provided transaction input.
37817 */
37818Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37819 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37820
37821 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37822 if (inIndex >= this.ins.length) return ONE
37823
37824 // ignore OP_CODESEPARATOR
37825 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37826 return x !== opcodes.OP_CODESEPARATOR
37827 }))
37828
37829 var txTmp = this.clone()
37830
37831 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37832 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37833 txTmp.outs = []
37834
37835 // ignore sequence numbers (except at inIndex)
37836 txTmp.ins.forEach(function (input, i) {
37837 if (i === inIndex) return
37838
37839 input.sequence = 0
37840 })
37841
37842 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37843 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37844 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37845 if (inIndex >= this.outs.length) return ONE
37846
37847 // truncate outputs after
37848 txTmp.outs.length = inIndex + 1
37849
37850 // "blank" outputs before
37851 for (var i = 0; i < inIndex; i++) {
37852 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
37853 }
37854
9987f0c1
IC
37855 // ignore sequence numbers (except at inIndex)
37856 txTmp.ins.forEach(function (input, y) {
37857 if (y === inIndex) return
8b095871 37858
9987f0c1
IC
37859 input.sequence = 0
37860 })
8b095871 37861 }
8b095871 37862
9987f0c1
IC
37863 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
37864 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
37865 txTmp.ins = [txTmp.ins[inIndex]]
37866 txTmp.ins[0].script = ourScript
37867
37868 // SIGHASH_ALL: only ignore input scripts
37869 } else {
37870 // "blank" others input scripts
37871 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
37872 txTmp.ins[inIndex].script = ourScript
37873 }
37874
37875 // serialize and hash
37876 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
37877 buffer.writeInt32LE(hashType, buffer.length - 4)
37878 txTmp.__toBuffer(buffer, 0, false)
37879
37880 return bcrypto.hash256(buffer)
8b095871
IC
37881}
37882
9987f0c1
IC
37883Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
37884 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
37885
37886 var tbuffer, toffset
37887 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
37888 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
37889 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
37890 function writeVarInt (i) {
37891 varuint.encode(i, tbuffer, toffset)
37892 toffset += varuint.encode.bytes
37893 }
37894 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
37895
37896 var hashOutputs = ZERO
37897 var hashPrevouts = ZERO
37898 var hashSequence = ZERO
37899
37900 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
37901 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
37902 toffset = 0
37903
37904 this.ins.forEach(function (txIn) {
37905 writeSlice(txIn.hash)
37906 writeUInt32(txIn.index)
37907 })
37908
37909 hashPrevouts = bcrypto.hash256(tbuffer)
37910 }
37911
37912 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
37913 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
37914 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
37915 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
37916 toffset = 0
37917
37918 this.ins.forEach(function (txIn) {
37919 writeUInt32(txIn.sequence)
37920 })
37921
37922 hashSequence = bcrypto.hash256(tbuffer)
37923 }
37924
37925 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
37926 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
37927 var txOutsSize = this.outs.reduce(function (sum, output) {
37928 return sum + 8 + varSliceSize(output.script)
37929 }, 0)
37930
37931 tbuffer = Buffer.allocUnsafe(txOutsSize)
37932 toffset = 0
37933
37934 this.outs.forEach(function (out) {
37935 writeUInt64(out.value)
37936 writeVarSlice(out.script)
37937 })
37938
37939 hashOutputs = bcrypto.hash256(tbuffer)
37940 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
37941 var output = this.outs[inIndex]
37942
37943 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
37944 toffset = 0
37945 writeUInt64(output.value)
37946 writeVarSlice(output.script)
37947
37948 hashOutputs = bcrypto.hash256(tbuffer)
37949 }
37950
37951 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
37952 toffset = 0
37953
37954 var input = this.ins[inIndex]
37955 writeUInt32(this.version)
37956 writeSlice(hashPrevouts)
37957 writeSlice(hashSequence)
37958 writeSlice(input.hash)
37959 writeUInt32(input.index)
37960 writeVarSlice(prevOutScript)
37961 writeUInt64(value)
37962 writeUInt32(input.sequence)
37963 writeSlice(hashOutputs)
37964 writeUInt32(this.locktime)
37965 writeUInt32(hashType)
37966 return bcrypto.hash256(tbuffer)
8b095871
IC
37967}
37968
9987f0c1
IC
37969Transaction.prototype.getHash = function () {
37970 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
37971}
8b095871 37972
9987f0c1
IC
37973Transaction.prototype.getId = function () {
37974 // transaction hash's are displayed in reverse order
37975 return this.getHash().reverse().toString('hex')
37976}
8b095871 37977
9987f0c1
IC
37978Transaction.prototype.toBuffer = function (buffer, initialOffset) {
37979 return this.__toBuffer(buffer, initialOffset, true)
37980}
8b095871 37981
9987f0c1
IC
37982Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
37983 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 37984
9987f0c1
IC
37985 var offset = initialOffset || 0
37986 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
37987 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
37988 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
37989 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
37990 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
37991 function writeVarInt (i) {
37992 varuint.encode(i, buffer, offset)
37993 offset += varuint.encode.bytes
37994 }
37995 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
37996 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 37997
9987f0c1 37998 writeInt32(this.version)
8b095871 37999
9987f0c1 38000 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 38001
9987f0c1
IC
38002 if (hasWitnesses) {
38003 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38004 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38005 }
8b095871 38006
9987f0c1 38007 writeVarInt(this.ins.length)
8b095871 38008
9987f0c1
IC
38009 this.ins.forEach(function (txIn) {
38010 writeSlice(txIn.hash)
38011 writeUInt32(txIn.index)
38012 writeVarSlice(txIn.script)
38013 writeUInt32(txIn.sequence)
38014 })
8b095871 38015
9987f0c1
IC
38016 writeVarInt(this.outs.length)
38017 this.outs.forEach(function (txOut) {
38018 if (!txOut.valueBuffer) {
38019 writeUInt64(txOut.value)
38020 } else {
38021 writeSlice(txOut.valueBuffer)
8b095871 38022 }
8b095871 38023
9987f0c1
IC
38024 writeVarSlice(txOut.script)
38025 })
8b095871 38026
9987f0c1
IC
38027 if (hasWitnesses) {
38028 this.ins.forEach(function (input) {
38029 writeVector(input.witness)
38030 })
38031 }
8b095871 38032
9987f0c1 38033 writeUInt32(this.locktime)
8b095871 38034
9987f0c1
IC
38035 // avoid slicing unless necessary
38036 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38037 return buffer
38038}
8b095871 38039
9987f0c1
IC
38040Transaction.prototype.toHex = function () {
38041 return this.toBuffer().toString('hex')
38042}
8b095871 38043
9987f0c1
IC
38044Transaction.prototype.setInputScript = function (index, scriptSig) {
38045 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 38046
9987f0c1
IC
38047 this.ins[index].script = scriptSig
38048}
8b095871 38049
9987f0c1
IC
38050Transaction.prototype.setWitness = function (index, witness) {
38051 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38052
38053 this.ins[index].witness = witness
38054}
38055
38056module.exports = Transaction
38057
cf6c2044 38058},{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
9987f0c1
IC
38059var Buffer = require('safe-buffer').Buffer
38060var baddress = require('./address')
38061var bcrypto = require('./crypto')
38062var bscript = require('./script')
cf6c2044 38063var btemplates = require('./templates')
9987f0c1
IC
38064var networks = require('./networks')
38065var ops = require('bitcoin-ops')
38066var typeforce = require('typeforce')
38067var types = require('./types')
cf6c2044
IC
38068var scriptTypes = btemplates.types
38069var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38070var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
9987f0c1
IC
38071
38072var ECPair = require('./ecpair')
38073var ECSignature = require('./ecsignature')
38074var Transaction = require('./transaction')
38075
cf6c2044
IC
38076function supportedType (type) {
38077 return SIGNABLE.indexOf(type) !== -1
38078}
38079
38080function supportedP2SHType (type) {
38081 return P2SH.indexOf(type) !== -1
38082}
38083
9987f0c1
IC
38084function extractChunks (type, chunks, script) {
38085 var pubKeys = []
38086 var signatures = []
38087 switch (type) {
38088 case scriptTypes.P2PKH:
38089 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38090 pubKeys = chunks.slice(1)
38091 signatures = chunks.slice(0, 1)
38092 break
38093
38094 case scriptTypes.P2PK:
cf6c2044 38095 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
9987f0c1
IC
38096 signatures = chunks.slice(0, 1)
38097 break
38098
38099 case scriptTypes.MULTISIG:
38100 if (script) {
cf6c2044 38101 var multisig = btemplates.multisig.output.decode(script)
9987f0c1
IC
38102 pubKeys = multisig.pubKeys
38103 }
38104
38105 signatures = chunks.slice(1).map(function (chunk) {
38106 return chunk.length === 0 ? undefined : chunk
38107 })
38108 break
38109 }
38110
38111 return {
38112 pubKeys: pubKeys,
38113 signatures: signatures
38114 }
38115}
38116function expandInput (scriptSig, witnessStack) {
38117 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38118
38119 var prevOutScript
38120 var prevOutType
38121 var scriptType
38122 var script
38123 var redeemScript
38124 var witnessScript
38125 var witnessScriptType
38126 var redeemScriptType
38127 var witness = false
38128 var p2wsh = false
38129 var p2sh = false
38130 var witnessProgram
38131 var chunks
38132
38133 var scriptSigChunks = bscript.decompile(scriptSig)
cf6c2044 38134 var sigType = btemplates.classifyInput(scriptSigChunks, true)
9987f0c1
IC
38135 if (sigType === scriptTypes.P2SH) {
38136 p2sh = true
38137 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
cf6c2044
IC
38138 redeemScriptType = btemplates.classifyOutput(redeemScript)
38139 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
9987f0c1
IC
38140 prevOutType = scriptTypes.P2SH
38141 script = redeemScript
38142 }
38143
cf6c2044 38144 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
9987f0c1
IC
38145 if (classifyWitness === scriptTypes.P2WSH) {
38146 witnessScript = witnessStack[witnessStack.length - 1]
cf6c2044 38147 witnessScriptType = btemplates.classifyOutput(witnessScript)
9987f0c1 38148 p2wsh = true
cf6c2044 38149 witness = true
9987f0c1 38150 if (scriptSig.length === 0) {
cf6c2044 38151 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
9987f0c1 38152 prevOutType = scriptTypes.P2WSH
cf6c2044 38153 if (redeemScript !== undefined) {
9987f0c1
IC
38154 throw new Error('Redeem script given when unnecessary')
38155 }
38156 // bare witness
38157 } else {
38158 if (!redeemScript) {
38159 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38160 }
cf6c2044 38161 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
9987f0c1
IC
38162 if (!redeemScript.equals(witnessProgram)) {
38163 throw new Error('Redeem script didn\'t match witnessScript')
38164 }
8b095871 38165 }
8b095871 38166
cf6c2044 38167 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
9987f0c1
IC
38168 throw new Error('unsupported witness script')
38169 }
cf6c2044 38170
9987f0c1
IC
38171 script = witnessScript
38172 scriptType = witnessScriptType
38173 chunks = witnessStack.slice(0, -1)
38174 } else if (classifyWitness === scriptTypes.P2WPKH) {
cf6c2044 38175 witness = true
9987f0c1
IC
38176 var key = witnessStack[witnessStack.length - 1]
38177 var keyHash = bcrypto.hash160(key)
38178 if (scriptSig.length === 0) {
cf6c2044 38179 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
9987f0c1
IC
38180 prevOutType = scriptTypes.P2WPKH
38181 if (typeof redeemScript !== 'undefined') {
38182 throw new Error('Redeem script given when unnecessary')
38183 }
38184 } else {
38185 if (!redeemScript) {
38186 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38187 }
cf6c2044 38188 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
9987f0c1
IC
38189 if (!redeemScript.equals(witnessProgram)) {
38190 throw new Error('Redeem script did not have the right witness program')
38191 }
38192 }
8b095871 38193
9987f0c1
IC
38194 scriptType = scriptTypes.P2PKH
38195 chunks = witnessStack
38196 } else if (redeemScript) {
cf6c2044 38197 if (!supportedP2SHType(redeemScriptType)) {
9987f0c1 38198 throw new Error('Bad redeemscript!')
8b095871 38199 }
8b095871 38200
9987f0c1
IC
38201 script = redeemScript
38202 scriptType = redeemScriptType
38203 chunks = scriptSigChunks.slice(0, -1)
38204 } else {
cf6c2044 38205 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
9987f0c1 38206 chunks = scriptSigChunks
8b095871 38207 }
8b095871 38208
9987f0c1 38209 var expanded = extractChunks(scriptType, chunks, script)
8b095871 38210
9987f0c1
IC
38211 var result = {
38212 pubKeys: expanded.pubKeys,
38213 signatures: expanded.signatures,
38214 prevOutScript: prevOutScript,
38215 prevOutType: prevOutType,
38216 signType: scriptType,
38217 signScript: script,
38218 witness: Boolean(witness)
38219 }
8b095871 38220
9987f0c1
IC
38221 if (p2sh) {
38222 result.redeemScript = redeemScript
38223 result.redeemScriptType = redeemScriptType
38224 }
8b095871 38225
9987f0c1
IC
38226 if (p2wsh) {
38227 result.witnessScript = witnessScript
38228 result.witnessScriptType = witnessScriptType
8b095871
IC
38229 }
38230
9987f0c1 38231 return result
8b095871
IC
38232}
38233
9987f0c1
IC
38234// could be done in expandInput, but requires the original Transaction for hashForSignature
38235function fixMultisigOrder (input, transaction, vin) {
38236 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38237 if (input.pubKeys.length === input.signatures.length) return
8b095871 38238
9987f0c1 38239 var unmatched = input.signatures.concat()
8b095871 38240
9987f0c1
IC
38241 input.signatures = input.pubKeys.map(function (pubKey) {
38242 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38243 var match
8b095871 38244
9987f0c1
IC
38245 // check for a signature
38246 unmatched.some(function (signature, i) {
38247 // skip if undefined || OP_0
38248 if (!signature) return false
8b095871 38249
9987f0c1
IC
38250 // TODO: avoid O(n) hashForSignature
38251 var parsed = ECSignature.parseScriptSignature(signature)
38252 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 38253
9987f0c1
IC
38254 // skip if signature does not match pubKey
38255 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 38256
9987f0c1
IC
38257 // remove matched signature from unmatched
38258 unmatched[i] = undefined
38259 match = signature
8b095871 38260
9987f0c1
IC
38261 return true
38262 })
8b095871 38263
9987f0c1
IC
38264 return match
38265 })
38266}
8b095871 38267
9987f0c1
IC
38268function expandOutput (script, scriptType, ourPubKey) {
38269 typeforce(types.Buffer, script)
8b095871 38270
9987f0c1
IC
38271 var scriptChunks = bscript.decompile(script)
38272 if (!scriptType) {
cf6c2044 38273 scriptType = btemplates.classifyOutput(script)
8b095871 38274 }
8b095871 38275
9987f0c1 38276 var pubKeys = []
8b095871 38277
9987f0c1
IC
38278 switch (scriptType) {
38279 // does our hash160(pubKey) match the output scripts?
38280 case scriptTypes.P2PKH:
38281 if (!ourPubKey) break
8b095871 38282
9987f0c1
IC
38283 var pkh1 = scriptChunks[2]
38284 var pkh2 = bcrypto.hash160(ourPubKey)
38285 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38286 break
8b095871 38287
9987f0c1
IC
38288 // does our hash160(pubKey) match the output scripts?
38289 case scriptTypes.P2WPKH:
38290 if (!ourPubKey) break
8b095871 38291
9987f0c1
IC
38292 var wpkh1 = scriptChunks[1]
38293 var wpkh2 = bcrypto.hash160(ourPubKey)
38294 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38295 break
8b095871 38296
9987f0c1
IC
38297 case scriptTypes.P2PK:
38298 pubKeys = scriptChunks.slice(0, 1)
38299 break
38300
38301 case scriptTypes.MULTISIG:
38302 pubKeys = scriptChunks.slice(1, -2)
38303 break
8b095871 38304
9987f0c1
IC
38305 default: return { scriptType: scriptType }
38306 }
8b095871 38307
9987f0c1
IC
38308 return {
38309 pubKeys: pubKeys,
38310 scriptType: scriptType,
38311 signatures: pubKeys.map(function () { return undefined })
38312 }
8b095871
IC
38313}
38314
cf6c2044 38315function checkP2SHInput (input, redeemScriptHash) {
9987f0c1
IC
38316 if (input.prevOutType) {
38317 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 38318
9987f0c1
IC
38319 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38320 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38321 }
8b095871
IC
38322}
38323
9987f0c1
IC
38324function checkP2WSHInput (input, witnessScriptHash) {
38325 if (input.prevOutType) {
38326 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 38327
9987f0c1
IC
38328 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38329 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38330 }
8b095871
IC
38331}
38332
9987f0c1
IC
38333function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38334 var expanded
38335 var prevOutType
38336 var prevOutScript
8b095871 38337
9987f0c1
IC
38338 var p2sh = false
38339 var p2shType
38340 var redeemScriptHash
38341
38342 var witness = false
38343 var p2wsh = false
38344 var witnessType
38345 var witnessScriptHash
38346
38347 var signType
38348 var signScript
38349
38350 if (redeemScript && witnessScript) {
38351 redeemScriptHash = bcrypto.hash160(redeemScript)
38352 witnessScriptHash = bcrypto.sha256(witnessScript)
cf6c2044 38353 checkP2SHInput(input, redeemScriptHash)
9987f0c1 38354
cf6c2044 38355 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
9987f0c1
IC
38356
38357 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38358 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
cf6c2044
IC
38359
38360 prevOutType = btemplates.types.P2SH
38361 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
9987f0c1 38362 p2sh = witness = p2wsh = true
cf6c2044 38363 p2shType = btemplates.types.P2WSH
9987f0c1
IC
38364 signType = witnessType = expanded.scriptType
38365 signScript = witnessScript
38366 } else if (redeemScript) {
38367 redeemScriptHash = bcrypto.hash160(redeemScript)
cf6c2044 38368 checkP2SHInput(input, redeemScriptHash)
9987f0c1
IC
38369
38370 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38371 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38372
cf6c2044
IC
38373 prevOutType = btemplates.types.P2SH
38374 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
9987f0c1
IC
38375 p2sh = true
38376 signType = p2shType = expanded.scriptType
38377 signScript = redeemScript
cf6c2044 38378 witness = signType === btemplates.types.P2WPKH
9987f0c1
IC
38379 } else if (witnessScript) {
38380 witnessScriptHash = bcrypto.sha256(witnessScript)
38381 checkP2WSHInput(input, witnessScriptHash)
38382
38383 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38384 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38385
cf6c2044
IC
38386 prevOutType = btemplates.types.P2WSH
38387 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
9987f0c1
IC
38388 witness = p2wsh = true
38389 signType = witnessType = expanded.scriptType
38390 signScript = witnessScript
38391 } else if (input.prevOutType) {
38392 // embedded scripts are not possible without a redeemScript
38393 if (input.prevOutType === scriptTypes.P2SH ||
38394 input.prevOutType === scriptTypes.P2WSH) {
38395 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38396 }
38397
38398 prevOutType = input.prevOutType
38399 prevOutScript = input.prevOutScript
38400 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38401 if (!expanded.pubKeys) return
38402
38403 witness = (input.prevOutType === scriptTypes.P2WPKH)
38404 signType = prevOutType
38405 signScript = prevOutScript
38406 } else {
cf6c2044 38407 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
9987f0c1 38408 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
cf6c2044 38409
9987f0c1
IC
38410 prevOutType = scriptTypes.P2PKH
38411 witness = false
38412 signType = prevOutType
38413 signScript = prevOutScript
38414 }
8b095871 38415
9987f0c1 38416 if (signType === scriptTypes.P2WPKH) {
cf6c2044 38417 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
9987f0c1 38418 }
8b095871 38419
9987f0c1
IC
38420 if (p2sh) {
38421 input.redeemScript = redeemScript
38422 input.redeemScriptType = p2shType
38423 }
8b095871 38424
9987f0c1
IC
38425 if (p2wsh) {
38426 input.witnessScript = witnessScript
38427 input.witnessScriptType = witnessType
38428 }
8b095871 38429
9987f0c1
IC
38430 input.pubKeys = expanded.pubKeys
38431 input.signatures = expanded.signatures
38432 input.signScript = signScript
38433 input.signType = signType
38434 input.prevOutScript = prevOutScript
38435 input.prevOutType = prevOutType
38436 input.witness = witness
8b095871
IC
38437}
38438
9987f0c1
IC
38439function buildStack (type, signatures, pubKeys, allowIncomplete) {
38440 if (type === scriptTypes.P2PKH) {
cf6c2044 38441 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
9987f0c1 38442 } else if (type === scriptTypes.P2PK) {
cf6c2044 38443 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
9987f0c1
IC
38444 } else if (type === scriptTypes.MULTISIG) {
38445 if (signatures.length > 0) {
38446 signatures = signatures.map(function (signature) {
38447 return signature || ops.OP_0
38448 })
38449 if (!allowIncomplete) {
38450 // remove blank signatures
38451 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38452 }
8b095871 38453
cf6c2044 38454 return btemplates.multisig.input.encodeStack(signatures)
9987f0c1
IC
38455 }
38456 } else {
38457 throw new Error('Not yet supported')
38458 }
8b095871 38459
9987f0c1 38460 if (!allowIncomplete) throw new Error('Not enough signatures provided')
9987f0c1 38461 return []
8b095871
IC
38462}
38463
9987f0c1
IC
38464function buildInput (input, allowIncomplete) {
38465 var scriptType = input.prevOutType
38466 var sig = []
38467 var witness = []
cf6c2044
IC
38468
38469 if (supportedType(scriptType)) {
9987f0c1 38470 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
38471 }
38472
9987f0c1 38473 var p2sh = false
cf6c2044 38474 if (scriptType === btemplates.types.P2SH) {
9987f0c1
IC
38475 // We can remove this error later when we have a guarantee prepareInput
38476 // rejects unsignable scripts - it MUST be signable at this point.
cf6c2044 38477 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
9987f0c1
IC
38478 throw new Error('Impossible to sign this type')
38479 }
cf6c2044
IC
38480
38481 if (supportedType(input.redeemScriptType)) {
9987f0c1
IC
38482 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38483 }
cf6c2044 38484
9987f0c1 38485 // If it wasn't SIGNABLE, it's witness, defer to that
cf6c2044
IC
38486 if (input.redeemScriptType) {
38487 p2sh = true
38488 scriptType = input.redeemScriptType
38489 }
8b095871
IC
38490 }
38491
cf6c2044 38492 switch (scriptType) {
9987f0c1 38493 // P2WPKH is a special case of P2PKH
cf6c2044
IC
38494 case btemplates.types.P2WPKH:
38495 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38496 break
38497
38498 case btemplates.types.P2WSH:
38499 // We can remove this check later
38500 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38501 throw new Error('Impossible to sign this type')
38502 }
38503
38504 if (supportedType(input.witnessScriptType)) {
38505 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38506 witness.push(input.witnessScript)
38507 scriptType = input.witnessScriptType
38508 }
8b095871 38509
cf6c2044 38510 break
8b095871
IC
38511 }
38512
9987f0c1
IC
38513 // append redeemScript if necessary
38514 if (p2sh) {
38515 sig.push(input.redeemScript)
8b095871
IC
38516 }
38517
9987f0c1
IC
38518 return {
38519 type: scriptType,
38520 script: bscript.compile(sig),
38521 witness: witness
8b095871 38522 }
8b095871
IC
38523}
38524
9987f0c1
IC
38525function TransactionBuilder (network, maximumFeeRate) {
38526 this.prevTxMap = {}
38527 this.network = network || networks.bitcoin
8b095871 38528
9987f0c1
IC
38529 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38530 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 38531
9987f0c1
IC
38532 this.inputs = []
38533 this.tx = new Transaction()
8b095871
IC
38534}
38535
9987f0c1
IC
38536TransactionBuilder.prototype.setLockTime = function (locktime) {
38537 typeforce(types.UInt32, locktime)
8b095871 38538
9987f0c1
IC
38539 // if any signatures exist, throw
38540 if (this.inputs.some(function (input) {
38541 if (!input.signatures) return false
38542
38543 return input.signatures.some(function (s) { return s })
38544 })) {
38545 throw new Error('No, this would invalidate signatures')
38546 }
38547
38548 this.tx.locktime = locktime
8b095871
IC
38549}
38550
9987f0c1
IC
38551TransactionBuilder.prototype.setVersion = function (version) {
38552 typeforce(types.UInt32, version)
8b095871 38553
9987f0c1
IC
38554 // XXX: this might eventually become more complex depending on what the versions represent
38555 this.tx.version = version
38556}
8b095871 38557
9987f0c1
IC
38558TransactionBuilder.fromTransaction = function (transaction, network) {
38559 var txb = new TransactionBuilder(network)
8b095871 38560
9987f0c1
IC
38561 // Copy transaction fields
38562 txb.setVersion(transaction.version)
38563 txb.setLockTime(transaction.locktime)
8b095871 38564
9987f0c1
IC
38565 // Copy outputs (done first to avoid signature invalidation)
38566 transaction.outs.forEach(function (txOut) {
38567 txb.addOutput(txOut.script, txOut.value)
38568 })
8b095871 38569
9987f0c1
IC
38570 // Copy inputs
38571 transaction.ins.forEach(function (txIn) {
38572 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38573 sequence: txIn.sequence,
38574 script: txIn.script,
38575 witness: txIn.witness
38576 })
8b095871
IC
38577 })
38578
9987f0c1
IC
38579 // fix some things not possible through the public API
38580 txb.inputs.forEach(function (input, i) {
38581 fixMultisigOrder(input, transaction, i)
38582 })
8b095871 38583
9987f0c1 38584 return txb
8b095871
IC
38585}
38586
9987f0c1
IC
38587TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38588 if (!this.__canModifyInputs()) {
38589 throw new Error('No, this would invalidate signatures')
38590 }
8b095871 38591
9987f0c1 38592 var value
8b095871 38593
9987f0c1
IC
38594 // is it a hex string?
38595 if (typeof txHash === 'string') {
38596 // transaction hashs's are displayed in reverse order, un-reverse it
38597 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 38598
9987f0c1
IC
38599 // is it a Transaction object?
38600 } else if (txHash instanceof Transaction) {
38601 var txOut = txHash.outs[vout]
38602 prevOutScript = txOut.script
38603 value = txOut.value
8b095871 38604
9987f0c1
IC
38605 txHash = txHash.getHash()
38606 }
8b095871 38607
9987f0c1
IC
38608 return this.__addInputUnsafe(txHash, vout, {
38609 sequence: sequence,
38610 prevOutScript: prevOutScript,
38611 value: value
38612 })
38613}
8b095871 38614
9987f0c1
IC
38615TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38616 if (Transaction.isCoinbaseHash(txHash)) {
38617 throw new Error('coinbase inputs not supported')
38618 }
8b095871 38619
9987f0c1
IC
38620 var prevTxOut = txHash.toString('hex') + ':' + vout
38621 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 38622
9987f0c1 38623 var input = {}
8b095871 38624
9987f0c1
IC
38625 // derive what we can from the scriptSig
38626 if (options.script !== undefined) {
38627 input = expandInput(options.script, options.witness || [])
8b095871
IC
38628 }
38629
9987f0c1
IC
38630 // if an input value was given, retain it
38631 if (options.value !== undefined) {
38632 input.value = options.value
8b095871 38633 }
8b095871 38634
9987f0c1
IC
38635 // derive what we can from the previous transactions output script
38636 if (!input.prevOutScript && options.prevOutScript) {
38637 var prevOutType
8b095871 38638
9987f0c1
IC
38639 if (!input.pubKeys && !input.signatures) {
38640 var expanded = expandOutput(options.prevOutScript)
8b095871 38641
9987f0c1
IC
38642 if (expanded.pubKeys) {
38643 input.pubKeys = expanded.pubKeys
38644 input.signatures = expanded.signatures
38645 }
8b095871 38646
9987f0c1
IC
38647 prevOutType = expanded.scriptType
38648 }
8b095871 38649
9987f0c1 38650 input.prevOutScript = options.prevOutScript
cf6c2044 38651 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
9987f0c1 38652 }
8b095871 38653
9987f0c1
IC
38654 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38655 this.inputs[vin] = input
38656 this.prevTxMap[prevTxOut] = vin
9987f0c1
IC
38657 return vin
38658}
8b095871 38659
9987f0c1
IC
38660TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38661 if (!this.__canModifyOutputs()) {
38662 throw new Error('No, this would invalidate signatures')
8b095871
IC
38663 }
38664
9987f0c1
IC
38665 // Attempt to get a script if it's a base58 address string
38666 if (typeof scriptPubKey === 'string') {
38667 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 38668 }
8b095871 38669
9987f0c1
IC
38670 return this.tx.addOutput(scriptPubKey, value)
38671}
8b095871 38672
9987f0c1
IC
38673TransactionBuilder.prototype.build = function () {
38674 return this.__build(false)
38675}
38676TransactionBuilder.prototype.buildIncomplete = function () {
38677 return this.__build(true)
38678}
8b095871 38679
9987f0c1
IC
38680TransactionBuilder.prototype.__build = function (allowIncomplete) {
38681 if (!allowIncomplete) {
38682 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38683 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38684 }
8b095871 38685
9987f0c1
IC
38686 var tx = this.tx.clone()
38687 // Create script signatures from inputs
38688 this.inputs.forEach(function (input, i) {
38689 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38690 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38691 var result = buildInput(input, allowIncomplete)
8b095871 38692
9987f0c1
IC
38693 // skip if no result
38694 if (!allowIncomplete) {
cf6c2044 38695 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
9987f0c1
IC
38696 throw new Error(result.type + ' not supported')
38697 }
38698 }
8b095871 38699
9987f0c1
IC
38700 tx.setInputScript(i, result.script)
38701 tx.setWitness(i, result.witness)
38702 })
8b095871 38703
9987f0c1
IC
38704 if (!allowIncomplete) {
38705 // do not rely on this, its merely a last resort
cf6c2044 38706 if (this.__overMaximumFees(tx.virtualSize())) {
9987f0c1
IC
38707 throw new Error('Transaction has absurd fees')
38708 }
38709 }
8b095871 38710
9987f0c1 38711 return tx
8b095871
IC
38712}
38713
9987f0c1
IC
38714function canSign (input) {
38715 return input.prevOutScript !== undefined &&
38716 input.signScript !== undefined &&
38717 input.pubKeys !== undefined &&
38718 input.signatures !== undefined &&
38719 input.signatures.length === input.pubKeys.length &&
38720 input.pubKeys.length > 0 &&
cf6c2044
IC
38721 (
38722 input.witness === false ||
38723 (input.witness === true && input.value !== undefined)
38724 )
8b095871
IC
38725}
38726
9987f0c1 38727TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
cf6c2044
IC
38728 // TODO: remove keyPair.network matching in 4.0.0
38729 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
9987f0c1
IC
38730 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38731 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 38732
9987f0c1 38733 var input = this.inputs[vin]
8b095871 38734
9987f0c1
IC
38735 // if redeemScript was previously provided, enforce consistency
38736 if (input.redeemScript !== undefined &&
38737 redeemScript &&
38738 !input.redeemScript.equals(redeemScript)) {
38739 throw new Error('Inconsistent redeemScript')
38740 }
8b095871 38741
cf6c2044 38742 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
9987f0c1 38743 if (!canSign(input)) {
cf6c2044
IC
38744 if (witnessValue !== undefined) {
38745 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38746 typeforce(types.Satoshi, witnessValue)
38747 input.value = witnessValue
38748 }
38749
38750 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
9987f0c1
IC
38751 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38752 }
8b095871 38753
9987f0c1
IC
38754 // ready to sign
38755 var signatureHash
38756 if (input.witness) {
cf6c2044 38757 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
8b095871 38758 } else {
9987f0c1 38759 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 38760 }
cf6c2044 38761
9987f0c1
IC
38762 // enforce in order signing of public keys
38763 var signed = input.pubKeys.some(function (pubKey, i) {
38764 if (!kpPubKey.equals(pubKey)) return false
38765 if (input.signatures[i]) throw new Error('Signature already exists')
cf6c2044
IC
38766 if (kpPubKey.length !== 33 &&
38767 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
8b095871 38768
cf6c2044
IC
38769 var signature = keyPair.sign(signatureHash)
38770 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38771
38772 input.signatures[i] = signature.toScriptSignature(hashType)
9987f0c1
IC
38773 return true
38774 })
8b095871 38775
9987f0c1 38776 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
38777}
38778
9987f0c1
IC
38779function signatureHashType (buffer) {
38780 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
38781}
38782
9987f0c1
IC
38783TransactionBuilder.prototype.__canModifyInputs = function () {
38784 return this.inputs.every(function (input) {
38785 // any signatures?
38786 if (input.signatures === undefined) return true
8b095871 38787
9987f0c1
IC
38788 return input.signatures.every(function (signature) {
38789 if (!signature) return true
38790 var hashType = signatureHashType(signature)
8b095871 38791
9987f0c1
IC
38792 // if SIGHASH_ANYONECANPAY is set, signatures would not
38793 // be invalidated by more inputs
38794 return hashType & Transaction.SIGHASH_ANYONECANPAY
38795 })
38796 })
8b095871
IC
38797}
38798
9987f0c1
IC
38799TransactionBuilder.prototype.__canModifyOutputs = function () {
38800 var nInputs = this.tx.ins.length
38801 var nOutputs = this.tx.outs.length
8b095871 38802
9987f0c1
IC
38803 return this.inputs.every(function (input) {
38804 if (input.signatures === undefined) return true
8b095871 38805
9987f0c1
IC
38806 return input.signatures.every(function (signature) {
38807 if (!signature) return true
38808 var hashType = signatureHashType(signature)
8b095871 38809
9987f0c1
IC
38810 var hashTypeMod = hashType & 0x1f
38811 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38812 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38813 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38814 // some signatures would be invalidated by the addition
38815 // of more outputs
38816 return nInputs <= nOutputs
38817 }
38818 })
38819 })
8b095871
IC
38820}
38821
9987f0c1
IC
38822TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38823 // not all inputs will have .value defined
38824 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 38825
9987f0c1
IC
38826 // but all outputs do, and if we have any input value
38827 // we can immediately determine if the outputs are too small
38828 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38829 var fee = incoming - outgoing
38830 var feeRate = fee / bytes
8b095871 38831
9987f0c1 38832 return feeRate > this.maximumFeeRate
8b095871
IC
38833}
38834
9987f0c1 38835module.exports = TransactionBuilder
8b095871 38836
cf6c2044 38837},{"./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){
9987f0c1 38838var typeforce = require('typeforce')
8b095871 38839
9987f0c1
IC
38840var UINT31_MAX = Math.pow(2, 31) - 1
38841function UInt31 (value) {
38842 return typeforce.UInt32(value) && value <= UINT31_MAX
38843}
8b095871 38844
9987f0c1
IC
38845function BIP32Path (value) {
38846 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38847}
38848BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 38849
9987f0c1
IC
38850var SATOSHI_MAX = 21 * 1e14
38851function Satoshi (value) {
38852 return typeforce.UInt53(value) && value <= SATOSHI_MAX
38853}
8b095871 38854
9987f0c1
IC
38855// external dependent types
38856var BigInt = typeforce.quacksLike('BigInteger')
38857var ECPoint = typeforce.quacksLike('Point')
8b095871 38858
9987f0c1
IC
38859// exposed, external API
38860var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
38861var Network = typeforce.compile({
38862 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
38863 bip32: {
38864 public: typeforce.UInt32,
38865 private: typeforce.UInt32
38866 },
38867 pubKeyHash: typeforce.UInt8,
38868 scriptHash: typeforce.UInt8,
38869 wif: typeforce.UInt8
38870})
8b095871 38871
9987f0c1
IC
38872// extend typeforce types with ours
38873var types = {
38874 BigInt: BigInt,
38875 BIP32Path: BIP32Path,
38876 Buffer256bit: typeforce.BufferN(32),
38877 ECPoint: ECPoint,
38878 ECSignature: ECSignature,
38879 Hash160bit: typeforce.BufferN(20),
38880 Hash256bit: typeforce.BufferN(32),
38881 Network: Network,
38882 Satoshi: Satoshi,
38883 UInt31: UInt31
38884}
8b095871 38885
9987f0c1
IC
38886for (var typeName in typeforce) {
38887 types[typeName] = typeforce[typeName]
38888}
8b095871 38889
9987f0c1 38890module.exports = types
8b095871 38891
cf6c2044
IC
38892},{"typeforce":139}],81:[function(require,module,exports){
38893(function (module, exports) {
38894 'use strict';
8b095871 38895
cf6c2044
IC
38896 // Utils
38897 function assert (val, msg) {
38898 if (!val) throw new Error(msg || 'Assertion failed');
9987f0c1 38899 }
8b095871 38900
cf6c2044
IC
38901 // Could use `inherits` module, but don't want to move from single file
38902 // architecture yet.
38903 function inherits (ctor, superCtor) {
38904 ctor.super_ = superCtor;
38905 var TempCtor = function () {};
38906 TempCtor.prototype = superCtor.prototype;
38907 ctor.prototype = new TempCtor();
38908 ctor.prototype.constructor = ctor;
9987f0c1 38909 }
8b095871 38910
cf6c2044 38911 // BN
8b095871 38912
cf6c2044
IC
38913 function BN (number, base, endian) {
38914 if (BN.isBN(number)) {
38915 return number;
38916 }
8b095871 38917
cf6c2044
IC
38918 this.negative = 0;
38919 this.words = null;
38920 this.length = 0;
8b095871 38921
cf6c2044
IC
38922 // Reduction context
38923 this.red = null;
8b095871 38924
cf6c2044
IC
38925 if (number !== null) {
38926 if (base === 'le' || base === 'be') {
38927 endian = base;
38928 base = 10;
38929 }
8b095871 38930
cf6c2044 38931 this._init(number || 0, base || 10, endian || 'be');
9987f0c1 38932 }
9987f0c1 38933 }
cf6c2044
IC
38934 if (typeof module === 'object') {
38935 module.exports = BN;
38936 } else {
38937 exports.BN = BN;
38938 }
38939
38940 BN.BN = BN;
38941 BN.wordSize = 26;
38942
38943 var Buffer;
9987f0c1 38944 try {
cf6c2044 38945 Buffer = require('buf' + 'fer').Buffer;
9987f0c1 38946 } catch (e) {
8b095871
IC
38947 }
38948
cf6c2044
IC
38949 BN.isBN = function isBN (num) {
38950 if (num instanceof BN) {
38951 return true;
38952 }
8b095871 38953
cf6c2044
IC
38954 return num !== null && typeof num === 'object' &&
38955 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
38956 };
8b095871 38957
cf6c2044
IC
38958 BN.max = function max (left, right) {
38959 if (left.cmp(right) > 0) return left;
38960 return right;
38961 };
8b095871 38962
cf6c2044
IC
38963 BN.min = function min (left, right) {
38964 if (left.cmp(right) < 0) return left;
38965 return right;
38966 };
8b095871 38967
cf6c2044
IC
38968 BN.prototype._init = function init (number, base, endian) {
38969 if (typeof number === 'number') {
38970 return this._initNumber(number, base, endian);
38971 }
8b095871 38972
cf6c2044
IC
38973 if (typeof number === 'object') {
38974 return this._initArray(number, base, endian);
38975 }
8b095871 38976
cf6c2044
IC
38977 if (base === 'hex') {
38978 base = 16;
38979 }
38980 assert(base === (base | 0) && base >= 2 && base <= 36);
8b095871 38981
cf6c2044
IC
38982 number = number.toString().replace(/\s+/g, '');
38983 var start = 0;
38984 if (number[0] === '-') {
38985 start++;
38986 }
9987f0c1 38987
cf6c2044
IC
38988 if (base === 16) {
38989 this._parseHex(number, start);
38990 } else {
38991 this._parseBase(number, base, start);
38992 }
8b095871 38993
cf6c2044
IC
38994 if (number[0] === '-') {
38995 this.negative = 1;
38996 }
8b095871 38997
cf6c2044 38998 this.strip();
8b095871 38999
cf6c2044 39000 if (endian !== 'le') return;
8b095871 39001
cf6c2044
IC
39002 this._initArray(this.toArray(), base, endian);
39003 };
8b095871 39004
cf6c2044
IC
39005 BN.prototype._initNumber = function _initNumber (number, base, endian) {
39006 if (number < 0) {
39007 this.negative = 1;
39008 number = -number;
39009 }
39010 if (number < 0x4000000) {
39011 this.words = [ number & 0x3ffffff ];
39012 this.length = 1;
39013 } else if (number < 0x10000000000000) {
39014 this.words = [
39015 number & 0x3ffffff,
39016 (number / 0x4000000) & 0x3ffffff
39017 ];
39018 this.length = 2;
39019 } else {
39020 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
39021 this.words = [
39022 number & 0x3ffffff,
39023 (number / 0x4000000) & 0x3ffffff,
39024 1
39025 ];
39026 this.length = 3;
39027 }
8b095871 39028
cf6c2044 39029 if (endian !== 'le') return;
8b095871 39030
cf6c2044
IC
39031 // Reverse the bytes
39032 this._initArray(this.toArray(), base, endian);
39033 };
8b095871 39034
cf6c2044
IC
39035 BN.prototype._initArray = function _initArray (number, base, endian) {
39036 // Perhaps a Uint8Array
39037 assert(typeof number.length === 'number');
39038 if (number.length <= 0) {
39039 this.words = [ 0 ];
39040 this.length = 1;
39041 return this;
39042 }
8b095871 39043
cf6c2044
IC
39044 this.length = Math.ceil(number.length / 3);
39045 this.words = new Array(this.length);
39046 for (var i = 0; i < this.length; i++) {
39047 this.words[i] = 0;
39048 }
8b095871 39049
cf6c2044
IC
39050 var j, w;
39051 var off = 0;
39052 if (endian === 'be') {
39053 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
39054 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
39055 this.words[j] |= (w << off) & 0x3ffffff;
39056 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39057 off += 24;
39058 if (off >= 26) {
39059 off -= 26;
39060 j++;
39061 }
39062 }
39063 } else if (endian === 'le') {
39064 for (i = 0, j = 0; i < number.length; i += 3) {
39065 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
39066 this.words[j] |= (w << off) & 0x3ffffff;
39067 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39068 off += 24;
39069 if (off >= 26) {
39070 off -= 26;
39071 j++;
39072 }
39073 }
39074 }
39075 return this.strip();
39076 };
8b095871 39077
cf6c2044
IC
39078 function parseHex (str, start, end) {
39079 var r = 0;
39080 var len = Math.min(str.length, end);
39081 for (var i = start; i < len; i++) {
39082 var c = str.charCodeAt(i) - 48;
8b095871 39083
cf6c2044 39084 r <<= 4;
8b095871 39085
cf6c2044
IC
39086 // 'a' - 'f'
39087 if (c >= 49 && c <= 54) {
39088 r |= c - 49 + 0xa;
8b095871 39089
cf6c2044
IC
39090 // 'A' - 'F'
39091 } else if (c >= 17 && c <= 22) {
39092 r |= c - 17 + 0xa;
8b095871 39093
cf6c2044
IC
39094 // '0' - '9'
39095 } else {
39096 r |= c & 0xf;
39097 }
39098 }
39099 return r;
9987f0c1 39100 }
8b095871 39101
cf6c2044
IC
39102 BN.prototype._parseHex = function _parseHex (number, start) {
39103 // Create possibly bigger array to ensure that it fits the number
39104 this.length = Math.ceil((number.length - start) / 6);
39105 this.words = new Array(this.length);
39106 for (var i = 0; i < this.length; i++) {
39107 this.words[i] = 0;
39108 }
8b095871 39109
cf6c2044
IC
39110 var j, w;
39111 // Scan 24-bit chunks and add them to the number
39112 var off = 0;
39113 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
39114 w = parseHex(number, i, i + 6);
39115 this.words[j] |= (w << off) & 0x3ffffff;
39116 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
39117 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39118 off += 24;
39119 if (off >= 26) {
39120 off -= 26;
39121 j++;
39122 }
39123 }
39124 if (i + 6 !== start) {
39125 w = parseHex(number, start, i + 6);
39126 this.words[j] |= (w << off) & 0x3ffffff;
39127 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39128 }
39129 this.strip();
39130 };
39131
39132 function parseBase (str, start, end, mul) {
39133 var r = 0;
39134 var len = Math.min(str.length, end);
39135 for (var i = start; i < len; i++) {
39136 var c = str.charCodeAt(i) - 48;
39137
39138 r *= mul;
39139
39140 // 'a'
39141 if (c >= 49) {
39142 r += c - 49 + 0xa;
39143
39144 // 'A'
39145 } else if (c >= 17) {
39146 r += c - 17 + 0xa;
39147
39148 // '0' - '9'
39149 } else {
39150 r += c;
39151 }
39152 }
39153 return r;
39154 }
39155
39156 BN.prototype._parseBase = function _parseBase (number, base, start) {
39157 // Initialize as zero
39158 this.words = [ 0 ];
39159 this.length = 1;
39160
39161 // Find length of limb in base
39162 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
39163 limbLen++;
39164 }
39165 limbLen--;
39166 limbPow = (limbPow / base) | 0;
39167
39168 var total = number.length - start;
39169 var mod = total % limbLen;
39170 var end = Math.min(total, total - mod) + start;
39171
39172 var word = 0;
39173 for (var i = start; i < end; i += limbLen) {
39174 word = parseBase(number, i, i + limbLen, base);
39175
39176 this.imuln(limbPow);
39177 if (this.words[0] + word < 0x4000000) {
39178 this.words[0] += word;
39179 } else {
39180 this._iaddn(word);
39181 }
39182 }
39183
39184 if (mod !== 0) {
39185 var pow = 1;
39186 word = parseBase(number, i, number.length, base);
39187
39188 for (i = 0; i < mod; i++) {
39189 pow *= base;
39190 }
39191
39192 this.imuln(pow);
39193 if (this.words[0] + word < 0x4000000) {
39194 this.words[0] += word;
39195 } else {
39196 this._iaddn(word);
39197 }
39198 }
39199 };
39200
39201 BN.prototype.copy = function copy (dest) {
39202 dest.words = new Array(this.length);
39203 for (var i = 0; i < this.length; i++) {
39204 dest.words[i] = this.words[i];
39205 }
39206 dest.length = this.length;
39207 dest.negative = this.negative;
39208 dest.red = this.red;
39209 };
39210
39211 BN.prototype.clone = function clone () {
39212 var r = new BN(null);
39213 this.copy(r);
39214 return r;
39215 };
39216
39217 BN.prototype._expand = function _expand (size) {
39218 while (this.length < size) {
39219 this.words[this.length++] = 0;
39220 }
39221 return this;
39222 };
39223
39224 // Remove leading `0` from `this`
39225 BN.prototype.strip = function strip () {
39226 while (this.length > 1 && this.words[this.length - 1] === 0) {
39227 this.length--;
39228 }
39229 return this._normSign();
39230 };
39231
39232 BN.prototype._normSign = function _normSign () {
39233 // -0 = 0
39234 if (this.length === 1 && this.words[0] === 0) {
39235 this.negative = 0;
39236 }
39237 return this;
39238 };
39239
39240 BN.prototype.inspect = function inspect () {
39241 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
39242 };
39243
39244 /*
39245
39246 var zeros = [];
39247 var groupSizes = [];
39248 var groupBases = [];
39249
39250 var s = '';
39251 var i = -1;
39252 while (++i < BN.wordSize) {
39253 zeros[i] = s;
39254 s += '0';
39255 }
39256 groupSizes[0] = 0;
39257 groupSizes[1] = 0;
39258 groupBases[0] = 0;
39259 groupBases[1] = 0;
39260 var base = 2 - 1;
39261 while (++base < 36 + 1) {
39262 var groupSize = 0;
39263 var groupBase = 1;
39264 while (groupBase < (1 << BN.wordSize) / base) {
39265 groupBase *= base;
39266 groupSize += 1;
39267 }
39268 groupSizes[base] = groupSize;
39269 groupBases[base] = groupBase;
39270 }
39271
39272 */
39273
39274 var zeros = [
39275 '',
39276 '0',
39277 '00',
39278 '000',
39279 '0000',
39280 '00000',
39281 '000000',
39282 '0000000',
39283 '00000000',
39284 '000000000',
39285 '0000000000',
39286 '00000000000',
39287 '000000000000',
39288 '0000000000000',
39289 '00000000000000',
39290 '000000000000000',
39291 '0000000000000000',
39292 '00000000000000000',
39293 '000000000000000000',
39294 '0000000000000000000',
39295 '00000000000000000000',
39296 '000000000000000000000',
39297 '0000000000000000000000',
39298 '00000000000000000000000',
39299 '000000000000000000000000',
39300 '0000000000000000000000000'
39301 ];
39302
39303 var groupSizes = [
39304 0, 0,
39305 25, 16, 12, 11, 10, 9, 8,
39306 8, 7, 7, 7, 7, 6, 6,
39307 6, 6, 6, 6, 6, 5, 5,
39308 5, 5, 5, 5, 5, 5, 5,
39309 5, 5, 5, 5, 5, 5, 5
39310 ];
39311
39312 var groupBases = [
39313 0, 0,
39314 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
39315 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
39316 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
39317 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
39318 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
39319 ];
39320
39321 BN.prototype.toString = function toString (base, padding) {
39322 base = base || 10;
39323 padding = padding | 0 || 1;
39324
39325 var out;
39326 if (base === 16 || base === 'hex') {
39327 out = '';
39328 var off = 0;
39329 var carry = 0;
39330 for (var i = 0; i < this.length; i++) {
39331 var w = this.words[i];
39332 var word = (((w << off) | carry) & 0xffffff).toString(16);
39333 carry = (w >>> (24 - off)) & 0xffffff;
39334 if (carry !== 0 || i !== this.length - 1) {
39335 out = zeros[6 - word.length] + word + out;
39336 } else {
39337 out = word + out;
39338 }
39339 off += 2;
39340 if (off >= 26) {
39341 off -= 26;
39342 i--;
39343 }
39344 }
39345 if (carry !== 0) {
39346 out = carry.toString(16) + out;
39347 }
39348 while (out.length % padding !== 0) {
39349 out = '0' + out;
39350 }
39351 if (this.negative !== 0) {
39352 out = '-' + out;
39353 }
39354 return out;
39355 }
39356
39357 if (base === (base | 0) && base >= 2 && base <= 36) {
39358 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39359 var groupSize = groupSizes[base];
39360 // var groupBase = Math.pow(base, groupSize);
39361 var groupBase = groupBases[base];
39362 out = '';
39363 var c = this.clone();
39364 c.negative = 0;
39365 while (!c.isZero()) {
39366 var r = c.modn(groupBase).toString(base);
39367 c = c.idivn(groupBase);
39368
39369 if (!c.isZero()) {
39370 out = zeros[groupSize - r.length] + r + out;
39371 } else {
39372 out = r + out;
39373 }
39374 }
39375 if (this.isZero()) {
39376 out = '0' + out;
39377 }
39378 while (out.length % padding !== 0) {
39379 out = '0' + out;
39380 }
39381 if (this.negative !== 0) {
39382 out = '-' + out;
39383 }
39384 return out;
39385 }
39386
39387 assert(false, 'Base should be between 2 and 36');
39388 };
39389
39390 BN.prototype.toNumber = function toNumber () {
39391 var ret = this.words[0];
39392 if (this.length === 2) {
39393 ret += this.words[1] * 0x4000000;
39394 } else if (this.length === 3 && this.words[2] === 0x01) {
39395 // NOTE: at this stage it is known that the top bit is set
39396 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39397 } else if (this.length > 2) {
39398 assert(false, 'Number can only safely store up to 53 bits');
39399 }
39400 return (this.negative !== 0) ? -ret : ret;
39401 };
39402
39403 BN.prototype.toJSON = function toJSON () {
39404 return this.toString(16);
39405 };
39406
39407 BN.prototype.toBuffer = function toBuffer (endian, length) {
39408 assert(typeof Buffer !== 'undefined');
39409 return this.toArrayLike(Buffer, endian, length);
39410 };
39411
39412 BN.prototype.toArray = function toArray (endian, length) {
39413 return this.toArrayLike(Array, endian, length);
39414 };
39415
39416 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39417 var byteLength = this.byteLength();
39418 var reqLength = length || Math.max(1, byteLength);
39419 assert(byteLength <= reqLength, 'byte array longer than desired length');
39420 assert(reqLength > 0, 'Requested array length <= 0');
39421
39422 this.strip();
39423 var littleEndian = endian === 'le';
39424 var res = new ArrayType(reqLength);
39425
39426 var b, i;
39427 var q = this.clone();
39428 if (!littleEndian) {
39429 // Assume big-endian
39430 for (i = 0; i < reqLength - byteLength; i++) {
39431 res[i] = 0;
39432 }
39433
39434 for (i = 0; !q.isZero(); i++) {
39435 b = q.andln(0xff);
39436 q.iushrn(8);
39437
39438 res[reqLength - i - 1] = b;
39439 }
39440 } else {
39441 for (i = 0; !q.isZero(); i++) {
39442 b = q.andln(0xff);
39443 q.iushrn(8);
39444
39445 res[i] = b;
39446 }
39447
39448 for (; i < reqLength; i++) {
39449 res[i] = 0;
39450 }
39451 }
39452
39453 return res;
39454 };
39455
39456 if (Math.clz32) {
39457 BN.prototype._countBits = function _countBits (w) {
39458 return 32 - Math.clz32(w);
39459 };
39460 } else {
39461 BN.prototype._countBits = function _countBits (w) {
39462 var t = w;
39463 var r = 0;
39464 if (t >= 0x1000) {
39465 r += 13;
39466 t >>>= 13;
39467 }
39468 if (t >= 0x40) {
39469 r += 7;
39470 t >>>= 7;
39471 }
39472 if (t >= 0x8) {
39473 r += 4;
39474 t >>>= 4;
39475 }
39476 if (t >= 0x02) {
39477 r += 2;
39478 t >>>= 2;
39479 }
39480 return r + t;
39481 };
39482 }
39483
39484 BN.prototype._zeroBits = function _zeroBits (w) {
39485 // Short-cut
39486 if (w === 0) return 26;
39487
39488 var t = w;
39489 var r = 0;
39490 if ((t & 0x1fff) === 0) {
39491 r += 13;
39492 t >>>= 13;
39493 }
39494 if ((t & 0x7f) === 0) {
39495 r += 7;
39496 t >>>= 7;
39497 }
39498 if ((t & 0xf) === 0) {
39499 r += 4;
39500 t >>>= 4;
39501 }
39502 if ((t & 0x3) === 0) {
39503 r += 2;
39504 t >>>= 2;
39505 }
39506 if ((t & 0x1) === 0) {
39507 r++;
39508 }
39509 return r;
39510 };
39511
39512 // Return number of used bits in a BN
39513 BN.prototype.bitLength = function bitLength () {
39514 var w = this.words[this.length - 1];
39515 var hi = this._countBits(w);
39516 return (this.length - 1) * 26 + hi;
39517 };
39518
39519 function toBitArray (num) {
39520 var w = new Array(num.bitLength());
39521
39522 for (var bit = 0; bit < w.length; bit++) {
39523 var off = (bit / 26) | 0;
39524 var wbit = bit % 26;
39525
39526 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
39527 }
39528
39529 return w;
39530 }
39531
39532 // Number of trailing zero bits
39533 BN.prototype.zeroBits = function zeroBits () {
39534 if (this.isZero()) return 0;
39535
39536 var r = 0;
39537 for (var i = 0; i < this.length; i++) {
39538 var b = this._zeroBits(this.words[i]);
39539 r += b;
39540 if (b !== 26) break;
39541 }
39542 return r;
39543 };
39544
39545 BN.prototype.byteLength = function byteLength () {
39546 return Math.ceil(this.bitLength() / 8);
39547 };
39548
39549 BN.prototype.toTwos = function toTwos (width) {
39550 if (this.negative !== 0) {
39551 return this.abs().inotn(width).iaddn(1);
39552 }
39553 return this.clone();
39554 };
39555
39556 BN.prototype.fromTwos = function fromTwos (width) {
39557 if (this.testn(width - 1)) {
39558 return this.notn(width).iaddn(1).ineg();
39559 }
39560 return this.clone();
39561 };
39562
39563 BN.prototype.isNeg = function isNeg () {
39564 return this.negative !== 0;
39565 };
39566
39567 // Return negative clone of `this`
39568 BN.prototype.neg = function neg () {
39569 return this.clone().ineg();
39570 };
39571
39572 BN.prototype.ineg = function ineg () {
39573 if (!this.isZero()) {
39574 this.negative ^= 1;
39575 }
39576
39577 return this;
39578 };
39579
39580 // Or `num` with `this` in-place
39581 BN.prototype.iuor = function iuor (num) {
39582 while (this.length < num.length) {
39583 this.words[this.length++] = 0;
39584 }
39585
39586 for (var i = 0; i < num.length; i++) {
39587 this.words[i] = this.words[i] | num.words[i];
39588 }
39589
39590 return this.strip();
39591 };
39592
39593 BN.prototype.ior = function ior (num) {
39594 assert((this.negative | num.negative) === 0);
39595 return this.iuor(num);
39596 };
39597
39598 // Or `num` with `this`
39599 BN.prototype.or = function or (num) {
39600 if (this.length > num.length) return this.clone().ior(num);
39601 return num.clone().ior(this);
39602 };
39603
39604 BN.prototype.uor = function uor (num) {
39605 if (this.length > num.length) return this.clone().iuor(num);
39606 return num.clone().iuor(this);
39607 };
39608
39609 // And `num` with `this` in-place
39610 BN.prototype.iuand = function iuand (num) {
39611 // b = min-length(num, this)
39612 var b;
39613 if (this.length > num.length) {
39614 b = num;
39615 } else {
39616 b = this;
39617 }
39618
39619 for (var i = 0; i < b.length; i++) {
39620 this.words[i] = this.words[i] & num.words[i];
39621 }
39622
39623 this.length = b.length;
39624
39625 return this.strip();
39626 };
39627
39628 BN.prototype.iand = function iand (num) {
39629 assert((this.negative | num.negative) === 0);
39630 return this.iuand(num);
39631 };
39632
39633 // And `num` with `this`
39634 BN.prototype.and = function and (num) {
39635 if (this.length > num.length) return this.clone().iand(num);
39636 return num.clone().iand(this);
39637 };
39638
39639 BN.prototype.uand = function uand (num) {
39640 if (this.length > num.length) return this.clone().iuand(num);
39641 return num.clone().iuand(this);
39642 };
39643
39644 // Xor `num` with `this` in-place
39645 BN.prototype.iuxor = function iuxor (num) {
39646 // a.length > b.length
39647 var a;
39648 var b;
39649 if (this.length > num.length) {
39650 a = this;
39651 b = num;
39652 } else {
39653 a = num;
39654 b = this;
39655 }
39656
39657 for (var i = 0; i < b.length; i++) {
39658 this.words[i] = a.words[i] ^ b.words[i];
39659 }
39660
39661 if (this !== a) {
39662 for (; i < a.length; i++) {
39663 this.words[i] = a.words[i];
39664 }
39665 }
39666
39667 this.length = a.length;
39668
39669 return this.strip();
39670 };
39671
39672 BN.prototype.ixor = function ixor (num) {
39673 assert((this.negative | num.negative) === 0);
39674 return this.iuxor(num);
39675 };
39676
39677 // Xor `num` with `this`
39678 BN.prototype.xor = function xor (num) {
39679 if (this.length > num.length) return this.clone().ixor(num);
39680 return num.clone().ixor(this);
39681 };
39682
39683 BN.prototype.uxor = function uxor (num) {
39684 if (this.length > num.length) return this.clone().iuxor(num);
39685 return num.clone().iuxor(this);
39686 };
39687
39688 // Not ``this`` with ``width`` bitwidth
39689 BN.prototype.inotn = function inotn (width) {
39690 assert(typeof width === 'number' && width >= 0);
39691
39692 var bytesNeeded = Math.ceil(width / 26) | 0;
39693 var bitsLeft = width % 26;
39694
39695 // Extend the buffer with leading zeroes
39696 this._expand(bytesNeeded);
39697
39698 if (bitsLeft > 0) {
39699 bytesNeeded--;
39700 }
39701
39702 // Handle complete words
39703 for (var i = 0; i < bytesNeeded; i++) {
39704 this.words[i] = ~this.words[i] & 0x3ffffff;
39705 }
39706
39707 // Handle the residue
39708 if (bitsLeft > 0) {
39709 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
39710 }
39711
39712 // And remove leading zeroes
39713 return this.strip();
39714 };
39715
39716 BN.prototype.notn = function notn (width) {
39717 return this.clone().inotn(width);
39718 };
39719
39720 // Set `bit` of `this`
39721 BN.prototype.setn = function setn (bit, val) {
39722 assert(typeof bit === 'number' && bit >= 0);
39723
39724 var off = (bit / 26) | 0;
39725 var wbit = bit % 26;
39726
39727 this._expand(off + 1);
39728
39729 if (val) {
39730 this.words[off] = this.words[off] | (1 << wbit);
39731 } else {
39732 this.words[off] = this.words[off] & ~(1 << wbit);
39733 }
39734
39735 return this.strip();
39736 };
39737
39738 // Add `num` to `this` in-place
39739 BN.prototype.iadd = function iadd (num) {
39740 var r;
39741
39742 // negative + positive
39743 if (this.negative !== 0 && num.negative === 0) {
39744 this.negative = 0;
39745 r = this.isub(num);
39746 this.negative ^= 1;
39747 return this._normSign();
39748
39749 // positive + negative
39750 } else if (this.negative === 0 && num.negative !== 0) {
39751 num.negative = 0;
39752 r = this.isub(num);
39753 num.negative = 1;
39754 return r._normSign();
39755 }
39756
39757 // a.length > b.length
39758 var a, b;
39759 if (this.length > num.length) {
39760 a = this;
39761 b = num;
39762 } else {
39763 a = num;
39764 b = this;
39765 }
39766
39767 var carry = 0;
39768 for (var i = 0; i < b.length; i++) {
39769 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39770 this.words[i] = r & 0x3ffffff;
39771 carry = r >>> 26;
39772 }
39773 for (; carry !== 0 && i < a.length; i++) {
39774 r = (a.words[i] | 0) + carry;
39775 this.words[i] = r & 0x3ffffff;
39776 carry = r >>> 26;
39777 }
39778
39779 this.length = a.length;
39780 if (carry !== 0) {
39781 this.words[this.length] = carry;
39782 this.length++;
39783 // Copy the rest of the words
39784 } else if (a !== this) {
39785 for (; i < a.length; i++) {
39786 this.words[i] = a.words[i];
39787 }
39788 }
39789
39790 return this;
39791 };
39792
39793 // Add `num` to `this`
39794 BN.prototype.add = function add (num) {
39795 var res;
39796 if (num.negative !== 0 && this.negative === 0) {
39797 num.negative = 0;
39798 res = this.sub(num);
39799 num.negative ^= 1;
39800 return res;
39801 } else if (num.negative === 0 && this.negative !== 0) {
39802 this.negative = 0;
39803 res = num.sub(this);
39804 this.negative = 1;
39805 return res;
39806 }
39807
39808 if (this.length > num.length) return this.clone().iadd(num);
39809
39810 return num.clone().iadd(this);
39811 };
39812
39813 // Subtract `num` from `this` in-place
39814 BN.prototype.isub = function isub (num) {
39815 // this - (-num) = this + num
39816 if (num.negative !== 0) {
39817 num.negative = 0;
39818 var r = this.iadd(num);
39819 num.negative = 1;
39820 return r._normSign();
39821
39822 // -this - num = -(this + num)
39823 } else if (this.negative !== 0) {
39824 this.negative = 0;
39825 this.iadd(num);
39826 this.negative = 1;
39827 return this._normSign();
39828 }
39829
39830 // At this point both numbers are positive
39831 var cmp = this.cmp(num);
39832
39833 // Optimization - zeroify
39834 if (cmp === 0) {
39835 this.negative = 0;
39836 this.length = 1;
39837 this.words[0] = 0;
39838 return this;
39839 }
39840
39841 // a > b
39842 var a, b;
39843 if (cmp > 0) {
39844 a = this;
39845 b = num;
39846 } else {
39847 a = num;
39848 b = this;
39849 }
39850
39851 var carry = 0;
39852 for (var i = 0; i < b.length; i++) {
39853 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39854 carry = r >> 26;
39855 this.words[i] = r & 0x3ffffff;
39856 }
39857 for (; carry !== 0 && i < a.length; i++) {
39858 r = (a.words[i] | 0) + carry;
39859 carry = r >> 26;
39860 this.words[i] = r & 0x3ffffff;
39861 }
39862
39863 // Copy rest of the words
39864 if (carry === 0 && i < a.length && a !== this) {
39865 for (; i < a.length; i++) {
39866 this.words[i] = a.words[i];
39867 }
39868 }
39869
39870 this.length = Math.max(this.length, i);
39871
39872 if (a !== this) {
39873 this.negative = 1;
39874 }
39875
39876 return this.strip();
39877 };
39878
39879 // Subtract `num` from `this`
39880 BN.prototype.sub = function sub (num) {
39881 return this.clone().isub(num);
39882 };
39883
39884 function smallMulTo (self, num, out) {
39885 out.negative = num.negative ^ self.negative;
39886 var len = (self.length + num.length) | 0;
39887 out.length = len;
39888 len = (len - 1) | 0;
39889
39890 // Peel one iteration (compiler can't do it, because of code complexity)
39891 var a = self.words[0] | 0;
39892 var b = num.words[0] | 0;
39893 var r = a * b;
39894
39895 var lo = r & 0x3ffffff;
39896 var carry = (r / 0x4000000) | 0;
39897 out.words[0] = lo;
39898
39899 for (var k = 1; k < len; k++) {
39900 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
39901 // note that ncarry could be >= 0x3ffffff
39902 var ncarry = carry >>> 26;
39903 var rword = carry & 0x3ffffff;
39904 var maxJ = Math.min(k, num.length - 1);
39905 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
39906 var i = (k - j) | 0;
39907 a = self.words[i] | 0;
39908 b = num.words[j] | 0;
39909 r = a * b + rword;
39910 ncarry += (r / 0x4000000) | 0;
39911 rword = r & 0x3ffffff;
39912 }
39913 out.words[k] = rword | 0;
39914 carry = ncarry | 0;
39915 }
39916 if (carry !== 0) {
39917 out.words[k] = carry | 0;
39918 } else {
39919 out.length--;
39920 }
39921
39922 return out.strip();
39923 }
39924
39925 // TODO(indutny): it may be reasonable to omit it for users who don't need
39926 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
39927 // multiplication (like elliptic secp256k1).
39928 var comb10MulTo = function comb10MulTo (self, num, out) {
39929 var a = self.words;
39930 var b = num.words;
39931 var o = out.words;
39932 var c = 0;
39933 var lo;
39934 var mid;
39935 var hi;
39936 var a0 = a[0] | 0;
39937 var al0 = a0 & 0x1fff;
39938 var ah0 = a0 >>> 13;
39939 var a1 = a[1] | 0;
39940 var al1 = a1 & 0x1fff;
39941 var ah1 = a1 >>> 13;
39942 var a2 = a[2] | 0;
39943 var al2 = a2 & 0x1fff;
39944 var ah2 = a2 >>> 13;
39945 var a3 = a[3] | 0;
39946 var al3 = a3 & 0x1fff;
39947 var ah3 = a3 >>> 13;
39948 var a4 = a[4] | 0;
39949 var al4 = a4 & 0x1fff;
39950 var ah4 = a4 >>> 13;
39951 var a5 = a[5] | 0;
39952 var al5 = a5 & 0x1fff;
39953 var ah5 = a5 >>> 13;
39954 var a6 = a[6] | 0;
39955 var al6 = a6 & 0x1fff;
39956 var ah6 = a6 >>> 13;
39957 var a7 = a[7] | 0;
39958 var al7 = a7 & 0x1fff;
39959 var ah7 = a7 >>> 13;
39960 var a8 = a[8] | 0;
39961 var al8 = a8 & 0x1fff;
39962 var ah8 = a8 >>> 13;
39963 var a9 = a[9] | 0;
39964 var al9 = a9 & 0x1fff;
39965 var ah9 = a9 >>> 13;
39966 var b0 = b[0] | 0;
39967 var bl0 = b0 & 0x1fff;
39968 var bh0 = b0 >>> 13;
39969 var b1 = b[1] | 0;
39970 var bl1 = b1 & 0x1fff;
39971 var bh1 = b1 >>> 13;
39972 var b2 = b[2] | 0;
39973 var bl2 = b2 & 0x1fff;
39974 var bh2 = b2 >>> 13;
39975 var b3 = b[3] | 0;
39976 var bl3 = b3 & 0x1fff;
39977 var bh3 = b3 >>> 13;
39978 var b4 = b[4] | 0;
39979 var bl4 = b4 & 0x1fff;
39980 var bh4 = b4 >>> 13;
39981 var b5 = b[5] | 0;
39982 var bl5 = b5 & 0x1fff;
39983 var bh5 = b5 >>> 13;
39984 var b6 = b[6] | 0;
39985 var bl6 = b6 & 0x1fff;
39986 var bh6 = b6 >>> 13;
39987 var b7 = b[7] | 0;
39988 var bl7 = b7 & 0x1fff;
39989 var bh7 = b7 >>> 13;
39990 var b8 = b[8] | 0;
39991 var bl8 = b8 & 0x1fff;
39992 var bh8 = b8 >>> 13;
39993 var b9 = b[9] | 0;
39994 var bl9 = b9 & 0x1fff;
39995 var bh9 = b9 >>> 13;
39996
39997 out.negative = self.negative ^ num.negative;
39998 out.length = 19;
39999 /* k = 0 */
40000 lo = Math.imul(al0, bl0);
40001 mid = Math.imul(al0, bh0);
40002 mid = (mid + Math.imul(ah0, bl0)) | 0;
40003 hi = Math.imul(ah0, bh0);
40004 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40005 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
40006 w0 &= 0x3ffffff;
40007 /* k = 1 */
40008 lo = Math.imul(al1, bl0);
40009 mid = Math.imul(al1, bh0);
40010 mid = (mid + Math.imul(ah1, bl0)) | 0;
40011 hi = Math.imul(ah1, bh0);
40012 lo = (lo + Math.imul(al0, bl1)) | 0;
40013 mid = (mid + Math.imul(al0, bh1)) | 0;
40014 mid = (mid + Math.imul(ah0, bl1)) | 0;
40015 hi = (hi + Math.imul(ah0, bh1)) | 0;
40016 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40017 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
40018 w1 &= 0x3ffffff;
40019 /* k = 2 */
40020 lo = Math.imul(al2, bl0);
40021 mid = Math.imul(al2, bh0);
40022 mid = (mid + Math.imul(ah2, bl0)) | 0;
40023 hi = Math.imul(ah2, bh0);
40024 lo = (lo + Math.imul(al1, bl1)) | 0;
40025 mid = (mid + Math.imul(al1, bh1)) | 0;
40026 mid = (mid + Math.imul(ah1, bl1)) | 0;
40027 hi = (hi + Math.imul(ah1, bh1)) | 0;
40028 lo = (lo + Math.imul(al0, bl2)) | 0;
40029 mid = (mid + Math.imul(al0, bh2)) | 0;
40030 mid = (mid + Math.imul(ah0, bl2)) | 0;
40031 hi = (hi + Math.imul(ah0, bh2)) | 0;
40032 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40033 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
40034 w2 &= 0x3ffffff;
40035 /* k = 3 */
40036 lo = Math.imul(al3, bl0);
40037 mid = Math.imul(al3, bh0);
40038 mid = (mid + Math.imul(ah3, bl0)) | 0;
40039 hi = Math.imul(ah3, bh0);
40040 lo = (lo + Math.imul(al2, bl1)) | 0;
40041 mid = (mid + Math.imul(al2, bh1)) | 0;
40042 mid = (mid + Math.imul(ah2, bl1)) | 0;
40043 hi = (hi + Math.imul(ah2, bh1)) | 0;
40044 lo = (lo + Math.imul(al1, bl2)) | 0;
40045 mid = (mid + Math.imul(al1, bh2)) | 0;
40046 mid = (mid + Math.imul(ah1, bl2)) | 0;
40047 hi = (hi + Math.imul(ah1, bh2)) | 0;
40048 lo = (lo + Math.imul(al0, bl3)) | 0;
40049 mid = (mid + Math.imul(al0, bh3)) | 0;
40050 mid = (mid + Math.imul(ah0, bl3)) | 0;
40051 hi = (hi + Math.imul(ah0, bh3)) | 0;
40052 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40053 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
40054 w3 &= 0x3ffffff;
40055 /* k = 4 */
40056 lo = Math.imul(al4, bl0);
40057 mid = Math.imul(al4, bh0);
40058 mid = (mid + Math.imul(ah4, bl0)) | 0;
40059 hi = Math.imul(ah4, bh0);
40060 lo = (lo + Math.imul(al3, bl1)) | 0;
40061 mid = (mid + Math.imul(al3, bh1)) | 0;
40062 mid = (mid + Math.imul(ah3, bl1)) | 0;
40063 hi = (hi + Math.imul(ah3, bh1)) | 0;
40064 lo = (lo + Math.imul(al2, bl2)) | 0;
40065 mid = (mid + Math.imul(al2, bh2)) | 0;
40066 mid = (mid + Math.imul(ah2, bl2)) | 0;
40067 hi = (hi + Math.imul(ah2, bh2)) | 0;
40068 lo = (lo + Math.imul(al1, bl3)) | 0;
40069 mid = (mid + Math.imul(al1, bh3)) | 0;
40070 mid = (mid + Math.imul(ah1, bl3)) | 0;
40071 hi = (hi + Math.imul(ah1, bh3)) | 0;
40072 lo = (lo + Math.imul(al0, bl4)) | 0;
40073 mid = (mid + Math.imul(al0, bh4)) | 0;
40074 mid = (mid + Math.imul(ah0, bl4)) | 0;
40075 hi = (hi + Math.imul(ah0, bh4)) | 0;
40076 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40077 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
40078 w4 &= 0x3ffffff;
40079 /* k = 5 */
40080 lo = Math.imul(al5, bl0);
40081 mid = Math.imul(al5, bh0);
40082 mid = (mid + Math.imul(ah5, bl0)) | 0;
40083 hi = Math.imul(ah5, bh0);
40084 lo = (lo + Math.imul(al4, bl1)) | 0;
40085 mid = (mid + Math.imul(al4, bh1)) | 0;
40086 mid = (mid + Math.imul(ah4, bl1)) | 0;
40087 hi = (hi + Math.imul(ah4, bh1)) | 0;
40088 lo = (lo + Math.imul(al3, bl2)) | 0;
40089 mid = (mid + Math.imul(al3, bh2)) | 0;
40090 mid = (mid + Math.imul(ah3, bl2)) | 0;
40091 hi = (hi + Math.imul(ah3, bh2)) | 0;
40092 lo = (lo + Math.imul(al2, bl3)) | 0;
40093 mid = (mid + Math.imul(al2, bh3)) | 0;
40094 mid = (mid + Math.imul(ah2, bl3)) | 0;
40095 hi = (hi + Math.imul(ah2, bh3)) | 0;
40096 lo = (lo + Math.imul(al1, bl4)) | 0;
40097 mid = (mid + Math.imul(al1, bh4)) | 0;
40098 mid = (mid + Math.imul(ah1, bl4)) | 0;
40099 hi = (hi + Math.imul(ah1, bh4)) | 0;
40100 lo = (lo + Math.imul(al0, bl5)) | 0;
40101 mid = (mid + Math.imul(al0, bh5)) | 0;
40102 mid = (mid + Math.imul(ah0, bl5)) | 0;
40103 hi = (hi + Math.imul(ah0, bh5)) | 0;
40104 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40105 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
40106 w5 &= 0x3ffffff;
40107 /* k = 6 */
40108 lo = Math.imul(al6, bl0);
40109 mid = Math.imul(al6, bh0);
40110 mid = (mid + Math.imul(ah6, bl0)) | 0;
40111 hi = Math.imul(ah6, bh0);
40112 lo = (lo + Math.imul(al5, bl1)) | 0;
40113 mid = (mid + Math.imul(al5, bh1)) | 0;
40114 mid = (mid + Math.imul(ah5, bl1)) | 0;
40115 hi = (hi + Math.imul(ah5, bh1)) | 0;
40116 lo = (lo + Math.imul(al4, bl2)) | 0;
40117 mid = (mid + Math.imul(al4, bh2)) | 0;
40118 mid = (mid + Math.imul(ah4, bl2)) | 0;
40119 hi = (hi + Math.imul(ah4, bh2)) | 0;
40120 lo = (lo + Math.imul(al3, bl3)) | 0;
40121 mid = (mid + Math.imul(al3, bh3)) | 0;
40122 mid = (mid + Math.imul(ah3, bl3)) | 0;
40123 hi = (hi + Math.imul(ah3, bh3)) | 0;
40124 lo = (lo + Math.imul(al2, bl4)) | 0;
40125 mid = (mid + Math.imul(al2, bh4)) | 0;
40126 mid = (mid + Math.imul(ah2, bl4)) | 0;
40127 hi = (hi + Math.imul(ah2, bh4)) | 0;
40128 lo = (lo + Math.imul(al1, bl5)) | 0;
40129 mid = (mid + Math.imul(al1, bh5)) | 0;
40130 mid = (mid + Math.imul(ah1, bl5)) | 0;
40131 hi = (hi + Math.imul(ah1, bh5)) | 0;
40132 lo = (lo + Math.imul(al0, bl6)) | 0;
40133 mid = (mid + Math.imul(al0, bh6)) | 0;
40134 mid = (mid + Math.imul(ah0, bl6)) | 0;
40135 hi = (hi + Math.imul(ah0, bh6)) | 0;
40136 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40137 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
40138 w6 &= 0x3ffffff;
40139 /* k = 7 */
40140 lo = Math.imul(al7, bl0);
40141 mid = Math.imul(al7, bh0);
40142 mid = (mid + Math.imul(ah7, bl0)) | 0;
40143 hi = Math.imul(ah7, bh0);
40144 lo = (lo + Math.imul(al6, bl1)) | 0;
40145 mid = (mid + Math.imul(al6, bh1)) | 0;
40146 mid = (mid + Math.imul(ah6, bl1)) | 0;
40147 hi = (hi + Math.imul(ah6, bh1)) | 0;
40148 lo = (lo + Math.imul(al5, bl2)) | 0;
40149 mid = (mid + Math.imul(al5, bh2)) | 0;
40150 mid = (mid + Math.imul(ah5, bl2)) | 0;
40151 hi = (hi + Math.imul(ah5, bh2)) | 0;
40152 lo = (lo + Math.imul(al4, bl3)) | 0;
40153 mid = (mid + Math.imul(al4, bh3)) | 0;
40154 mid = (mid + Math.imul(ah4, bl3)) | 0;
40155 hi = (hi + Math.imul(ah4, bh3)) | 0;
40156 lo = (lo + Math.imul(al3, bl4)) | 0;
40157 mid = (mid + Math.imul(al3, bh4)) | 0;
40158 mid = (mid + Math.imul(ah3, bl4)) | 0;
40159 hi = (hi + Math.imul(ah3, bh4)) | 0;
40160 lo = (lo + Math.imul(al2, bl5)) | 0;
40161 mid = (mid + Math.imul(al2, bh5)) | 0;
40162 mid = (mid + Math.imul(ah2, bl5)) | 0;
40163 hi = (hi + Math.imul(ah2, bh5)) | 0;
40164 lo = (lo + Math.imul(al1, bl6)) | 0;
40165 mid = (mid + Math.imul(al1, bh6)) | 0;
40166 mid = (mid + Math.imul(ah1, bl6)) | 0;
40167 hi = (hi + Math.imul(ah1, bh6)) | 0;
40168 lo = (lo + Math.imul(al0, bl7)) | 0;
40169 mid = (mid + Math.imul(al0, bh7)) | 0;
40170 mid = (mid + Math.imul(ah0, bl7)) | 0;
40171 hi = (hi + Math.imul(ah0, bh7)) | 0;
40172 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40173 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
40174 w7 &= 0x3ffffff;
40175 /* k = 8 */
40176 lo = Math.imul(al8, bl0);
40177 mid = Math.imul(al8, bh0);
40178 mid = (mid + Math.imul(ah8, bl0)) | 0;
40179 hi = Math.imul(ah8, bh0);
40180 lo = (lo + Math.imul(al7, bl1)) | 0;
40181 mid = (mid + Math.imul(al7, bh1)) | 0;
40182 mid = (mid + Math.imul(ah7, bl1)) | 0;
40183 hi = (hi + Math.imul(ah7, bh1)) | 0;
40184 lo = (lo + Math.imul(al6, bl2)) | 0;
40185 mid = (mid + Math.imul(al6, bh2)) | 0;
40186 mid = (mid + Math.imul(ah6, bl2)) | 0;
40187 hi = (hi + Math.imul(ah6, bh2)) | 0;
40188 lo = (lo + Math.imul(al5, bl3)) | 0;
40189 mid = (mid + Math.imul(al5, bh3)) | 0;
40190 mid = (mid + Math.imul(ah5, bl3)) | 0;
40191 hi = (hi + Math.imul(ah5, bh3)) | 0;
40192 lo = (lo + Math.imul(al4, bl4)) | 0;
40193 mid = (mid + Math.imul(al4, bh4)) | 0;
40194 mid = (mid + Math.imul(ah4, bl4)) | 0;
40195 hi = (hi + Math.imul(ah4, bh4)) | 0;
40196 lo = (lo + Math.imul(al3, bl5)) | 0;
40197 mid = (mid + Math.imul(al3, bh5)) | 0;
40198 mid = (mid + Math.imul(ah3, bl5)) | 0;
40199 hi = (hi + Math.imul(ah3, bh5)) | 0;
40200 lo = (lo + Math.imul(al2, bl6)) | 0;
40201 mid = (mid + Math.imul(al2, bh6)) | 0;
40202 mid = (mid + Math.imul(ah2, bl6)) | 0;
40203 hi = (hi + Math.imul(ah2, bh6)) | 0;
40204 lo = (lo + Math.imul(al1, bl7)) | 0;
40205 mid = (mid + Math.imul(al1, bh7)) | 0;
40206 mid = (mid + Math.imul(ah1, bl7)) | 0;
40207 hi = (hi + Math.imul(ah1, bh7)) | 0;
40208 lo = (lo + Math.imul(al0, bl8)) | 0;
40209 mid = (mid + Math.imul(al0, bh8)) | 0;
40210 mid = (mid + Math.imul(ah0, bl8)) | 0;
40211 hi = (hi + Math.imul(ah0, bh8)) | 0;
40212 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40213 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
40214 w8 &= 0x3ffffff;
40215 /* k = 9 */
40216 lo = Math.imul(al9, bl0);
40217 mid = Math.imul(al9, bh0);
40218 mid = (mid + Math.imul(ah9, bl0)) | 0;
40219 hi = Math.imul(ah9, bh0);
40220 lo = (lo + Math.imul(al8, bl1)) | 0;
40221 mid = (mid + Math.imul(al8, bh1)) | 0;
40222 mid = (mid + Math.imul(ah8, bl1)) | 0;
40223 hi = (hi + Math.imul(ah8, bh1)) | 0;
40224 lo = (lo + Math.imul(al7, bl2)) | 0;
40225 mid = (mid + Math.imul(al7, bh2)) | 0;
40226 mid = (mid + Math.imul(ah7, bl2)) | 0;
40227 hi = (hi + Math.imul(ah7, bh2)) | 0;
40228 lo = (lo + Math.imul(al6, bl3)) | 0;
40229 mid = (mid + Math.imul(al6, bh3)) | 0;
40230 mid = (mid + Math.imul(ah6, bl3)) | 0;
40231 hi = (hi + Math.imul(ah6, bh3)) | 0;
40232 lo = (lo + Math.imul(al5, bl4)) | 0;
40233 mid = (mid + Math.imul(al5, bh4)) | 0;
40234 mid = (mid + Math.imul(ah5, bl4)) | 0;
40235 hi = (hi + Math.imul(ah5, bh4)) | 0;
40236 lo = (lo + Math.imul(al4, bl5)) | 0;
40237 mid = (mid + Math.imul(al4, bh5)) | 0;
40238 mid = (mid + Math.imul(ah4, bl5)) | 0;
40239 hi = (hi + Math.imul(ah4, bh5)) | 0;
40240 lo = (lo + Math.imul(al3, bl6)) | 0;
40241 mid = (mid + Math.imul(al3, bh6)) | 0;
40242 mid = (mid + Math.imul(ah3, bl6)) | 0;
40243 hi = (hi + Math.imul(ah3, bh6)) | 0;
40244 lo = (lo + Math.imul(al2, bl7)) | 0;
40245 mid = (mid + Math.imul(al2, bh7)) | 0;
40246 mid = (mid + Math.imul(ah2, bl7)) | 0;
40247 hi = (hi + Math.imul(ah2, bh7)) | 0;
40248 lo = (lo + Math.imul(al1, bl8)) | 0;
40249 mid = (mid + Math.imul(al1, bh8)) | 0;
40250 mid = (mid + Math.imul(ah1, bl8)) | 0;
40251 hi = (hi + Math.imul(ah1, bh8)) | 0;
40252 lo = (lo + Math.imul(al0, bl9)) | 0;
40253 mid = (mid + Math.imul(al0, bh9)) | 0;
40254 mid = (mid + Math.imul(ah0, bl9)) | 0;
40255 hi = (hi + Math.imul(ah0, bh9)) | 0;
40256 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40257 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
40258 w9 &= 0x3ffffff;
40259 /* k = 10 */
40260 lo = Math.imul(al9, bl1);
40261 mid = Math.imul(al9, bh1);
40262 mid = (mid + Math.imul(ah9, bl1)) | 0;
40263 hi = Math.imul(ah9, bh1);
40264 lo = (lo + Math.imul(al8, bl2)) | 0;
40265 mid = (mid + Math.imul(al8, bh2)) | 0;
40266 mid = (mid + Math.imul(ah8, bl2)) | 0;
40267 hi = (hi + Math.imul(ah8, bh2)) | 0;
40268 lo = (lo + Math.imul(al7, bl3)) | 0;
40269 mid = (mid + Math.imul(al7, bh3)) | 0;
40270 mid = (mid + Math.imul(ah7, bl3)) | 0;
40271 hi = (hi + Math.imul(ah7, bh3)) | 0;
40272 lo = (lo + Math.imul(al6, bl4)) | 0;
40273 mid = (mid + Math.imul(al6, bh4)) | 0;
40274 mid = (mid + Math.imul(ah6, bl4)) | 0;
40275 hi = (hi + Math.imul(ah6, bh4)) | 0;
40276 lo = (lo + Math.imul(al5, bl5)) | 0;
40277 mid = (mid + Math.imul(al5, bh5)) | 0;
40278 mid = (mid + Math.imul(ah5, bl5)) | 0;
40279 hi = (hi + Math.imul(ah5, bh5)) | 0;
40280 lo = (lo + Math.imul(al4, bl6)) | 0;
40281 mid = (mid + Math.imul(al4, bh6)) | 0;
40282 mid = (mid + Math.imul(ah4, bl6)) | 0;
40283 hi = (hi + Math.imul(ah4, bh6)) | 0;
40284 lo = (lo + Math.imul(al3, bl7)) | 0;
40285 mid = (mid + Math.imul(al3, bh7)) | 0;
40286 mid = (mid + Math.imul(ah3, bl7)) | 0;
40287 hi = (hi + Math.imul(ah3, bh7)) | 0;
40288 lo = (lo + Math.imul(al2, bl8)) | 0;
40289 mid = (mid + Math.imul(al2, bh8)) | 0;
40290 mid = (mid + Math.imul(ah2, bl8)) | 0;
40291 hi = (hi + Math.imul(ah2, bh8)) | 0;
40292 lo = (lo + Math.imul(al1, bl9)) | 0;
40293 mid = (mid + Math.imul(al1, bh9)) | 0;
40294 mid = (mid + Math.imul(ah1, bl9)) | 0;
40295 hi = (hi + Math.imul(ah1, bh9)) | 0;
40296 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40297 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
40298 w10 &= 0x3ffffff;
40299 /* k = 11 */
40300 lo = Math.imul(al9, bl2);
40301 mid = Math.imul(al9, bh2);
40302 mid = (mid + Math.imul(ah9, bl2)) | 0;
40303 hi = Math.imul(ah9, bh2);
40304 lo = (lo + Math.imul(al8, bl3)) | 0;
40305 mid = (mid + Math.imul(al8, bh3)) | 0;
40306 mid = (mid + Math.imul(ah8, bl3)) | 0;
40307 hi = (hi + Math.imul(ah8, bh3)) | 0;
40308 lo = (lo + Math.imul(al7, bl4)) | 0;
40309 mid = (mid + Math.imul(al7, bh4)) | 0;
40310 mid = (mid + Math.imul(ah7, bl4)) | 0;
40311 hi = (hi + Math.imul(ah7, bh4)) | 0;
40312 lo = (lo + Math.imul(al6, bl5)) | 0;
40313 mid = (mid + Math.imul(al6, bh5)) | 0;
40314 mid = (mid + Math.imul(ah6, bl5)) | 0;
40315 hi = (hi + Math.imul(ah6, bh5)) | 0;
40316 lo = (lo + Math.imul(al5, bl6)) | 0;
40317 mid = (mid + Math.imul(al5, bh6)) | 0;
40318 mid = (mid + Math.imul(ah5, bl6)) | 0;
40319 hi = (hi + Math.imul(ah5, bh6)) | 0;
40320 lo = (lo + Math.imul(al4, bl7)) | 0;
40321 mid = (mid + Math.imul(al4, bh7)) | 0;
40322 mid = (mid + Math.imul(ah4, bl7)) | 0;
40323 hi = (hi + Math.imul(ah4, bh7)) | 0;
40324 lo = (lo + Math.imul(al3, bl8)) | 0;
40325 mid = (mid + Math.imul(al3, bh8)) | 0;
40326 mid = (mid + Math.imul(ah3, bl8)) | 0;
40327 hi = (hi + Math.imul(ah3, bh8)) | 0;
40328 lo = (lo + Math.imul(al2, bl9)) | 0;
40329 mid = (mid + Math.imul(al2, bh9)) | 0;
40330 mid = (mid + Math.imul(ah2, bl9)) | 0;
40331 hi = (hi + Math.imul(ah2, bh9)) | 0;
40332 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40333 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40334 w11 &= 0x3ffffff;
40335 /* k = 12 */
40336 lo = Math.imul(al9, bl3);
40337 mid = Math.imul(al9, bh3);
40338 mid = (mid + Math.imul(ah9, bl3)) | 0;
40339 hi = Math.imul(ah9, bh3);
40340 lo = (lo + Math.imul(al8, bl4)) | 0;
40341 mid = (mid + Math.imul(al8, bh4)) | 0;
40342 mid = (mid + Math.imul(ah8, bl4)) | 0;
40343 hi = (hi + Math.imul(ah8, bh4)) | 0;
40344 lo = (lo + Math.imul(al7, bl5)) | 0;
40345 mid = (mid + Math.imul(al7, bh5)) | 0;
40346 mid = (mid + Math.imul(ah7, bl5)) | 0;
40347 hi = (hi + Math.imul(ah7, bh5)) | 0;
40348 lo = (lo + Math.imul(al6, bl6)) | 0;
40349 mid = (mid + Math.imul(al6, bh6)) | 0;
40350 mid = (mid + Math.imul(ah6, bl6)) | 0;
40351 hi = (hi + Math.imul(ah6, bh6)) | 0;
40352 lo = (lo + Math.imul(al5, bl7)) | 0;
40353 mid = (mid + Math.imul(al5, bh7)) | 0;
40354 mid = (mid + Math.imul(ah5, bl7)) | 0;
40355 hi = (hi + Math.imul(ah5, bh7)) | 0;
40356 lo = (lo + Math.imul(al4, bl8)) | 0;
40357 mid = (mid + Math.imul(al4, bh8)) | 0;
40358 mid = (mid + Math.imul(ah4, bl8)) | 0;
40359 hi = (hi + Math.imul(ah4, bh8)) | 0;
40360 lo = (lo + Math.imul(al3, bl9)) | 0;
40361 mid = (mid + Math.imul(al3, bh9)) | 0;
40362 mid = (mid + Math.imul(ah3, bl9)) | 0;
40363 hi = (hi + Math.imul(ah3, bh9)) | 0;
40364 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40365 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40366 w12 &= 0x3ffffff;
40367 /* k = 13 */
40368 lo = Math.imul(al9, bl4);
40369 mid = Math.imul(al9, bh4);
40370 mid = (mid + Math.imul(ah9, bl4)) | 0;
40371 hi = Math.imul(ah9, bh4);
40372 lo = (lo + Math.imul(al8, bl5)) | 0;
40373 mid = (mid + Math.imul(al8, bh5)) | 0;
40374 mid = (mid + Math.imul(ah8, bl5)) | 0;
40375 hi = (hi + Math.imul(ah8, bh5)) | 0;
40376 lo = (lo + Math.imul(al7, bl6)) | 0;
40377 mid = (mid + Math.imul(al7, bh6)) | 0;
40378 mid = (mid + Math.imul(ah7, bl6)) | 0;
40379 hi = (hi + Math.imul(ah7, bh6)) | 0;
40380 lo = (lo + Math.imul(al6, bl7)) | 0;
40381 mid = (mid + Math.imul(al6, bh7)) | 0;
40382 mid = (mid + Math.imul(ah6, bl7)) | 0;
40383 hi = (hi + Math.imul(ah6, bh7)) | 0;
40384 lo = (lo + Math.imul(al5, bl8)) | 0;
40385 mid = (mid + Math.imul(al5, bh8)) | 0;
40386 mid = (mid + Math.imul(ah5, bl8)) | 0;
40387 hi = (hi + Math.imul(ah5, bh8)) | 0;
40388 lo = (lo + Math.imul(al4, bl9)) | 0;
40389 mid = (mid + Math.imul(al4, bh9)) | 0;
40390 mid = (mid + Math.imul(ah4, bl9)) | 0;
40391 hi = (hi + Math.imul(ah4, bh9)) | 0;
40392 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40393 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40394 w13 &= 0x3ffffff;
40395 /* k = 14 */
40396 lo = Math.imul(al9, bl5);
40397 mid = Math.imul(al9, bh5);
40398 mid = (mid + Math.imul(ah9, bl5)) | 0;
40399 hi = Math.imul(ah9, bh5);
40400 lo = (lo + Math.imul(al8, bl6)) | 0;
40401 mid = (mid + Math.imul(al8, bh6)) | 0;
40402 mid = (mid + Math.imul(ah8, bl6)) | 0;
40403 hi = (hi + Math.imul(ah8, bh6)) | 0;
40404 lo = (lo + Math.imul(al7, bl7)) | 0;
40405 mid = (mid + Math.imul(al7, bh7)) | 0;
40406 mid = (mid + Math.imul(ah7, bl7)) | 0;
40407 hi = (hi + Math.imul(ah7, bh7)) | 0;
40408 lo = (lo + Math.imul(al6, bl8)) | 0;
40409 mid = (mid + Math.imul(al6, bh8)) | 0;
40410 mid = (mid + Math.imul(ah6, bl8)) | 0;
40411 hi = (hi + Math.imul(ah6, bh8)) | 0;
40412 lo = (lo + Math.imul(al5, bl9)) | 0;
40413 mid = (mid + Math.imul(al5, bh9)) | 0;
40414 mid = (mid + Math.imul(ah5, bl9)) | 0;
40415 hi = (hi + Math.imul(ah5, bh9)) | 0;
40416 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40417 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40418 w14 &= 0x3ffffff;
40419 /* k = 15 */
40420 lo = Math.imul(al9, bl6);
40421 mid = Math.imul(al9, bh6);
40422 mid = (mid + Math.imul(ah9, bl6)) | 0;
40423 hi = Math.imul(ah9, bh6);
40424 lo = (lo + Math.imul(al8, bl7)) | 0;
40425 mid = (mid + Math.imul(al8, bh7)) | 0;
40426 mid = (mid + Math.imul(ah8, bl7)) | 0;
40427 hi = (hi + Math.imul(ah8, bh7)) | 0;
40428 lo = (lo + Math.imul(al7, bl8)) | 0;
40429 mid = (mid + Math.imul(al7, bh8)) | 0;
40430 mid = (mid + Math.imul(ah7, bl8)) | 0;
40431 hi = (hi + Math.imul(ah7, bh8)) | 0;
40432 lo = (lo + Math.imul(al6, bl9)) | 0;
40433 mid = (mid + Math.imul(al6, bh9)) | 0;
40434 mid = (mid + Math.imul(ah6, bl9)) | 0;
40435 hi = (hi + Math.imul(ah6, bh9)) | 0;
40436 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40437 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40438 w15 &= 0x3ffffff;
40439 /* k = 16 */
40440 lo = Math.imul(al9, bl7);
40441 mid = Math.imul(al9, bh7);
40442 mid = (mid + Math.imul(ah9, bl7)) | 0;
40443 hi = Math.imul(ah9, bh7);
40444 lo = (lo + Math.imul(al8, bl8)) | 0;
40445 mid = (mid + Math.imul(al8, bh8)) | 0;
40446 mid = (mid + Math.imul(ah8, bl8)) | 0;
40447 hi = (hi + Math.imul(ah8, bh8)) | 0;
40448 lo = (lo + Math.imul(al7, bl9)) | 0;
40449 mid = (mid + Math.imul(al7, bh9)) | 0;
40450 mid = (mid + Math.imul(ah7, bl9)) | 0;
40451 hi = (hi + Math.imul(ah7, bh9)) | 0;
40452 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40453 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40454 w16 &= 0x3ffffff;
40455 /* k = 17 */
40456 lo = Math.imul(al9, bl8);
40457 mid = Math.imul(al9, bh8);
40458 mid = (mid + Math.imul(ah9, bl8)) | 0;
40459 hi = Math.imul(ah9, bh8);
40460 lo = (lo + Math.imul(al8, bl9)) | 0;
40461 mid = (mid + Math.imul(al8, bh9)) | 0;
40462 mid = (mid + Math.imul(ah8, bl9)) | 0;
40463 hi = (hi + Math.imul(ah8, bh9)) | 0;
40464 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40465 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40466 w17 &= 0x3ffffff;
40467 /* k = 18 */
40468 lo = Math.imul(al9, bl9);
40469 mid = Math.imul(al9, bh9);
40470 mid = (mid + Math.imul(ah9, bl9)) | 0;
40471 hi = Math.imul(ah9, bh9);
40472 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40473 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40474 w18 &= 0x3ffffff;
40475 o[0] = w0;
40476 o[1] = w1;
40477 o[2] = w2;
40478 o[3] = w3;
40479 o[4] = w4;
40480 o[5] = w5;
40481 o[6] = w6;
40482 o[7] = w7;
40483 o[8] = w8;
40484 o[9] = w9;
40485 o[10] = w10;
40486 o[11] = w11;
40487 o[12] = w12;
40488 o[13] = w13;
40489 o[14] = w14;
40490 o[15] = w15;
40491 o[16] = w16;
40492 o[17] = w17;
40493 o[18] = w18;
40494 if (c !== 0) {
40495 o[19] = c;
40496 out.length++;
40497 }
40498 return out;
40499 };
40500
40501 // Polyfill comb
40502 if (!Math.imul) {
40503 comb10MulTo = smallMulTo;
40504 }
40505
40506 function bigMulTo (self, num, out) {
40507 out.negative = num.negative ^ self.negative;
40508 out.length = self.length + num.length;
40509
40510 var carry = 0;
40511 var hncarry = 0;
40512 for (var k = 0; k < out.length - 1; k++) {
40513 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40514 // note that ncarry could be >= 0x3ffffff
40515 var ncarry = hncarry;
40516 hncarry = 0;
40517 var rword = carry & 0x3ffffff;
40518 var maxJ = Math.min(k, num.length - 1);
40519 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40520 var i = k - j;
40521 var a = self.words[i] | 0;
40522 var b = num.words[j] | 0;
40523 var r = a * b;
40524
40525 var lo = r & 0x3ffffff;
40526 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40527 lo = (lo + rword) | 0;
40528 rword = lo & 0x3ffffff;
40529 ncarry = (ncarry + (lo >>> 26)) | 0;
40530
40531 hncarry += ncarry >>> 26;
40532 ncarry &= 0x3ffffff;
40533 }
40534 out.words[k] = rword;
40535 carry = ncarry;
40536 ncarry = hncarry;
40537 }
40538 if (carry !== 0) {
40539 out.words[k] = carry;
40540 } else {
40541 out.length--;
40542 }
40543
40544 return out.strip();
40545 }
40546
40547 function jumboMulTo (self, num, out) {
40548 var fftm = new FFTM();
40549 return fftm.mulp(self, num, out);
40550 }
40551
40552 BN.prototype.mulTo = function mulTo (num, out) {
40553 var res;
40554 var len = this.length + num.length;
40555 if (this.length === 10 && num.length === 10) {
40556 res = comb10MulTo(this, num, out);
40557 } else if (len < 63) {
40558 res = smallMulTo(this, num, out);
40559 } else if (len < 1024) {
40560 res = bigMulTo(this, num, out);
40561 } else {
40562 res = jumboMulTo(this, num, out);
40563 }
40564
40565 return res;
40566 };
40567
40568 // Cooley-Tukey algorithm for FFT
40569 // slightly revisited to rely on looping instead of recursion
40570
40571 function FFTM (x, y) {
40572 this.x = x;
40573 this.y = y;
40574 }
40575
40576 FFTM.prototype.makeRBT = function makeRBT (N) {
40577 var t = new Array(N);
40578 var l = BN.prototype._countBits(N) - 1;
40579 for (var i = 0; i < N; i++) {
40580 t[i] = this.revBin(i, l, N);
40581 }
40582
40583 return t;
40584 };
40585
40586 // Returns binary-reversed representation of `x`
40587 FFTM.prototype.revBin = function revBin (x, l, N) {
40588 if (x === 0 || x === N - 1) return x;
40589
40590 var rb = 0;
40591 for (var i = 0; i < l; i++) {
40592 rb |= (x & 1) << (l - i - 1);
40593 x >>= 1;
40594 }
40595
40596 return rb;
40597 };
40598
40599 // Performs "tweedling" phase, therefore 'emulating'
40600 // behaviour of the recursive algorithm
40601 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40602 for (var i = 0; i < N; i++) {
40603 rtws[i] = rws[rbt[i]];
40604 itws[i] = iws[rbt[i]];
40605 }
40606 };
40607
40608 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40609 this.permute(rbt, rws, iws, rtws, itws, N);
40610
40611 for (var s = 1; s < N; s <<= 1) {
40612 var l = s << 1;
40613
40614 var rtwdf = Math.cos(2 * Math.PI / l);
40615 var itwdf = Math.sin(2 * Math.PI / l);
40616
40617 for (var p = 0; p < N; p += l) {
40618 var rtwdf_ = rtwdf;
40619 var itwdf_ = itwdf;
40620
40621 for (var j = 0; j < s; j++) {
40622 var re = rtws[p + j];
40623 var ie = itws[p + j];
40624
40625 var ro = rtws[p + j + s];
40626 var io = itws[p + j + s];
40627
40628 var rx = rtwdf_ * ro - itwdf_ * io;
40629
40630 io = rtwdf_ * io + itwdf_ * ro;
40631 ro = rx;
40632
40633 rtws[p + j] = re + ro;
40634 itws[p + j] = ie + io;
40635
40636 rtws[p + j + s] = re - ro;
40637 itws[p + j + s] = ie - io;
40638
40639 /* jshint maxdepth : false */
40640 if (j !== l) {
40641 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40642
40643 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40644 rtwdf_ = rx;
40645 }
40646 }
40647 }
40648 }
40649 };
40650
40651 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40652 var N = Math.max(m, n) | 1;
40653 var odd = N & 1;
40654 var i = 0;
40655 for (N = N / 2 | 0; N; N = N >>> 1) {
40656 i++;
40657 }
40658
40659 return 1 << i + 1 + odd;
40660 };
40661
40662 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40663 if (N <= 1) return;
40664
40665 for (var i = 0; i < N / 2; i++) {
40666 var t = rws[i];
40667
40668 rws[i] = rws[N - i - 1];
40669 rws[N - i - 1] = t;
40670
40671 t = iws[i];
40672
40673 iws[i] = -iws[N - i - 1];
40674 iws[N - i - 1] = -t;
40675 }
40676 };
40677
40678 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40679 var carry = 0;
40680 for (var i = 0; i < N / 2; i++) {
40681 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40682 Math.round(ws[2 * i] / N) +
40683 carry;
40684
40685 ws[i] = w & 0x3ffffff;
40686
40687 if (w < 0x4000000) {
40688 carry = 0;
40689 } else {
40690 carry = w / 0x4000000 | 0;
40691 }
40692 }
40693
40694 return ws;
40695 };
40696
40697 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40698 var carry = 0;
40699 for (var i = 0; i < len; i++) {
40700 carry = carry + (ws[i] | 0);
40701
40702 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40703 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40704 }
40705
40706 // Pad with zeroes
40707 for (i = 2 * len; i < N; ++i) {
40708 rws[i] = 0;
40709 }
40710
40711 assert(carry === 0);
40712 assert((carry & ~0x1fff) === 0);
40713 };
40714
40715 FFTM.prototype.stub = function stub (N) {
40716 var ph = new Array(N);
40717 for (var i = 0; i < N; i++) {
40718 ph[i] = 0;
40719 }
40720
40721 return ph;
40722 };
40723
40724 FFTM.prototype.mulp = function mulp (x, y, out) {
40725 var N = 2 * this.guessLen13b(x.length, y.length);
40726
40727 var rbt = this.makeRBT(N);
40728
40729 var _ = this.stub(N);
40730
40731 var rws = new Array(N);
40732 var rwst = new Array(N);
40733 var iwst = new Array(N);
40734
40735 var nrws = new Array(N);
40736 var nrwst = new Array(N);
40737 var niwst = new Array(N);
40738
40739 var rmws = out.words;
40740 rmws.length = N;
40741
40742 this.convert13b(x.words, x.length, rws, N);
40743 this.convert13b(y.words, y.length, nrws, N);
40744
40745 this.transform(rws, _, rwst, iwst, N, rbt);
40746 this.transform(nrws, _, nrwst, niwst, N, rbt);
40747
40748 for (var i = 0; i < N; i++) {
40749 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40750 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40751 rwst[i] = rx;
40752 }
40753
40754 this.conjugate(rwst, iwst, N);
40755 this.transform(rwst, iwst, rmws, _, N, rbt);
40756 this.conjugate(rmws, _, N);
40757 this.normalize13b(rmws, N);
40758
40759 out.negative = x.negative ^ y.negative;
40760 out.length = x.length + y.length;
40761 return out.strip();
40762 };
40763
40764 // Multiply `this` by `num`
40765 BN.prototype.mul = function mul (num) {
40766 var out = new BN(null);
40767 out.words = new Array(this.length + num.length);
40768 return this.mulTo(num, out);
40769 };
40770
40771 // Multiply employing FFT
40772 BN.prototype.mulf = function mulf (num) {
40773 var out = new BN(null);
40774 out.words = new Array(this.length + num.length);
40775 return jumboMulTo(this, num, out);
40776 };
40777
40778 // In-place Multiplication
40779 BN.prototype.imul = function imul (num) {
40780 return this.clone().mulTo(num, this);
40781 };
40782
40783 BN.prototype.imuln = function imuln (num) {
40784 assert(typeof num === 'number');
40785 assert(num < 0x4000000);
40786
40787 // Carry
40788 var carry = 0;
40789 for (var i = 0; i < this.length; i++) {
40790 var w = (this.words[i] | 0) * num;
40791 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40792 carry >>= 26;
40793 carry += (w / 0x4000000) | 0;
40794 // NOTE: lo is 27bit maximum
40795 carry += lo >>> 26;
40796 this.words[i] = lo & 0x3ffffff;
40797 }
40798
40799 if (carry !== 0) {
40800 this.words[i] = carry;
40801 this.length++;
40802 }
40803
40804 return this;
40805 };
40806
40807 BN.prototype.muln = function muln (num) {
40808 return this.clone().imuln(num);
40809 };
40810
40811 // `this` * `this`
40812 BN.prototype.sqr = function sqr () {
40813 return this.mul(this);
40814 };
40815
40816 // `this` * `this` in-place
40817 BN.prototype.isqr = function isqr () {
40818 return this.imul(this.clone());
40819 };
40820
40821 // Math.pow(`this`, `num`)
40822 BN.prototype.pow = function pow (num) {
40823 var w = toBitArray(num);
40824 if (w.length === 0) return new BN(1);
40825
40826 // Skip leading zeroes
40827 var res = this;
40828 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40829 if (w[i] !== 0) break;
40830 }
40831
40832 if (++i < w.length) {
40833 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40834 if (w[i] === 0) continue;
40835
40836 res = res.mul(q);
40837 }
40838 }
40839
40840 return res;
40841 };
40842
40843 // Shift-left in-place
40844 BN.prototype.iushln = function iushln (bits) {
40845 assert(typeof bits === 'number' && bits >= 0);
40846 var r = bits % 26;
40847 var s = (bits - r) / 26;
40848 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40849 var i;
40850
40851 if (r !== 0) {
40852 var carry = 0;
40853
40854 for (i = 0; i < this.length; i++) {
40855 var newCarry = this.words[i] & carryMask;
40856 var c = ((this.words[i] | 0) - newCarry) << r;
40857 this.words[i] = c | carry;
40858 carry = newCarry >>> (26 - r);
40859 }
40860
40861 if (carry) {
40862 this.words[i] = carry;
40863 this.length++;
40864 }
40865 }
40866
40867 if (s !== 0) {
40868 for (i = this.length - 1; i >= 0; i--) {
40869 this.words[i + s] = this.words[i];
40870 }
40871
40872 for (i = 0; i < s; i++) {
40873 this.words[i] = 0;
40874 }
40875
40876 this.length += s;
40877 }
40878
40879 return this.strip();
40880 };
40881
40882 BN.prototype.ishln = function ishln (bits) {
40883 // TODO(indutny): implement me
40884 assert(this.negative === 0);
40885 return this.iushln(bits);
40886 };
40887
40888 // Shift-right in-place
40889 // NOTE: `hint` is a lowest bit before trailing zeroes
40890 // NOTE: if `extended` is present - it will be filled with destroyed bits
40891 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
40892 assert(typeof bits === 'number' && bits >= 0);
40893 var h;
40894 if (hint) {
40895 h = (hint - (hint % 26)) / 26;
40896 } else {
40897 h = 0;
40898 }
40899
40900 var r = bits % 26;
40901 var s = Math.min((bits - r) / 26, this.length);
40902 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
40903 var maskedWords = extended;
40904
40905 h -= s;
40906 h = Math.max(0, h);
40907
40908 // Extended mode, copy masked part
40909 if (maskedWords) {
40910 for (var i = 0; i < s; i++) {
40911 maskedWords.words[i] = this.words[i];
40912 }
40913 maskedWords.length = s;
40914 }
40915
40916 if (s === 0) {
40917 // No-op, we should not move anything at all
40918 } else if (this.length > s) {
40919 this.length -= s;
40920 for (i = 0; i < this.length; i++) {
40921 this.words[i] = this.words[i + s];
40922 }
40923 } else {
40924 this.words[0] = 0;
40925 this.length = 1;
40926 }
40927
40928 var carry = 0;
40929 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
40930 var word = this.words[i] | 0;
40931 this.words[i] = (carry << (26 - r)) | (word >>> r);
40932 carry = word & mask;
40933 }
40934
40935 // Push carried bits as a mask
40936 if (maskedWords && carry !== 0) {
40937 maskedWords.words[maskedWords.length++] = carry;
40938 }
40939
40940 if (this.length === 0) {
40941 this.words[0] = 0;
40942 this.length = 1;
40943 }
40944
40945 return this.strip();
40946 };
40947
40948 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
40949 // TODO(indutny): implement me
40950 assert(this.negative === 0);
40951 return this.iushrn(bits, hint, extended);
40952 };
40953
40954 // Shift-left
40955 BN.prototype.shln = function shln (bits) {
40956 return this.clone().ishln(bits);
40957 };
40958
40959 BN.prototype.ushln = function ushln (bits) {
40960 return this.clone().iushln(bits);
40961 };
40962
40963 // Shift-right
40964 BN.prototype.shrn = function shrn (bits) {
40965 return this.clone().ishrn(bits);
40966 };
40967
40968 BN.prototype.ushrn = function ushrn (bits) {
40969 return this.clone().iushrn(bits);
40970 };
40971
40972 // Test if n bit is set
40973 BN.prototype.testn = function testn (bit) {
40974 assert(typeof bit === 'number' && bit >= 0);
40975 var r = bit % 26;
40976 var s = (bit - r) / 26;
40977 var q = 1 << r;
40978
40979 // Fast case: bit is much higher than all existing words
40980 if (this.length <= s) return false;
40981
40982 // Check bit and return
40983 var w = this.words[s];
40984
40985 return !!(w & q);
40986 };
40987
40988 // Return only lowers bits of number (in-place)
40989 BN.prototype.imaskn = function imaskn (bits) {
40990 assert(typeof bits === 'number' && bits >= 0);
40991 var r = bits % 26;
40992 var s = (bits - r) / 26;
40993
40994 assert(this.negative === 0, 'imaskn works only with positive numbers');
40995
40996 if (this.length <= s) {
40997 return this;
40998 }
40999
41000 if (r !== 0) {
41001 s++;
41002 }
41003 this.length = Math.min(s, this.length);
41004
41005 if (r !== 0) {
41006 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41007 this.words[this.length - 1] &= mask;
41008 }
41009
41010 return this.strip();
41011 };
41012
41013 // Return only lowers bits of number
41014 BN.prototype.maskn = function maskn (bits) {
41015 return this.clone().imaskn(bits);
41016 };
41017
41018 // Add plain number `num` to `this`
41019 BN.prototype.iaddn = function iaddn (num) {
41020 assert(typeof num === 'number');
41021 assert(num < 0x4000000);
41022 if (num < 0) return this.isubn(-num);
41023
41024 // Possible sign change
41025 if (this.negative !== 0) {
41026 if (this.length === 1 && (this.words[0] | 0) < num) {
41027 this.words[0] = num - (this.words[0] | 0);
41028 this.negative = 0;
41029 return this;
41030 }
41031
41032 this.negative = 0;
41033 this.isubn(num);
41034 this.negative = 1;
41035 return this;
41036 }
41037
41038 // Add without checks
41039 return this._iaddn(num);
41040 };
41041
41042 BN.prototype._iaddn = function _iaddn (num) {
41043 this.words[0] += num;
41044
41045 // Carry
41046 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
41047 this.words[i] -= 0x4000000;
41048 if (i === this.length - 1) {
41049 this.words[i + 1] = 1;
41050 } else {
41051 this.words[i + 1]++;
41052 }
41053 }
41054 this.length = Math.max(this.length, i + 1);
41055
41056 return this;
41057 };
41058
41059 // Subtract plain number `num` from `this`
41060 BN.prototype.isubn = function isubn (num) {
41061 assert(typeof num === 'number');
41062 assert(num < 0x4000000);
41063 if (num < 0) return this.iaddn(-num);
41064
41065 if (this.negative !== 0) {
41066 this.negative = 0;
41067 this.iaddn(num);
41068 this.negative = 1;
41069 return this;
41070 }
41071
41072 this.words[0] -= num;
41073
41074 if (this.length === 1 && this.words[0] < 0) {
41075 this.words[0] = -this.words[0];
41076 this.negative = 1;
41077 } else {
41078 // Carry
41079 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
41080 this.words[i] += 0x4000000;
41081 this.words[i + 1] -= 1;
41082 }
41083 }
41084
41085 return this.strip();
41086 };
41087
41088 BN.prototype.addn = function addn (num) {
41089 return this.clone().iaddn(num);
41090 };
41091
41092 BN.prototype.subn = function subn (num) {
41093 return this.clone().isubn(num);
41094 };
41095
41096 BN.prototype.iabs = function iabs () {
41097 this.negative = 0;
41098
41099 return this;
41100 };
41101
41102 BN.prototype.abs = function abs () {
41103 return this.clone().iabs();
41104 };
41105
41106 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
41107 var len = num.length + shift;
41108 var i;
41109
41110 this._expand(len);
41111
41112 var w;
41113 var carry = 0;
41114 for (i = 0; i < num.length; i++) {
41115 w = (this.words[i + shift] | 0) + carry;
41116 var right = (num.words[i] | 0) * mul;
41117 w -= right & 0x3ffffff;
41118 carry = (w >> 26) - ((right / 0x4000000) | 0);
41119 this.words[i + shift] = w & 0x3ffffff;
41120 }
41121 for (; i < this.length - shift; i++) {
41122 w = (this.words[i + shift] | 0) + carry;
41123 carry = w >> 26;
41124 this.words[i + shift] = w & 0x3ffffff;
41125 }
41126
41127 if (carry === 0) return this.strip();
41128
41129 // Subtraction overflow
41130 assert(carry === -1);
41131 carry = 0;
41132 for (i = 0; i < this.length; i++) {
41133 w = -(this.words[i] | 0) + carry;
41134 carry = w >> 26;
41135 this.words[i] = w & 0x3ffffff;
41136 }
41137 this.negative = 1;
41138
41139 return this.strip();
41140 };
41141
41142 BN.prototype._wordDiv = function _wordDiv (num, mode) {
41143 var shift = this.length - num.length;
41144
41145 var a = this.clone();
41146 var b = num;
41147
41148 // Normalize
41149 var bhi = b.words[b.length - 1] | 0;
41150 var bhiBits = this._countBits(bhi);
41151 shift = 26 - bhiBits;
41152 if (shift !== 0) {
41153 b = b.ushln(shift);
41154 a.iushln(shift);
41155 bhi = b.words[b.length - 1] | 0;
41156 }
41157
41158 // Initialize quotient
41159 var m = a.length - b.length;
41160 var q;
41161
41162 if (mode !== 'mod') {
41163 q = new BN(null);
41164 q.length = m + 1;
41165 q.words = new Array(q.length);
41166 for (var i = 0; i < q.length; i++) {
41167 q.words[i] = 0;
41168 }
41169 }
41170
41171 var diff = a.clone()._ishlnsubmul(b, 1, m);
41172 if (diff.negative === 0) {
41173 a = diff;
41174 if (q) {
41175 q.words[m] = 1;
41176 }
41177 }
41178
41179 for (var j = m - 1; j >= 0; j--) {
41180 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
41181 (a.words[b.length + j - 1] | 0);
41182
41183 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
41184 // (0x7ffffff)
41185 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
41186
41187 a._ishlnsubmul(b, qj, j);
41188 while (a.negative !== 0) {
41189 qj--;
41190 a.negative = 0;
41191 a._ishlnsubmul(b, 1, j);
41192 if (!a.isZero()) {
41193 a.negative ^= 1;
41194 }
41195 }
41196 if (q) {
41197 q.words[j] = qj;
41198 }
41199 }
41200 if (q) {
41201 q.strip();
41202 }
41203 a.strip();
41204
41205 // Denormalize
41206 if (mode !== 'div' && shift !== 0) {
41207 a.iushrn(shift);
41208 }
41209
41210 return {
41211 div: q || null,
41212 mod: a
41213 };
41214 };
41215
41216 // NOTE: 1) `mode` can be set to `mod` to request mod only,
41217 // to `div` to request div only, or be absent to
41218 // request both div & mod
41219 // 2) `positive` is true if unsigned mod is requested
41220 BN.prototype.divmod = function divmod (num, mode, positive) {
41221 assert(!num.isZero());
41222
41223 if (this.isZero()) {
41224 return {
41225 div: new BN(0),
41226 mod: new BN(0)
41227 };
41228 }
41229
41230 var div, mod, res;
41231 if (this.negative !== 0 && num.negative === 0) {
41232 res = this.neg().divmod(num, mode);
41233
41234 if (mode !== 'mod') {
41235 div = res.div.neg();
41236 }
41237
41238 if (mode !== 'div') {
41239 mod = res.mod.neg();
41240 if (positive && mod.negative !== 0) {
41241 mod.iadd(num);
41242 }
41243 }
41244
41245 return {
41246 div: div,
41247 mod: mod
41248 };
41249 }
41250
41251 if (this.negative === 0 && num.negative !== 0) {
41252 res = this.divmod(num.neg(), mode);
41253
41254 if (mode !== 'mod') {
41255 div = res.div.neg();
41256 }
41257
41258 return {
41259 div: div,
41260 mod: res.mod
41261 };
41262 }
41263
41264 if ((this.negative & num.negative) !== 0) {
41265 res = this.neg().divmod(num.neg(), mode);
41266
41267 if (mode !== 'div') {
41268 mod = res.mod.neg();
41269 if (positive && mod.negative !== 0) {
41270 mod.isub(num);
41271 }
41272 }
41273
41274 return {
41275 div: res.div,
41276 mod: mod
41277 };
41278 }
41279
41280 // Both numbers are positive at this point
41281
41282 // Strip both numbers to approximate shift value
41283 if (num.length > this.length || this.cmp(num) < 0) {
41284 return {
41285 div: new BN(0),
41286 mod: this
41287 };
41288 }
41289
41290 // Very short reduction
41291 if (num.length === 1) {
41292 if (mode === 'div') {
41293 return {
41294 div: this.divn(num.words[0]),
41295 mod: null
41296 };
41297 }
41298
41299 if (mode === 'mod') {
41300 return {
41301 div: null,
41302 mod: new BN(this.modn(num.words[0]))
41303 };
41304 }
41305
41306 return {
41307 div: this.divn(num.words[0]),
41308 mod: new BN(this.modn(num.words[0]))
41309 };
41310 }
41311
41312 return this._wordDiv(num, mode);
41313 };
41314
41315 // Find `this` / `num`
41316 BN.prototype.div = function div (num) {
41317 return this.divmod(num, 'div', false).div;
41318 };
41319
41320 // Find `this` % `num`
41321 BN.prototype.mod = function mod (num) {
41322 return this.divmod(num, 'mod', false).mod;
41323 };
41324
41325 BN.prototype.umod = function umod (num) {
41326 return this.divmod(num, 'mod', true).mod;
41327 };
41328
41329 // Find Round(`this` / `num`)
41330 BN.prototype.divRound = function divRound (num) {
41331 var dm = this.divmod(num);
41332
41333 // Fast case - exact division
41334 if (dm.mod.isZero()) return dm.div;
41335
41336 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
41337
41338 var half = num.ushrn(1);
41339 var r2 = num.andln(1);
41340 var cmp = mod.cmp(half);
41341
41342 // Round down
41343 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
41344
41345 // Round up
41346 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41347 };
41348
41349 BN.prototype.modn = function modn (num) {
41350 assert(num <= 0x3ffffff);
41351 var p = (1 << 26) % num;
41352
41353 var acc = 0;
41354 for (var i = this.length - 1; i >= 0; i--) {
41355 acc = (p * acc + (this.words[i] | 0)) % num;
41356 }
41357
41358 return acc;
41359 };
41360
41361 // In-place division by number
41362 BN.prototype.idivn = function idivn (num) {
41363 assert(num <= 0x3ffffff);
41364
41365 var carry = 0;
41366 for (var i = this.length - 1; i >= 0; i--) {
41367 var w = (this.words[i] | 0) + carry * 0x4000000;
41368 this.words[i] = (w / num) | 0;
41369 carry = w % num;
41370 }
41371
41372 return this.strip();
41373 };
41374
41375 BN.prototype.divn = function divn (num) {
41376 return this.clone().idivn(num);
41377 };
41378
41379 BN.prototype.egcd = function egcd (p) {
41380 assert(p.negative === 0);
41381 assert(!p.isZero());
41382
41383 var x = this;
41384 var y = p.clone();
41385
41386 if (x.negative !== 0) {
41387 x = x.umod(p);
41388 } else {
41389 x = x.clone();
41390 }
41391
41392 // A * x + B * y = x
41393 var A = new BN(1);
41394 var B = new BN(0);
41395
41396 // C * x + D * y = y
41397 var C = new BN(0);
41398 var D = new BN(1);
41399
41400 var g = 0;
41401
41402 while (x.isEven() && y.isEven()) {
41403 x.iushrn(1);
41404 y.iushrn(1);
41405 ++g;
41406 }
41407
41408 var yp = y.clone();
41409 var xp = x.clone();
41410
41411 while (!x.isZero()) {
41412 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41413 if (i > 0) {
41414 x.iushrn(i);
41415 while (i-- > 0) {
41416 if (A.isOdd() || B.isOdd()) {
41417 A.iadd(yp);
41418 B.isub(xp);
41419 }
41420
41421 A.iushrn(1);
41422 B.iushrn(1);
41423 }
41424 }
41425
41426 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41427 if (j > 0) {
41428 y.iushrn(j);
41429 while (j-- > 0) {
41430 if (C.isOdd() || D.isOdd()) {
41431 C.iadd(yp);
41432 D.isub(xp);
41433 }
41434
41435 C.iushrn(1);
41436 D.iushrn(1);
41437 }
41438 }
41439
41440 if (x.cmp(y) >= 0) {
41441 x.isub(y);
41442 A.isub(C);
41443 B.isub(D);
41444 } else {
41445 y.isub(x);
41446 C.isub(A);
41447 D.isub(B);
41448 }
41449 }
41450
41451 return {
41452 a: C,
41453 b: D,
41454 gcd: y.iushln(g)
41455 };
41456 };
41457
41458 // This is reduced incarnation of the binary EEA
41459 // above, designated to invert members of the
41460 // _prime_ fields F(p) at a maximal speed
41461 BN.prototype._invmp = function _invmp (p) {
41462 assert(p.negative === 0);
41463 assert(!p.isZero());
41464
41465 var a = this;
41466 var b = p.clone();
41467
41468 if (a.negative !== 0) {
41469 a = a.umod(p);
41470 } else {
41471 a = a.clone();
41472 }
41473
41474 var x1 = new BN(1);
41475 var x2 = new BN(0);
41476
41477 var delta = b.clone();
41478
41479 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41480 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41481 if (i > 0) {
41482 a.iushrn(i);
41483 while (i-- > 0) {
41484 if (x1.isOdd()) {
41485 x1.iadd(delta);
41486 }
41487
41488 x1.iushrn(1);
41489 }
41490 }
41491
41492 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41493 if (j > 0) {
41494 b.iushrn(j);
41495 while (j-- > 0) {
41496 if (x2.isOdd()) {
41497 x2.iadd(delta);
41498 }
41499
41500 x2.iushrn(1);
41501 }
41502 }
41503
41504 if (a.cmp(b) >= 0) {
41505 a.isub(b);
41506 x1.isub(x2);
41507 } else {
41508 b.isub(a);
41509 x2.isub(x1);
41510 }
41511 }
41512
41513 var res;
41514 if (a.cmpn(1) === 0) {
41515 res = x1;
41516 } else {
41517 res = x2;
41518 }
41519
41520 if (res.cmpn(0) < 0) {
41521 res.iadd(p);
41522 }
41523
41524 return res;
41525 };
41526
41527 BN.prototype.gcd = function gcd (num) {
41528 if (this.isZero()) return num.abs();
41529 if (num.isZero()) return this.abs();
41530
41531 var a = this.clone();
41532 var b = num.clone();
41533 a.negative = 0;
41534 b.negative = 0;
41535
41536 // Remove common factor of two
41537 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41538 a.iushrn(1);
41539 b.iushrn(1);
41540 }
41541
41542 do {
41543 while (a.isEven()) {
41544 a.iushrn(1);
41545 }
41546 while (b.isEven()) {
41547 b.iushrn(1);
41548 }
41549
41550 var r = a.cmp(b);
41551 if (r < 0) {
41552 // Swap `a` and `b` to make `a` always bigger than `b`
41553 var t = a;
41554 a = b;
41555 b = t;
41556 } else if (r === 0 || b.cmpn(1) === 0) {
41557 break;
41558 }
41559
41560 a.isub(b);
41561 } while (true);
41562
41563 return b.iushln(shift);
41564 };
41565
41566 // Invert number in the field F(num)
41567 BN.prototype.invm = function invm (num) {
41568 return this.egcd(num).a.umod(num);
41569 };
41570
41571 BN.prototype.isEven = function isEven () {
41572 return (this.words[0] & 1) === 0;
41573 };
41574
41575 BN.prototype.isOdd = function isOdd () {
41576 return (this.words[0] & 1) === 1;
41577 };
41578
41579 // And first word and num
41580 BN.prototype.andln = function andln (num) {
41581 return this.words[0] & num;
41582 };
41583
41584 // Increment at the bit position in-line
41585 BN.prototype.bincn = function bincn (bit) {
41586 assert(typeof bit === 'number');
41587 var r = bit % 26;
41588 var s = (bit - r) / 26;
41589 var q = 1 << r;
41590
41591 // Fast case: bit is much higher than all existing words
41592 if (this.length <= s) {
41593 this._expand(s + 1);
41594 this.words[s] |= q;
41595 return this;
41596 }
41597
41598 // Add bit and propagate, if needed
41599 var carry = q;
41600 for (var i = s; carry !== 0 && i < this.length; i++) {
41601 var w = this.words[i] | 0;
41602 w += carry;
41603 carry = w >>> 26;
41604 w &= 0x3ffffff;
41605 this.words[i] = w;
41606 }
41607 if (carry !== 0) {
41608 this.words[i] = carry;
41609 this.length++;
41610 }
41611 return this;
41612 };
41613
41614 BN.prototype.isZero = function isZero () {
41615 return this.length === 1 && this.words[0] === 0;
41616 };
41617
41618 BN.prototype.cmpn = function cmpn (num) {
41619 var negative = num < 0;
41620
41621 if (this.negative !== 0 && !negative) return -1;
41622 if (this.negative === 0 && negative) return 1;
41623
41624 this.strip();
41625
41626 var res;
41627 if (this.length > 1) {
41628 res = 1;
41629 } else {
41630 if (negative) {
41631 num = -num;
41632 }
41633
41634 assert(num <= 0x3ffffff, 'Number is too big');
41635
41636 var w = this.words[0] | 0;
41637 res = w === num ? 0 : w < num ? -1 : 1;
41638 }
41639 if (this.negative !== 0) return -res | 0;
41640 return res;
41641 };
41642
41643 // Compare two numbers and return:
41644 // 1 - if `this` > `num`
41645 // 0 - if `this` == `num`
41646 // -1 - if `this` < `num`
41647 BN.prototype.cmp = function cmp (num) {
41648 if (this.negative !== 0 && num.negative === 0) return -1;
41649 if (this.negative === 0 && num.negative !== 0) return 1;
41650
41651 var res = this.ucmp(num);
41652 if (this.negative !== 0) return -res | 0;
41653 return res;
41654 };
41655
41656 // Unsigned comparison
41657 BN.prototype.ucmp = function ucmp (num) {
41658 // At this point both numbers have the same sign
41659 if (this.length > num.length) return 1;
41660 if (this.length < num.length) return -1;
41661
41662 var res = 0;
41663 for (var i = this.length - 1; i >= 0; i--) {
41664 var a = this.words[i] | 0;
41665 var b = num.words[i] | 0;
41666
41667 if (a === b) continue;
41668 if (a < b) {
41669 res = -1;
41670 } else if (a > b) {
41671 res = 1;
41672 }
41673 break;
41674 }
41675 return res;
41676 };
41677
41678 BN.prototype.gtn = function gtn (num) {
41679 return this.cmpn(num) === 1;
41680 };
41681
41682 BN.prototype.gt = function gt (num) {
41683 return this.cmp(num) === 1;
41684 };
41685
41686 BN.prototype.gten = function gten (num) {
41687 return this.cmpn(num) >= 0;
41688 };
41689
41690 BN.prototype.gte = function gte (num) {
41691 return this.cmp(num) >= 0;
41692 };
41693
41694 BN.prototype.ltn = function ltn (num) {
41695 return this.cmpn(num) === -1;
41696 };
41697
41698 BN.prototype.lt = function lt (num) {
41699 return this.cmp(num) === -1;
41700 };
41701
41702 BN.prototype.lten = function lten (num) {
41703 return this.cmpn(num) <= 0;
41704 };
41705
41706 BN.prototype.lte = function lte (num) {
41707 return this.cmp(num) <= 0;
41708 };
41709
41710 BN.prototype.eqn = function eqn (num) {
41711 return this.cmpn(num) === 0;
41712 };
41713
41714 BN.prototype.eq = function eq (num) {
41715 return this.cmp(num) === 0;
41716 };
41717
41718 //
41719 // A reduce context, could be using montgomery or something better, depending
41720 // on the `m` itself.
41721 //
41722 BN.red = function red (num) {
41723 return new Red(num);
41724 };
41725
41726 BN.prototype.toRed = function toRed (ctx) {
41727 assert(!this.red, 'Already a number in reduction context');
41728 assert(this.negative === 0, 'red works only with positives');
41729 return ctx.convertTo(this)._forceRed(ctx);
41730 };
41731
41732 BN.prototype.fromRed = function fromRed () {
41733 assert(this.red, 'fromRed works only with numbers in reduction context');
41734 return this.red.convertFrom(this);
41735 };
41736
41737 BN.prototype._forceRed = function _forceRed (ctx) {
41738 this.red = ctx;
41739 return this;
41740 };
41741
41742 BN.prototype.forceRed = function forceRed (ctx) {
41743 assert(!this.red, 'Already a number in reduction context');
41744 return this._forceRed(ctx);
41745 };
41746
41747 BN.prototype.redAdd = function redAdd (num) {
41748 assert(this.red, 'redAdd works only with red numbers');
41749 return this.red.add(this, num);
41750 };
41751
41752 BN.prototype.redIAdd = function redIAdd (num) {
41753 assert(this.red, 'redIAdd works only with red numbers');
41754 return this.red.iadd(this, num);
41755 };
41756
41757 BN.prototype.redSub = function redSub (num) {
41758 assert(this.red, 'redSub works only with red numbers');
41759 return this.red.sub(this, num);
41760 };
41761
41762 BN.prototype.redISub = function redISub (num) {
41763 assert(this.red, 'redISub works only with red numbers');
41764 return this.red.isub(this, num);
41765 };
41766
41767 BN.prototype.redShl = function redShl (num) {
41768 assert(this.red, 'redShl works only with red numbers');
41769 return this.red.shl(this, num);
41770 };
41771
41772 BN.prototype.redMul = function redMul (num) {
41773 assert(this.red, 'redMul works only with red numbers');
41774 this.red._verify2(this, num);
41775 return this.red.mul(this, num);
41776 };
41777
41778 BN.prototype.redIMul = function redIMul (num) {
41779 assert(this.red, 'redMul works only with red numbers');
41780 this.red._verify2(this, num);
41781 return this.red.imul(this, num);
41782 };
41783
41784 BN.prototype.redSqr = function redSqr () {
41785 assert(this.red, 'redSqr works only with red numbers');
41786 this.red._verify1(this);
41787 return this.red.sqr(this);
41788 };
41789
41790 BN.prototype.redISqr = function redISqr () {
41791 assert(this.red, 'redISqr works only with red numbers');
41792 this.red._verify1(this);
41793 return this.red.isqr(this);
41794 };
41795
41796 // Square root over p
41797 BN.prototype.redSqrt = function redSqrt () {
41798 assert(this.red, 'redSqrt works only with red numbers');
41799 this.red._verify1(this);
41800 return this.red.sqrt(this);
41801 };
41802
41803 BN.prototype.redInvm = function redInvm () {
41804 assert(this.red, 'redInvm works only with red numbers');
41805 this.red._verify1(this);
41806 return this.red.invm(this);
41807 };
41808
41809 // Return negative clone of `this` % `red modulo`
41810 BN.prototype.redNeg = function redNeg () {
41811 assert(this.red, 'redNeg works only with red numbers');
41812 this.red._verify1(this);
41813 return this.red.neg(this);
41814 };
41815
41816 BN.prototype.redPow = function redPow (num) {
41817 assert(this.red && !num.red, 'redPow(normalNum)');
41818 this.red._verify1(this);
41819 return this.red.pow(this, num);
41820 };
41821
41822 // Prime numbers with efficient reduction
41823 var primes = {
41824 k256: null,
41825 p224: null,
41826 p192: null,
41827 p25519: null
41828 };
41829
41830 // Pseudo-Mersenne prime
41831 function MPrime (name, p) {
41832 // P = 2 ^ N - K
41833 this.name = name;
41834 this.p = new BN(p, 16);
41835 this.n = this.p.bitLength();
41836 this.k = new BN(1).iushln(this.n).isub(this.p);
41837
41838 this.tmp = this._tmp();
41839 }
41840
41841 MPrime.prototype._tmp = function _tmp () {
41842 var tmp = new BN(null);
41843 tmp.words = new Array(Math.ceil(this.n / 13));
41844 return tmp;
41845 };
41846
41847 MPrime.prototype.ireduce = function ireduce (num) {
41848 // Assumes that `num` is less than `P^2`
41849 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41850 var r = num;
41851 var rlen;
41852
41853 do {
41854 this.split(r, this.tmp);
41855 r = this.imulK(r);
41856 r = r.iadd(this.tmp);
41857 rlen = r.bitLength();
41858 } while (rlen > this.n);
41859
41860 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41861 if (cmp === 0) {
41862 r.words[0] = 0;
41863 r.length = 1;
41864 } else if (cmp > 0) {
41865 r.isub(this.p);
41866 } else {
41867 r.strip();
41868 }
41869
41870 return r;
41871 };
41872
41873 MPrime.prototype.split = function split (input, out) {
41874 input.iushrn(this.n, 0, out);
41875 };
41876
41877 MPrime.prototype.imulK = function imulK (num) {
41878 return num.imul(this.k);
41879 };
41880
41881 function K256 () {
41882 MPrime.call(
41883 this,
41884 'k256',
41885 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
41886 }
41887 inherits(K256, MPrime);
41888
41889 K256.prototype.split = function split (input, output) {
41890 // 256 = 9 * 26 + 22
41891 var mask = 0x3fffff;
41892
41893 var outLen = Math.min(input.length, 9);
41894 for (var i = 0; i < outLen; i++) {
41895 output.words[i] = input.words[i];
41896 }
41897 output.length = outLen;
41898
41899 if (input.length <= 9) {
41900 input.words[0] = 0;
41901 input.length = 1;
41902 return;
41903 }
41904
41905 // Shift by 9 limbs
41906 var prev = input.words[9];
41907 output.words[output.length++] = prev & mask;
41908
41909 for (i = 10; i < input.length; i++) {
41910 var next = input.words[i] | 0;
41911 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
41912 prev = next;
41913 }
41914 prev >>>= 22;
41915 input.words[i - 10] = prev;
41916 if (prev === 0 && input.length > 10) {
41917 input.length -= 10;
41918 } else {
41919 input.length -= 9;
41920 }
41921 };
41922
41923 K256.prototype.imulK = function imulK (num) {
41924 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
41925 num.words[num.length] = 0;
41926 num.words[num.length + 1] = 0;
41927 num.length += 2;
41928
41929 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
41930 var lo = 0;
41931 for (var i = 0; i < num.length; i++) {
41932 var w = num.words[i] | 0;
41933 lo += w * 0x3d1;
41934 num.words[i] = lo & 0x3ffffff;
41935 lo = w * 0x40 + ((lo / 0x4000000) | 0);
41936 }
41937
41938 // Fast length reduction
41939 if (num.words[num.length - 1] === 0) {
41940 num.length--;
41941 if (num.words[num.length - 1] === 0) {
41942 num.length--;
41943 }
41944 }
41945 return num;
41946 };
41947
41948 function P224 () {
41949 MPrime.call(
41950 this,
41951 'p224',
41952 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
41953 }
41954 inherits(P224, MPrime);
41955
41956 function P192 () {
41957 MPrime.call(
41958 this,
41959 'p192',
41960 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
41961 }
41962 inherits(P192, MPrime);
41963
41964 function P25519 () {
41965 // 2 ^ 255 - 19
41966 MPrime.call(
41967 this,
41968 '25519',
41969 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
41970 }
41971 inherits(P25519, MPrime);
41972
41973 P25519.prototype.imulK = function imulK (num) {
41974 // K = 0x13
41975 var carry = 0;
41976 for (var i = 0; i < num.length; i++) {
41977 var hi = (num.words[i] | 0) * 0x13 + carry;
41978 var lo = hi & 0x3ffffff;
41979 hi >>>= 26;
41980
41981 num.words[i] = lo;
41982 carry = hi;
41983 }
41984 if (carry !== 0) {
41985 num.words[num.length++] = carry;
41986 }
41987 return num;
41988 };
41989
41990 // Exported mostly for testing purposes, use plain name instead
41991 BN._prime = function prime (name) {
41992 // Cached version of prime
41993 if (primes[name]) return primes[name];
41994
41995 var prime;
41996 if (name === 'k256') {
41997 prime = new K256();
41998 } else if (name === 'p224') {
41999 prime = new P224();
42000 } else if (name === 'p192') {
42001 prime = new P192();
42002 } else if (name === 'p25519') {
42003 prime = new P25519();
42004 } else {
42005 throw new Error('Unknown prime ' + name);
42006 }
42007 primes[name] = prime;
42008
42009 return prime;
42010 };
42011
42012 //
42013 // Base reduction engine
42014 //
42015 function Red (m) {
42016 if (typeof m === 'string') {
42017 var prime = BN._prime(m);
42018 this.m = prime.p;
42019 this.prime = prime;
42020 } else {
42021 assert(m.gtn(1), 'modulus must be greater than 1');
42022 this.m = m;
42023 this.prime = null;
42024 }
42025 }
42026
42027 Red.prototype._verify1 = function _verify1 (a) {
42028 assert(a.negative === 0, 'red works only with positives');
42029 assert(a.red, 'red works only with red numbers');
42030 };
42031
42032 Red.prototype._verify2 = function _verify2 (a, b) {
42033 assert((a.negative | b.negative) === 0, 'red works only with positives');
42034 assert(a.red && a.red === b.red,
42035 'red works only with red numbers');
42036 };
42037
42038 Red.prototype.imod = function imod (a) {
42039 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
42040 return a.umod(this.m)._forceRed(this);
42041 };
42042
42043 Red.prototype.neg = function neg (a) {
42044 if (a.isZero()) {
42045 return a.clone();
42046 }
42047
42048 return this.m.sub(a)._forceRed(this);
42049 };
42050
42051 Red.prototype.add = function add (a, b) {
42052 this._verify2(a, b);
42053
42054 var res = a.add(b);
42055 if (res.cmp(this.m) >= 0) {
42056 res.isub(this.m);
42057 }
42058 return res._forceRed(this);
42059 };
42060
42061 Red.prototype.iadd = function iadd (a, b) {
42062 this._verify2(a, b);
42063
42064 var res = a.iadd(b);
42065 if (res.cmp(this.m) >= 0) {
42066 res.isub(this.m);
42067 }
42068 return res;
42069 };
42070
42071 Red.prototype.sub = function sub (a, b) {
42072 this._verify2(a, b);
42073
42074 var res = a.sub(b);
42075 if (res.cmpn(0) < 0) {
42076 res.iadd(this.m);
42077 }
42078 return res._forceRed(this);
42079 };
42080
42081 Red.prototype.isub = function isub (a, b) {
42082 this._verify2(a, b);
42083
42084 var res = a.isub(b);
42085 if (res.cmpn(0) < 0) {
42086 res.iadd(this.m);
42087 }
42088 return res;
42089 };
42090
42091 Red.prototype.shl = function shl (a, num) {
42092 this._verify1(a);
42093 return this.imod(a.ushln(num));
42094 };
42095
42096 Red.prototype.imul = function imul (a, b) {
42097 this._verify2(a, b);
42098 return this.imod(a.imul(b));
42099 };
42100
42101 Red.prototype.mul = function mul (a, b) {
42102 this._verify2(a, b);
42103 return this.imod(a.mul(b));
42104 };
42105
42106 Red.prototype.isqr = function isqr (a) {
42107 return this.imul(a, a.clone());
42108 };
42109
42110 Red.prototype.sqr = function sqr (a) {
42111 return this.mul(a, a);
42112 };
42113
42114 Red.prototype.sqrt = function sqrt (a) {
42115 if (a.isZero()) return a.clone();
42116
42117 var mod3 = this.m.andln(3);
42118 assert(mod3 % 2 === 1);
42119
42120 // Fast case
42121 if (mod3 === 3) {
42122 var pow = this.m.add(new BN(1)).iushrn(2);
42123 return this.pow(a, pow);
42124 }
42125
42126 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
42127 //
42128 // Find Q and S, that Q * 2 ^ S = (P - 1)
42129 var q = this.m.subn(1);
42130 var s = 0;
42131 while (!q.isZero() && q.andln(1) === 0) {
42132 s++;
42133 q.iushrn(1);
42134 }
42135 assert(!q.isZero());
42136
42137 var one = new BN(1).toRed(this);
42138 var nOne = one.redNeg();
42139
42140 // Find quadratic non-residue
42141 // NOTE: Max is such because of generalized Riemann hypothesis.
42142 var lpow = this.m.subn(1).iushrn(1);
42143 var z = this.m.bitLength();
42144 z = new BN(2 * z * z).toRed(this);
42145
42146 while (this.pow(z, lpow).cmp(nOne) !== 0) {
42147 z.redIAdd(nOne);
42148 }
42149
42150 var c = this.pow(z, q);
42151 var r = this.pow(a, q.addn(1).iushrn(1));
42152 var t = this.pow(a, q);
42153 var m = s;
42154 while (t.cmp(one) !== 0) {
42155 var tmp = t;
42156 for (var i = 0; tmp.cmp(one) !== 0; i++) {
42157 tmp = tmp.redSqr();
42158 }
42159 assert(i < m);
42160 var b = this.pow(c, new BN(1).iushln(m - i - 1));
42161
42162 r = r.redMul(b);
42163 c = b.redSqr();
42164 t = t.redMul(c);
42165 m = i;
42166 }
42167
42168 return r;
42169 };
42170
42171 Red.prototype.invm = function invm (a) {
42172 var inv = a._invmp(this.m);
42173 if (inv.negative !== 0) {
42174 inv.negative = 0;
42175 return this.imod(inv).redNeg();
42176 } else {
42177 return this.imod(inv);
42178 }
42179 };
42180
42181 Red.prototype.pow = function pow (a, num) {
42182 if (num.isZero()) return new BN(1);
42183 if (num.cmpn(1) === 0) return a.clone();
42184
42185 var windowSize = 4;
42186 var wnd = new Array(1 << windowSize);
42187 wnd[0] = new BN(1).toRed(this);
42188 wnd[1] = a;
42189 for (var i = 2; i < wnd.length; i++) {
42190 wnd[i] = this.mul(wnd[i - 1], a);
42191 }
42192
42193 var res = wnd[0];
42194 var current = 0;
42195 var currentLen = 0;
42196 var start = num.bitLength() % 26;
42197 if (start === 0) {
42198 start = 26;
42199 }
42200
42201 for (i = num.length - 1; i >= 0; i--) {
42202 var word = num.words[i];
42203 for (var j = start - 1; j >= 0; j--) {
42204 var bit = (word >> j) & 1;
42205 if (res !== wnd[0]) {
42206 res = this.sqr(res);
42207 }
42208
42209 if (bit === 0 && current === 0) {
42210 currentLen = 0;
42211 continue;
42212 }
42213
42214 current <<= 1;
42215 current |= bit;
42216 currentLen++;
42217 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
42218
42219 res = this.mul(res, wnd[current]);
42220 currentLen = 0;
42221 current = 0;
42222 }
42223 start = 26;
42224 }
42225
42226 return res;
42227 };
42228
42229 Red.prototype.convertTo = function convertTo (num) {
42230 var r = num.umod(this.m);
42231
42232 return r === num ? r.clone() : r;
42233 };
42234
42235 Red.prototype.convertFrom = function convertFrom (num) {
42236 var res = num.clone();
42237 res.red = null;
42238 return res;
42239 };
42240
42241 //
42242 // Montgomery method engine
42243 //
42244
42245 BN.mont = function mont (num) {
42246 return new Mont(num);
42247 };
42248
42249 function Mont (m) {
42250 Red.call(this, m);
42251
42252 this.shift = this.m.bitLength();
42253 if (this.shift % 26 !== 0) {
42254 this.shift += 26 - (this.shift % 26);
42255 }
42256
42257 this.r = new BN(1).iushln(this.shift);
42258 this.r2 = this.imod(this.r.sqr());
42259 this.rinv = this.r._invmp(this.m);
42260
42261 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
42262 this.minv = this.minv.umod(this.r);
42263 this.minv = this.r.sub(this.minv);
42264 }
42265 inherits(Mont, Red);
42266
42267 Mont.prototype.convertTo = function convertTo (num) {
42268 return this.imod(num.ushln(this.shift));
42269 };
42270
42271 Mont.prototype.convertFrom = function convertFrom (num) {
42272 var r = this.imod(num.mul(this.rinv));
42273 r.red = null;
42274 return r;
42275 };
42276
42277 Mont.prototype.imul = function imul (a, b) {
42278 if (a.isZero() || b.isZero()) {
42279 a.words[0] = 0;
42280 a.length = 1;
42281 return a;
42282 }
42283
42284 var t = a.imul(b);
42285 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42286 var u = t.isub(c).iushrn(this.shift);
42287 var res = u;
42288
42289 if (u.cmp(this.m) >= 0) {
42290 res = u.isub(this.m);
42291 } else if (u.cmpn(0) < 0) {
42292 res = u.iadd(this.m);
42293 }
42294
42295 return res._forceRed(this);
42296 };
42297
42298 Mont.prototype.mul = function mul (a, b) {
42299 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
42300
42301 var t = a.mul(b);
42302 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42303 var u = t.isub(c).iushrn(this.shift);
42304 var res = u;
42305 if (u.cmp(this.m) >= 0) {
42306 res = u.isub(this.m);
42307 } else if (u.cmpn(0) < 0) {
42308 res = u.iadd(this.m);
42309 }
42310
42311 return res._forceRed(this);
42312 };
42313
42314 Mont.prototype.invm = function invm (a) {
42315 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
42316 var res = this.imod(a._invmp(this.m).mul(this.r2));
42317 return res._forceRed(this);
42318 };
42319})(typeof module === 'undefined' || module, this);
42320
42321},{}],82:[function(require,module,exports){
42322var r;
42323
42324module.exports = function rand(len) {
42325 if (!r)
42326 r = new Rand(null);
42327
42328 return r.generate(len);
42329};
42330
42331function Rand(rand) {
42332 this.rand = rand;
42333}
42334module.exports.Rand = Rand;
42335
42336Rand.prototype.generate = function generate(len) {
42337 return this._rand(len);
42338};
42339
42340// Emulate crypto API using randy
42341Rand.prototype._rand = function _rand(n) {
42342 if (this.rand.getBytes)
42343 return this.rand.getBytes(n);
42344
42345 var res = new Uint8Array(n);
42346 for (var i = 0; i < res.length; i++)
42347 res[i] = this.rand.getByte();
42348 return res;
42349};
42350
42351if (typeof self === 'object') {
42352 if (self.crypto && self.crypto.getRandomValues) {
42353 // Modern browsers
42354 Rand.prototype._rand = function _rand(n) {
42355 var arr = new Uint8Array(n);
42356 self.crypto.getRandomValues(arr);
42357 return arr;
42358 };
42359 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42360 // IE
42361 Rand.prototype._rand = function _rand(n) {
42362 var arr = new Uint8Array(n);
42363 self.msCrypto.getRandomValues(arr);
42364 return arr;
42365 };
42366
42367 // Safari's WebWorkers do not have `crypto`
42368 } else if (typeof window === 'object') {
42369 // Old junk
42370 Rand.prototype._rand = function() {
42371 throw new Error('Not implemented yet');
42372 };
42373 }
42374} else {
42375 // Node.js or Web worker with no crypto support
42376 try {
42377 var crypto = require('crypto');
42378 if (typeof crypto.randomBytes !== 'function')
42379 throw new Error('Not supported');
42380
42381 Rand.prototype._rand = function _rand(n) {
42382 return crypto.randomBytes(n);
42383 };
42384 } catch (e) {
42385 }
42386}
42387
42388},{"crypto":3}],83:[function(require,module,exports){
42389var basex = require('base-x')
42390var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
42391
42392module.exports = basex(ALPHABET)
42393
42394},{"base-x":35}],84:[function(require,module,exports){
42395(function (Buffer){
42396'use strict'
42397
42398var base58 = require('bs58')
42399
42400module.exports = function (checksumFn) {
42401 // Encode a buffer as a base58-check encoded string
42402 function encode (payload) {
42403 var checksum = checksumFn(payload)
42404
42405 return base58.encode(Buffer.concat([
42406 payload,
42407 checksum
42408 ], payload.length + 4))
42409 }
42410
42411 function decodeRaw (buffer) {
42412 var payload = buffer.slice(0, -4)
42413 var checksum = buffer.slice(-4)
42414 var newChecksum = checksumFn(payload)
42415
42416 if (checksum[0] ^ newChecksum[0] |
42417 checksum[1] ^ newChecksum[1] |
42418 checksum[2] ^ newChecksum[2] |
42419 checksum[3] ^ newChecksum[3]) return
42420
42421 return payload
42422 }
42423
42424 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
42425 function decodeUnsafe (string) {
42426 var buffer = base58.decodeUnsafe(string)
42427 if (!buffer) return
42428
42429 return decodeRaw(buffer)
42430 }
42431
42432 function decode (string) {
42433 var buffer = base58.decode(string)
42434 var payload = decodeRaw(buffer, checksumFn)
42435 if (!payload) throw new Error('Invalid checksum')
42436 return payload
42437 }
42438
42439 return {
42440 encode: encode,
42441 decode: decode,
42442 decodeUnsafe: decodeUnsafe
42443 }
42444}
42445
42446}).call(this,require("buffer").Buffer)
42447},{"bs58":83,"buffer":5}],85:[function(require,module,exports){
42448'use strict'
42449
42450var createHash = require('create-hash')
42451var bs58checkBase = require('./base')
42452
42453// SHA256(SHA256(buffer))
42454function sha256x2 (buffer) {
42455 var tmp = createHash('sha256').update(buffer).digest()
42456 return createHash('sha256').update(tmp).digest()
42457}
42458
42459module.exports = bs58checkBase(sha256x2)
42460
42461},{"./base":84,"create-hash":87}],86:[function(require,module,exports){
42462var Buffer = require('safe-buffer').Buffer
42463var Transform = require('stream').Transform
42464var StringDecoder = require('string_decoder').StringDecoder
42465var inherits = require('inherits')
42466
42467function CipherBase (hashMode) {
42468 Transform.call(this)
42469 this.hashMode = typeof hashMode === 'string'
42470 if (this.hashMode) {
42471 this[hashMode] = this._finalOrDigest
42472 } else {
42473 this.final = this._finalOrDigest
42474 }
42475 if (this._final) {
42476 this.__final = this._final
42477 this._final = null
42478 }
42479 this._decoder = null
42480 this._encoding = null
42481}
42482inherits(CipherBase, Transform)
42483
42484CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42485 if (typeof data === 'string') {
42486 data = Buffer.from(data, inputEnc)
42487 }
42488
42489 var outData = this._update(data)
42490 if (this.hashMode) return this
42491
42492 if (outputEnc) {
42493 outData = this._toString(outData, outputEnc)
42494 }
42495
42496 return outData
42497}
42498
42499CipherBase.prototype.setAutoPadding = function () {}
42500CipherBase.prototype.getAuthTag = function () {
42501 throw new Error('trying to get auth tag in unsupported state')
42502}
42503
42504CipherBase.prototype.setAuthTag = function () {
42505 throw new Error('trying to set auth tag in unsupported state')
42506}
42507
42508CipherBase.prototype.setAAD = function () {
42509 throw new Error('trying to set aad in unsupported state')
42510}
42511
42512CipherBase.prototype._transform = function (data, _, next) {
42513 var err
42514 try {
42515 if (this.hashMode) {
42516 this._update(data)
42517 } else {
42518 this.push(this._update(data))
42519 }
42520 } catch (e) {
42521 err = e
42522 } finally {
42523 next(err)
42524 }
42525}
42526CipherBase.prototype._flush = function (done) {
42527 var err
42528 try {
42529 this.push(this.__final())
42530 } catch (e) {
42531 err = e
42532 }
42533
42534 done(err)
42535}
42536CipherBase.prototype._finalOrDigest = function (outputEnc) {
42537 var outData = this.__final() || Buffer.alloc(0)
42538 if (outputEnc) {
42539 outData = this._toString(outData, outputEnc, true)
42540 }
42541 return outData
42542}
42543
42544CipherBase.prototype._toString = function (value, enc, fin) {
42545 if (!this._decoder) {
42546 this._decoder = new StringDecoder(enc)
42547 this._encoding = enc
42548 }
42549
42550 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
42551
42552 var out = this._decoder.write(value)
42553 if (fin) {
42554 out += this._decoder.end()
42555 }
42556
42557 return out
42558}
42559
42560module.exports = CipherBase
42561
42562},{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
42563(function (Buffer){
42564'use strict'
42565var inherits = require('inherits')
42566var md5 = require('./md5')
42567var RIPEMD160 = require('ripemd160')
42568var sha = require('sha.js')
42569
42570var Base = require('cipher-base')
42571
42572function HashNoConstructor (hash) {
42573 Base.call(this, 'digest')
42574
42575 this._hash = hash
42576 this.buffers = []
42577}
42578
42579inherits(HashNoConstructor, Base)
42580
42581HashNoConstructor.prototype._update = function (data) {
42582 this.buffers.push(data)
42583}
42584
42585HashNoConstructor.prototype._final = function () {
42586 var buf = Buffer.concat(this.buffers)
42587 var r = this._hash(buf)
42588 this.buffers = null
42589
42590 return r
42591}
42592
42593function Hash (hash) {
42594 Base.call(this, 'digest')
42595
42596 this._hash = hash
42597}
42598
42599inherits(Hash, Base)
42600
42601Hash.prototype._update = function (data) {
42602 this._hash.update(data)
42603}
42604
42605Hash.prototype._final = function () {
42606 return this._hash.digest()
42607}
42608
42609module.exports = function createHash (alg) {
42610 alg = alg.toLowerCase()
42611 if (alg === 'md5') return new HashNoConstructor(md5)
42612 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
42613
42614 return new Hash(sha(alg))
42615}
42616
42617}).call(this,require("buffer").Buffer)
42618},{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
42619(function (Buffer){
42620'use strict'
42621var intSize = 4
42622var zeroBuffer = new Buffer(intSize)
42623zeroBuffer.fill(0)
42624
42625var charSize = 8
42626var hashSize = 16
42627
42628function toArray (buf) {
42629 if ((buf.length % intSize) !== 0) {
42630 var len = buf.length + (intSize - (buf.length % intSize))
42631 buf = Buffer.concat([buf, zeroBuffer], len)
42632 }
42633
42634 var arr = new Array(buf.length >>> 2)
42635 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
42636 arr[j] = buf.readInt32LE(i)
42637 }
42638
42639 return arr
42640}
42641
42642module.exports = function hash (buf, fn) {
42643 var arr = fn(toArray(buf), buf.length * charSize)
42644 buf = new Buffer(hashSize)
42645 for (var i = 0; i < arr.length; i++) {
42646 buf.writeInt32LE(arr[i], i << 2, true)
42647 }
42648 return buf
42649}
42650
42651}).call(this,require("buffer").Buffer)
42652},{"buffer":5}],89:[function(require,module,exports){
42653'use strict'
42654/*
42655 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42656 * Digest Algorithm, as defined in RFC 1321.
42657 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42658 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42659 * Distributed under the BSD License
42660 * See http://pajhome.org.uk/crypt/md5 for more info.
42661 */
42662
42663var makeHash = require('./make-hash')
42664
42665/*
42666 * Calculate the MD5 of an array of little-endian words, and a bit length
42667 */
42668function core_md5 (x, len) {
42669 /* append padding */
42670 x[len >> 5] |= 0x80 << ((len) % 32)
42671 x[(((len + 64) >>> 9) << 4) + 14] = len
42672
42673 var a = 1732584193
42674 var b = -271733879
42675 var c = -1732584194
42676 var d = 271733878
42677
42678 for (var i = 0; i < x.length; i += 16) {
42679 var olda = a
42680 var oldb = b
42681 var oldc = c
42682 var oldd = d
42683
42684 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
42685 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
42686 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
42687 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
42688 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
42689 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
42690 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
42691 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
42692 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
42693 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
42694 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
42695 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
42696 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
42697 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
42698 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
42699 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
42700
42701 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
42702 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
42703 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
42704 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
42705 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
42706 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
42707 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
42708 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
42709 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
42710 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
42711 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
42712 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
42713 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
42714 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
42715 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
42716 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
42717
42718 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
42719 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
42720 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
42721 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
42722 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
42723 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
42724 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
42725 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
42726 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
42727 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
42728 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
42729 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
42730 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
42731 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
42732 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
42733 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
42734
42735 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
42736 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
42737 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
42738 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
42739 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
42740 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
42741 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
42742 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
42743 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
42744 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
42745 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
42746 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
42747 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
42748 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
42749 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
42750 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
42751
42752 a = safe_add(a, olda)
42753 b = safe_add(b, oldb)
42754 c = safe_add(c, oldc)
42755 d = safe_add(d, oldd)
42756 }
42757
42758 return [a, b, c, d]
42759}
42760
42761/*
42762 * These functions implement the four basic operations the algorithm uses.
42763 */
42764function md5_cmn (q, a, b, x, s, t) {
42765 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
42766}
42767
42768function md5_ff (a, b, c, d, x, s, t) {
42769 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
42770}
42771
42772function md5_gg (a, b, c, d, x, s, t) {
42773 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
42774}
42775
42776function md5_hh (a, b, c, d, x, s, t) {
42777 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
42778}
42779
42780function md5_ii (a, b, c, d, x, s, t) {
42781 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
42782}
42783
42784/*
42785 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42786 * to work around bugs in some JS interpreters.
42787 */
42788function safe_add (x, y) {
42789 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
42790 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
42791 return (msw << 16) | (lsw & 0xFFFF)
42792}
42793
42794/*
42795 * Bitwise rotate a 32-bit number to the left.
42796 */
42797function bit_rol (num, cnt) {
42798 return (num << cnt) | (num >>> (32 - cnt))
42799}
42800
42801module.exports = function md5 (buf) {
42802 return makeHash(buf, core_md5)
42803}
42804
42805},{"./make-hash":88}],90:[function(require,module,exports){
42806'use strict'
42807var inherits = require('inherits')
42808var Legacy = require('./legacy')
42809var Base = require('cipher-base')
42810var Buffer = require('safe-buffer').Buffer
42811var md5 = require('create-hash/md5')
42812var RIPEMD160 = require('ripemd160')
42813
42814var sha = require('sha.js')
42815
42816var ZEROS = Buffer.alloc(128)
42817
42818function Hmac (alg, key) {
42819 Base.call(this, 'digest')
42820 if (typeof key === 'string') {
42821 key = Buffer.from(key)
42822 }
42823
42824 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
42825
42826 this._alg = alg
42827 this._key = key
42828 if (key.length > blocksize) {
42829 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42830 key = hash.update(key).digest()
42831 } else if (key.length < blocksize) {
42832 key = Buffer.concat([key, ZEROS], blocksize)
42833 }
42834
42835 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42836 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42837
42838 for (var i = 0; i < blocksize; i++) {
42839 ipad[i] = key[i] ^ 0x36
42840 opad[i] = key[i] ^ 0x5C
42841 }
42842 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42843 this._hash.update(ipad)
42844}
42845
42846inherits(Hmac, Base)
42847
42848Hmac.prototype._update = function (data) {
42849 this._hash.update(data)
42850}
42851
42852Hmac.prototype._final = function () {
42853 var h = this._hash.digest()
42854 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
42855 return hash.update(this._opad).update(h).digest()
42856}
42857
42858module.exports = function createHmac (alg, key) {
42859 alg = alg.toLowerCase()
42860 if (alg === 'rmd160' || alg === 'ripemd160') {
42861 return new Hmac('rmd160', key)
42862 }
42863 if (alg === 'md5') {
42864 return new Legacy(md5, key)
42865 }
42866 return new Hmac(alg, key)
42867}
42868
42869},{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
42870'use strict'
42871var inherits = require('inherits')
42872var Buffer = require('safe-buffer').Buffer
42873
42874var Base = require('cipher-base')
42875
42876var ZEROS = Buffer.alloc(128)
42877var blocksize = 64
42878
42879function Hmac (alg, key) {
42880 Base.call(this, 'digest')
42881 if (typeof key === 'string') {
42882 key = Buffer.from(key)
42883 }
42884
42885 this._alg = alg
42886 this._key = key
42887
42888 if (key.length > blocksize) {
42889 key = alg(key)
42890 } else if (key.length < blocksize) {
42891 key = Buffer.concat([key, ZEROS], blocksize)
42892 }
42893
42894 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42895 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42896
42897 for (var i = 0; i < blocksize; i++) {
42898 ipad[i] = key[i] ^ 0x36
42899 opad[i] = key[i] ^ 0x5C
42900 }
42901
42902 this._hash = [ipad]
42903}
42904
42905inherits(Hmac, Base)
42906
42907Hmac.prototype._update = function (data) {
42908 this._hash.push(data)
42909}
42910
42911Hmac.prototype._final = function () {
42912 var h = this._alg(Buffer.concat(this._hash))
42913 return this._alg(Buffer.concat([this._opad, h]))
42914}
42915module.exports = Hmac
42916
42917},{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
42918var assert = require('assert')
42919var BigInteger = require('bigi')
42920
42921var Point = require('./point')
42922
42923function Curve (p, a, b, Gx, Gy, n, h) {
42924 this.p = p
42925 this.a = a
42926 this.b = b
42927 this.G = Point.fromAffine(this, Gx, Gy)
42928 this.n = n
42929 this.h = h
42930
42931 this.infinity = new Point(this, null, null, BigInteger.ZERO)
42932
42933 // result caching
42934 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
42935
42936 // determine size of p in bytes
42937 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
42938}
42939
42940Curve.prototype.pointFromX = function (isOdd, x) {
42941 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
42942 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
42943
42944 var y = beta
42945 if (beta.isEven() ^ !isOdd) {
42946 y = this.p.subtract(y) // -y % p
42947 }
42948
42949 return Point.fromAffine(this, x, y)
42950}
42951
42952Curve.prototype.isInfinity = function (Q) {
42953 if (Q === this.infinity) return true
42954
42955 return Q.z.signum() === 0 && Q.y.signum() !== 0
42956}
42957
42958Curve.prototype.isOnCurve = function (Q) {
42959 if (this.isInfinity(Q)) return true
42960
42961 var x = Q.affineX
42962 var y = Q.affineY
42963 var a = this.a
42964 var b = this.b
42965 var p = this.p
42966
42967 // Check that xQ and yQ are integers in the interval [0, p - 1]
42968 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
42969 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
42970
42971 // and check that y^2 = x^3 + ax + b (mod p)
42972 var lhs = y.square().mod(p)
42973 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
42974 return lhs.equals(rhs)
42975}
42976
42977/**
42978 * Validate an elliptic curve point.
42979 *
42980 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
42981 */
42982Curve.prototype.validate = function (Q) {
42983 // Check Q != O
42984 assert(!this.isInfinity(Q), 'Point is at infinity')
42985 assert(this.isOnCurve(Q), 'Point is not on the curve')
42986
42987 // Check nQ = O (where Q is a scalar multiple of G)
42988 var nQ = Q.multiply(this.n)
42989 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
42990
42991 return true
42992}
42993
42994module.exports = Curve
42995
42996},{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
42997module.exports={
42998 "secp128r1": {
42999 "p": "fffffffdffffffffffffffffffffffff",
43000 "a": "fffffffdfffffffffffffffffffffffc",
43001 "b": "e87579c11079f43dd824993c2cee5ed3",
43002 "n": "fffffffe0000000075a30d1b9038a115",
43003 "h": "01",
43004 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
43005 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
43006 },
43007 "secp160k1": {
43008 "p": "fffffffffffffffffffffffffffffffeffffac73",
43009 "a": "00",
43010 "b": "07",
43011 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
43012 "h": "01",
43013 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
43014 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
43015 },
43016 "secp160r1": {
43017 "p": "ffffffffffffffffffffffffffffffff7fffffff",
43018 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
43019 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
43020 "n": "0100000000000000000001f4c8f927aed3ca752257",
43021 "h": "01",
43022 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
43023 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
43024 },
43025 "secp192k1": {
43026 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
43027 "a": "00",
43028 "b": "03",
43029 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
43030 "h": "01",
43031 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
43032 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
43033 },
43034 "secp192r1": {
43035 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
43036 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
43037 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
43038 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
43039 "h": "01",
43040 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
43041 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
43042 },
43043 "secp256k1": {
43044 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
43045 "a": "00",
43046 "b": "07",
43047 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43048 "h": "01",
43049 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
43050 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
43051 },
43052 "secp256r1": {
43053 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
43054 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
43055 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
43056 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
43057 "h": "01",
43058 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
43059 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
43060 }
43061}
43062
43063},{}],94:[function(require,module,exports){
43064var Point = require('./point')
43065var Curve = require('./curve')
43066
43067var getCurveByName = require('./names')
43068
43069module.exports = {
43070 Curve: Curve,
43071 Point: Point,
43072 getCurveByName: getCurveByName
43073}
43074
43075},{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
43076var BigInteger = require('bigi')
43077
43078var curves = require('./curves.json')
43079var Curve = require('./curve')
43080
43081function getCurveByName (name) {
43082 var curve = curves[name]
43083 if (!curve) return null
43084
43085 var p = new BigInteger(curve.p, 16)
43086 var a = new BigInteger(curve.a, 16)
43087 var b = new BigInteger(curve.b, 16)
43088 var n = new BigInteger(curve.n, 16)
43089 var h = new BigInteger(curve.h, 16)
43090 var Gx = new BigInteger(curve.Gx, 16)
43091 var Gy = new BigInteger(curve.Gy, 16)
43092
43093 return new Curve(p, a, b, Gx, Gy, n, h)
43094}
43095
43096module.exports = getCurveByName
43097
43098},{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
43099(function (Buffer){
43100var assert = require('assert')
43101var BigInteger = require('bigi')
43102
43103var THREE = BigInteger.valueOf(3)
43104
43105function Point (curve, x, y, z) {
43106 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
43107
43108 this.curve = curve
43109 this.x = x
43110 this.y = y
43111 this.z = z
43112 this._zInv = null
43113
43114 this.compressed = true
43115}
43116
43117Object.defineProperty(Point.prototype, 'zInv', {
43118 get: function () {
43119 if (this._zInv === null) {
43120 this._zInv = this.z.modInverse(this.curve.p)
43121 }
43122
43123 return this._zInv
43124 }
43125})
43126
43127Object.defineProperty(Point.prototype, 'affineX', {
43128 get: function () {
43129 return this.x.multiply(this.zInv).mod(this.curve.p)
43130 }
43131})
43132
43133Object.defineProperty(Point.prototype, 'affineY', {
43134 get: function () {
43135 return this.y.multiply(this.zInv).mod(this.curve.p)
43136 }
43137})
43138
43139Point.fromAffine = function (curve, x, y) {
43140 return new Point(curve, x, y, BigInteger.ONE)
43141}
43142
43143Point.prototype.equals = function (other) {
43144 if (other === this) return true
43145 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
43146 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
43147
43148 // u = Y2 * Z1 - Y1 * Z2
43149 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
43150
43151 if (u.signum() !== 0) return false
43152
43153 // v = X2 * Z1 - X1 * Z2
43154 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
43155
43156 return v.signum() === 0
43157}
43158
43159Point.prototype.negate = function () {
43160 var y = this.curve.p.subtract(this.y)
43161
43162 return new Point(this.curve, this.x, y, this.z)
43163}
43164
43165Point.prototype.add = function (b) {
43166 if (this.curve.isInfinity(this)) return b
43167 if (this.curve.isInfinity(b)) return this
43168
43169 var x1 = this.x
43170 var y1 = this.y
43171 var x2 = b.x
43172 var y2 = b.y
43173
43174 // u = Y2 * Z1 - Y1 * Z2
43175 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
43176 // v = X2 * Z1 - X1 * Z2
43177 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
43178
43179 if (v.signum() === 0) {
43180 if (u.signum() === 0) {
43181 return this.twice() // this == b, so double
43182 }
43183
43184 return this.curve.infinity // this = -b, so infinity
43185 }
43186
43187 var v2 = v.square()
43188 var v3 = v2.multiply(v)
43189 var x1v2 = x1.multiply(v2)
43190 var zu2 = u.square().multiply(this.z)
43191
43192 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
43193 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
43194 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
43195 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)
43196 // z3 = v^3 * z1 * z2
43197 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
43198
43199 return new Point(this.curve, x3, y3, z3)
43200}
43201
43202Point.prototype.twice = function () {
43203 if (this.curve.isInfinity(this)) return this
43204 if (this.y.signum() === 0) return this.curve.infinity
43205
43206 var x1 = this.x
43207 var y1 = this.y
43208
43209 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
43210 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
43211 var a = this.curve.a
43212
43213 // w = 3 * x1^2 + a * z1^2
43214 var w = x1.square().multiply(THREE)
43215
43216 if (a.signum() !== 0) {
43217 w = w.add(this.z.square().multiply(a))
43218 }
43219
43220 w = w.mod(this.curve.p)
43221 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
43222 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
43223 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
43224 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
43225 // z3 = 8 * (y1 * z1)^3
43226 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
43227
43228 return new Point(this.curve, x3, y3, z3)
43229}
43230
43231// Simple NAF (Non-Adjacent Form) multiplication algorithm
43232// TODO: modularize the multiplication algorithm
43233Point.prototype.multiply = function (k) {
43234 if (this.curve.isInfinity(this)) return this
43235 if (k.signum() === 0) return this.curve.infinity
43236
43237 var e = k
43238 var h = e.multiply(THREE)
43239
43240 var neg = this.negate()
43241 var R = this
43242
43243 for (var i = h.bitLength() - 2; i > 0; --i) {
43244 var hBit = h.testBit(i)
43245 var eBit = e.testBit(i)
43246
43247 R = R.twice()
43248
43249 if (hBit !== eBit) {
43250 R = R.add(hBit ? this : neg)
43251 }
43252 }
43253
43254 return R
43255}
43256
43257// Compute this*j + x*k (simultaneous multiplication)
43258Point.prototype.multiplyTwo = function (j, x, k) {
43259 var i = Math.max(j.bitLength(), k.bitLength()) - 1
43260 var R = this.curve.infinity
43261 var both = this.add(x)
43262
43263 while (i >= 0) {
43264 var jBit = j.testBit(i)
43265 var kBit = k.testBit(i)
43266
43267 R = R.twice()
43268
43269 if (jBit) {
43270 if (kBit) {
43271 R = R.add(both)
43272 } else {
43273 R = R.add(this)
43274 }
43275 } else if (kBit) {
43276 R = R.add(x)
43277 }
43278 --i
43279 }
43280
43281 return R
43282}
43283
43284Point.prototype.getEncoded = function (compressed) {
43285 if (compressed == null) compressed = this.compressed
43286 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
43287
43288 var x = this.affineX
43289 var y = this.affineY
43290 var byteLength = this.curve.pLength
43291 var buffer
43292
43293 // 0x02/0x03 | X
43294 if (compressed) {
43295 buffer = new Buffer(1 + byteLength)
43296 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
43297
43298 // 0x04 | X | Y
43299 } else {
43300 buffer = new Buffer(1 + byteLength + byteLength)
43301 buffer.writeUInt8(0x04, 0)
43302
43303 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
43304 }
43305
43306 x.toBuffer(byteLength).copy(buffer, 1)
43307
43308 return buffer
43309}
43310
43311Point.decodeFrom = function (curve, buffer) {
43312 var type = buffer.readUInt8(0)
43313 var compressed = (type !== 4)
43314
43315 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
43316 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
43317
43318 var Q
43319 if (compressed) {
43320 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
43321 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
43322
43323 var isOdd = (type === 0x03)
43324 Q = curve.pointFromX(isOdd, x)
43325 } else {
43326 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
43327
43328 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
43329 Q = Point.fromAffine(curve, x, y)
43330 }
43331
43332 Q.compressed = compressed
43333 return Q
43334}
43335
43336Point.prototype.toString = function () {
43337 if (this.curve.isInfinity(this)) return '(INFINITY)'
43338
43339 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
43340}
43341
43342module.exports = Point
43343
43344}).call(this,require("buffer").Buffer)
43345},{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
43346'use strict';
43347
43348var elliptic = exports;
43349
43350elliptic.version = require('../package.json').version;
43351elliptic.utils = require('./elliptic/utils');
43352elliptic.rand = require('brorand');
43353elliptic.curve = require('./elliptic/curve');
43354elliptic.curves = require('./elliptic/curves');
43355
43356// Protocols
43357elliptic.ec = require('./elliptic/ec');
43358elliptic.eddsa = require('./elliptic/eddsa');
43359
43360},{"../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){
43361'use strict';
43362
43363var BN = require('bn.js');
43364var elliptic = require('../../elliptic');
43365var utils = elliptic.utils;
43366var getNAF = utils.getNAF;
43367var getJSF = utils.getJSF;
43368var assert = utils.assert;
43369
43370function BaseCurve(type, conf) {
43371 this.type = type;
43372 this.p = new BN(conf.p, 16);
43373
43374 // Use Montgomery, when there is no fast reduction for the prime
43375 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
43376
43377 // Useful for many curves
43378 this.zero = new BN(0).toRed(this.red);
43379 this.one = new BN(1).toRed(this.red);
43380 this.two = new BN(2).toRed(this.red);
43381
43382 // Curve configuration, optional
43383 this.n = conf.n && new BN(conf.n, 16);
43384 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
43385
43386 // Temporary arrays
43387 this._wnafT1 = new Array(4);
43388 this._wnafT2 = new Array(4);
43389 this._wnafT3 = new Array(4);
43390 this._wnafT4 = new Array(4);
43391
43392 // Generalized Greg Maxwell's trick
43393 var adjustCount = this.n && this.p.div(this.n);
43394 if (!adjustCount || adjustCount.cmpn(100) > 0) {
43395 this.redN = null;
43396 } else {
43397 this._maxwellTrick = true;
43398 this.redN = this.n.toRed(this.red);
43399 }
43400}
43401module.exports = BaseCurve;
43402
43403BaseCurve.prototype.point = function point() {
43404 throw new Error('Not implemented');
43405};
43406
43407BaseCurve.prototype.validate = function validate() {
43408 throw new Error('Not implemented');
43409};
43410
43411BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
43412 assert(p.precomputed);
43413 var doubles = p._getDoubles();
43414
43415 var naf = getNAF(k, 1);
43416 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
43417 I /= 3;
43418
43419 // Translate into more windowed form
43420 var repr = [];
43421 for (var j = 0; j < naf.length; j += doubles.step) {
43422 var nafW = 0;
43423 for (var k = j + doubles.step - 1; k >= j; k--)
43424 nafW = (nafW << 1) + naf[k];
43425 repr.push(nafW);
43426 }
43427
43428 var a = this.jpoint(null, null, null);
43429 var b = this.jpoint(null, null, null);
43430 for (var i = I; i > 0; i--) {
43431 for (var j = 0; j < repr.length; j++) {
43432 var nafW = repr[j];
43433 if (nafW === i)
43434 b = b.mixedAdd(doubles.points[j]);
43435 else if (nafW === -i)
43436 b = b.mixedAdd(doubles.points[j].neg());
43437 }
43438 a = a.add(b);
43439 }
43440 return a.toP();
43441};
43442
43443BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
43444 var w = 4;
43445
43446 // Precompute window
43447 var nafPoints = p._getNAFPoints(w);
43448 w = nafPoints.wnd;
43449 var wnd = nafPoints.points;
43450
43451 // Get NAF form
43452 var naf = getNAF(k, w);
43453
43454 // Add `this`*(N+1) for every w-NAF index
43455 var acc = this.jpoint(null, null, null);
43456 for (var i = naf.length - 1; i >= 0; i--) {
43457 // Count zeroes
43458 for (var k = 0; i >= 0 && naf[i] === 0; i--)
43459 k++;
43460 if (i >= 0)
43461 k++;
43462 acc = acc.dblp(k);
43463
43464 if (i < 0)
43465 break;
43466 var z = naf[i];
43467 assert(z !== 0);
43468 if (p.type === 'affine') {
43469 // J +- P
43470 if (z > 0)
43471 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
43472 else
43473 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
43474 } else {
43475 // J +- J
43476 if (z > 0)
43477 acc = acc.add(wnd[(z - 1) >> 1]);
43478 else
43479 acc = acc.add(wnd[(-z - 1) >> 1].neg());
43480 }
43481 }
43482 return p.type === 'affine' ? acc.toP() : acc;
43483};
43484
43485BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
43486 points,
43487 coeffs,
43488 len,
43489 jacobianResult) {
43490 var wndWidth = this._wnafT1;
43491 var wnd = this._wnafT2;
43492 var naf = this._wnafT3;
43493
43494 // Fill all arrays
43495 var max = 0;
43496 for (var i = 0; i < len; i++) {
43497 var p = points[i];
43498 var nafPoints = p._getNAFPoints(defW);
43499 wndWidth[i] = nafPoints.wnd;
43500 wnd[i] = nafPoints.points;
43501 }
43502
43503 // Comb small window NAFs
43504 for (var i = len - 1; i >= 1; i -= 2) {
43505 var a = i - 1;
43506 var b = i;
43507 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
43508 naf[a] = getNAF(coeffs[a], wndWidth[a]);
43509 naf[b] = getNAF(coeffs[b], wndWidth[b]);
43510 max = Math.max(naf[a].length, max);
43511 max = Math.max(naf[b].length, max);
43512 continue;
43513 }
43514
43515 var comb = [
43516 points[a], /* 1 */
43517 null, /* 3 */
43518 null, /* 5 */
43519 points[b] /* 7 */
43520 ];
43521
43522 // Try to avoid Projective points, if possible
43523 if (points[a].y.cmp(points[b].y) === 0) {
43524 comb[1] = points[a].add(points[b]);
43525 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43526 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
43527 comb[1] = points[a].toJ().mixedAdd(points[b]);
43528 comb[2] = points[a].add(points[b].neg());
43529 } else {
43530 comb[1] = points[a].toJ().mixedAdd(points[b]);
43531 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43532 }
43533
43534 var index = [
43535 -3, /* -1 -1 */
43536 -1, /* -1 0 */
43537 -5, /* -1 1 */
43538 -7, /* 0 -1 */
43539 0, /* 0 0 */
43540 7, /* 0 1 */
43541 5, /* 1 -1 */
43542 1, /* 1 0 */
43543 3 /* 1 1 */
43544 ];
43545
43546 var jsf = getJSF(coeffs[a], coeffs[b]);
43547 max = Math.max(jsf[0].length, max);
43548 naf[a] = new Array(max);
43549 naf[b] = new Array(max);
43550 for (var j = 0; j < max; j++) {
43551 var ja = jsf[0][j] | 0;
43552 var jb = jsf[1][j] | 0;
43553
43554 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
43555 naf[b][j] = 0;
43556 wnd[a] = comb;
43557 }
43558 }
43559
43560 var acc = this.jpoint(null, null, null);
43561 var tmp = this._wnafT4;
43562 for (var i = max; i >= 0; i--) {
43563 var k = 0;
43564
43565 while (i >= 0) {
43566 var zero = true;
43567 for (var j = 0; j < len; j++) {
43568 tmp[j] = naf[j][i] | 0;
43569 if (tmp[j] !== 0)
43570 zero = false;
43571 }
43572 if (!zero)
43573 break;
43574 k++;
43575 i--;
43576 }
43577 if (i >= 0)
43578 k++;
43579 acc = acc.dblp(k);
43580 if (i < 0)
43581 break;
43582
43583 for (var j = 0; j < len; j++) {
43584 var z = tmp[j];
43585 var p;
43586 if (z === 0)
43587 continue;
43588 else if (z > 0)
43589 p = wnd[j][(z - 1) >> 1];
43590 else if (z < 0)
43591 p = wnd[j][(-z - 1) >> 1].neg();
43592
43593 if (p.type === 'affine')
43594 acc = acc.mixedAdd(p);
43595 else
43596 acc = acc.add(p);
43597 }
43598 }
43599 // Zeroify references
43600 for (var i = 0; i < len; i++)
43601 wnd[i] = null;
43602
43603 if (jacobianResult)
43604 return acc;
43605 else
43606 return acc.toP();
43607};
43608
43609function BasePoint(curve, type) {
43610 this.curve = curve;
43611 this.type = type;
43612 this.precomputed = null;
43613}
43614BaseCurve.BasePoint = BasePoint;
43615
43616BasePoint.prototype.eq = function eq(/*other*/) {
43617 throw new Error('Not implemented');
43618};
43619
43620BasePoint.prototype.validate = function validate() {
43621 return this.curve.validate(this);
43622};
43623
43624BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43625 bytes = utils.toArray(bytes, enc);
43626
43627 var len = this.p.byteLength();
43628
43629 // uncompressed, hybrid-odd, hybrid-even
43630 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
43631 bytes.length - 1 === 2 * len) {
43632 if (bytes[0] === 0x06)
43633 assert(bytes[bytes.length - 1] % 2 === 0);
43634 else if (bytes[0] === 0x07)
43635 assert(bytes[bytes.length - 1] % 2 === 1);
43636
43637 var res = this.point(bytes.slice(1, 1 + len),
43638 bytes.slice(1 + len, 1 + 2 * len));
43639
43640 return res;
43641 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
43642 bytes.length - 1 === len) {
43643 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
43644 }
43645 throw new Error('Unknown point format');
43646};
43647
43648BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
43649 return this.encode(enc, true);
43650};
43651
43652BasePoint.prototype._encode = function _encode(compact) {
43653 var len = this.curve.p.byteLength();
43654 var x = this.getX().toArray('be', len);
43655
43656 if (compact)
43657 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
43658
43659 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
43660};
43661
43662BasePoint.prototype.encode = function encode(enc, compact) {
43663 return utils.encode(this._encode(compact), enc);
43664};
43665
43666BasePoint.prototype.precompute = function precompute(power) {
43667 if (this.precomputed)
43668 return this;
43669
43670 var precomputed = {
43671 doubles: null,
43672 naf: null,
43673 beta: null
43674 };
43675 precomputed.naf = this._getNAFPoints(8);
43676 precomputed.doubles = this._getDoubles(4, power);
43677 precomputed.beta = this._getBeta();
43678 this.precomputed = precomputed;
43679
43680 return this;
43681};
43682
43683BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
43684 if (!this.precomputed)
43685 return false;
43686
43687 var doubles = this.precomputed.doubles;
43688 if (!doubles)
43689 return false;
43690
43691 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
43692};
43693
43694BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
43695 if (this.precomputed && this.precomputed.doubles)
43696 return this.precomputed.doubles;
43697
43698 var doubles = [ this ];
43699 var acc = this;
43700 for (var i = 0; i < power; i += step) {
43701 for (var j = 0; j < step; j++)
43702 acc = acc.dbl();
43703 doubles.push(acc);
43704 }
43705 return {
43706 step: step,
43707 points: doubles
43708 };
43709};
43710
43711BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
43712 if (this.precomputed && this.precomputed.naf)
43713 return this.precomputed.naf;
43714
43715 var res = [ this ];
43716 var max = (1 << wnd) - 1;
43717 var dbl = max === 1 ? null : this.dbl();
43718 for (var i = 1; i < max; i++)
43719 res[i] = res[i - 1].add(dbl);
43720 return {
43721 wnd: wnd,
43722 points: res
43723 };
43724};
43725
43726BasePoint.prototype._getBeta = function _getBeta() {
43727 return null;
43728};
43729
43730BasePoint.prototype.dblp = function dblp(k) {
43731 var r = this;
43732 for (var i = 0; i < k; i++)
43733 r = r.dbl();
43734 return r;
43735};
43736
43737},{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
43738'use strict';
43739
43740var curve = require('../curve');
43741var elliptic = require('../../elliptic');
43742var BN = require('bn.js');
43743var inherits = require('inherits');
43744var Base = curve.base;
43745
43746var assert = elliptic.utils.assert;
43747
43748function EdwardsCurve(conf) {
43749 // NOTE: Important as we are creating point in Base.call()
43750 this.twisted = (conf.a | 0) !== 1;
43751 this.mOneA = this.twisted && (conf.a | 0) === -1;
43752 this.extended = this.mOneA;
43753
43754 Base.call(this, 'edwards', conf);
43755
43756 this.a = new BN(conf.a, 16).umod(this.red.m);
43757 this.a = this.a.toRed(this.red);
43758 this.c = new BN(conf.c, 16).toRed(this.red);
43759 this.c2 = this.c.redSqr();
43760 this.d = new BN(conf.d, 16).toRed(this.red);
43761 this.dd = this.d.redAdd(this.d);
43762
43763 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
43764 this.oneC = (conf.c | 0) === 1;
43765}
43766inherits(EdwardsCurve, Base);
43767module.exports = EdwardsCurve;
43768
43769EdwardsCurve.prototype._mulA = function _mulA(num) {
43770 if (this.mOneA)
43771 return num.redNeg();
43772 else
43773 return this.a.redMul(num);
43774};
43775
43776EdwardsCurve.prototype._mulC = function _mulC(num) {
43777 if (this.oneC)
43778 return num;
43779 else
43780 return this.c.redMul(num);
43781};
43782
43783// Just for compatibility with Short curve
43784EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
43785 return this.point(x, y, z, t);
43786};
43787
43788EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
43789 x = new BN(x, 16);
43790 if (!x.red)
43791 x = x.toRed(this.red);
43792
43793 var x2 = x.redSqr();
43794 var rhs = this.c2.redSub(this.a.redMul(x2));
43795 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
43796
43797 var y2 = rhs.redMul(lhs.redInvm());
43798 var y = y2.redSqrt();
43799 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43800 throw new Error('invalid point');
43801
43802 var isOdd = y.fromRed().isOdd();
43803 if (odd && !isOdd || !odd && isOdd)
43804 y = y.redNeg();
43805
43806 return this.point(x, y);
43807};
43808
43809EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
43810 y = new BN(y, 16);
43811 if (!y.red)
43812 y = y.toRed(this.red);
43813
43814 // x^2 = (y^2 - 1) / (d y^2 + 1)
43815 var y2 = y.redSqr();
43816 var lhs = y2.redSub(this.one);
43817 var rhs = y2.redMul(this.d).redAdd(this.one);
43818 var x2 = lhs.redMul(rhs.redInvm());
43819
43820 if (x2.cmp(this.zero) === 0) {
43821 if (odd)
43822 throw new Error('invalid point');
43823 else
43824 return this.point(this.zero, y);
43825 }
43826
43827 var x = x2.redSqrt();
43828 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
43829 throw new Error('invalid point');
43830
43831 if (x.isOdd() !== odd)
43832 x = x.redNeg();
43833
43834 return this.point(x, y);
43835};
43836
43837EdwardsCurve.prototype.validate = function validate(point) {
43838 if (point.isInfinity())
43839 return true;
43840
43841 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
43842 point.normalize();
43843
43844 var x2 = point.x.redSqr();
43845 var y2 = point.y.redSqr();
43846 var lhs = x2.redMul(this.a).redAdd(y2);
43847 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
43848
43849 return lhs.cmp(rhs) === 0;
43850};
43851
43852function Point(curve, x, y, z, t) {
43853 Base.BasePoint.call(this, curve, 'projective');
43854 if (x === null && y === null && z === null) {
43855 this.x = this.curve.zero;
43856 this.y = this.curve.one;
43857 this.z = this.curve.one;
43858 this.t = this.curve.zero;
43859 this.zOne = true;
43860 } else {
43861 this.x = new BN(x, 16);
43862 this.y = new BN(y, 16);
43863 this.z = z ? new BN(z, 16) : this.curve.one;
43864 this.t = t && new BN(t, 16);
43865 if (!this.x.red)
43866 this.x = this.x.toRed(this.curve.red);
43867 if (!this.y.red)
43868 this.y = this.y.toRed(this.curve.red);
43869 if (!this.z.red)
43870 this.z = this.z.toRed(this.curve.red);
43871 if (this.t && !this.t.red)
43872 this.t = this.t.toRed(this.curve.red);
43873 this.zOne = this.z === this.curve.one;
43874
43875 // Use extended coordinates
43876 if (this.curve.extended && !this.t) {
43877 this.t = this.x.redMul(this.y);
43878 if (!this.zOne)
43879 this.t = this.t.redMul(this.z.redInvm());
43880 }
43881 }
43882}
43883inherits(Point, Base.BasePoint);
43884
43885EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
43886 return Point.fromJSON(this, obj);
43887};
43888
43889EdwardsCurve.prototype.point = function point(x, y, z, t) {
43890 return new Point(this, x, y, z, t);
43891};
43892
43893Point.fromJSON = function fromJSON(curve, obj) {
43894 return new Point(curve, obj[0], obj[1], obj[2]);
43895};
43896
43897Point.prototype.inspect = function inspect() {
43898 if (this.isInfinity())
43899 return '<EC Point Infinity>';
43900 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
43901 ' y: ' + this.y.fromRed().toString(16, 2) +
43902 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
43903};
43904
43905Point.prototype.isInfinity = function isInfinity() {
43906 // XXX This code assumes that zero is always zero in red
43907 return this.x.cmpn(0) === 0 &&
43908 this.y.cmp(this.z) === 0;
43909};
43910
43911Point.prototype._extDbl = function _extDbl() {
43912 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
43913 // #doubling-dbl-2008-hwcd
43914 // 4M + 4S
43915
43916 // A = X1^2
43917 var a = this.x.redSqr();
43918 // B = Y1^2
43919 var b = this.y.redSqr();
43920 // C = 2 * Z1^2
43921 var c = this.z.redSqr();
43922 c = c.redIAdd(c);
43923 // D = a * A
43924 var d = this.curve._mulA(a);
43925 // E = (X1 + Y1)^2 - A - B
43926 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
43927 // G = D + B
43928 var g = d.redAdd(b);
43929 // F = G - C
43930 var f = g.redSub(c);
43931 // H = D - B
43932 var h = d.redSub(b);
43933 // X3 = E * F
43934 var nx = e.redMul(f);
43935 // Y3 = G * H
43936 var ny = g.redMul(h);
43937 // T3 = E * H
43938 var nt = e.redMul(h);
43939 // Z3 = F * G
43940 var nz = f.redMul(g);
43941 return this.curve.point(nx, ny, nz, nt);
43942};
43943
43944Point.prototype._projDbl = function _projDbl() {
43945 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
43946 // #doubling-dbl-2008-bbjlp
43947 // #doubling-dbl-2007-bl
43948 // and others
43949 // Generally 3M + 4S or 2M + 4S
43950
43951 // B = (X1 + Y1)^2
43952 var b = this.x.redAdd(this.y).redSqr();
43953 // C = X1^2
43954 var c = this.x.redSqr();
43955 // D = Y1^2
43956 var d = this.y.redSqr();
43957
43958 var nx;
43959 var ny;
43960 var nz;
43961 if (this.curve.twisted) {
43962 // E = a * C
43963 var e = this.curve._mulA(c);
43964 // F = E + D
43965 var f = e.redAdd(d);
43966 if (this.zOne) {
43967 // X3 = (B - C - D) * (F - 2)
43968 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
43969 // Y3 = F * (E - D)
43970 ny = f.redMul(e.redSub(d));
43971 // Z3 = F^2 - 2 * F
43972 nz = f.redSqr().redSub(f).redSub(f);
43973 } else {
43974 // H = Z1^2
43975 var h = this.z.redSqr();
43976 // J = F - 2 * H
43977 var j = f.redSub(h).redISub(h);
43978 // X3 = (B-C-D)*J
43979 nx = b.redSub(c).redISub(d).redMul(j);
43980 // Y3 = F * (E - D)
43981 ny = f.redMul(e.redSub(d));
43982 // Z3 = F * J
43983 nz = f.redMul(j);
43984 }
43985 } else {
43986 // E = C + D
43987 var e = c.redAdd(d);
43988 // H = (c * Z1)^2
43989 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
43990 // J = E - 2 * H
43991 var j = e.redSub(h).redSub(h);
43992 // X3 = c * (B - E) * J
43993 nx = this.curve._mulC(b.redISub(e)).redMul(j);
43994 // Y3 = c * E * (C - D)
43995 ny = this.curve._mulC(e).redMul(c.redISub(d));
43996 // Z3 = E * J
43997 nz = e.redMul(j);
43998 }
43999 return this.curve.point(nx, ny, nz);
44000};
44001
44002Point.prototype.dbl = function dbl() {
44003 if (this.isInfinity())
44004 return this;
44005
44006 // Double in extended coordinates
44007 if (this.curve.extended)
44008 return this._extDbl();
44009 else
44010 return this._projDbl();
44011};
44012
44013Point.prototype._extAdd = function _extAdd(p) {
44014 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44015 // #addition-add-2008-hwcd-3
44016 // 8M
44017
44018 // A = (Y1 - X1) * (Y2 - X2)
44019 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
44020 // B = (Y1 + X1) * (Y2 + X2)
44021 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
44022 // C = T1 * k * T2
44023 var c = this.t.redMul(this.curve.dd).redMul(p.t);
44024 // D = Z1 * 2 * Z2
44025 var d = this.z.redMul(p.z.redAdd(p.z));
44026 // E = B - A
44027 var e = b.redSub(a);
44028 // F = D - C
44029 var f = d.redSub(c);
44030 // G = D + C
44031 var g = d.redAdd(c);
44032 // H = B + A
44033 var h = b.redAdd(a);
44034 // X3 = E * F
44035 var nx = e.redMul(f);
44036 // Y3 = G * H
44037 var ny = g.redMul(h);
44038 // T3 = E * H
44039 var nt = e.redMul(h);
44040 // Z3 = F * G
44041 var nz = f.redMul(g);
44042 return this.curve.point(nx, ny, nz, nt);
44043};
44044
44045Point.prototype._projAdd = function _projAdd(p) {
44046 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44047 // #addition-add-2008-bbjlp
44048 // #addition-add-2007-bl
44049 // 10M + 1S
44050
44051 // A = Z1 * Z2
44052 var a = this.z.redMul(p.z);
44053 // B = A^2
44054 var b = a.redSqr();
44055 // C = X1 * X2
44056 var c = this.x.redMul(p.x);
44057 // D = Y1 * Y2
44058 var d = this.y.redMul(p.y);
44059 // E = d * C * D
44060 var e = this.curve.d.redMul(c).redMul(d);
44061 // F = B - E
44062 var f = b.redSub(e);
44063 // G = B + E
44064 var g = b.redAdd(e);
44065 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
44066 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
44067 var nx = a.redMul(f).redMul(tmp);
44068 var ny;
44069 var nz;
44070 if (this.curve.twisted) {
44071 // Y3 = A * G * (D - a * C)
44072 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
44073 // Z3 = F * G
44074 nz = f.redMul(g);
44075 } else {
44076 // Y3 = A * G * (D - C)
44077 ny = a.redMul(g).redMul(d.redSub(c));
44078 // Z3 = c * F * G
44079 nz = this.curve._mulC(f).redMul(g);
44080 }
44081 return this.curve.point(nx, ny, nz);
44082};
44083
44084Point.prototype.add = function add(p) {
44085 if (this.isInfinity())
44086 return p;
44087 if (p.isInfinity())
44088 return this;
44089
44090 if (this.curve.extended)
44091 return this._extAdd(p);
44092 else
44093 return this._projAdd(p);
44094};
44095
44096Point.prototype.mul = function mul(k) {
44097 if (this._hasDoubles(k))
44098 return this.curve._fixedNafMul(this, k);
44099 else
44100 return this.curve._wnafMul(this, k);
44101};
44102
44103Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
44104 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
44105};
44106
44107Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
44108 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
44109};
44110
44111Point.prototype.normalize = function normalize() {
44112 if (this.zOne)
44113 return this;
44114
44115 // Normalize coordinates
44116 var zi = this.z.redInvm();
44117 this.x = this.x.redMul(zi);
44118 this.y = this.y.redMul(zi);
44119 if (this.t)
44120 this.t = this.t.redMul(zi);
44121 this.z = this.curve.one;
44122 this.zOne = true;
44123 return this;
44124};
44125
44126Point.prototype.neg = function neg() {
44127 return this.curve.point(this.x.redNeg(),
44128 this.y,
44129 this.z,
44130 this.t && this.t.redNeg());
44131};
44132
44133Point.prototype.getX = function getX() {
44134 this.normalize();
44135 return this.x.fromRed();
44136};
44137
44138Point.prototype.getY = function getY() {
44139 this.normalize();
44140 return this.y.fromRed();
44141};
44142
44143Point.prototype.eq = function eq(other) {
44144 return this === other ||
44145 this.getX().cmp(other.getX()) === 0 &&
44146 this.getY().cmp(other.getY()) === 0;
44147};
44148
44149Point.prototype.eqXToP = function eqXToP(x) {
44150 var rx = x.toRed(this.curve.red).redMul(this.z);
44151 if (this.x.cmp(rx) === 0)
44152 return true;
44153
44154 var xc = x.clone();
44155 var t = this.curve.redN.redMul(this.z);
44156 for (;;) {
44157 xc.iadd(this.curve.n);
44158 if (xc.cmp(this.curve.p) >= 0)
44159 return false;
44160
44161 rx.redIAdd(t);
44162 if (this.x.cmp(rx) === 0)
44163 return true;
44164 }
44165 return false;
44166};
44167
44168// Compatibility with BaseCurve
44169Point.prototype.toP = Point.prototype.normalize;
44170Point.prototype.mixedAdd = Point.prototype.add;
44171
44172},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
44173'use strict';
44174
44175var curve = exports;
44176
44177curve.base = require('./base');
44178curve.short = require('./short');
44179curve.mont = require('./mont');
44180curve.edwards = require('./edwards');
44181
44182},{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
44183'use strict';
44184
44185var curve = require('../curve');
44186var BN = require('bn.js');
44187var inherits = require('inherits');
44188var Base = curve.base;
44189
44190var elliptic = require('../../elliptic');
44191var utils = elliptic.utils;
44192
44193function MontCurve(conf) {
44194 Base.call(this, 'mont', conf);
44195
44196 this.a = new BN(conf.a, 16).toRed(this.red);
44197 this.b = new BN(conf.b, 16).toRed(this.red);
44198 this.i4 = new BN(4).toRed(this.red).redInvm();
44199 this.two = new BN(2).toRed(this.red);
44200 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
44201}
44202inherits(MontCurve, Base);
44203module.exports = MontCurve;
44204
44205MontCurve.prototype.validate = function validate(point) {
44206 var x = point.normalize().x;
44207 var x2 = x.redSqr();
44208 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
44209 var y = rhs.redSqrt();
44210
44211 return y.redSqr().cmp(rhs) === 0;
44212};
44213
44214function Point(curve, x, z) {
44215 Base.BasePoint.call(this, curve, 'projective');
44216 if (x === null && z === null) {
44217 this.x = this.curve.one;
44218 this.z = this.curve.zero;
44219 } else {
44220 this.x = new BN(x, 16);
44221 this.z = new BN(z, 16);
44222 if (!this.x.red)
44223 this.x = this.x.toRed(this.curve.red);
44224 if (!this.z.red)
44225 this.z = this.z.toRed(this.curve.red);
44226 }
44227}
44228inherits(Point, Base.BasePoint);
44229
44230MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
44231 return this.point(utils.toArray(bytes, enc), 1);
44232};
44233
44234MontCurve.prototype.point = function point(x, z) {
44235 return new Point(this, x, z);
44236};
44237
44238MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44239 return Point.fromJSON(this, obj);
44240};
44241
44242Point.prototype.precompute = function precompute() {
44243 // No-op
44244};
44245
44246Point.prototype._encode = function _encode() {
44247 return this.getX().toArray('be', this.curve.p.byteLength());
44248};
44249
44250Point.fromJSON = function fromJSON(curve, obj) {
44251 return new Point(curve, obj[0], obj[1] || curve.one);
44252};
44253
44254Point.prototype.inspect = function inspect() {
44255 if (this.isInfinity())
44256 return '<EC Point Infinity>';
44257 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44258 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44259};
44260
44261Point.prototype.isInfinity = function isInfinity() {
44262 // XXX This code assumes that zero is always zero in red
44263 return this.z.cmpn(0) === 0;
44264};
44265
44266Point.prototype.dbl = function dbl() {
44267 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
44268 // 2M + 2S + 4A
44269
44270 // A = X1 + Z1
44271 var a = this.x.redAdd(this.z);
44272 // AA = A^2
44273 var aa = a.redSqr();
44274 // B = X1 - Z1
44275 var b = this.x.redSub(this.z);
44276 // BB = B^2
44277 var bb = b.redSqr();
44278 // C = AA - BB
44279 var c = aa.redSub(bb);
44280 // X3 = AA * BB
44281 var nx = aa.redMul(bb);
44282 // Z3 = C * (BB + A24 * C)
44283 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
44284 return this.curve.point(nx, nz);
44285};
44286
44287Point.prototype.add = function add() {
44288 throw new Error('Not supported on Montgomery curve');
44289};
44290
44291Point.prototype.diffAdd = function diffAdd(p, diff) {
44292 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
44293 // 4M + 2S + 6A
44294
44295 // A = X2 + Z2
44296 var a = this.x.redAdd(this.z);
44297 // B = X2 - Z2
44298 var b = this.x.redSub(this.z);
44299 // C = X3 + Z3
44300 var c = p.x.redAdd(p.z);
44301 // D = X3 - Z3
44302 var d = p.x.redSub(p.z);
44303 // DA = D * A
44304 var da = d.redMul(a);
44305 // CB = C * B
44306 var cb = c.redMul(b);
44307 // X5 = Z1 * (DA + CB)^2
44308 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
44309 // Z5 = X1 * (DA - CB)^2
44310 var nz = diff.x.redMul(da.redISub(cb).redSqr());
44311 return this.curve.point(nx, nz);
44312};
44313
44314Point.prototype.mul = function mul(k) {
44315 var t = k.clone();
44316 var a = this; // (N / 2) * Q + Q
44317 var b = this.curve.point(null, null); // (N / 2) * Q
44318 var c = this; // Q
44319
44320 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
44321 bits.push(t.andln(1));
44322
44323 for (var i = bits.length - 1; i >= 0; i--) {
44324 if (bits[i] === 0) {
44325 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
44326 a = a.diffAdd(b, c);
44327 // N * Q = 2 * ((N / 2) * Q + Q))
44328 b = b.dbl();
44329 } else {
44330 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
44331 b = a.diffAdd(b, c);
44332 // N * Q + Q = 2 * ((N / 2) * Q + Q)
44333 a = a.dbl();
44334 }
44335 }
44336 return b;
44337};
44338
44339Point.prototype.mulAdd = function mulAdd() {
44340 throw new Error('Not supported on Montgomery curve');
44341};
44342
44343Point.prototype.jumlAdd = function jumlAdd() {
44344 throw new Error('Not supported on Montgomery curve');
44345};
44346
44347Point.prototype.eq = function eq(other) {
44348 return this.getX().cmp(other.getX()) === 0;
44349};
44350
44351Point.prototype.normalize = function normalize() {
44352 this.x = this.x.redMul(this.z.redInvm());
44353 this.z = this.curve.one;
44354 return this;
44355};
44356
44357Point.prototype.getX = function getX() {
44358 // Normalize coordinates
44359 this.normalize();
44360
44361 return this.x.fromRed();
44362};
44363
44364},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
44365'use strict';
44366
44367var curve = require('../curve');
44368var elliptic = require('../../elliptic');
44369var BN = require('bn.js');
44370var inherits = require('inherits');
44371var Base = curve.base;
44372
44373var assert = elliptic.utils.assert;
44374
44375function ShortCurve(conf) {
44376 Base.call(this, 'short', conf);
44377
44378 this.a = new BN(conf.a, 16).toRed(this.red);
44379 this.b = new BN(conf.b, 16).toRed(this.red);
44380 this.tinv = this.two.redInvm();
44381
44382 this.zeroA = this.a.fromRed().cmpn(0) === 0;
44383 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
44384
44385 // If the curve is endomorphic, precalculate beta and lambda
44386 this.endo = this._getEndomorphism(conf);
44387 this._endoWnafT1 = new Array(4);
44388 this._endoWnafT2 = new Array(4);
44389}
44390inherits(ShortCurve, Base);
44391module.exports = ShortCurve;
44392
44393ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
44394 // No efficient endomorphism
44395 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
44396 return;
44397
44398 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
44399 var beta;
44400 var lambda;
44401 if (conf.beta) {
44402 beta = new BN(conf.beta, 16).toRed(this.red);
44403 } else {
44404 var betas = this._getEndoRoots(this.p);
44405 // Choose the smallest beta
44406 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
44407 beta = beta.toRed(this.red);
44408 }
44409 if (conf.lambda) {
44410 lambda = new BN(conf.lambda, 16);
44411 } else {
44412 // Choose the lambda that is matching selected beta
44413 var lambdas = this._getEndoRoots(this.n);
44414 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
44415 lambda = lambdas[0];
44416 } else {
44417 lambda = lambdas[1];
44418 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
44419 }
44420 }
44421
44422 // Get basis vectors, used for balanced length-two representation
44423 var basis;
44424 if (conf.basis) {
44425 basis = conf.basis.map(function(vec) {
44426 return {
44427 a: new BN(vec.a, 16),
44428 b: new BN(vec.b, 16)
44429 };
44430 });
44431 } else {
44432 basis = this._getEndoBasis(lambda);
44433 }
44434
44435 return {
44436 beta: beta,
44437 lambda: lambda,
44438 basis: basis
44439 };
44440};
44441
44442ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
44443 // Find roots of for x^2 + x + 1 in F
44444 // Root = (-1 +- Sqrt(-3)) / 2
44445 //
44446 var red = num === this.p ? this.red : BN.mont(num);
44447 var tinv = new BN(2).toRed(red).redInvm();
44448 var ntinv = tinv.redNeg();
44449
44450 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
44451
44452 var l1 = ntinv.redAdd(s).fromRed();
44453 var l2 = ntinv.redSub(s).fromRed();
44454 return [ l1, l2 ];
44455};
44456
44457ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
44458 // aprxSqrt >= sqrt(this.n)
44459 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
44460
44461 // 3.74
44462 // Run EGCD, until r(L + 1) < aprxSqrt
44463 var u = lambda;
44464 var v = this.n.clone();
44465 var x1 = new BN(1);
44466 var y1 = new BN(0);
44467 var x2 = new BN(0);
44468 var y2 = new BN(1);
44469
44470 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
44471 var a0;
44472 var b0;
44473 // First vector
44474 var a1;
44475 var b1;
44476 // Second vector
44477 var a2;
44478 var b2;
44479
44480 var prevR;
44481 var i = 0;
44482 var r;
44483 var x;
44484 while (u.cmpn(0) !== 0) {
44485 var q = v.div(u);
44486 r = v.sub(q.mul(u));
44487 x = x2.sub(q.mul(x1));
44488 var y = y2.sub(q.mul(y1));
44489
44490 if (!a1 && r.cmp(aprxSqrt) < 0) {
44491 a0 = prevR.neg();
44492 b0 = x1;
44493 a1 = r.neg();
44494 b1 = x;
44495 } else if (a1 && ++i === 2) {
44496 break;
44497 }
44498 prevR = r;
44499
44500 v = u;
44501 u = r;
44502 x2 = x1;
44503 x1 = x;
44504 y2 = y1;
44505 y1 = y;
44506 }
44507 a2 = r.neg();
44508 b2 = x;
44509
44510 var len1 = a1.sqr().add(b1.sqr());
44511 var len2 = a2.sqr().add(b2.sqr());
44512 if (len2.cmp(len1) >= 0) {
44513 a2 = a0;
44514 b2 = b0;
44515 }
44516
44517 // Normalize signs
44518 if (a1.negative) {
44519 a1 = a1.neg();
44520 b1 = b1.neg();
44521 }
44522 if (a2.negative) {
44523 a2 = a2.neg();
44524 b2 = b2.neg();
44525 }
44526
44527 return [
44528 { a: a1, b: b1 },
44529 { a: a2, b: b2 }
44530 ];
44531};
44532
44533ShortCurve.prototype._endoSplit = function _endoSplit(k) {
44534 var basis = this.endo.basis;
44535 var v1 = basis[0];
44536 var v2 = basis[1];
44537
44538 var c1 = v2.b.mul(k).divRound(this.n);
44539 var c2 = v1.b.neg().mul(k).divRound(this.n);
44540
44541 var p1 = c1.mul(v1.a);
44542 var p2 = c2.mul(v2.a);
44543 var q1 = c1.mul(v1.b);
44544 var q2 = c2.mul(v2.b);
44545
44546 // Calculate answer
44547 var k1 = k.sub(p1).sub(p2);
44548 var k2 = q1.add(q2).neg();
44549 return { k1: k1, k2: k2 };
44550};
44551
44552ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
44553 x = new BN(x, 16);
44554 if (!x.red)
44555 x = x.toRed(this.red);
44556
44557 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
44558 var y = y2.redSqrt();
44559 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
44560 throw new Error('invalid point');
44561
44562 // XXX Is there any way to tell if the number is odd without converting it
44563 // to non-red form?
44564 var isOdd = y.fromRed().isOdd();
44565 if (odd && !isOdd || !odd && isOdd)
44566 y = y.redNeg();
44567
44568 return this.point(x, y);
44569};
44570
44571ShortCurve.prototype.validate = function validate(point) {
44572 if (point.inf)
44573 return true;
44574
44575 var x = point.x;
44576 var y = point.y;
44577
44578 var ax = this.a.redMul(x);
44579 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
44580 return y.redSqr().redISub(rhs).cmpn(0) === 0;
44581};
44582
44583ShortCurve.prototype._endoWnafMulAdd =
44584 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
44585 var npoints = this._endoWnafT1;
44586 var ncoeffs = this._endoWnafT2;
44587 for (var i = 0; i < points.length; i++) {
44588 var split = this._endoSplit(coeffs[i]);
44589 var p = points[i];
44590 var beta = p._getBeta();
44591
44592 if (split.k1.negative) {
44593 split.k1.ineg();
44594 p = p.neg(true);
44595 }
44596 if (split.k2.negative) {
44597 split.k2.ineg();
44598 beta = beta.neg(true);
44599 }
44600
44601 npoints[i * 2] = p;
44602 npoints[i * 2 + 1] = beta;
44603 ncoeffs[i * 2] = split.k1;
44604 ncoeffs[i * 2 + 1] = split.k2;
44605 }
44606 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
44607
44608 // Clean-up references to points and coefficients
44609 for (var j = 0; j < i * 2; j++) {
44610 npoints[j] = null;
44611 ncoeffs[j] = null;
44612 }
44613 return res;
44614};
44615
44616function Point(curve, x, y, isRed) {
44617 Base.BasePoint.call(this, curve, 'affine');
44618 if (x === null && y === null) {
44619 this.x = null;
44620 this.y = null;
44621 this.inf = true;
44622 } else {
44623 this.x = new BN(x, 16);
44624 this.y = new BN(y, 16);
44625 // Force redgomery representation when loading from JSON
44626 if (isRed) {
44627 this.x.forceRed(this.curve.red);
44628 this.y.forceRed(this.curve.red);
44629 }
44630 if (!this.x.red)
44631 this.x = this.x.toRed(this.curve.red);
44632 if (!this.y.red)
44633 this.y = this.y.toRed(this.curve.red);
44634 this.inf = false;
44635 }
44636}
44637inherits(Point, Base.BasePoint);
44638
44639ShortCurve.prototype.point = function point(x, y, isRed) {
44640 return new Point(this, x, y, isRed);
44641};
44642
44643ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
44644 return Point.fromJSON(this, obj, red);
44645};
44646
44647Point.prototype._getBeta = function _getBeta() {
44648 if (!this.curve.endo)
44649 return;
44650
44651 var pre = this.precomputed;
44652 if (pre && pre.beta)
44653 return pre.beta;
44654
44655 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
44656 if (pre) {
44657 var curve = this.curve;
44658 var endoMul = function(p) {
44659 return curve.point(p.x.redMul(curve.endo.beta), p.y);
44660 };
44661 pre.beta = beta;
44662 beta.precomputed = {
44663 beta: null,
44664 naf: pre.naf && {
44665 wnd: pre.naf.wnd,
44666 points: pre.naf.points.map(endoMul)
44667 },
44668 doubles: pre.doubles && {
44669 step: pre.doubles.step,
44670 points: pre.doubles.points.map(endoMul)
44671 }
44672 };
44673 }
44674 return beta;
44675};
44676
44677Point.prototype.toJSON = function toJSON() {
44678 if (!this.precomputed)
44679 return [ this.x, this.y ];
44680
44681 return [ this.x, this.y, this.precomputed && {
44682 doubles: this.precomputed.doubles && {
44683 step: this.precomputed.doubles.step,
44684 points: this.precomputed.doubles.points.slice(1)
44685 },
44686 naf: this.precomputed.naf && {
44687 wnd: this.precomputed.naf.wnd,
44688 points: this.precomputed.naf.points.slice(1)
44689 }
44690 } ];
44691};
44692
44693Point.fromJSON = function fromJSON(curve, obj, red) {
44694 if (typeof obj === 'string')
44695 obj = JSON.parse(obj);
44696 var res = curve.point(obj[0], obj[1], red);
44697 if (!obj[2])
44698 return res;
44699
44700 function obj2point(obj) {
44701 return curve.point(obj[0], obj[1], red);
44702 }
44703
44704 var pre = obj[2];
44705 res.precomputed = {
44706 beta: null,
44707 doubles: pre.doubles && {
44708 step: pre.doubles.step,
44709 points: [ res ].concat(pre.doubles.points.map(obj2point))
44710 },
44711 naf: pre.naf && {
44712 wnd: pre.naf.wnd,
44713 points: [ res ].concat(pre.naf.points.map(obj2point))
44714 }
44715 };
44716 return res;
44717};
44718
44719Point.prototype.inspect = function inspect() {
44720 if (this.isInfinity())
44721 return '<EC Point Infinity>';
44722 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44723 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
44724};
44725
44726Point.prototype.isInfinity = function isInfinity() {
44727 return this.inf;
44728};
44729
44730Point.prototype.add = function add(p) {
44731 // O + P = P
44732 if (this.inf)
44733 return p;
44734
44735 // P + O = P
44736 if (p.inf)
44737 return this;
44738
44739 // P + P = 2P
44740 if (this.eq(p))
44741 return this.dbl();
44742
44743 // P + (-P) = O
44744 if (this.neg().eq(p))
44745 return this.curve.point(null, null);
44746
44747 // P + Q = O
44748 if (this.x.cmp(p.x) === 0)
44749 return this.curve.point(null, null);
44750
44751 var c = this.y.redSub(p.y);
44752 if (c.cmpn(0) !== 0)
44753 c = c.redMul(this.x.redSub(p.x).redInvm());
44754 var nx = c.redSqr().redISub(this.x).redISub(p.x);
44755 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44756 return this.curve.point(nx, ny);
44757};
44758
44759Point.prototype.dbl = function dbl() {
44760 if (this.inf)
44761 return this;
44762
44763 // 2P = O
44764 var ys1 = this.y.redAdd(this.y);
44765 if (ys1.cmpn(0) === 0)
44766 return this.curve.point(null, null);
44767
44768 var a = this.curve.a;
44769
44770 var x2 = this.x.redSqr();
44771 var dyinv = ys1.redInvm();
44772 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
44773
44774 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
44775 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44776 return this.curve.point(nx, ny);
44777};
44778
44779Point.prototype.getX = function getX() {
44780 return this.x.fromRed();
44781};
44782
44783Point.prototype.getY = function getY() {
44784 return this.y.fromRed();
44785};
44786
44787Point.prototype.mul = function mul(k) {
44788 k = new BN(k, 16);
44789
44790 if (this._hasDoubles(k))
44791 return this.curve._fixedNafMul(this, k);
44792 else if (this.curve.endo)
44793 return this.curve._endoWnafMulAdd([ this ], [ k ]);
44794 else
44795 return this.curve._wnafMul(this, k);
44796};
44797
44798Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
44799 var points = [ this, p2 ];
44800 var coeffs = [ k1, k2 ];
44801 if (this.curve.endo)
44802 return this.curve._endoWnafMulAdd(points, coeffs);
44803 else
44804 return this.curve._wnafMulAdd(1, points, coeffs, 2);
44805};
44806
44807Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
44808 var points = [ this, p2 ];
44809 var coeffs = [ k1, k2 ];
44810 if (this.curve.endo)
44811 return this.curve._endoWnafMulAdd(points, coeffs, true);
44812 else
44813 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
44814};
44815
44816Point.prototype.eq = function eq(p) {
44817 return this === p ||
44818 this.inf === p.inf &&
44819 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
44820};
44821
44822Point.prototype.neg = function neg(_precompute) {
44823 if (this.inf)
44824 return this;
44825
44826 var res = this.curve.point(this.x, this.y.redNeg());
44827 if (_precompute && this.precomputed) {
44828 var pre = this.precomputed;
44829 var negate = function(p) {
44830 return p.neg();
44831 };
44832 res.precomputed = {
44833 naf: pre.naf && {
44834 wnd: pre.naf.wnd,
44835 points: pre.naf.points.map(negate)
44836 },
44837 doubles: pre.doubles && {
44838 step: pre.doubles.step,
44839 points: pre.doubles.points.map(negate)
44840 }
44841 };
44842 }
44843 return res;
44844};
44845
44846Point.prototype.toJ = function toJ() {
44847 if (this.inf)
44848 return this.curve.jpoint(null, null, null);
44849
44850 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
44851 return res;
44852};
44853
44854function JPoint(curve, x, y, z) {
44855 Base.BasePoint.call(this, curve, 'jacobian');
44856 if (x === null && y === null && z === null) {
44857 this.x = this.curve.one;
44858 this.y = this.curve.one;
44859 this.z = new BN(0);
44860 } else {
44861 this.x = new BN(x, 16);
44862 this.y = new BN(y, 16);
44863 this.z = new BN(z, 16);
44864 }
44865 if (!this.x.red)
44866 this.x = this.x.toRed(this.curve.red);
44867 if (!this.y.red)
44868 this.y = this.y.toRed(this.curve.red);
44869 if (!this.z.red)
44870 this.z = this.z.toRed(this.curve.red);
44871
44872 this.zOne = this.z === this.curve.one;
44873}
44874inherits(JPoint, Base.BasePoint);
44875
44876ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
44877 return new JPoint(this, x, y, z);
44878};
44879
44880JPoint.prototype.toP = function toP() {
44881 if (this.isInfinity())
44882 return this.curve.point(null, null);
44883
44884 var zinv = this.z.redInvm();
44885 var zinv2 = zinv.redSqr();
44886 var ax = this.x.redMul(zinv2);
44887 var ay = this.y.redMul(zinv2).redMul(zinv);
44888
44889 return this.curve.point(ax, ay);
44890};
44891
44892JPoint.prototype.neg = function neg() {
44893 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
44894};
44895
44896JPoint.prototype.add = function add(p) {
44897 // O + P = P
44898 if (this.isInfinity())
44899 return p;
44900
44901 // P + O = P
44902 if (p.isInfinity())
44903 return this;
44904
44905 // 12M + 4S + 7A
44906 var pz2 = p.z.redSqr();
44907 var z2 = this.z.redSqr();
44908 var u1 = this.x.redMul(pz2);
44909 var u2 = p.x.redMul(z2);
44910 var s1 = this.y.redMul(pz2.redMul(p.z));
44911 var s2 = p.y.redMul(z2.redMul(this.z));
44912
44913 var h = u1.redSub(u2);
44914 var r = s1.redSub(s2);
44915 if (h.cmpn(0) === 0) {
44916 if (r.cmpn(0) !== 0)
44917 return this.curve.jpoint(null, null, null);
44918 else
44919 return this.dbl();
44920 }
44921
44922 var h2 = h.redSqr();
44923 var h3 = h2.redMul(h);
44924 var v = u1.redMul(h2);
44925
44926 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
44927 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
44928 var nz = this.z.redMul(p.z).redMul(h);
44929
44930 return this.curve.jpoint(nx, ny, nz);
44931};
44932
44933JPoint.prototype.mixedAdd = function mixedAdd(p) {
44934 // O + P = P
44935 if (this.isInfinity())
44936 return p.toJ();
44937
44938 // P + O = P
44939 if (p.isInfinity())
44940 return this;
44941
44942 // 8M + 3S + 7A
44943 var z2 = this.z.redSqr();
44944 var u1 = this.x;
44945 var u2 = p.x.redMul(z2);
44946 var s1 = this.y;
44947 var s2 = p.y.redMul(z2).redMul(this.z);
44948
44949 var h = u1.redSub(u2);
44950 var r = s1.redSub(s2);
44951 if (h.cmpn(0) === 0) {
44952 if (r.cmpn(0) !== 0)
44953 return this.curve.jpoint(null, null, null);
44954 else
44955 return this.dbl();
44956 }
44957
44958 var h2 = h.redSqr();
44959 var h3 = h2.redMul(h);
44960 var v = u1.redMul(h2);
44961
44962 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
44963 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
44964 var nz = this.z.redMul(h);
44965
44966 return this.curve.jpoint(nx, ny, nz);
44967};
44968
44969JPoint.prototype.dblp = function dblp(pow) {
44970 if (pow === 0)
44971 return this;
44972 if (this.isInfinity())
44973 return this;
44974 if (!pow)
44975 return this.dbl();
44976
44977 if (this.curve.zeroA || this.curve.threeA) {
44978 var r = this;
44979 for (var i = 0; i < pow; i++)
44980 r = r.dbl();
44981 return r;
44982 }
44983
44984 // 1M + 2S + 1A + N * (4S + 5M + 8A)
44985 // N = 1 => 6M + 6S + 9A
44986 var a = this.curve.a;
44987 var tinv = this.curve.tinv;
44988
44989 var jx = this.x;
44990 var jy = this.y;
44991 var jz = this.z;
44992 var jz4 = jz.redSqr().redSqr();
44993
44994 // Reuse results
44995 var jyd = jy.redAdd(jy);
44996 for (var i = 0; i < pow; i++) {
44997 var jx2 = jx.redSqr();
44998 var jyd2 = jyd.redSqr();
44999 var jyd4 = jyd2.redSqr();
45000 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45001
45002 var t1 = jx.redMul(jyd2);
45003 var nx = c.redSqr().redISub(t1.redAdd(t1));
45004 var t2 = t1.redISub(nx);
45005 var dny = c.redMul(t2);
45006 dny = dny.redIAdd(dny).redISub(jyd4);
45007 var nz = jyd.redMul(jz);
45008 if (i + 1 < pow)
45009 jz4 = jz4.redMul(jyd4);
45010
45011 jx = nx;
45012 jz = nz;
45013 jyd = dny;
45014 }
45015
45016 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
45017};
45018
45019JPoint.prototype.dbl = function dbl() {
45020 if (this.isInfinity())
45021 return this;
45022
45023 if (this.curve.zeroA)
45024 return this._zeroDbl();
45025 else if (this.curve.threeA)
45026 return this._threeDbl();
45027 else
45028 return this._dbl();
45029};
45030
45031JPoint.prototype._zeroDbl = function _zeroDbl() {
45032 var nx;
45033 var ny;
45034 var nz;
45035 // Z = 1
45036 if (this.zOne) {
45037 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45038 // #doubling-mdbl-2007-bl
45039 // 1M + 5S + 14A
45040
45041 // XX = X1^2
45042 var xx = this.x.redSqr();
45043 // YY = Y1^2
45044 var yy = this.y.redSqr();
45045 // YYYY = YY^2
45046 var yyyy = yy.redSqr();
45047 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45048 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45049 s = s.redIAdd(s);
45050 // M = 3 * XX + a; a = 0
45051 var m = xx.redAdd(xx).redIAdd(xx);
45052 // T = M ^ 2 - 2*S
45053 var t = m.redSqr().redISub(s).redISub(s);
45054
45055 // 8 * YYYY
45056 var yyyy8 = yyyy.redIAdd(yyyy);
45057 yyyy8 = yyyy8.redIAdd(yyyy8);
45058 yyyy8 = yyyy8.redIAdd(yyyy8);
45059
45060 // X3 = T
45061 nx = t;
45062 // Y3 = M * (S - T) - 8 * YYYY
45063 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45064 // Z3 = 2*Y1
45065 nz = this.y.redAdd(this.y);
45066 } else {
45067 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45068 // #doubling-dbl-2009-l
45069 // 2M + 5S + 13A
45070
45071 // A = X1^2
45072 var a = this.x.redSqr();
45073 // B = Y1^2
45074 var b = this.y.redSqr();
45075 // C = B^2
45076 var c = b.redSqr();
45077 // D = 2 * ((X1 + B)^2 - A - C)
45078 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
45079 d = d.redIAdd(d);
45080 // E = 3 * A
45081 var e = a.redAdd(a).redIAdd(a);
45082 // F = E^2
45083 var f = e.redSqr();
45084
45085 // 8 * C
45086 var c8 = c.redIAdd(c);
45087 c8 = c8.redIAdd(c8);
45088 c8 = c8.redIAdd(c8);
45089
45090 // X3 = F - 2 * D
45091 nx = f.redISub(d).redISub(d);
45092 // Y3 = E * (D - X3) - 8 * C
45093 ny = e.redMul(d.redISub(nx)).redISub(c8);
45094 // Z3 = 2 * Y1 * Z1
45095 nz = this.y.redMul(this.z);
45096 nz = nz.redIAdd(nz);
45097 }
45098
45099 return this.curve.jpoint(nx, ny, nz);
45100};
45101
45102JPoint.prototype._threeDbl = function _threeDbl() {
45103 var nx;
45104 var ny;
45105 var nz;
45106 // Z = 1
45107 if (this.zOne) {
45108 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
45109 // #doubling-mdbl-2007-bl
45110 // 1M + 5S + 15A
45111
45112 // XX = X1^2
45113 var xx = this.x.redSqr();
45114 // YY = Y1^2
45115 var yy = this.y.redSqr();
45116 // YYYY = YY^2
45117 var yyyy = yy.redSqr();
45118 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45119 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45120 s = s.redIAdd(s);
45121 // M = 3 * XX + a
45122 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
45123 // T = M^2 - 2 * S
45124 var t = m.redSqr().redISub(s).redISub(s);
45125 // X3 = T
45126 nx = t;
45127 // Y3 = M * (S - T) - 8 * YYYY
45128 var yyyy8 = yyyy.redIAdd(yyyy);
45129 yyyy8 = yyyy8.redIAdd(yyyy8);
45130 yyyy8 = yyyy8.redIAdd(yyyy8);
45131 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45132 // Z3 = 2 * Y1
45133 nz = this.y.redAdd(this.y);
45134 } else {
45135 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
45136 // 3M + 5S
45137
45138 // delta = Z1^2
45139 var delta = this.z.redSqr();
45140 // gamma = Y1^2
45141 var gamma = this.y.redSqr();
45142 // beta = X1 * gamma
45143 var beta = this.x.redMul(gamma);
45144 // alpha = 3 * (X1 - delta) * (X1 + delta)
45145 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
45146 alpha = alpha.redAdd(alpha).redIAdd(alpha);
45147 // X3 = alpha^2 - 8 * beta
45148 var beta4 = beta.redIAdd(beta);
45149 beta4 = beta4.redIAdd(beta4);
45150 var beta8 = beta4.redAdd(beta4);
45151 nx = alpha.redSqr().redISub(beta8);
45152 // Z3 = (Y1 + Z1)^2 - gamma - delta
45153 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
45154 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
45155 var ggamma8 = gamma.redSqr();
45156 ggamma8 = ggamma8.redIAdd(ggamma8);
45157 ggamma8 = ggamma8.redIAdd(ggamma8);
45158 ggamma8 = ggamma8.redIAdd(ggamma8);
45159 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
45160 }
45161
45162 return this.curve.jpoint(nx, ny, nz);
45163};
45164
45165JPoint.prototype._dbl = function _dbl() {
45166 var a = this.curve.a;
45167
45168 // 4M + 6S + 10A
45169 var jx = this.x;
45170 var jy = this.y;
45171 var jz = this.z;
45172 var jz4 = jz.redSqr().redSqr();
45173
45174 var jx2 = jx.redSqr();
45175 var jy2 = jy.redSqr();
45176
45177 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45178
45179 var jxd4 = jx.redAdd(jx);
45180 jxd4 = jxd4.redIAdd(jxd4);
45181 var t1 = jxd4.redMul(jy2);
45182 var nx = c.redSqr().redISub(t1.redAdd(t1));
45183 var t2 = t1.redISub(nx);
45184
45185 var jyd8 = jy2.redSqr();
45186 jyd8 = jyd8.redIAdd(jyd8);
45187 jyd8 = jyd8.redIAdd(jyd8);
45188 jyd8 = jyd8.redIAdd(jyd8);
45189 var ny = c.redMul(t2).redISub(jyd8);
45190 var nz = jy.redAdd(jy).redMul(jz);
45191
45192 return this.curve.jpoint(nx, ny, nz);
45193};
45194
45195JPoint.prototype.trpl = function trpl() {
45196 if (!this.curve.zeroA)
45197 return this.dbl().add(this);
45198
45199 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
45200 // 5M + 10S + ...
45201
45202 // XX = X1^2
45203 var xx = this.x.redSqr();
45204 // YY = Y1^2
45205 var yy = this.y.redSqr();
45206 // ZZ = Z1^2
45207 var zz = this.z.redSqr();
45208 // YYYY = YY^2
45209 var yyyy = yy.redSqr();
45210 // M = 3 * XX + a * ZZ2; a = 0
45211 var m = xx.redAdd(xx).redIAdd(xx);
45212 // MM = M^2
45213 var mm = m.redSqr();
45214 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
45215 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45216 e = e.redIAdd(e);
45217 e = e.redAdd(e).redIAdd(e);
45218 e = e.redISub(mm);
45219 // EE = E^2
45220 var ee = e.redSqr();
45221 // T = 16*YYYY
45222 var t = yyyy.redIAdd(yyyy);
45223 t = t.redIAdd(t);
45224 t = t.redIAdd(t);
45225 t = t.redIAdd(t);
45226 // U = (M + E)^2 - MM - EE - T
45227 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
45228 // X3 = 4 * (X1 * EE - 4 * YY * U)
45229 var yyu4 = yy.redMul(u);
45230 yyu4 = yyu4.redIAdd(yyu4);
45231 yyu4 = yyu4.redIAdd(yyu4);
45232 var nx = this.x.redMul(ee).redISub(yyu4);
45233 nx = nx.redIAdd(nx);
45234 nx = nx.redIAdd(nx);
45235 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
45236 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
45237 ny = ny.redIAdd(ny);
45238 ny = ny.redIAdd(ny);
45239 ny = ny.redIAdd(ny);
45240 // Z3 = (Z1 + E)^2 - ZZ - EE
45241 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
45242
45243 return this.curve.jpoint(nx, ny, nz);
45244};
45245
45246JPoint.prototype.mul = function mul(k, kbase) {
45247 k = new BN(k, kbase);
45248
45249 return this.curve._wnafMul(this, k);
45250};
45251
45252JPoint.prototype.eq = function eq(p) {
45253 if (p.type === 'affine')
45254 return this.eq(p.toJ());
45255
45256 if (this === p)
45257 return true;
45258
45259 // x1 * z2^2 == x2 * z1^2
45260 var z2 = this.z.redSqr();
45261 var pz2 = p.z.redSqr();
45262 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
45263 return false;
45264
45265 // y1 * z2^3 == y2 * z1^3
45266 var z3 = z2.redMul(this.z);
45267 var pz3 = pz2.redMul(p.z);
45268 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
45269};
45270
45271JPoint.prototype.eqXToP = function eqXToP(x) {
45272 var zs = this.z.redSqr();
45273 var rx = x.toRed(this.curve.red).redMul(zs);
45274 if (this.x.cmp(rx) === 0)
45275 return true;
45276
45277 var xc = x.clone();
45278 var t = this.curve.redN.redMul(zs);
45279 for (;;) {
45280 xc.iadd(this.curve.n);
45281 if (xc.cmp(this.curve.p) >= 0)
45282 return false;
45283
45284 rx.redIAdd(t);
45285 if (this.x.cmp(rx) === 0)
45286 return true;
45287 }
45288 return false;
45289};
45290
45291JPoint.prototype.inspect = function inspect() {
45292 if (this.isInfinity())
45293 return '<EC JPoint Infinity>';
45294 return '<EC JPoint x: ' + this.x.toString(16, 2) +
45295 ' y: ' + this.y.toString(16, 2) +
45296 ' z: ' + this.z.toString(16, 2) + '>';
45297};
45298
45299JPoint.prototype.isInfinity = function isInfinity() {
45300 // XXX This code assumes that zero is always zero in red
45301 return this.z.cmpn(0) === 0;
45302};
45303
45304},{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
45305'use strict';
45306
45307var curves = exports;
45308
45309var hash = require('hash.js');
45310var elliptic = require('../elliptic');
45311
45312var assert = elliptic.utils.assert;
45313
45314function PresetCurve(options) {
45315 if (options.type === 'short')
45316 this.curve = new elliptic.curve.short(options);
45317 else if (options.type === 'edwards')
45318 this.curve = new elliptic.curve.edwards(options);
45319 else
45320 this.curve = new elliptic.curve.mont(options);
45321 this.g = this.curve.g;
45322 this.n = this.curve.n;
45323 this.hash = options.hash;
45324
45325 assert(this.g.validate(), 'Invalid curve');
45326 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
45327}
45328curves.PresetCurve = PresetCurve;
45329
45330function defineCurve(name, options) {
45331 Object.defineProperty(curves, name, {
45332 configurable: true,
45333 enumerable: true,
45334 get: function() {
45335 var curve = new PresetCurve(options);
45336 Object.defineProperty(curves, name, {
45337 configurable: true,
45338 enumerable: true,
45339 value: curve
45340 });
45341 return curve;
45342 }
45343 });
45344}
45345
45346defineCurve('p192', {
45347 type: 'short',
45348 prime: 'p192',
45349 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
45350 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
45351 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
45352 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
45353 hash: hash.sha256,
45354 gRed: false,
45355 g: [
45356 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
45357 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
45358 ]
45359});
45360
45361defineCurve('p224', {
45362 type: 'short',
45363 prime: 'p224',
45364 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
45365 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
45366 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
45367 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
45368 hash: hash.sha256,
45369 gRed: false,
45370 g: [
45371 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
45372 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
45373 ]
45374});
45375
45376defineCurve('p256', {
45377 type: 'short',
45378 prime: null,
45379 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
45380 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
45381 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
45382 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
45383 hash: hash.sha256,
45384 gRed: false,
45385 g: [
45386 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
45387 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
45388 ]
45389});
45390
45391defineCurve('p384', {
45392 type: 'short',
45393 prime: null,
45394 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45395 'fffffffe ffffffff 00000000 00000000 ffffffff',
45396 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45397 'fffffffe ffffffff 00000000 00000000 fffffffc',
45398 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
45399 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
45400 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
45401 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
45402 hash: hash.sha384,
45403 gRed: false,
45404 g: [
45405 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
45406 '5502f25d bf55296c 3a545e38 72760ab7',
45407 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
45408 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
45409 ]
45410});
45411
45412defineCurve('p521', {
45413 type: 'short',
45414 prime: null,
45415 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45416 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45417 'ffffffff ffffffff ffffffff ffffffff ffffffff',
45418 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45419 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45420 'ffffffff ffffffff ffffffff ffffffff fffffffc',
45421 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
45422 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
45423 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
45424 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45425 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
45426 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
45427 hash: hash.sha512,
45428 gRed: false,
45429 g: [
45430 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
45431 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
45432 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
45433 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
45434 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
45435 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
45436 ]
45437});
45438
45439defineCurve('curve25519', {
45440 type: 'mont',
45441 prime: 'p25519',
45442 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45443 a: '76d06',
45444 b: '1',
45445 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45446 hash: hash.sha256,
45447 gRed: false,
45448 g: [
45449 '9'
45450 ]
45451});
45452
45453defineCurve('ed25519', {
45454 type: 'edwards',
45455 prime: 'p25519',
45456 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45457 a: '-1',
45458 c: '1',
45459 // -121665 * (121666^(-1)) (mod P)
45460 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
45461 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45462 hash: hash.sha256,
45463 gRed: false,
45464 g: [
45465 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
45466
45467 // 4/5
45468 '6666666666666666666666666666666666666666666666666666666666666658'
45469 ]
45470});
45471
45472var pre;
45473try {
45474 pre = require('./precomputed/secp256k1');
45475} catch (e) {
45476 pre = undefined;
45477}
45478
45479defineCurve('secp256k1', {
45480 type: 'short',
45481 prime: 'k256',
45482 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
45483 a: '0',
45484 b: '7',
45485 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
45486 h: '1',
45487 hash: hash.sha256,
45488
45489 // Precomputed endomorphism
45490 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
45491 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
45492 basis: [
45493 {
45494 a: '3086d221a7d46bcde86c90e49284eb15',
45495 b: '-e4437ed6010e88286f547fa90abfe4c3'
45496 },
45497 {
45498 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
45499 b: '3086d221a7d46bcde86c90e49284eb15'
45500 }
45501 ],
45502
45503 gRed: false,
45504 g: [
45505 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
45506 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
45507 pre
45508 ]
45509});
45510
45511},{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
45512'use strict';
45513
45514var BN = require('bn.js');
45515var HmacDRBG = require('hmac-drbg');
45516var elliptic = require('../../elliptic');
45517var utils = elliptic.utils;
45518var assert = utils.assert;
45519
45520var KeyPair = require('./key');
45521var Signature = require('./signature');
45522
45523function EC(options) {
45524 if (!(this instanceof EC))
45525 return new EC(options);
45526
45527 // Shortcut `elliptic.ec(curve-name)`
45528 if (typeof options === 'string') {
45529 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
45530
45531 options = elliptic.curves[options];
45532 }
45533
45534 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
45535 if (options instanceof elliptic.curves.PresetCurve)
45536 options = { curve: options };
45537
45538 this.curve = options.curve.curve;
45539 this.n = this.curve.n;
45540 this.nh = this.n.ushrn(1);
45541 this.g = this.curve.g;
45542
45543 // Point on curve
45544 this.g = options.curve.g;
45545 this.g.precompute(options.curve.n.bitLength() + 1);
45546
45547 // Hash for function for DRBG
45548 this.hash = options.hash || options.curve.hash;
45549}
45550module.exports = EC;
45551
45552EC.prototype.keyPair = function keyPair(options) {
45553 return new KeyPair(this, options);
45554};
45555
45556EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
45557 return KeyPair.fromPrivate(this, priv, enc);
45558};
45559
45560EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
45561 return KeyPair.fromPublic(this, pub, enc);
45562};
45563
45564EC.prototype.genKeyPair = function genKeyPair(options) {
45565 if (!options)
45566 options = {};
45567
45568 // Instantiate Hmac_DRBG
45569 var drbg = new HmacDRBG({
45570 hash: this.hash,
45571 pers: options.pers,
45572 persEnc: options.persEnc || 'utf8',
45573 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
45574 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
45575 nonce: this.n.toArray()
45576 });
45577
45578 var bytes = this.n.byteLength();
45579 var ns2 = this.n.sub(new BN(2));
45580 do {
45581 var priv = new BN(drbg.generate(bytes));
45582 if (priv.cmp(ns2) > 0)
45583 continue;
45584
45585 priv.iaddn(1);
45586 return this.keyFromPrivate(priv);
45587 } while (true);
45588};
45589
45590EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
45591 var delta = msg.byteLength() * 8 - this.n.bitLength();
45592 if (delta > 0)
45593 msg = msg.ushrn(delta);
45594 if (!truncOnly && msg.cmp(this.n) >= 0)
45595 return msg.sub(this.n);
45596 else
45597 return msg;
45598};
45599
45600EC.prototype.sign = function sign(msg, key, enc, options) {
45601 if (typeof enc === 'object') {
45602 options = enc;
45603 enc = null;
45604 }
45605 if (!options)
45606 options = {};
45607
45608 key = this.keyFromPrivate(key, enc);
45609 msg = this._truncateToN(new BN(msg, 16));
45610
45611 // Zero-extend key to provide enough entropy
45612 var bytes = this.n.byteLength();
45613 var bkey = key.getPrivate().toArray('be', bytes);
45614
45615 // Zero-extend nonce to have the same byte size as N
45616 var nonce = msg.toArray('be', bytes);
45617
45618 // Instantiate Hmac_DRBG
45619 var drbg = new HmacDRBG({
45620 hash: this.hash,
45621 entropy: bkey,
45622 nonce: nonce,
45623 pers: options.pers,
45624 persEnc: options.persEnc || 'utf8'
45625 });
45626
45627 // Number of bytes to generate
45628 var ns1 = this.n.sub(new BN(1));
45629
45630 for (var iter = 0; true; iter++) {
45631 var k = options.k ?
45632 options.k(iter) :
45633 new BN(drbg.generate(this.n.byteLength()));
45634 k = this._truncateToN(k, true);
45635 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
45636 continue;
45637
45638 var kp = this.g.mul(k);
45639 if (kp.isInfinity())
45640 continue;
45641
45642 var kpX = kp.getX();
45643 var r = kpX.umod(this.n);
45644 if (r.cmpn(0) === 0)
45645 continue;
45646
45647 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
45648 s = s.umod(this.n);
45649 if (s.cmpn(0) === 0)
45650 continue;
45651
45652 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
45653 (kpX.cmp(r) !== 0 ? 2 : 0);
45654
45655 // Use complement of `s`, if it is > `n / 2`
45656 if (options.canonical && s.cmp(this.nh) > 0) {
45657 s = this.n.sub(s);
45658 recoveryParam ^= 1;
45659 }
45660
45661 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
45662 }
45663};
45664
45665EC.prototype.verify = function verify(msg, signature, key, enc) {
45666 msg = this._truncateToN(new BN(msg, 16));
45667 key = this.keyFromPublic(key, enc);
45668 signature = new Signature(signature, 'hex');
45669
45670 // Perform primitive values validation
45671 var r = signature.r;
45672 var s = signature.s;
45673 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
45674 return false;
45675 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
45676 return false;
45677
45678 // Validate signature
45679 var sinv = s.invm(this.n);
45680 var u1 = sinv.mul(msg).umod(this.n);
45681 var u2 = sinv.mul(r).umod(this.n);
45682
45683 if (!this.curve._maxwellTrick) {
45684 var p = this.g.mulAdd(u1, key.getPublic(), u2);
45685 if (p.isInfinity())
45686 return false;
45687
45688 return p.getX().umod(this.n).cmp(r) === 0;
45689 }
45690
45691 // NOTE: Greg Maxwell's trick, inspired by:
45692 // https://git.io/vad3K
45693
45694 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
45695 if (p.isInfinity())
45696 return false;
45697
45698 // Compare `p.x` of Jacobian point with `r`,
45699 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
45700 // inverse of `p.z^2`
45701 return p.eqXToP(r);
45702};
45703
45704EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
45705 assert((3 & j) === j, 'The recovery param is more than two bits');
45706 signature = new Signature(signature, enc);
45707
45708 var n = this.n;
45709 var e = new BN(msg);
45710 var r = signature.r;
45711 var s = signature.s;
45712
45713 // A set LSB signifies that the y-coordinate is odd
45714 var isYOdd = j & 1;
45715 var isSecondKey = j >> 1;
45716 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
45717 throw new Error('Unable to find sencond key candinate');
45718
45719 // 1.1. Let x = r + jn.
45720 if (isSecondKey)
45721 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
45722 else
45723 r = this.curve.pointFromX(r, isYOdd);
45724
45725 var rInv = signature.r.invm(n);
45726 var s1 = n.sub(e).mul(rInv).umod(n);
45727 var s2 = s.mul(rInv).umod(n);
45728
45729 // 1.6.1 Compute Q = r^-1 (sR - eG)
45730 // Q = r^-1 (sR + -eG)
45731 return this.g.mulAdd(s1, r, s2);
45732};
45733
45734EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
45735 signature = new Signature(signature, enc);
45736 if (signature.recoveryParam !== null)
45737 return signature.recoveryParam;
45738
45739 for (var i = 0; i < 4; i++) {
45740 var Qprime;
45741 try {
45742 Qprime = this.recoverPubKey(e, signature, i);
45743 } catch (e) {
45744 continue;
45745 }
45746
45747 if (Qprime.eq(Q))
45748 return i;
45749 }
45750 throw new Error('Unable to find valid recovery factor');
45751};
45752
45753},{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
45754'use strict';
45755
45756var BN = require('bn.js');
45757var elliptic = require('../../elliptic');
45758var utils = elliptic.utils;
45759var assert = utils.assert;
45760
45761function KeyPair(ec, options) {
45762 this.ec = ec;
45763 this.priv = null;
45764 this.pub = null;
45765
45766 // KeyPair(ec, { priv: ..., pub: ... })
45767 if (options.priv)
45768 this._importPrivate(options.priv, options.privEnc);
45769 if (options.pub)
45770 this._importPublic(options.pub, options.pubEnc);
45771}
45772module.exports = KeyPair;
45773
45774KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
45775 if (pub instanceof KeyPair)
45776 return pub;
45777
45778 return new KeyPair(ec, {
45779 pub: pub,
45780 pubEnc: enc
45781 });
45782};
45783
45784KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
45785 if (priv instanceof KeyPair)
45786 return priv;
45787
45788 return new KeyPair(ec, {
45789 priv: priv,
45790 privEnc: enc
45791 });
45792};
45793
45794KeyPair.prototype.validate = function validate() {
45795 var pub = this.getPublic();
45796
45797 if (pub.isInfinity())
45798 return { result: false, reason: 'Invalid public key' };
45799 if (!pub.validate())
45800 return { result: false, reason: 'Public key is not a point' };
45801 if (!pub.mul(this.ec.curve.n).isInfinity())
45802 return { result: false, reason: 'Public key * N != O' };
45803
45804 return { result: true, reason: null };
45805};
45806
45807KeyPair.prototype.getPublic = function getPublic(compact, enc) {
45808 // compact is optional argument
45809 if (typeof compact === 'string') {
45810 enc = compact;
45811 compact = null;
45812 }
45813
45814 if (!this.pub)
45815 this.pub = this.ec.g.mul(this.priv);
45816
45817 if (!enc)
45818 return this.pub;
45819
45820 return this.pub.encode(enc, compact);
45821};
45822
45823KeyPair.prototype.getPrivate = function getPrivate(enc) {
45824 if (enc === 'hex')
45825 return this.priv.toString(16, 2);
45826 else
45827 return this.priv;
45828};
45829
45830KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
45831 this.priv = new BN(key, enc || 16);
45832
45833 // Ensure that the priv won't be bigger than n, otherwise we may fail
45834 // in fixed multiplication method
45835 this.priv = this.priv.umod(this.ec.curve.n);
45836};
45837
45838KeyPair.prototype._importPublic = function _importPublic(key, enc) {
45839 if (key.x || key.y) {
45840 // Montgomery points only have an `x` coordinate.
45841 // Weierstrass/Edwards points on the other hand have both `x` and
45842 // `y` coordinates.
45843 if (this.ec.curve.type === 'mont') {
45844 assert(key.x, 'Need x coordinate');
45845 } else if (this.ec.curve.type === 'short' ||
45846 this.ec.curve.type === 'edwards') {
45847 assert(key.x && key.y, 'Need both x and y coordinate');
45848 }
45849 this.pub = this.ec.curve.point(key.x, key.y);
45850 return;
45851 }
45852 this.pub = this.ec.curve.decodePoint(key, enc);
45853};
45854
45855// ECDH
45856KeyPair.prototype.derive = function derive(pub) {
45857 return pub.mul(this.priv).getX();
45858};
45859
45860// ECDSA
45861KeyPair.prototype.sign = function sign(msg, enc, options) {
45862 return this.ec.sign(msg, this, enc, options);
45863};
45864
45865KeyPair.prototype.verify = function verify(msg, signature) {
45866 return this.ec.verify(msg, signature, this);
45867};
45868
45869KeyPair.prototype.inspect = function inspect() {
45870 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
45871 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
45872};
45873
45874},{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
45875'use strict';
45876
45877var BN = require('bn.js');
45878
45879var elliptic = require('../../elliptic');
45880var utils = elliptic.utils;
45881var assert = utils.assert;
45882
45883function Signature(options, enc) {
45884 if (options instanceof Signature)
45885 return options;
45886
45887 if (this._importDER(options, enc))
45888 return;
45889
45890 assert(options.r && options.s, 'Signature without r or s');
45891 this.r = new BN(options.r, 16);
45892 this.s = new BN(options.s, 16);
45893 if (options.recoveryParam === undefined)
45894 this.recoveryParam = null;
45895 else
45896 this.recoveryParam = options.recoveryParam;
45897}
45898module.exports = Signature;
45899
45900function Position() {
45901 this.place = 0;
45902}
45903
45904function getLength(buf, p) {
45905 var initial = buf[p.place++];
45906 if (!(initial & 0x80)) {
45907 return initial;
45908 }
45909 var octetLen = initial & 0xf;
45910 var val = 0;
45911 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
45912 val <<= 8;
45913 val |= buf[off];
45914 }
45915 p.place = off;
45916 return val;
45917}
45918
45919function rmPadding(buf) {
45920 var i = 0;
45921 var len = buf.length - 1;
45922 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
45923 i++;
45924 }
45925 if (i === 0) {
45926 return buf;
45927 }
45928 return buf.slice(i);
45929}
45930
45931Signature.prototype._importDER = function _importDER(data, enc) {
45932 data = utils.toArray(data, enc);
45933 var p = new Position();
45934 if (data[p.place++] !== 0x30) {
45935 return false;
45936 }
45937 var len = getLength(data, p);
45938 if ((len + p.place) !== data.length) {
45939 return false;
45940 }
45941 if (data[p.place++] !== 0x02) {
45942 return false;
45943 }
45944 var rlen = getLength(data, p);
45945 var r = data.slice(p.place, rlen + p.place);
45946 p.place += rlen;
45947 if (data[p.place++] !== 0x02) {
45948 return false;
45949 }
45950 var slen = getLength(data, p);
45951 if (data.length !== slen + p.place) {
45952 return false;
45953 }
45954 var s = data.slice(p.place, slen + p.place);
45955 if (r[0] === 0 && (r[1] & 0x80)) {
45956 r = r.slice(1);
45957 }
45958 if (s[0] === 0 && (s[1] & 0x80)) {
45959 s = s.slice(1);
45960 }
45961
45962 this.r = new BN(r);
45963 this.s = new BN(s);
45964 this.recoveryParam = null;
45965
45966 return true;
45967};
45968
45969function constructLength(arr, len) {
45970 if (len < 0x80) {
45971 arr.push(len);
45972 return;
45973 }
45974 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
45975 arr.push(octets | 0x80);
45976 while (--octets) {
45977 arr.push((len >>> (octets << 3)) & 0xff);
45978 }
45979 arr.push(len);
45980}
45981
45982Signature.prototype.toDER = function toDER(enc) {
45983 var r = this.r.toArray();
45984 var s = this.s.toArray();
45985
45986 // Pad values
45987 if (r[0] & 0x80)
45988 r = [ 0 ].concat(r);
45989 // Pad values
45990 if (s[0] & 0x80)
45991 s = [ 0 ].concat(s);
45992
45993 r = rmPadding(r);
45994 s = rmPadding(s);
45995
45996 while (!s[0] && !(s[1] & 0x80)) {
45997 s = s.slice(1);
45998 }
45999 var arr = [ 0x02 ];
46000 constructLength(arr, r.length);
46001 arr = arr.concat(r);
46002 arr.push(0x02);
46003 constructLength(arr, s.length);
46004 var backHalf = arr.concat(s);
46005 var res = [ 0x30 ];
46006 constructLength(res, backHalf.length);
46007 res = res.concat(backHalf);
46008 return utils.encode(res, enc);
46009};
46010
46011},{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
46012'use strict';
46013
46014var hash = require('hash.js');
46015var elliptic = require('../../elliptic');
46016var utils = elliptic.utils;
46017var assert = utils.assert;
46018var parseBytes = utils.parseBytes;
46019var KeyPair = require('./key');
46020var Signature = require('./signature');
46021
46022function EDDSA(curve) {
46023 assert(curve === 'ed25519', 'only tested with ed25519 so far');
46024
46025 if (!(this instanceof EDDSA))
46026 return new EDDSA(curve);
46027
46028 var curve = elliptic.curves[curve].curve;
46029 this.curve = curve;
46030 this.g = curve.g;
46031 this.g.precompute(curve.n.bitLength() + 1);
46032
46033 this.pointClass = curve.point().constructor;
46034 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
46035 this.hash = hash.sha512;
46036}
46037
46038module.exports = EDDSA;
46039
46040/**
46041* @param {Array|String} message - message bytes
46042* @param {Array|String|KeyPair} secret - secret bytes or a keypair
46043* @returns {Signature} - signature
46044*/
46045EDDSA.prototype.sign = function sign(message, secret) {
46046 message = parseBytes(message);
46047 var key = this.keyFromSecret(secret);
46048 var r = this.hashInt(key.messagePrefix(), message);
46049 var R = this.g.mul(r);
46050 var Rencoded = this.encodePoint(R);
46051 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
46052 .mul(key.priv());
46053 var S = r.add(s_).umod(this.curve.n);
46054 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
46055};
46056
46057/**
46058* @param {Array} message - message bytes
46059* @param {Array|String|Signature} sig - sig bytes
46060* @param {Array|String|Point|KeyPair} pub - public key
46061* @returns {Boolean} - true if public key matches sig of message
46062*/
46063EDDSA.prototype.verify = function verify(message, sig, pub) {
46064 message = parseBytes(message);
46065 sig = this.makeSignature(sig);
46066 var key = this.keyFromPublic(pub);
46067 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
46068 var SG = this.g.mul(sig.S());
46069 var RplusAh = sig.R().add(key.pub().mul(h));
46070 return RplusAh.eq(SG);
46071};
46072
46073EDDSA.prototype.hashInt = function hashInt() {
46074 var hash = this.hash();
46075 for (var i = 0; i < arguments.length; i++)
46076 hash.update(arguments[i]);
46077 return utils.intFromLE(hash.digest()).umod(this.curve.n);
46078};
46079
46080EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
46081 return KeyPair.fromPublic(this, pub);
46082};
46083
46084EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
46085 return KeyPair.fromSecret(this, secret);
46086};
46087
46088EDDSA.prototype.makeSignature = function makeSignature(sig) {
46089 if (sig instanceof Signature)
46090 return sig;
46091 return new Signature(this, sig);
46092};
46093
46094/**
46095* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
46096*
46097* EDDSA defines methods for encoding and decoding points and integers. These are
46098* helper convenience methods, that pass along to utility functions implied
46099* parameters.
46100*
46101*/
46102EDDSA.prototype.encodePoint = function encodePoint(point) {
46103 var enc = point.getY().toArray('le', this.encodingLength);
46104 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
46105 return enc;
46106};
46107
46108EDDSA.prototype.decodePoint = function decodePoint(bytes) {
46109 bytes = utils.parseBytes(bytes);
46110
46111 var lastIx = bytes.length - 1;
46112 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
46113 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
46114
46115 var y = utils.intFromLE(normed);
46116 return this.curve.pointFromY(y, xIsOdd);
46117};
46118
46119EDDSA.prototype.encodeInt = function encodeInt(num) {
46120 return num.toArray('le', this.encodingLength);
46121};
46122
46123EDDSA.prototype.decodeInt = function decodeInt(bytes) {
46124 return utils.intFromLE(bytes);
46125};
46126
46127EDDSA.prototype.isPoint = function isPoint(val) {
46128 return val instanceof this.pointClass;
46129};
46130
46131},{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
46132'use strict';
46133
46134var elliptic = require('../../elliptic');
46135var utils = elliptic.utils;
46136var assert = utils.assert;
46137var parseBytes = utils.parseBytes;
46138var cachedProperty = utils.cachedProperty;
46139
46140/**
46141* @param {EDDSA} eddsa - instance
46142* @param {Object} params - public/private key parameters
46143*
46144* @param {Array<Byte>} [params.secret] - secret seed bytes
46145* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
46146* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
46147*
46148*/
46149function KeyPair(eddsa, params) {
46150 this.eddsa = eddsa;
46151 this._secret = parseBytes(params.secret);
46152 if (eddsa.isPoint(params.pub))
46153 this._pub = params.pub;
46154 else
46155 this._pubBytes = parseBytes(params.pub);
46156}
46157
46158KeyPair.fromPublic = function fromPublic(eddsa, pub) {
46159 if (pub instanceof KeyPair)
46160 return pub;
46161 return new KeyPair(eddsa, { pub: pub });
46162};
46163
46164KeyPair.fromSecret = function fromSecret(eddsa, secret) {
46165 if (secret instanceof KeyPair)
46166 return secret;
46167 return new KeyPair(eddsa, { secret: secret });
46168};
46169
46170KeyPair.prototype.secret = function secret() {
46171 return this._secret;
46172};
46173
46174cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
46175 return this.eddsa.encodePoint(this.pub());
46176});
46177
46178cachedProperty(KeyPair, 'pub', function pub() {
46179 if (this._pubBytes)
46180 return this.eddsa.decodePoint(this._pubBytes);
46181 return this.eddsa.g.mul(this.priv());
46182});
46183
46184cachedProperty(KeyPair, 'privBytes', function privBytes() {
46185 var eddsa = this.eddsa;
46186 var hash = this.hash();
46187 var lastIx = eddsa.encodingLength - 1;
46188
46189 var a = hash.slice(0, eddsa.encodingLength);
46190 a[0] &= 248;
46191 a[lastIx] &= 127;
46192 a[lastIx] |= 64;
46193
46194 return a;
46195});
46196
46197cachedProperty(KeyPair, 'priv', function priv() {
46198 return this.eddsa.decodeInt(this.privBytes());
46199});
46200
46201cachedProperty(KeyPair, 'hash', function hash() {
46202 return this.eddsa.hash().update(this.secret()).digest();
46203});
46204
46205cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
46206 return this.hash().slice(this.eddsa.encodingLength);
46207});
46208
46209KeyPair.prototype.sign = function sign(message) {
46210 assert(this._secret, 'KeyPair can only verify');
46211 return this.eddsa.sign(message, this);
46212};
46213
46214KeyPair.prototype.verify = function verify(message, sig) {
46215 return this.eddsa.verify(message, sig, this);
46216};
46217
46218KeyPair.prototype.getSecret = function getSecret(enc) {
46219 assert(this._secret, 'KeyPair is public only');
46220 return utils.encode(this.secret(), enc);
46221};
46222
46223KeyPair.prototype.getPublic = function getPublic(enc) {
46224 return utils.encode(this.pubBytes(), enc);
46225};
46226
46227module.exports = KeyPair;
46228
46229},{"../../elliptic":97}],109:[function(require,module,exports){
46230'use strict';
46231
46232var BN = require('bn.js');
46233var elliptic = require('../../elliptic');
46234var utils = elliptic.utils;
46235var assert = utils.assert;
46236var cachedProperty = utils.cachedProperty;
46237var parseBytes = utils.parseBytes;
46238
46239/**
46240* @param {EDDSA} eddsa - eddsa instance
46241* @param {Array<Bytes>|Object} sig -
46242* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
46243* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
46244* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
46245* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
46246*/
46247function Signature(eddsa, sig) {
46248 this.eddsa = eddsa;
46249
46250 if (typeof sig !== 'object')
46251 sig = parseBytes(sig);
46252
46253 if (Array.isArray(sig)) {
46254 sig = {
46255 R: sig.slice(0, eddsa.encodingLength),
46256 S: sig.slice(eddsa.encodingLength)
46257 };
46258 }
46259
46260 assert(sig.R && sig.S, 'Signature without R or S');
46261
46262 if (eddsa.isPoint(sig.R))
46263 this._R = sig.R;
46264 if (sig.S instanceof BN)
46265 this._S = sig.S;
46266
46267 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
46268 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
46269}
46270
46271cachedProperty(Signature, 'S', function S() {
46272 return this.eddsa.decodeInt(this.Sencoded());
46273});
46274
46275cachedProperty(Signature, 'R', function R() {
46276 return this.eddsa.decodePoint(this.Rencoded());
46277});
46278
46279cachedProperty(Signature, 'Rencoded', function Rencoded() {
46280 return this.eddsa.encodePoint(this.R());
46281});
46282
46283cachedProperty(Signature, 'Sencoded', function Sencoded() {
46284 return this.eddsa.encodeInt(this.S());
46285});
46286
46287Signature.prototype.toBytes = function toBytes() {
46288 return this.Rencoded().concat(this.Sencoded());
46289};
46290
46291Signature.prototype.toHex = function toHex() {
46292 return utils.encode(this.toBytes(), 'hex').toUpperCase();
46293};
46294
46295module.exports = Signature;
46296
46297},{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
46298module.exports = {
46299 doubles: {
46300 step: 4,
46301 points: [
46302 [
46303 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
46304 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
46305 ],
46306 [
46307 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
46308 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
46309 ],
46310 [
46311 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
46312 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
46313 ],
46314 [
46315 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
46316 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
46317 ],
46318 [
46319 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
46320 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
46321 ],
46322 [
46323 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
46324 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
46325 ],
46326 [
46327 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
46328 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
46329 ],
46330 [
46331 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
46332 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
46333 ],
46334 [
46335 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
46336 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
46337 ],
46338 [
46339 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
46340 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
46341 ],
46342 [
46343 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
46344 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
46345 ],
46346 [
46347 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
46348 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
46349 ],
46350 [
46351 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
46352 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
46353 ],
46354 [
46355 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
46356 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
46357 ],
46358 [
46359 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
46360 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
46361 ],
46362 [
46363 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
46364 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
46365 ],
46366 [
46367 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
46368 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
46369 ],
46370 [
46371 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
46372 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
46373 ],
46374 [
46375 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
46376 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
46377 ],
46378 [
46379 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
46380 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
46381 ],
46382 [
46383 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
46384 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
46385 ],
46386 [
46387 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
46388 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
46389 ],
46390 [
46391 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
46392 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
46393 ],
46394 [
46395 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
46396 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
46397 ],
46398 [
46399 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
46400 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
46401 ],
46402 [
46403 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
46404 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
46405 ],
46406 [
46407 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
46408 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
46409 ],
46410 [
46411 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
46412 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
46413 ],
46414 [
46415 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
46416 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
46417 ],
46418 [
46419 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
46420 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
46421 ],
46422 [
46423 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
46424 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
46425 ],
46426 [
46427 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
46428 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
46429 ],
46430 [
46431 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
46432 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
46433 ],
46434 [
46435 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
46436 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
46437 ],
46438 [
46439 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
46440 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
46441 ],
46442 [
46443 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
46444 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
46445 ],
46446 [
46447 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
46448 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
46449 ],
46450 [
46451 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
46452 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
46453 ],
46454 [
46455 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
46456 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
46457 ],
46458 [
46459 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
46460 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
46461 ],
46462 [
46463 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
46464 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
46465 ],
46466 [
46467 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
46468 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
46469 ],
46470 [
46471 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
46472 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
46473 ],
46474 [
46475 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
46476 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
46477 ],
46478 [
46479 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
46480 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
46481 ],
46482 [
46483 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
46484 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
46485 ],
46486 [
46487 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
46488 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
46489 ],
46490 [
46491 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
46492 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
46493 ],
46494 [
46495 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
46496 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
46497 ],
46498 [
46499 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
46500 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
46501 ],
46502 [
46503 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
46504 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
46505 ],
46506 [
46507 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
46508 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
46509 ],
46510 [
46511 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
46512 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
46513 ],
46514 [
46515 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
46516 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
46517 ],
46518 [
46519 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
46520 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
46521 ],
46522 [
46523 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
46524 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
46525 ],
46526 [
46527 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
46528 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
46529 ],
46530 [
46531 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
46532 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
46533 ],
46534 [
46535 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
46536 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
46537 ],
46538 [
46539 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
46540 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
46541 ],
46542 [
46543 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
46544 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
46545 ],
46546 [
46547 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
46548 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
46549 ],
46550 [
46551 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
46552 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
46553 ],
46554 [
46555 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
46556 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
46557 ],
46558 [
46559 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
46560 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
46561 ]
46562 ]
46563 },
46564 naf: {
46565 wnd: 7,
46566 points: [
46567 [
46568 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
46569 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
46570 ],
46571 [
46572 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
46573 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
46574 ],
46575 [
46576 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
46577 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
46578 ],
46579 [
46580 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
46581 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
46582 ],
46583 [
46584 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
46585 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
46586 ],
46587 [
46588 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
46589 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
46590 ],
46591 [
46592 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
46593 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
46594 ],
46595 [
46596 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
46597 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
46598 ],
46599 [
46600 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
46601 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
46602 ],
46603 [
46604 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
46605 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
46606 ],
46607 [
46608 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
46609 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
46610 ],
46611 [
46612 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
46613 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
46614 ],
46615 [
46616 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
46617 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
46618 ],
46619 [
46620 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
46621 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
46622 ],
46623 [
46624 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
46625 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
46626 ],
46627 [
46628 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
46629 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
46630 ],
46631 [
46632 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
46633 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
46634 ],
46635 [
46636 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
46637 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
46638 ],
46639 [
46640 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
46641 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
46642 ],
46643 [
46644 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
46645 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
46646 ],
46647 [
46648 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
46649 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
46650 ],
46651 [
46652 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
46653 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
46654 ],
46655 [
46656 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
46657 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
46658 ],
46659 [
46660 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
46661 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
46662 ],
46663 [
46664 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
46665 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
46666 ],
46667 [
46668 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
46669 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
46670 ],
46671 [
46672 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
46673 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
46674 ],
46675 [
46676 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
46677 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
46678 ],
46679 [
46680 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
46681 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
46682 ],
46683 [
46684 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
46685 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
46686 ],
46687 [
46688 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
46689 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
46690 ],
46691 [
46692 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
46693 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
46694 ],
46695 [
46696 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
46697 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
46698 ],
46699 [
46700 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
46701 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
46702 ],
46703 [
46704 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
46705 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
46706 ],
46707 [
46708 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
46709 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
46710 ],
46711 [
46712 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
46713 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
46714 ],
46715 [
46716 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
46717 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
46718 ],
46719 [
46720 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
46721 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
46722 ],
46723 [
46724 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
46725 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
46726 ],
46727 [
46728 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
46729 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
46730 ],
46731 [
46732 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
46733 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
46734 ],
46735 [
46736 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
46737 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
46738 ],
46739 [
46740 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
46741 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
46742 ],
46743 [
46744 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
46745 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
46746 ],
46747 [
46748 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
46749 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
46750 ],
46751 [
46752 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
46753 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
46754 ],
46755 [
46756 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
46757 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
46758 ],
46759 [
46760 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
46761 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
46762 ],
46763 [
46764 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
46765 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
46766 ],
46767 [
46768 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
46769 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
46770 ],
46771 [
46772 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
46773 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
46774 ],
46775 [
46776 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
46777 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
46778 ],
46779 [
46780 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
46781 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
46782 ],
46783 [
46784 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
46785 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
46786 ],
46787 [
46788 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
46789 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
46790 ],
46791 [
46792 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
46793 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
46794 ],
46795 [
46796 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
46797 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
46798 ],
46799 [
46800 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
46801 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
46802 ],
46803 [
46804 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
46805 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
46806 ],
46807 [
46808 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
46809 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
46810 ],
46811 [
46812 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
46813 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
46814 ],
46815 [
46816 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
46817 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
46818 ],
46819 [
46820 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
46821 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
46822 ],
46823 [
46824 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
46825 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
46826 ],
46827 [
46828 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
46829 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
46830 ],
46831 [
46832 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46833 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46834 ],
46835 [
46836 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46837 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46838 ],
46839 [
46840 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46841 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46842 ],
46843 [
46844 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46845 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46846 ],
46847 [
46848 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46849 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46850 ],
46851 [
46852 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46853 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46854 ],
46855 [
46856 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46857 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46858 ],
46859 [
46860 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46861 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46862 ],
46863 [
46864 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46865 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46866 ],
46867 [
46868 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46869 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46870 ],
46871 [
46872 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
46873 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
46874 ],
46875 [
46876 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
46877 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
46878 ],
46879 [
46880 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
46881 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
46882 ],
46883 [
46884 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
46885 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
46886 ],
46887 [
46888 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
46889 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
46890 ],
46891 [
46892 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
46893 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
46894 ],
46895 [
46896 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
46897 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
46898 ],
46899 [
46900 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
46901 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
46902 ],
46903 [
46904 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
46905 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
46906 ],
46907 [
46908 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
46909 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
46910 ],
46911 [
46912 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
46913 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
46914 ],
46915 [
46916 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
46917 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
46918 ],
46919 [
46920 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
46921 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
46922 ],
46923 [
46924 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
46925 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
46926 ],
46927 [
46928 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
46929 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
46930 ],
46931 [
46932 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
46933 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
46934 ],
46935 [
46936 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
46937 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
46938 ],
46939 [
46940 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
46941 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
46942 ],
46943 [
46944 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
46945 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
46946 ],
46947 [
46948 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
46949 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
46950 ],
46951 [
46952 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
46953 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
46954 ],
46955 [
46956 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
46957 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
46958 ],
46959 [
46960 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
46961 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
46962 ],
46963 [
46964 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
46965 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
46966 ],
46967 [
46968 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
46969 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
46970 ],
46971 [
46972 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
46973 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
46974 ],
46975 [
46976 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
46977 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
46978 ],
46979 [
46980 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
46981 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
46982 ],
46983 [
46984 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
46985 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
46986 ],
46987 [
46988 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
46989 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
46990 ],
46991 [
46992 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
46993 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
46994 ],
46995 [
46996 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
46997 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
46998 ],
46999 [
47000 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
47001 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
47002 ],
47003 [
47004 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
47005 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
47006 ],
47007 [
47008 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
47009 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
47010 ],
47011 [
47012 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
47013 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
47014 ],
47015 [
47016 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
47017 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
47018 ],
47019 [
47020 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
47021 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
47022 ],
47023 [
47024 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
47025 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
47026 ],
47027 [
47028 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
47029 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
47030 ],
47031 [
47032 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
47033 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
47034 ],
47035 [
47036 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
47037 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
47038 ],
47039 [
47040 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
47041 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
47042 ],
47043 [
47044 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
47045 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
47046 ],
47047 [
47048 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
47049 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
47050 ],
47051 [
47052 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
47053 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
47054 ],
47055 [
47056 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
47057 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
47058 ],
47059 [
47060 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
47061 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
47062 ],
47063 [
47064 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
47065 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
47066 ],
47067 [
47068 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
47069 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
47070 ],
47071 [
47072 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
47073 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
47074 ]
47075 ]
47076 }
47077};
8b095871 47078
cf6c2044
IC
47079},{}],111:[function(require,module,exports){
47080'use strict';
47081
47082var utils = exports;
47083var BN = require('bn.js');
47084var minAssert = require('minimalistic-assert');
47085var minUtils = require('minimalistic-crypto-utils');
47086
47087utils.assert = minAssert;
47088utils.toArray = minUtils.toArray;
47089utils.zero2 = minUtils.zero2;
47090utils.toHex = minUtils.toHex;
47091utils.encode = minUtils.encode;
47092
47093// Represent num in a w-NAF form
47094function getNAF(num, w) {
47095 var naf = [];
47096 var ws = 1 << (w + 1);
47097 var k = num.clone();
47098 while (k.cmpn(1) >= 0) {
47099 var z;
47100 if (k.isOdd()) {
47101 var mod = k.andln(ws - 1);
47102 if (mod > (ws >> 1) - 1)
47103 z = (ws >> 1) - mod;
47104 else
47105 z = mod;
47106 k.isubn(z);
47107 } else {
47108 z = 0;
47109 }
47110 naf.push(z);
47111
47112 // Optimization, shift by word if possible
47113 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
47114 for (var i = 1; i < shift; i++)
47115 naf.push(0);
47116 k.iushrn(shift);
47117 }
47118
47119 return naf;
47120}
47121utils.getNAF = getNAF;
47122
47123// Represent k1, k2 in a Joint Sparse Form
47124function getJSF(k1, k2) {
47125 var jsf = [
47126 [],
47127 []
47128 ];
47129
47130 k1 = k1.clone();
47131 k2 = k2.clone();
47132 var d1 = 0;
47133 var d2 = 0;
47134 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
47135
47136 // First phase
47137 var m14 = (k1.andln(3) + d1) & 3;
47138 var m24 = (k2.andln(3) + d2) & 3;
47139 if (m14 === 3)
47140 m14 = -1;
47141 if (m24 === 3)
47142 m24 = -1;
47143 var u1;
47144 if ((m14 & 1) === 0) {
47145 u1 = 0;
47146 } else {
47147 var m8 = (k1.andln(7) + d1) & 7;
47148 if ((m8 === 3 || m8 === 5) && m24 === 2)
47149 u1 = -m14;
47150 else
47151 u1 = m14;
47152 }
47153 jsf[0].push(u1);
47154
47155 var u2;
47156 if ((m24 & 1) === 0) {
47157 u2 = 0;
47158 } else {
47159 var m8 = (k2.andln(7) + d2) & 7;
47160 if ((m8 === 3 || m8 === 5) && m14 === 2)
47161 u2 = -m24;
47162 else
47163 u2 = m24;
47164 }
47165 jsf[1].push(u2);
47166
47167 // Second phase
47168 if (2 * d1 === u1 + 1)
47169 d1 = 1 - d1;
47170 if (2 * d2 === u2 + 1)
47171 d2 = 1 - d2;
47172 k1.iushrn(1);
47173 k2.iushrn(1);
47174 }
47175
47176 return jsf;
47177}
47178utils.getJSF = getJSF;
47179
47180function cachedProperty(obj, name, computer) {
47181 var key = '_' + name;
47182 obj.prototype[name] = function cachedProperty() {
47183 return this[key] !== undefined ? this[key] :
47184 this[key] = computer.call(this);
47185 };
47186}
47187utils.cachedProperty = cachedProperty;
47188
47189function parseBytes(bytes) {
47190 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
47191 bytes;
47192}
47193utils.parseBytes = parseBytes;
47194
47195function intFromLE(bytes) {
47196 return new BN(bytes, 'hex', 'le');
47197}
47198utils.intFromLE = intFromLE;
47199
47200
47201},{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
47202module.exports={
47203 "_args": [
47204 [
47205 "elliptic",
47206 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
47207 ]
47208 ],
47209 "_from": "elliptic@latest",
47210 "_id": "elliptic@6.4.0",
47211 "_inCache": true,
47212 "_installable": true,
47213 "_location": "/elliptic",
47214 "_nodeVersion": "7.0.0",
47215 "_npmOperationalInternal": {
47216 "host": "packages-18-east.internal.npmjs.com",
47217 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
47218 },
47219 "_npmUser": {
47220 "email": "fedor@indutny.com",
47221 "name": "indutny"
47222 },
47223 "_npmVersion": "3.10.8",
47224 "_phantomChildren": {},
47225 "_requested": {
47226 "name": "elliptic",
47227 "raw": "elliptic",
47228 "rawSpec": "",
47229 "scope": null,
47230 "spec": "latest",
47231 "type": "tag"
47232 },
47233 "_requiredBy": [
47234 "#USER"
47235 ],
47236 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
47237 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47238 "_shrinkwrap": null,
47239 "_spec": "elliptic",
47240 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
47241 "author": {
47242 "email": "fedor@indutny.com",
47243 "name": "Fedor Indutny"
47244 },
47245 "bugs": {
47246 "url": "https://github.com/indutny/elliptic/issues"
47247 },
47248 "dependencies": {
47249 "bn.js": "^4.4.0",
47250 "brorand": "^1.0.1",
47251 "hash.js": "^1.0.0",
47252 "hmac-drbg": "^1.0.0",
47253 "inherits": "^2.0.1",
47254 "minimalistic-assert": "^1.0.0",
47255 "minimalistic-crypto-utils": "^1.0.0"
47256 },
47257 "description": "EC cryptography",
47258 "devDependencies": {
47259 "brfs": "^1.4.3",
47260 "coveralls": "^2.11.3",
47261 "grunt": "^0.4.5",
47262 "grunt-browserify": "^5.0.0",
47263 "grunt-cli": "^1.2.0",
47264 "grunt-contrib-connect": "^1.0.0",
47265 "grunt-contrib-copy": "^1.0.0",
47266 "grunt-contrib-uglify": "^1.0.1",
47267 "grunt-mocha-istanbul": "^3.0.1",
47268 "grunt-saucelabs": "^8.6.2",
47269 "istanbul": "^0.4.2",
47270 "jscs": "^2.9.0",
47271 "jshint": "^2.6.0",
47272 "mocha": "^2.1.0"
47273 },
47274 "directories": {},
47275 "dist": {
47276 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47277 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
47278 },
47279 "files": [
47280 "lib"
47281 ],
47282 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
47283 "homepage": "https://github.com/indutny/elliptic",
47284 "keywords": [
47285 "EC",
47286 "Elliptic",
47287 "curve",
47288 "Cryptography"
47289 ],
47290 "license": "MIT",
47291 "main": "lib/elliptic.js",
47292 "maintainers": [
47293 {
47294 "email": "fedor@indutny.com",
47295 "name": "indutny"
47296 }
47297 ],
47298 "name": "elliptic",
47299 "optionalDependencies": {},
47300 "readme": "ERROR: No README data found!",
47301 "repository": {
47302 "type": "git",
47303 "url": "git+ssh://git@github.com/indutny/elliptic.git"
47304 },
47305 "scripts": {
47306 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47307 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47308 "lint": "npm run jscs && npm run jshint",
47309 "test": "npm run lint && npm run unit",
47310 "unit": "istanbul test _mocha --reporter=spec test/index.js",
47311 "version": "grunt dist && git add dist/"
47312 },
47313 "version": "6.4.0"
47314}
47315
47316},{}],113:[function(require,module,exports){
47317(function (Buffer){
47318'use strict'
47319var Transform = require('stream').Transform
47320var inherits = require('inherits')
47321
47322function HashBase (blockSize) {
47323 Transform.call(this)
47324
47325 this._block = new Buffer(blockSize)
47326 this._blockSize = blockSize
47327 this._blockOffset = 0
47328 this._length = [0, 0, 0, 0]
47329
47330 this._finalized = false
47331}
47332
47333inherits(HashBase, Transform)
47334
47335HashBase.prototype._transform = function (chunk, encoding, callback) {
47336 var error = null
47337 try {
47338 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
47339 this.update(chunk)
47340 } catch (err) {
47341 error = err
47342 }
47343
47344 callback(error)
47345}
47346
47347HashBase.prototype._flush = function (callback) {
47348 var error = null
47349 try {
47350 this.push(this._digest())
47351 } catch (err) {
47352 error = err
47353 }
47354
47355 callback(error)
47356}
47357
47358HashBase.prototype.update = function (data, encoding) {
47359 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47360 if (this._finalized) throw new Error('Digest already called')
47361 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
47362
47363 // consume data
47364 var block = this._block
47365 var offset = 0
47366 while (this._blockOffset + data.length - offset >= this._blockSize) {
47367 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
47368 this._update()
47369 this._blockOffset = 0
47370 }
47371 while (offset < data.length) block[this._blockOffset++] = data[offset++]
47372
47373 // update length
47374 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
47375 this._length[j] += carry
47376 carry = (this._length[j] / 0x0100000000) | 0
47377 if (carry > 0) this._length[j] -= 0x0100000000 * carry
47378 }
47379
47380 return this
47381}
47382
47383HashBase.prototype._update = function (data) {
47384 throw new Error('_update is not implemented')
47385}
47386
47387HashBase.prototype.digest = function (encoding) {
47388 if (this._finalized) throw new Error('Digest already called')
47389 this._finalized = true
47390
47391 var digest = this._digest()
47392 if (encoding !== undefined) digest = digest.toString(encoding)
47393 return digest
47394}
47395
47396HashBase.prototype._digest = function () {
47397 throw new Error('_digest is not implemented')
47398}
47399
47400module.exports = HashBase
47401
47402}).call(this,require("buffer").Buffer)
47403},{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
47404var hash = exports;
47405
47406hash.utils = require('./hash/utils');
47407hash.common = require('./hash/common');
47408hash.sha = require('./hash/sha');
47409hash.ripemd = require('./hash/ripemd');
47410hash.hmac = require('./hash/hmac');
47411
47412// Proxy hash functions to the main object
47413hash.sha1 = hash.sha.sha1;
47414hash.sha256 = hash.sha.sha256;
47415hash.sha224 = hash.sha.sha224;
47416hash.sha384 = hash.sha.sha384;
47417hash.sha512 = hash.sha.sha512;
47418hash.ripemd160 = hash.ripemd.ripemd160;
47419
47420},{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
47421var hash = require('../hash');
47422var utils = hash.utils;
47423var assert = utils.assert;
47424
47425function BlockHash() {
47426 this.pending = null;
47427 this.pendingTotal = 0;
47428 this.blockSize = this.constructor.blockSize;
47429 this.outSize = this.constructor.outSize;
47430 this.hmacStrength = this.constructor.hmacStrength;
47431 this.padLength = this.constructor.padLength / 8;
47432 this.endian = 'big';
47433
47434 this._delta8 = this.blockSize / 8;
47435 this._delta32 = this.blockSize / 32;
47436}
47437exports.BlockHash = BlockHash;
47438
47439BlockHash.prototype.update = function update(msg, enc) {
47440 // Convert message to array, pad it, and join into 32bit blocks
47441 msg = utils.toArray(msg, enc);
47442 if (!this.pending)
47443 this.pending = msg;
47444 else
47445 this.pending = this.pending.concat(msg);
47446 this.pendingTotal += msg.length;
47447
47448 // Enough data, try updating
47449 if (this.pending.length >= this._delta8) {
47450 msg = this.pending;
47451
47452 // Process pending data in blocks
47453 var r = msg.length % this._delta8;
47454 this.pending = msg.slice(msg.length - r, msg.length);
47455 if (this.pending.length === 0)
47456 this.pending = null;
47457
47458 msg = utils.join32(msg, 0, msg.length - r, this.endian);
47459 for (var i = 0; i < msg.length; i += this._delta32)
47460 this._update(msg, i, i + this._delta32);
47461 }
47462
47463 return this;
47464};
47465
47466BlockHash.prototype.digest = function digest(enc) {
47467 this.update(this._pad());
47468 assert(this.pending === null);
47469
47470 return this._digest(enc);
47471};
47472
47473BlockHash.prototype._pad = function pad() {
47474 var len = this.pendingTotal;
47475 var bytes = this._delta8;
47476 var k = bytes - ((len + this.padLength) % bytes);
47477 var res = new Array(k + this.padLength);
47478 res[0] = 0x80;
47479 for (var i = 1; i < k; i++)
47480 res[i] = 0;
47481
47482 // Append length
47483 len <<= 3;
47484 if (this.endian === 'big') {
47485 for (var t = 8; t < this.padLength; t++)
47486 res[i++] = 0;
47487
47488 res[i++] = 0;
47489 res[i++] = 0;
47490 res[i++] = 0;
47491 res[i++] = 0;
47492 res[i++] = (len >>> 24) & 0xff;
47493 res[i++] = (len >>> 16) & 0xff;
47494 res[i++] = (len >>> 8) & 0xff;
47495 res[i++] = len & 0xff;
47496 } else {
47497 res[i++] = len & 0xff;
47498 res[i++] = (len >>> 8) & 0xff;
47499 res[i++] = (len >>> 16) & 0xff;
47500 res[i++] = (len >>> 24) & 0xff;
47501 res[i++] = 0;
47502 res[i++] = 0;
47503 res[i++] = 0;
47504 res[i++] = 0;
47505
47506 for (var t = 8; t < this.padLength; t++)
47507 res[i++] = 0;
47508 }
47509
47510 return res;
47511};
47512
47513},{"../hash":114}],116:[function(require,module,exports){
47514var hmac = exports;
47515
47516var hash = require('../hash');
47517var utils = hash.utils;
47518var assert = utils.assert;
47519
47520function Hmac(hash, key, enc) {
47521 if (!(this instanceof Hmac))
47522 return new Hmac(hash, key, enc);
47523 this.Hash = hash;
47524 this.blockSize = hash.blockSize / 8;
47525 this.outSize = hash.outSize / 8;
47526 this.inner = null;
47527 this.outer = null;
47528
47529 this._init(utils.toArray(key, enc));
47530}
47531module.exports = Hmac;
47532
47533Hmac.prototype._init = function init(key) {
47534 // Shorten key, if needed
47535 if (key.length > this.blockSize)
47536 key = new this.Hash().update(key).digest();
47537 assert(key.length <= this.blockSize);
47538
47539 // Add padding to key
47540 for (var i = key.length; i < this.blockSize; i++)
47541 key.push(0);
47542
47543 for (var i = 0; i < key.length; i++)
47544 key[i] ^= 0x36;
47545 this.inner = new this.Hash().update(key);
47546
47547 // 0x36 ^ 0x5c = 0x6a
47548 for (var i = 0; i < key.length; i++)
47549 key[i] ^= 0x6a;
47550 this.outer = new this.Hash().update(key);
47551};
47552
47553Hmac.prototype.update = function update(msg, enc) {
47554 this.inner.update(msg, enc);
47555 return this;
47556};
47557
47558Hmac.prototype.digest = function digest(enc) {
47559 this.outer.update(this.inner.digest());
47560 return this.outer.digest(enc);
47561};
47562
47563},{"../hash":114}],117:[function(require,module,exports){
47564var hash = require('../hash');
47565var utils = hash.utils;
47566
47567var rotl32 = utils.rotl32;
47568var sum32 = utils.sum32;
47569var sum32_3 = utils.sum32_3;
47570var sum32_4 = utils.sum32_4;
47571var BlockHash = hash.common.BlockHash;
47572
47573function RIPEMD160() {
47574 if (!(this instanceof RIPEMD160))
47575 return new RIPEMD160();
47576
47577 BlockHash.call(this);
47578
47579 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
47580 this.endian = 'little';
47581}
47582utils.inherits(RIPEMD160, BlockHash);
47583exports.ripemd160 = RIPEMD160;
47584
47585RIPEMD160.blockSize = 512;
47586RIPEMD160.outSize = 160;
47587RIPEMD160.hmacStrength = 192;
47588RIPEMD160.padLength = 64;
47589
47590RIPEMD160.prototype._update = function update(msg, start) {
47591 var A = this.h[0];
47592 var B = this.h[1];
47593 var C = this.h[2];
47594 var D = this.h[3];
47595 var E = this.h[4];
47596 var Ah = A;
47597 var Bh = B;
47598 var Ch = C;
47599 var Dh = D;
47600 var Eh = E;
47601 for (var j = 0; j < 80; j++) {
47602 var T = sum32(
47603 rotl32(
47604 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
47605 s[j]),
47606 E);
47607 A = E;
47608 E = D;
47609 D = rotl32(C, 10);
47610 C = B;
47611 B = T;
47612 T = sum32(
47613 rotl32(
47614 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
47615 sh[j]),
47616 Eh);
47617 Ah = Eh;
47618 Eh = Dh;
47619 Dh = rotl32(Ch, 10);
47620 Ch = Bh;
47621 Bh = T;
9987f0c1 47622 }
cf6c2044
IC
47623 T = sum32_3(this.h[1], C, Dh);
47624 this.h[1] = sum32_3(this.h[2], D, Eh);
47625 this.h[2] = sum32_3(this.h[3], E, Ah);
47626 this.h[3] = sum32_3(this.h[4], A, Bh);
47627 this.h[4] = sum32_3(this.h[0], B, Ch);
47628 this.h[0] = T;
47629};
8b095871 47630
cf6c2044
IC
47631RIPEMD160.prototype._digest = function digest(enc) {
47632 if (enc === 'hex')
47633 return utils.toHex32(this.h, 'little');
47634 else
47635 return utils.split32(this.h, 'little');
47636};
8b095871 47637
cf6c2044
IC
47638function f(j, x, y, z) {
47639 if (j <= 15)
47640 return x ^ y ^ z;
47641 else if (j <= 31)
47642 return (x & y) | ((~x) & z);
47643 else if (j <= 47)
47644 return (x | (~y)) ^ z;
47645 else if (j <= 63)
47646 return (x & z) | (y & (~z));
47647 else
47648 return x ^ (y | (~z));
47649}
8b095871 47650
cf6c2044
IC
47651function K(j) {
47652 if (j <= 15)
47653 return 0x00000000;
47654 else if (j <= 31)
47655 return 0x5a827999;
47656 else if (j <= 47)
47657 return 0x6ed9eba1;
47658 else if (j <= 63)
47659 return 0x8f1bbcdc;
47660 else
47661 return 0xa953fd4e;
47662}
9987f0c1 47663
cf6c2044
IC
47664function Kh(j) {
47665 if (j <= 15)
47666 return 0x50a28be6;
47667 else if (j <= 31)
47668 return 0x5c4dd124;
47669 else if (j <= 47)
47670 return 0x6d703ef3;
47671 else if (j <= 63)
47672 return 0x7a6d76e9;
47673 else
47674 return 0x00000000;
47675}
9987f0c1 47676
cf6c2044
IC
47677var r = [
47678 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47679 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47680 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47681 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47682 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47683];
9987f0c1 47684
cf6c2044
IC
47685var rh = [
47686 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47687 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47688 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47689 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47690 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47691];
9987f0c1 47692
cf6c2044
IC
47693var s = [
47694 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47695 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47696 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47697 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47698 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47699];
9987f0c1 47700
cf6c2044
IC
47701var sh = [
47702 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47703 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47704 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47705 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47706 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47707];
9987f0c1 47708
cf6c2044
IC
47709},{"../hash":114}],118:[function(require,module,exports){
47710var hash = require('../hash');
47711var utils = hash.utils;
47712var assert = utils.assert;
9987f0c1 47713
cf6c2044
IC
47714var rotr32 = utils.rotr32;
47715var rotl32 = utils.rotl32;
47716var sum32 = utils.sum32;
47717var sum32_4 = utils.sum32_4;
47718var sum32_5 = utils.sum32_5;
47719var rotr64_hi = utils.rotr64_hi;
47720var rotr64_lo = utils.rotr64_lo;
47721var shr64_hi = utils.shr64_hi;
47722var shr64_lo = utils.shr64_lo;
47723var sum64 = utils.sum64;
47724var sum64_hi = utils.sum64_hi;
47725var sum64_lo = utils.sum64_lo;
47726var sum64_4_hi = utils.sum64_4_hi;
47727var sum64_4_lo = utils.sum64_4_lo;
47728var sum64_5_hi = utils.sum64_5_hi;
47729var sum64_5_lo = utils.sum64_5_lo;
47730var BlockHash = hash.common.BlockHash;
9987f0c1 47731
cf6c2044
IC
47732var sha256_K = [
47733 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47734 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47735 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47736 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47737 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47738 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47739 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47740 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47741 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47742 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47743 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47744 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47745 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47746 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47747 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47748 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47749];
8b095871 47750
cf6c2044
IC
47751var sha512_K = [
47752 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47753 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47754 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47755 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47756 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47757 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47758 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47759 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47760 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47761 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47762 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47763 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47764 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47765 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47766 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47767 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47768 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47769 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47770 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47771 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47772 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47773 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47774 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47775 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47776 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47777 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47778 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47779 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47780 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47781 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47782 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47783 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47784 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47785 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47786 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47787 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47788 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47789 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47790 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47791 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47792];
8b095871 47793
cf6c2044
IC
47794var sha1_K = [
47795 0x5A827999, 0x6ED9EBA1,
47796 0x8F1BBCDC, 0xCA62C1D6
47797];
8b095871 47798
cf6c2044
IC
47799function SHA256() {
47800 if (!(this instanceof SHA256))
47801 return new SHA256();
8b095871 47802
cf6c2044
IC
47803 BlockHash.call(this);
47804 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47805 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47806 this.k = sha256_K;
47807 this.W = new Array(64);
9987f0c1 47808}
cf6c2044
IC
47809utils.inherits(SHA256, BlockHash);
47810exports.sha256 = SHA256;
8b095871 47811
cf6c2044
IC
47812SHA256.blockSize = 512;
47813SHA256.outSize = 256;
47814SHA256.hmacStrength = 192;
47815SHA256.padLength = 64;
8b095871 47816
cf6c2044
IC
47817SHA256.prototype._update = function _update(msg, start) {
47818 var W = this.W;
8b095871 47819
cf6c2044
IC
47820 for (var i = 0; i < 16; i++)
47821 W[i] = msg[start + i];
47822 for (; i < W.length; i++)
47823 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
8b095871 47824
cf6c2044
IC
47825 var a = this.h[0];
47826 var b = this.h[1];
47827 var c = this.h[2];
47828 var d = this.h[3];
47829 var e = this.h[4];
47830 var f = this.h[5];
47831 var g = this.h[6];
47832 var h = this.h[7];
8b095871 47833
cf6c2044
IC
47834 assert(this.k.length === W.length);
47835 for (var i = 0; i < W.length; i++) {
47836 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47837 var T2 = sum32(s0_256(a), maj32(a, b, c));
47838 h = g;
47839 g = f;
47840 f = e;
47841 e = sum32(d, T1);
47842 d = c;
47843 c = b;
47844 b = a;
47845 a = sum32(T1, T2);
47846 }
8b095871 47847
cf6c2044
IC
47848 this.h[0] = sum32(this.h[0], a);
47849 this.h[1] = sum32(this.h[1], b);
47850 this.h[2] = sum32(this.h[2], c);
47851 this.h[3] = sum32(this.h[3], d);
47852 this.h[4] = sum32(this.h[4], e);
47853 this.h[5] = sum32(this.h[5], f);
47854 this.h[6] = sum32(this.h[6], g);
47855 this.h[7] = sum32(this.h[7], h);
47856};
8b095871 47857
cf6c2044
IC
47858SHA256.prototype._digest = function digest(enc) {
47859 if (enc === 'hex')
47860 return utils.toHex32(this.h, 'big');
47861 else
47862 return utils.split32(this.h, 'big');
47863};
8b095871 47864
cf6c2044
IC
47865function SHA224() {
47866 if (!(this instanceof SHA224))
47867 return new SHA224();
8b095871 47868
cf6c2044
IC
47869 SHA256.call(this);
47870 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47871 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47872}
47873utils.inherits(SHA224, SHA256);
47874exports.sha224 = SHA224;
8b095871 47875
cf6c2044
IC
47876SHA224.blockSize = 512;
47877SHA224.outSize = 224;
47878SHA224.hmacStrength = 192;
47879SHA224.padLength = 64;
8b095871 47880
cf6c2044
IC
47881SHA224.prototype._digest = function digest(enc) {
47882 // Just truncate output
47883 if (enc === 'hex')
47884 return utils.toHex32(this.h.slice(0, 7), 'big');
47885 else
47886 return utils.split32(this.h.slice(0, 7), 'big');
47887};
8b095871 47888
cf6c2044
IC
47889function SHA512() {
47890 if (!(this instanceof SHA512))
47891 return new SHA512();
47892
47893 BlockHash.call(this);
47894 this.h = [ 0x6a09e667, 0xf3bcc908,
47895 0xbb67ae85, 0x84caa73b,
47896 0x3c6ef372, 0xfe94f82b,
47897 0xa54ff53a, 0x5f1d36f1,
47898 0x510e527f, 0xade682d1,
47899 0x9b05688c, 0x2b3e6c1f,
47900 0x1f83d9ab, 0xfb41bd6b,
47901 0x5be0cd19, 0x137e2179 ];
47902 this.k = sha512_K;
47903 this.W = new Array(160);
9987f0c1 47904}
cf6c2044
IC
47905utils.inherits(SHA512, BlockHash);
47906exports.sha512 = SHA512;
8b095871 47907
cf6c2044
IC
47908SHA512.blockSize = 1024;
47909SHA512.outSize = 512;
47910SHA512.hmacStrength = 192;
47911SHA512.padLength = 128;
9987f0c1 47912
cf6c2044
IC
47913SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
47914 var W = this.W;
8b095871 47915
cf6c2044
IC
47916 // 32 x 32bit words
47917 for (var i = 0; i < 32; i++)
47918 W[i] = msg[start + i];
47919 for (; i < W.length; i += 2) {
47920 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
47921 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
47922 var c1_hi = W[i - 14]; // i - 7
47923 var c1_lo = W[i - 13];
47924 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
47925 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
47926 var c3_hi = W[i - 32]; // i - 16
47927 var c3_lo = W[i - 31];
8b095871 47928
cf6c2044
IC
47929 W[i] = sum64_4_hi(c0_hi, c0_lo,
47930 c1_hi, c1_lo,
47931 c2_hi, c2_lo,
47932 c3_hi, c3_lo);
47933 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
47934 c1_hi, c1_lo,
47935 c2_hi, c2_lo,
47936 c3_hi, c3_lo);
9987f0c1 47937 }
cf6c2044 47938};
8b095871 47939
cf6c2044
IC
47940SHA512.prototype._update = function _update(msg, start) {
47941 this._prepareBlock(msg, start);
8b095871 47942
cf6c2044 47943 var W = this.W;
8b095871 47944
cf6c2044
IC
47945 var ah = this.h[0];
47946 var al = this.h[1];
47947 var bh = this.h[2];
47948 var bl = this.h[3];
47949 var ch = this.h[4];
47950 var cl = this.h[5];
47951 var dh = this.h[6];
47952 var dl = this.h[7];
47953 var eh = this.h[8];
47954 var el = this.h[9];
47955 var fh = this.h[10];
47956 var fl = this.h[11];
47957 var gh = this.h[12];
47958 var gl = this.h[13];
47959 var hh = this.h[14];
47960 var hl = this.h[15];
47961
47962 assert(this.k.length === W.length);
47963 for (var i = 0; i < W.length; i += 2) {
47964 var c0_hi = hh;
47965 var c0_lo = hl;
47966 var c1_hi = s1_512_hi(eh, el);
47967 var c1_lo = s1_512_lo(eh, el);
47968 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
47969 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
47970 var c3_hi = this.k[i];
47971 var c3_lo = this.k[i + 1];
47972 var c4_hi = W[i];
47973 var c4_lo = W[i + 1];
8b095871 47974
cf6c2044
IC
47975 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
47976 c1_hi, c1_lo,
47977 c2_hi, c2_lo,
47978 c3_hi, c3_lo,
47979 c4_hi, c4_lo);
47980 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
47981 c1_hi, c1_lo,
47982 c2_hi, c2_lo,
47983 c3_hi, c3_lo,
47984 c4_hi, c4_lo);
8b095871 47985
cf6c2044
IC
47986 var c0_hi = s0_512_hi(ah, al);
47987 var c0_lo = s0_512_lo(ah, al);
47988 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
47989 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
8b095871 47990
cf6c2044
IC
47991 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
47992 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
8b095871 47993
cf6c2044
IC
47994 hh = gh;
47995 hl = gl;
8b095871 47996
cf6c2044
IC
47997 gh = fh;
47998 gl = fl;
8b095871 47999
cf6c2044
IC
48000 fh = eh;
48001 fl = el;
8b095871 48002
cf6c2044
IC
48003 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
48004 el = sum64_lo(dl, dl, T1_hi, T1_lo);
8b095871 48005
cf6c2044
IC
48006 dh = ch;
48007 dl = cl;
8b095871 48008
cf6c2044
IC
48009 ch = bh;
48010 cl = bl;
8b095871 48011
cf6c2044
IC
48012 bh = ah;
48013 bl = al;
8b095871 48014
cf6c2044
IC
48015 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
48016 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
48017 }
8b095871 48018
cf6c2044
IC
48019 sum64(this.h, 0, ah, al);
48020 sum64(this.h, 2, bh, bl);
48021 sum64(this.h, 4, ch, cl);
48022 sum64(this.h, 6, dh, dl);
48023 sum64(this.h, 8, eh, el);
48024 sum64(this.h, 10, fh, fl);
48025 sum64(this.h, 12, gh, gl);
48026 sum64(this.h, 14, hh, hl);
48027};
8b095871 48028
cf6c2044
IC
48029SHA512.prototype._digest = function digest(enc) {
48030 if (enc === 'hex')
48031 return utils.toHex32(this.h, 'big');
48032 else
48033 return utils.split32(this.h, 'big');
48034};
8b095871 48035
cf6c2044
IC
48036function SHA384() {
48037 if (!(this instanceof SHA384))
48038 return new SHA384();
8b095871 48039
cf6c2044
IC
48040 SHA512.call(this);
48041 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
48042 0x629a292a, 0x367cd507,
48043 0x9159015a, 0x3070dd17,
48044 0x152fecd8, 0xf70e5939,
48045 0x67332667, 0xffc00b31,
48046 0x8eb44a87, 0x68581511,
48047 0xdb0c2e0d, 0x64f98fa7,
48048 0x47b5481d, 0xbefa4fa4 ];
9987f0c1 48049}
cf6c2044
IC
48050utils.inherits(SHA384, SHA512);
48051exports.sha384 = SHA384;
8b095871 48052
cf6c2044
IC
48053SHA384.blockSize = 1024;
48054SHA384.outSize = 384;
48055SHA384.hmacStrength = 192;
48056SHA384.padLength = 128;
9987f0c1 48057
cf6c2044
IC
48058SHA384.prototype._digest = function digest(enc) {
48059 if (enc === 'hex')
48060 return utils.toHex32(this.h.slice(0, 12), 'big');
48061 else
48062 return utils.split32(this.h.slice(0, 12), 'big');
48063};
8b095871 48064
cf6c2044
IC
48065function SHA1() {
48066 if (!(this instanceof SHA1))
48067 return new SHA1();
8b095871 48068
cf6c2044
IC
48069 BlockHash.call(this);
48070 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
48071 0x10325476, 0xc3d2e1f0 ];
48072 this.W = new Array(80);
9987f0c1 48073}
8b095871 48074
cf6c2044
IC
48075utils.inherits(SHA1, BlockHash);
48076exports.sha1 = SHA1;
8b095871 48077
cf6c2044
IC
48078SHA1.blockSize = 512;
48079SHA1.outSize = 160;
48080SHA1.hmacStrength = 80;
48081SHA1.padLength = 64;
8b095871 48082
cf6c2044
IC
48083SHA1.prototype._update = function _update(msg, start) {
48084 var W = this.W;
9987f0c1 48085
cf6c2044
IC
48086 for (var i = 0; i < 16; i++)
48087 W[i] = msg[start + i];
8b095871 48088
cf6c2044
IC
48089 for(; i < W.length; i++)
48090 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
8b095871 48091
cf6c2044
IC
48092 var a = this.h[0];
48093 var b = this.h[1];
48094 var c = this.h[2];
48095 var d = this.h[3];
48096 var e = this.h[4];
8b095871 48097
cf6c2044
IC
48098 for (var i = 0; i < W.length; i++) {
48099 var s = ~~(i / 20);
48100 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
48101 e = d;
48102 d = c;
48103 c = rotl32(b, 30);
48104 b = a;
48105 a = t;
9987f0c1 48106 }
8b095871 48107
cf6c2044
IC
48108 this.h[0] = sum32(this.h[0], a);
48109 this.h[1] = sum32(this.h[1], b);
48110 this.h[2] = sum32(this.h[2], c);
48111 this.h[3] = sum32(this.h[3], d);
48112 this.h[4] = sum32(this.h[4], e);
48113};
8b095871 48114
cf6c2044
IC
48115SHA1.prototype._digest = function digest(enc) {
48116 if (enc === 'hex')
48117 return utils.toHex32(this.h, 'big');
48118 else
48119 return utils.split32(this.h, 'big');
48120};
8b095871 48121
cf6c2044
IC
48122function ch32(x, y, z) {
48123 return (x & y) ^ ((~x) & z);
8b095871
IC
48124}
48125
cf6c2044
IC
48126function maj32(x, y, z) {
48127 return (x & y) ^ (x & z) ^ (y & z);
48128}
8b095871 48129
cf6c2044
IC
48130function p32(x, y, z) {
48131 return x ^ y ^ z;
48132}
8b095871 48133
cf6c2044
IC
48134function s0_256(x) {
48135 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
48136}
8b095871 48137
cf6c2044
IC
48138function s1_256(x) {
48139 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
8b095871
IC
48140}
48141
cf6c2044
IC
48142function g0_256(x) {
48143 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
48144}
8b095871 48145
cf6c2044
IC
48146function g1_256(x) {
48147 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
48148}
8b095871 48149
cf6c2044
IC
48150function ft_1(s, x, y, z) {
48151 if (s === 0)
48152 return ch32(x, y, z);
48153 if (s === 1 || s === 3)
48154 return p32(x, y, z);
48155 if (s === 2)
48156 return maj32(x, y, z);
48157}
8b095871 48158
cf6c2044
IC
48159function ch64_hi(xh, xl, yh, yl, zh, zl) {
48160 var r = (xh & yh) ^ ((~xh) & zh);
48161 if (r < 0)
48162 r += 0x100000000;
48163 return r;
48164}
8b095871 48165
cf6c2044
IC
48166function ch64_lo(xh, xl, yh, yl, zh, zl) {
48167 var r = (xl & yl) ^ ((~xl) & zl);
48168 if (r < 0)
48169 r += 0x100000000;
48170 return r;
48171}
8b095871 48172
cf6c2044
IC
48173function maj64_hi(xh, xl, yh, yl, zh, zl) {
48174 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
48175 if (r < 0)
48176 r += 0x100000000;
48177 return r;
8b095871
IC
48178}
48179
cf6c2044
IC
48180function maj64_lo(xh, xl, yh, yl, zh, zl) {
48181 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
48182 if (r < 0)
48183 r += 0x100000000;
48184 return r;
48185}
8b095871 48186
cf6c2044
IC
48187function s0_512_hi(xh, xl) {
48188 var c0_hi = rotr64_hi(xh, xl, 28);
48189 var c1_hi = rotr64_hi(xl, xh, 2); // 34
48190 var c2_hi = rotr64_hi(xl, xh, 7); // 39
8b095871 48191
cf6c2044
IC
48192 var r = c0_hi ^ c1_hi ^ c2_hi;
48193 if (r < 0)
48194 r += 0x100000000;
48195 return r;
48196}
9987f0c1 48197
cf6c2044
IC
48198function s0_512_lo(xh, xl) {
48199 var c0_lo = rotr64_lo(xh, xl, 28);
48200 var c1_lo = rotr64_lo(xl, xh, 2); // 34
48201 var c2_lo = rotr64_lo(xl, xh, 7); // 39
9987f0c1 48202
cf6c2044
IC
48203 var r = c0_lo ^ c1_lo ^ c2_lo;
48204 if (r < 0)
48205 r += 0x100000000;
48206 return r;
8b095871
IC
48207}
48208
cf6c2044
IC
48209function s1_512_hi(xh, xl) {
48210 var c0_hi = rotr64_hi(xh, xl, 14);
48211 var c1_hi = rotr64_hi(xh, xl, 18);
48212 var c2_hi = rotr64_hi(xl, xh, 9); // 41
8b095871 48213
cf6c2044
IC
48214 var r = c0_hi ^ c1_hi ^ c2_hi;
48215 if (r < 0)
48216 r += 0x100000000;
48217 return r;
48218}
8b095871 48219
cf6c2044
IC
48220function s1_512_lo(xh, xl) {
48221 var c0_lo = rotr64_lo(xh, xl, 14);
48222 var c1_lo = rotr64_lo(xh, xl, 18);
48223 var c2_lo = rotr64_lo(xl, xh, 9); // 41
8b095871 48224
cf6c2044
IC
48225 var r = c0_lo ^ c1_lo ^ c2_lo;
48226 if (r < 0)
48227 r += 0x100000000;
48228 return r;
9987f0c1 48229}
8b095871 48230
cf6c2044
IC
48231function g0_512_hi(xh, xl) {
48232 var c0_hi = rotr64_hi(xh, xl, 1);
48233 var c1_hi = rotr64_hi(xh, xl, 8);
48234 var c2_hi = shr64_hi(xh, xl, 7);
8b095871 48235
cf6c2044
IC
48236 var r = c0_hi ^ c1_hi ^ c2_hi;
48237 if (r < 0)
48238 r += 0x100000000;
48239 return r;
8b095871
IC
48240}
48241
cf6c2044
IC
48242function g0_512_lo(xh, xl) {
48243 var c0_lo = rotr64_lo(xh, xl, 1);
48244 var c1_lo = rotr64_lo(xh, xl, 8);
48245 var c2_lo = shr64_lo(xh, xl, 7);
9987f0c1 48246
cf6c2044
IC
48247 var r = c0_lo ^ c1_lo ^ c2_lo;
48248 if (r < 0)
48249 r += 0x100000000;
48250 return r;
48251}
8b095871 48252
cf6c2044
IC
48253function g1_512_hi(xh, xl) {
48254 var c0_hi = rotr64_hi(xh, xl, 19);
48255 var c1_hi = rotr64_hi(xl, xh, 29); // 61
48256 var c2_hi = shr64_hi(xh, xl, 6);
8b095871 48257
cf6c2044
IC
48258 var r = c0_hi ^ c1_hi ^ c2_hi;
48259 if (r < 0)
48260 r += 0x100000000;
48261 return r;
48262}
8b095871 48263
cf6c2044
IC
48264function g1_512_lo(xh, xl) {
48265 var c0_lo = rotr64_lo(xh, xl, 19);
48266 var c1_lo = rotr64_lo(xl, xh, 29); // 61
48267 var c2_lo = shr64_lo(xh, xl, 6);
9987f0c1 48268
cf6c2044
IC
48269 var r = c0_lo ^ c1_lo ^ c2_lo;
48270 if (r < 0)
48271 r += 0x100000000;
48272 return r;
48273}
9987f0c1 48274
cf6c2044
IC
48275},{"../hash":114}],119:[function(require,module,exports){
48276var utils = exports;
48277var inherits = require('inherits');
9987f0c1 48278
cf6c2044
IC
48279function toArray(msg, enc) {
48280 if (Array.isArray(msg))
48281 return msg.slice();
48282 if (!msg)
48283 return [];
48284 var res = [];
48285 if (typeof msg === 'string') {
48286 if (!enc) {
48287 for (var i = 0; i < msg.length; i++) {
48288 var c = msg.charCodeAt(i);
48289 var hi = c >> 8;
48290 var lo = c & 0xff;
48291 if (hi)
48292 res.push(hi, lo);
48293 else
48294 res.push(lo);
48295 }
48296 } else if (enc === 'hex') {
48297 msg = msg.replace(/[^a-z0-9]+/ig, '');
48298 if (msg.length % 2 !== 0)
48299 msg = '0' + msg;
48300 for (var i = 0; i < msg.length; i += 2)
48301 res.push(parseInt(msg[i] + msg[i + 1], 16));
48302 }
48303 } else {
48304 for (var i = 0; i < msg.length; i++)
48305 res[i] = msg[i] | 0;
48306 }
48307 return res;
8b095871 48308}
cf6c2044 48309utils.toArray = toArray;
8b095871 48310
cf6c2044
IC
48311function toHex(msg) {
48312 var res = '';
48313 for (var i = 0; i < msg.length; i++)
48314 res += zero2(msg[i].toString(16));
48315 return res;
48316}
48317utils.toHex = toHex;
8b095871 48318
cf6c2044
IC
48319function htonl(w) {
48320 var res = (w >>> 24) |
48321 ((w >>> 8) & 0xff00) |
48322 ((w << 8) & 0xff0000) |
48323 ((w & 0xff) << 24);
48324 return res >>> 0;
48325}
48326utils.htonl = htonl;
8b095871 48327
cf6c2044
IC
48328function toHex32(msg, endian) {
48329 var res = '';
48330 for (var i = 0; i < msg.length; i++) {
48331 var w = msg[i];
48332 if (endian === 'little')
48333 w = htonl(w);
48334 res += zero8(w.toString(16));
9987f0c1 48335 }
cf6c2044
IC
48336 return res;
48337}
48338utils.toHex32 = toHex32;
8b095871 48339
cf6c2044
IC
48340function zero2(word) {
48341 if (word.length === 1)
48342 return '0' + word;
48343 else
48344 return word;
48345}
48346utils.zero2 = zero2;
8b095871 48347
cf6c2044
IC
48348function zero8(word) {
48349 if (word.length === 7)
48350 return '0' + word;
48351 else if (word.length === 6)
48352 return '00' + word;
48353 else if (word.length === 5)
48354 return '000' + word;
48355 else if (word.length === 4)
48356 return '0000' + word;
48357 else if (word.length === 3)
48358 return '00000' + word;
48359 else if (word.length === 2)
48360 return '000000' + word;
48361 else if (word.length === 1)
48362 return '0000000' + word;
48363 else
48364 return word;
8b095871 48365}
cf6c2044 48366utils.zero8 = zero8;
8b095871 48367
cf6c2044
IC
48368function join32(msg, start, end, endian) {
48369 var len = end - start;
48370 assert(len % 4 === 0);
48371 var res = new Array(len / 4);
48372 for (var i = 0, k = start; i < res.length; i++, k += 4) {
48373 var w;
48374 if (endian === 'big')
48375 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
48376 else
48377 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
48378 res[i] = w >>> 0;
48379 }
48380 return res;
48381}
48382utils.join32 = join32;
8b095871 48383
cf6c2044
IC
48384function split32(msg, endian) {
48385 var res = new Array(msg.length * 4);
48386 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
48387 var m = msg[i];
48388 if (endian === 'big') {
48389 res[k] = m >>> 24;
48390 res[k + 1] = (m >>> 16) & 0xff;
48391 res[k + 2] = (m >>> 8) & 0xff;
48392 res[k + 3] = m & 0xff;
48393 } else {
48394 res[k + 3] = m >>> 24;
48395 res[k + 2] = (m >>> 16) & 0xff;
48396 res[k + 1] = (m >>> 8) & 0xff;
48397 res[k] = m & 0xff;
48398 }
48399 }
48400 return res;
48401}
48402utils.split32 = split32;
8b095871 48403
cf6c2044
IC
48404function rotr32(w, b) {
48405 return (w >>> b) | (w << (32 - b));
48406}
48407utils.rotr32 = rotr32;
8b095871 48408
cf6c2044
IC
48409function rotl32(w, b) {
48410 return (w << b) | (w >>> (32 - b));
48411}
48412utils.rotl32 = rotl32;
8b095871 48413
cf6c2044
IC
48414function sum32(a, b) {
48415 return (a + b) >>> 0;
48416}
48417utils.sum32 = sum32;
8b095871 48418
cf6c2044
IC
48419function sum32_3(a, b, c) {
48420 return (a + b + c) >>> 0;
48421}
48422utils.sum32_3 = sum32_3;
8b095871 48423
cf6c2044
IC
48424function sum32_4(a, b, c, d) {
48425 return (a + b + c + d) >>> 0;
9987f0c1 48426}
cf6c2044 48427utils.sum32_4 = sum32_4;
8b095871 48428
cf6c2044
IC
48429function sum32_5(a, b, c, d, e) {
48430 return (a + b + c + d + e) >>> 0;
48431}
48432utils.sum32_5 = sum32_5;
9987f0c1 48433
cf6c2044
IC
48434function assert(cond, msg) {
48435 if (!cond)
48436 throw new Error(msg || 'Assertion failed');
48437}
48438utils.assert = assert;
9987f0c1 48439
cf6c2044 48440utils.inherits = inherits;
9987f0c1 48441
cf6c2044
IC
48442function sum64(buf, pos, ah, al) {
48443 var bh = buf[pos];
48444 var bl = buf[pos + 1];
8b095871 48445
cf6c2044
IC
48446 var lo = (al + bl) >>> 0;
48447 var hi = (lo < al ? 1 : 0) + ah + bh;
48448 buf[pos] = hi >>> 0;
48449 buf[pos + 1] = lo;
9987f0c1 48450}
cf6c2044 48451exports.sum64 = sum64;
8b095871 48452
cf6c2044
IC
48453function sum64_hi(ah, al, bh, bl) {
48454 var lo = (al + bl) >>> 0;
48455 var hi = (lo < al ? 1 : 0) + ah + bh;
48456 return hi >>> 0;
48457};
48458exports.sum64_hi = sum64_hi;
9987f0c1 48459
cf6c2044
IC
48460function sum64_lo(ah, al, bh, bl) {
48461 var lo = al + bl;
48462 return lo >>> 0;
48463};
48464exports.sum64_lo = sum64_lo;
8b095871 48465
cf6c2044
IC
48466function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
48467 var carry = 0;
48468 var lo = al;
48469 lo = (lo + bl) >>> 0;
48470 carry += lo < al ? 1 : 0;
48471 lo = (lo + cl) >>> 0;
48472 carry += lo < cl ? 1 : 0;
48473 lo = (lo + dl) >>> 0;
48474 carry += lo < dl ? 1 : 0;
8b095871 48475
cf6c2044
IC
48476 var hi = ah + bh + ch + dh + carry;
48477 return hi >>> 0;
48478};
48479exports.sum64_4_hi = sum64_4_hi;
8b095871 48480
cf6c2044
IC
48481function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
48482 var lo = al + bl + cl + dl;
48483 return lo >>> 0;
48484};
48485exports.sum64_4_lo = sum64_4_lo;
8b095871 48486
cf6c2044
IC
48487function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48488 var carry = 0;
48489 var lo = al;
48490 lo = (lo + bl) >>> 0;
48491 carry += lo < al ? 1 : 0;
48492 lo = (lo + cl) >>> 0;
48493 carry += lo < cl ? 1 : 0;
48494 lo = (lo + dl) >>> 0;
48495 carry += lo < dl ? 1 : 0;
48496 lo = (lo + el) >>> 0;
48497 carry += lo < el ? 1 : 0;
8b095871 48498
cf6c2044
IC
48499 var hi = ah + bh + ch + dh + eh + carry;
48500 return hi >>> 0;
48501};
48502exports.sum64_5_hi = sum64_5_hi;
8b095871 48503
cf6c2044
IC
48504function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48505 var lo = al + bl + cl + dl + el;
8b095871 48506
cf6c2044
IC
48507 return lo >>> 0;
48508};
48509exports.sum64_5_lo = sum64_5_lo;
8b095871 48510
cf6c2044
IC
48511function rotr64_hi(ah, al, num) {
48512 var r = (al << (32 - num)) | (ah >>> num);
48513 return r >>> 0;
48514};
48515exports.rotr64_hi = rotr64_hi;
8b095871 48516
cf6c2044
IC
48517function rotr64_lo(ah, al, num) {
48518 var r = (ah << (32 - num)) | (al >>> num);
48519 return r >>> 0;
48520};
48521exports.rotr64_lo = rotr64_lo;
8b095871 48522
cf6c2044
IC
48523function shr64_hi(ah, al, num) {
48524 return ah >>> num;
48525};
48526exports.shr64_hi = shr64_hi;
8b095871 48527
cf6c2044
IC
48528function shr64_lo(ah, al, num) {
48529 var r = (ah << (32 - num)) | (al >>> num);
48530 return r >>> 0;
48531};
48532exports.shr64_lo = shr64_lo;
8b095871 48533
cf6c2044
IC
48534},{"inherits":121}],120:[function(require,module,exports){
48535'use strict';
8b095871 48536
cf6c2044
IC
48537var hash = require('hash.js');
48538var utils = require('minimalistic-crypto-utils');
48539var assert = require('minimalistic-assert');
8b095871 48540
cf6c2044
IC
48541function HmacDRBG(options) {
48542 if (!(this instanceof HmacDRBG))
48543 return new HmacDRBG(options);
48544 this.hash = options.hash;
48545 this.predResist = !!options.predResist;
8b095871 48546
cf6c2044
IC
48547 this.outLen = this.hash.outSize;
48548 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
8b095871 48549
cf6c2044
IC
48550 this._reseed = null;
48551 this.reseedInterval = null;
48552 this.K = null;
48553 this.V = null;
8b095871 48554
cf6c2044
IC
48555 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
48556 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
48557 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
48558 assert(entropy.length >= (this.minEntropy / 8),
48559 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48560 this._init(entropy, nonce, pers);
9987f0c1 48561}
cf6c2044 48562module.exports = HmacDRBG;
8b095871 48563
cf6c2044
IC
48564HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
48565 var seed = entropy.concat(nonce).concat(pers);
8b095871 48566
cf6c2044
IC
48567 this.K = new Array(this.outLen / 8);
48568 this.V = new Array(this.outLen / 8);
48569 for (var i = 0; i < this.V.length; i++) {
48570 this.K[i] = 0x00;
48571 this.V[i] = 0x01;
9987f0c1 48572 }
8b095871 48573
cf6c2044
IC
48574 this._update(seed);
48575 this._reseed = 1;
48576 this.reseedInterval = 0x1000000000000; // 2^48
48577};
8b095871 48578
cf6c2044
IC
48579HmacDRBG.prototype._hmac = function hmac() {
48580 return new hash.hmac(this.hash, this.K);
48581};
8b095871 48582
cf6c2044
IC
48583HmacDRBG.prototype._update = function update(seed) {
48584 var kmac = this._hmac()
48585 .update(this.V)
48586 .update([ 0x00 ]);
48587 if (seed)
48588 kmac = kmac.update(seed);
48589 this.K = kmac.digest();
48590 this.V = this._hmac().update(this.V).digest();
48591 if (!seed)
48592 return;
8b095871 48593
cf6c2044
IC
48594 this.K = this._hmac()
48595 .update(this.V)
48596 .update([ 0x01 ])
48597 .update(seed)
48598 .digest();
48599 this.V = this._hmac().update(this.V).digest();
48600};
8b095871 48601
cf6c2044
IC
48602HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
48603 // Optional entropy enc
48604 if (typeof entropyEnc !== 'string') {
48605 addEnc = add;
48606 add = entropyEnc;
48607 entropyEnc = null;
9987f0c1 48608 }
8b095871 48609
cf6c2044
IC
48610 entropy = utils.toArray(entropy, entropyEnc);
48611 add = utils.toArray(add, addEnc);
8b095871 48612
cf6c2044
IC
48613 assert(entropy.length >= (this.minEntropy / 8),
48614 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
8b095871 48615
cf6c2044
IC
48616 this._update(entropy.concat(add || []));
48617 this._reseed = 1;
48618};
8b095871 48619
cf6c2044
IC
48620HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
48621 if (this._reseed > this.reseedInterval)
48622 throw new Error('Reseed is required');
8b095871 48623
cf6c2044
IC
48624 // Optional encoding
48625 if (typeof enc !== 'string') {
48626 addEnc = add;
48627 add = enc;
48628 enc = null;
48629 }
8b095871 48630
cf6c2044
IC
48631 // Optional additional data
48632 if (add) {
48633 add = utils.toArray(add, addEnc || 'hex');
48634 this._update(add);
48635 }
8b095871 48636
cf6c2044
IC
48637 var temp = [];
48638 while (temp.length < len) {
48639 this.V = this._hmac().update(this.V).digest();
48640 temp = temp.concat(this.V);
48641 }
8b095871 48642
cf6c2044
IC
48643 var res = temp.slice(0, len);
48644 this._update(add);
48645 this._reseed++;
48646 return utils.encode(res, enc);
48647};
48648
48649},{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
48650arguments[4][9][0].apply(exports,arguments)
48651},{"dup":9}],122:[function(require,module,exports){
9987f0c1
IC
48652(function (Buffer){
48653// constant-space merkle root calculation algorithm
48654module.exports = function fastRoot (values, digestFn) {
48655 if (!Array.isArray(values)) throw TypeError('Expected values Array')
48656 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 48657
9987f0c1
IC
48658 var length = values.length
48659 var results = values.concat()
8b095871 48660
9987f0c1
IC
48661 while (length > 1) {
48662 var j = 0
8b095871 48663
9987f0c1
IC
48664 for (var i = 0; i < length; i += 2, ++j) {
48665 var left = results[i]
48666 var right = i + 1 === length ? left : results[i + 1]
48667 var data = Buffer.concat([left, right])
8b095871 48668
9987f0c1 48669 results[j] = digestFn(data)
8b095871
IC
48670 }
48671
9987f0c1 48672 length = j
8b095871
IC
48673 }
48674
9987f0c1 48675 return results[0]
8b095871
IC
48676}
48677
8b095871 48678}).call(this,require("buffer").Buffer)
cf6c2044
IC
48679},{"buffer":5}],123:[function(require,module,exports){
48680module.exports = assert;
48681
48682function assert(val, msg) {
48683 if (!val)
48684 throw new Error(msg || 'Assertion failed');
48685}
48686
48687assert.equal = function assertEqual(l, r, msg) {
48688 if (l != r)
48689 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
48690};
48691
48692},{}],124:[function(require,module,exports){
48693'use strict';
48694
48695var utils = exports;
48696
48697function toArray(msg, enc) {
48698 if (Array.isArray(msg))
48699 return msg.slice();
48700 if (!msg)
48701 return [];
48702 var res = [];
48703 if (typeof msg !== 'string') {
48704 for (var i = 0; i < msg.length; i++)
48705 res[i] = msg[i] | 0;
48706 return res;
48707 }
48708 if (enc === 'hex') {
48709 msg = msg.replace(/[^a-z0-9]+/ig, '');
48710 if (msg.length % 2 !== 0)
48711 msg = '0' + msg;
48712 for (var i = 0; i < msg.length; i += 2)
48713 res.push(parseInt(msg[i] + msg[i + 1], 16));
48714 } else {
48715 for (var i = 0; i < msg.length; i++) {
48716 var c = msg.charCodeAt(i);
48717 var hi = c >> 8;
48718 var lo = c & 0xff;
48719 if (hi)
48720 res.push(hi, lo);
48721 else
48722 res.push(lo);
48723 }
48724 }
48725 return res;
48726}
48727utils.toArray = toArray;
48728
48729function zero2(word) {
48730 if (word.length === 1)
48731 return '0' + word;
48732 else
48733 return word;
48734}
48735utils.zero2 = zero2;
48736
48737function toHex(msg) {
48738 var res = '';
48739 for (var i = 0; i < msg.length; i++)
48740 res += zero2(msg[i].toString(16));
48741 return res;
48742}
48743utils.toHex = toHex;
48744
48745utils.encode = function encode(arr, enc) {
48746 if (enc === 'hex')
48747 return toHex(arr);
48748 else
48749 return arr;
48750};
48751
48752},{}],125:[function(require,module,exports){
9987f0c1
IC
48753var OPS = require('bitcoin-ops')
48754
48755function encodingLength (i) {
48756 return i < OPS.OP_PUSHDATA1 ? 1
48757 : i <= 0xff ? 2
48758 : i <= 0xffff ? 3
48759 : 5
8b095871
IC
48760}
48761
9987f0c1
IC
48762function encode (buffer, number, offset) {
48763 var size = encodingLength(number)
8b095871 48764
9987f0c1
IC
48765 // ~6 bit
48766 if (size === 1) {
48767 buffer.writeUInt8(number, offset)
8b095871 48768
9987f0c1
IC
48769 // 8 bit
48770 } else if (size === 2) {
48771 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
48772 buffer.writeUInt8(number, offset + 1)
48773
48774 // 16 bit
48775 } else if (size === 3) {
48776 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
48777 buffer.writeUInt16LE(number, offset + 1)
8b095871 48778
9987f0c1
IC
48779 // 32 bit
48780 } else {
48781 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
48782 buffer.writeUInt32LE(number, offset + 1)
48783 }
8b095871 48784
9987f0c1 48785 return size
8b095871
IC
48786}
48787
9987f0c1
IC
48788function decode (buffer, offset) {
48789 var opcode = buffer.readUInt8(offset)
48790 var number, size
8b095871 48791
9987f0c1
IC
48792 // ~6 bit
48793 if (opcode < OPS.OP_PUSHDATA1) {
48794 number = opcode
48795 size = 1
8b095871 48796
9987f0c1
IC
48797 // 8 bit
48798 } else if (opcode === OPS.OP_PUSHDATA1) {
48799 if (offset + 2 > buffer.length) return null
48800 number = buffer.readUInt8(offset + 1)
48801 size = 2
8b095871 48802
9987f0c1
IC
48803 // 16 bit
48804 } else if (opcode === OPS.OP_PUSHDATA2) {
48805 if (offset + 3 > buffer.length) return null
48806 number = buffer.readUInt16LE(offset + 1)
48807 size = 3
8b095871 48808
9987f0c1
IC
48809 // 32 bit
48810 } else {
48811 if (offset + 5 > buffer.length) return null
48812 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 48813
9987f0c1
IC
48814 number = buffer.readUInt32LE(offset + 1)
48815 size = 5
48816 }
8b095871 48817
9987f0c1
IC
48818 return {
48819 opcode: opcode,
48820 number: number,
48821 size: size
48822 }
8b095871
IC
48823}
48824
48825module.exports = {
9987f0c1
IC
48826 encodingLength: encodingLength,
48827 encode: encode,
48828 decode: decode
8b095871
IC
48829}
48830
cf6c2044 48831},{"bitcoin-ops":42}],126:[function(require,module,exports){
9987f0c1
IC
48832(function (process,global){
48833'use strict'
8b095871 48834
9987f0c1
IC
48835function oldBrowser () {
48836 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
48837}
48838
9987f0c1
IC
48839var Buffer = require('safe-buffer').Buffer
48840var crypto = global.crypto || global.msCrypto
8b095871 48841
9987f0c1
IC
48842if (crypto && crypto.getRandomValues) {
48843 module.exports = randomBytes
48844} else {
48845 module.exports = oldBrowser
48846}
8b095871 48847
9987f0c1
IC
48848function randomBytes (size, cb) {
48849 // phantomjs needs to throw
48850 if (size > 65536) throw new Error('requested too many random bytes')
48851 // in case browserify isn't using the Uint8Array version
48852 var rawBytes = new global.Uint8Array(size)
8b095871 48853
9987f0c1
IC
48854 // This will not work in older browsers.
48855 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
48856 if (size > 0) { // getRandomValues fails on IE if size == 0
48857 crypto.getRandomValues(rawBytes)
8b095871 48858 }
8b095871 48859
9987f0c1
IC
48860 // XXX: phantomjs doesn't like a buffer being passed here
48861 var bytes = Buffer.from(rawBytes.buffer)
8b095871 48862
9987f0c1
IC
48863 if (typeof cb === 'function') {
48864 return process.nextTick(function () {
48865 cb(null, bytes)
48866 })
48867 }
8b095871 48868
9987f0c1 48869 return bytes
8b095871
IC
48870}
48871
9987f0c1 48872}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
cf6c2044 48873},{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
9987f0c1
IC
48874(function (Buffer){
48875'use strict'
48876var inherits = require('inherits')
48877var HashBase = require('hash-base')
8b095871 48878
9987f0c1
IC
48879function RIPEMD160 () {
48880 HashBase.call(this, 64)
8b095871 48881
9987f0c1
IC
48882 // state
48883 this._a = 0x67452301
48884 this._b = 0xefcdab89
48885 this._c = 0x98badcfe
48886 this._d = 0x10325476
48887 this._e = 0xc3d2e1f0
8b095871
IC
48888}
48889
9987f0c1
IC
48890inherits(RIPEMD160, HashBase)
48891
48892RIPEMD160.prototype._update = function () {
48893 var m = new Array(16)
48894 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
48895
48896 var al = this._a
48897 var bl = this._b
48898 var cl = this._c
48899 var dl = this._d
48900 var el = this._e
48901
48902 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
48903 // K = 0x00000000
48904 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
48905 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
48906 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
48907 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
48908 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
48909 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
48910 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
48911 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
48912 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
48913 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
48914 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
48915 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
48916 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
48917 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
48918 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
48919 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
48920 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
48921
48922 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
48923 // K = 0x5a827999
48924 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
48925 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
48926 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
48927 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
48928 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
48929 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
48930 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
48931 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
48932 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
48933 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
48934 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
48935 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
48936 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
48937 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
48938 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
48939 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
48940 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
48941
48942 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
48943 // K = 0x6ed9eba1
48944 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
48945 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
48946 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
48947 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
48948 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
48949 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
48950 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
48951 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
48952 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
48953 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
48954 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
48955 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
48956 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
48957 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
48958 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
48959 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
48960 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
48961
48962 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
48963 // K = 0x8f1bbcdc
48964 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
48965 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
48966 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
48967 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
48968 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
48969 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
48970 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
48971 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
48972 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
48973 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
48974 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
48975 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
48976 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
48977 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
48978 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
48979 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
48980 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
48981
48982 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
48983 // K = 0xa953fd4e
48984 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
48985 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
48986 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
48987 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
48988 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
48989 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
48990 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
48991 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
48992 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
48993 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
48994 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
48995 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
48996 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
48997 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
48998 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
48999 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
49000 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
49001
49002 var ar = this._a
49003 var br = this._b
49004 var cr = this._c
49005 var dr = this._d
49006 var er = this._e
49007
49008 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
49009 // K' = 0x50a28be6
49010 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
49011 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
49012 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
49013 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
49014 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
49015 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
49016 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
49017 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
49018 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
49019 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
49020 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
49021 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
49022 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
49023 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
49024 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
49025 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
49026 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
49027
49028 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
49029 // K' = 0x5c4dd124
49030 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
49031 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
49032 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
49033 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
49034 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
49035 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
49036 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
49037 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
49038 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
49039 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
49040 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
49041 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
49042 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
49043 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
49044 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
49045 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
49046 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
49047
49048 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
49049 // K' = 0x6d703ef3
49050 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
49051 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
49052 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
49053 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
49054 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
49055 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
49056 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
49057 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
49058 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
49059 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
49060 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
49061 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
49062 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
49063 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
49064 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
49065 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
49066 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
49067
49068 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
49069 // K' = 0x7a6d76e9
49070 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
49071 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
49072 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
49073 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
49074 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
49075 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
49076 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
49077 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
49078 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
49079 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
49080 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
49081 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
49082 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
49083 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
49084 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
49085 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
49086 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
49087
49088 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
49089 // K' = 0x00000000
49090 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
49091 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
49092 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
49093 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
49094 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
49095 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
49096 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
49097 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
49098 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
49099 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
49100 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
49101 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
49102 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
49103 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
49104 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
49105 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
49106 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
49107
49108 // change state
49109 var t = (this._b + cl + dr) | 0
49110 this._b = (this._c + dl + er) | 0
49111 this._c = (this._d + el + ar) | 0
49112 this._d = (this._e + al + br) | 0
49113 this._e = (this._a + bl + cr) | 0
49114 this._a = t
49115}
49116
49117RIPEMD160.prototype._digest = function () {
49118 // create padding and handle blocks
49119 this._block[this._blockOffset++] = 0x80
49120 if (this._blockOffset > 56) {
49121 this._block.fill(0, this._blockOffset, 64)
49122 this._update()
49123 this._blockOffset = 0
49124 }
49125
49126 this._block.fill(0, this._blockOffset, 56)
49127 this._block.writeUInt32LE(this._length[0], 56)
49128 this._block.writeUInt32LE(this._length[1], 60)
49129 this._update()
49130
49131 // produce result
49132 var buffer = new Buffer(20)
49133 buffer.writeInt32LE(this._a, 0)
49134 buffer.writeInt32LE(this._b, 4)
49135 buffer.writeInt32LE(this._c, 8)
49136 buffer.writeInt32LE(this._d, 12)
49137 buffer.writeInt32LE(this._e, 16)
49138 return buffer
49139}
8b095871 49140
9987f0c1
IC
49141function rotl (x, n) {
49142 return (x << n) | (x >>> (32 - n))
49143}
8b095871 49144
9987f0c1
IC
49145function fn1 (a, b, c, d, e, m, k, s) {
49146 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
49147}
8b095871 49148
9987f0c1
IC
49149function fn2 (a, b, c, d, e, m, k, s) {
49150 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
49151}
8b095871 49152
9987f0c1
IC
49153function fn3 (a, b, c, d, e, m, k, s) {
49154 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
49155}
8b095871 49156
9987f0c1
IC
49157function fn4 (a, b, c, d, e, m, k, s) {
49158 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
49159}
8b095871 49160
9987f0c1
IC
49161function fn5 (a, b, c, d, e, m, k, s) {
49162 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
49163}
8b095871 49164
9987f0c1 49165module.exports = RIPEMD160
8b095871 49166
9987f0c1 49167}).call(this,require("buffer").Buffer)
cf6c2044
IC
49168},{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
49169/* eslint-disable node/no-deprecated-api */
49170var buffer = require('buffer')
49171var Buffer = buffer.Buffer
49172
49173// alternative to using Object.keys for old browsers
49174function copyProps (src, dst) {
49175 for (var key in src) {
49176 dst[key] = src[key]
49177 }
49178}
49179if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49180 module.exports = buffer
49181} else {
49182 // Copy properties from require('buffer')
49183 copyProps(buffer, exports)
49184 exports.Buffer = SafeBuffer
49185}
49186
49187function SafeBuffer (arg, encodingOrOffset, length) {
49188 return Buffer(arg, encodingOrOffset, length)
49189}
49190
49191// Copy static methods from Buffer
49192copyProps(Buffer, SafeBuffer)
49193
49194SafeBuffer.from = function (arg, encodingOrOffset, length) {
49195 if (typeof arg === 'number') {
49196 throw new TypeError('Argument must not be a number')
49197 }
49198 return Buffer(arg, encodingOrOffset, length)
49199}
49200
49201SafeBuffer.alloc = function (size, fill, encoding) {
49202 if (typeof size !== 'number') {
49203 throw new TypeError('Argument must be a number')
49204 }
49205 var buf = Buffer(size)
49206 if (fill !== undefined) {
49207 if (typeof encoding === 'string') {
49208 buf.fill(fill, encoding)
49209 } else {
49210 buf.fill(fill)
49211 }
49212 } else {
49213 buf.fill(0)
49214 }
49215 return buf
49216}
49217
49218SafeBuffer.allocUnsafe = function (size) {
49219 if (typeof size !== 'number') {
49220 throw new TypeError('Argument must be a number')
49221 }
49222 return Buffer(size)
49223}
49224
49225SafeBuffer.allocUnsafeSlow = function (size) {
49226 if (typeof size !== 'number') {
49227 throw new TypeError('Argument must be a number')
49228 }
49229 return buffer.SlowBuffer(size)
49230}
49231
49232},{"buffer":5}],129:[function(require,module,exports){
49233var Buffer = require('safe-buffer').Buffer
49234
9987f0c1
IC
49235// prototype class for hash functions
49236function Hash (blockSize, finalSize) {
cf6c2044 49237 this._block = Buffer.alloc(blockSize)
9987f0c1
IC
49238 this._finalSize = finalSize
49239 this._blockSize = blockSize
49240 this._len = 0
9987f0c1
IC
49241}
49242
49243Hash.prototype.update = function (data, enc) {
49244 if (typeof data === 'string') {
49245 enc = enc || 'utf8'
cf6c2044 49246 data = Buffer.from(data, enc)
8b095871
IC
49247 }
49248
cf6c2044
IC
49249 var block = this._block
49250 var blockSize = this._blockSize
49251 var length = data.length
49252 var accum = this._len
8b095871 49253
cf6c2044
IC
49254 for (var offset = 0; offset < length;) {
49255 var assigned = accum % blockSize
49256 var remainder = Math.min(length - offset, blockSize - assigned)
8b095871 49257
cf6c2044
IC
49258 for (var i = 0; i < remainder; i++) {
49259 block[assigned + i] = data[offset + i]
8b095871
IC
49260 }
49261
cf6c2044
IC
49262 accum += remainder
49263 offset += remainder
8b095871 49264
cf6c2044
IC
49265 if ((accum % blockSize) === 0) {
49266 this._update(block)
9987f0c1
IC
49267 }
49268 }
8b095871 49269
cf6c2044 49270 this._len += length
9987f0c1
IC
49271 return this
49272}
8b095871 49273
9987f0c1 49274Hash.prototype.digest = function (enc) {
cf6c2044 49275 var rem = this._len % this._blockSize
8b095871 49276
cf6c2044 49277 this._block[rem] = 0x80
8b095871 49278
cf6c2044
IC
49279 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
49280 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
49281 this._block.fill(0, rem + 1)
8b095871 49282
cf6c2044 49283 if (rem >= this._finalSize) {
9987f0c1
IC
49284 this._update(this._block)
49285 this._block.fill(0)
49286 }
8b095871 49287
cf6c2044 49288 var bits = this._len * 8
8b095871 49289
cf6c2044
IC
49290 // uint32
49291 if (bits <= 0xffffffff) {
49292 this._block.writeUInt32BE(bits, this._blockSize - 4)
49293
49294 // uint64
49295 } else {
49296 var lowBits = bits & 0xffffffff
49297 var highBits = (bits - lowBits) / 0x100000000
49298
49299 this._block.writeUInt32BE(highBits, this._blockSize - 8)
49300 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
49301 }
49302
49303 this._update(this._block)
49304 var hash = this._hash()
8b095871 49305
9987f0c1 49306 return enc ? hash.toString(enc) : hash
8b095871
IC
49307}
49308
9987f0c1
IC
49309Hash.prototype._update = function () {
49310 throw new Error('_update must be implemented by subclass')
8b095871
IC
49311}
49312
9987f0c1 49313module.exports = Hash
8b095871 49314
cf6c2044 49315},{"safe-buffer":128}],130:[function(require,module,exports){
9987f0c1
IC
49316var exports = module.exports = function SHA (algorithm) {
49317 algorithm = algorithm.toLowerCase()
8b095871 49318
9987f0c1
IC
49319 var Algorithm = exports[algorithm]
49320 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 49321
9987f0c1 49322 return new Algorithm()
8b095871
IC
49323}
49324
9987f0c1
IC
49325exports.sha = require('./sha')
49326exports.sha1 = require('./sha1')
49327exports.sha224 = require('./sha224')
49328exports.sha256 = require('./sha256')
49329exports.sha384 = require('./sha384')
49330exports.sha512 = require('./sha512')
8b095871 49331
cf6c2044 49332},{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
9987f0c1
IC
49333/*
49334 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49335 * in FIPS PUB 180-1
49336 * This source code is derived from sha1.js of the same repository.
49337 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49338 * operation was added.
49339 */
8b095871 49340
9987f0c1
IC
49341var inherits = require('inherits')
49342var Hash = require('./hash')
cf6c2044 49343var Buffer = require('safe-buffer').Buffer
8b095871 49344
9987f0c1
IC
49345var K = [
49346 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49347]
8b095871 49348
9987f0c1 49349var W = new Array(80)
8b095871 49350
9987f0c1
IC
49351function Sha () {
49352 this.init()
49353 this._w = W
8b095871 49354
9987f0c1 49355 Hash.call(this, 64, 56)
8b095871
IC
49356}
49357
9987f0c1 49358inherits(Sha, Hash)
8b095871 49359
9987f0c1
IC
49360Sha.prototype.init = function () {
49361 this._a = 0x67452301
49362 this._b = 0xefcdab89
49363 this._c = 0x98badcfe
49364 this._d = 0x10325476
49365 this._e = 0xc3d2e1f0
8b095871 49366
9987f0c1 49367 return this
8b095871
IC
49368}
49369
9987f0c1
IC
49370function rotl5 (num) {
49371 return (num << 5) | (num >>> 27)
8b095871
IC
49372}
49373
9987f0c1
IC
49374function rotl30 (num) {
49375 return (num << 30) | (num >>> 2)
8b095871
IC
49376}
49377
9987f0c1
IC
49378function ft (s, b, c, d) {
49379 if (s === 0) return (b & c) | ((~b) & d)
49380 if (s === 2) return (b & c) | (b & d) | (c & d)
49381 return b ^ c ^ d
8b095871
IC
49382}
49383
9987f0c1
IC
49384Sha.prototype._update = function (M) {
49385 var W = this._w
8b095871 49386
9987f0c1
IC
49387 var a = this._a | 0
49388 var b = this._b | 0
49389 var c = this._c | 0
49390 var d = this._d | 0
49391 var e = this._e | 0
8b095871 49392
9987f0c1
IC
49393 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49394 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 49395
9987f0c1
IC
49396 for (var j = 0; j < 80; ++j) {
49397 var s = ~~(j / 20)
49398 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 49399
9987f0c1
IC
49400 e = d
49401 d = c
49402 c = rotl30(b)
49403 b = a
49404 a = t
49405 }
8b095871 49406
9987f0c1
IC
49407 this._a = (a + this._a) | 0
49408 this._b = (b + this._b) | 0
49409 this._c = (c + this._c) | 0
49410 this._d = (d + this._d) | 0
49411 this._e = (e + this._e) | 0
8b095871
IC
49412}
49413
9987f0c1 49414Sha.prototype._hash = function () {
cf6c2044 49415 var H = Buffer.allocUnsafe(20)
8b095871 49416
9987f0c1
IC
49417 H.writeInt32BE(this._a | 0, 0)
49418 H.writeInt32BE(this._b | 0, 4)
49419 H.writeInt32BE(this._c | 0, 8)
49420 H.writeInt32BE(this._d | 0, 12)
49421 H.writeInt32BE(this._e | 0, 16)
8b095871 49422
9987f0c1 49423 return H
8b095871
IC
49424}
49425
9987f0c1 49426module.exports = Sha
8b095871 49427
cf6c2044 49428},{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
9987f0c1
IC
49429/*
49430 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49431 * in FIPS PUB 180-1
49432 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49433 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49434 * Distributed under the BSD License
49435 * See http://pajhome.org.uk/crypt/md5 for details.
49436 */
8b095871 49437
9987f0c1
IC
49438var inherits = require('inherits')
49439var Hash = require('./hash')
cf6c2044 49440var Buffer = require('safe-buffer').Buffer
8b095871 49441
9987f0c1
IC
49442var K = [
49443 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49444]
8b095871 49445
9987f0c1 49446var W = new Array(80)
8b095871 49447
9987f0c1
IC
49448function Sha1 () {
49449 this.init()
49450 this._w = W
8b095871 49451
9987f0c1 49452 Hash.call(this, 64, 56)
8b095871
IC
49453}
49454
9987f0c1 49455inherits(Sha1, Hash)
8b095871 49456
9987f0c1
IC
49457Sha1.prototype.init = function () {
49458 this._a = 0x67452301
49459 this._b = 0xefcdab89
49460 this._c = 0x98badcfe
49461 this._d = 0x10325476
49462 this._e = 0xc3d2e1f0
8b095871 49463
9987f0c1 49464 return this
8b095871
IC
49465}
49466
9987f0c1
IC
49467function rotl1 (num) {
49468 return (num << 1) | (num >>> 31)
49469}
8b095871 49470
9987f0c1
IC
49471function rotl5 (num) {
49472 return (num << 5) | (num >>> 27)
8b095871
IC
49473}
49474
9987f0c1
IC
49475function rotl30 (num) {
49476 return (num << 30) | (num >>> 2)
8b095871
IC
49477}
49478
9987f0c1
IC
49479function ft (s, b, c, d) {
49480 if (s === 0) return (b & c) | ((~b) & d)
49481 if (s === 2) return (b & c) | (b & d) | (c & d)
49482 return b ^ c ^ d
8b095871
IC
49483}
49484
9987f0c1
IC
49485Sha1.prototype._update = function (M) {
49486 var W = this._w
8b095871 49487
9987f0c1
IC
49488 var a = this._a | 0
49489 var b = this._b | 0
49490 var c = this._c | 0
49491 var d = this._d | 0
49492 var e = this._e | 0
8b095871 49493
9987f0c1
IC
49494 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49495 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 49496
9987f0c1
IC
49497 for (var j = 0; j < 80; ++j) {
49498 var s = ~~(j / 20)
49499 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 49500
9987f0c1
IC
49501 e = d
49502 d = c
49503 c = rotl30(b)
49504 b = a
49505 a = t
49506 }
8b095871 49507
9987f0c1
IC
49508 this._a = (a + this._a) | 0
49509 this._b = (b + this._b) | 0
49510 this._c = (c + this._c) | 0
49511 this._d = (d + this._d) | 0
49512 this._e = (e + this._e) | 0
8b095871
IC
49513}
49514
9987f0c1 49515Sha1.prototype._hash = function () {
cf6c2044 49516 var H = Buffer.allocUnsafe(20)
9987f0c1
IC
49517
49518 H.writeInt32BE(this._a | 0, 0)
49519 H.writeInt32BE(this._b | 0, 4)
49520 H.writeInt32BE(this._c | 0, 8)
49521 H.writeInt32BE(this._d | 0, 12)
49522 H.writeInt32BE(this._e | 0, 16)
8b095871 49523
9987f0c1 49524 return H
8b095871
IC
49525}
49526
9987f0c1 49527module.exports = Sha1
8b095871 49528
cf6c2044 49529},{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
9987f0c1
IC
49530/**
49531 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49532 * in FIPS 180-2
49533 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49534 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49535 *
49536 */
8b095871 49537
9987f0c1
IC
49538var inherits = require('inherits')
49539var Sha256 = require('./sha256')
49540var Hash = require('./hash')
cf6c2044 49541var Buffer = require('safe-buffer').Buffer
8b095871 49542
9987f0c1 49543var W = new Array(64)
8b095871 49544
9987f0c1
IC
49545function Sha224 () {
49546 this.init()
8b095871 49547
9987f0c1 49548 this._w = W // new Array(64)
8b095871 49549
9987f0c1 49550 Hash.call(this, 64, 56)
8b095871
IC
49551}
49552
9987f0c1 49553inherits(Sha224, Sha256)
8b095871 49554
9987f0c1
IC
49555Sha224.prototype.init = function () {
49556 this._a = 0xc1059ed8
49557 this._b = 0x367cd507
49558 this._c = 0x3070dd17
49559 this._d = 0xf70e5939
49560 this._e = 0xffc00b31
49561 this._f = 0x68581511
49562 this._g = 0x64f98fa7
49563 this._h = 0xbefa4fa4
49564
49565 return this
8b095871
IC
49566}
49567
9987f0c1 49568Sha224.prototype._hash = function () {
cf6c2044 49569 var H = Buffer.allocUnsafe(28)
8b095871 49570
9987f0c1
IC
49571 H.writeInt32BE(this._a, 0)
49572 H.writeInt32BE(this._b, 4)
49573 H.writeInt32BE(this._c, 8)
49574 H.writeInt32BE(this._d, 12)
49575 H.writeInt32BE(this._e, 16)
49576 H.writeInt32BE(this._f, 20)
49577 H.writeInt32BE(this._g, 24)
8b095871 49578
9987f0c1 49579 return H
8b095871
IC
49580}
49581
9987f0c1 49582module.exports = Sha224
8b095871 49583
cf6c2044 49584},{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
9987f0c1
IC
49585/**
49586 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49587 * in FIPS 180-2
49588 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49589 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49590 *
49591 */
8b095871 49592
9987f0c1
IC
49593var inherits = require('inherits')
49594var Hash = require('./hash')
cf6c2044 49595var Buffer = require('safe-buffer').Buffer
8b095871 49596
9987f0c1
IC
49597var K = [
49598 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49599 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49600 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49601 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49602 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49603 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49604 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49605 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49606 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49607 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49608 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49609 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49610 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49611 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49612 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49613 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49614]
8b095871 49615
9987f0c1 49616var W = new Array(64)
8b095871 49617
9987f0c1
IC
49618function Sha256 () {
49619 this.init()
8b095871 49620
9987f0c1 49621 this._w = W // new Array(64)
8b095871 49622
9987f0c1
IC
49623 Hash.call(this, 64, 56)
49624}
8b095871 49625
9987f0c1 49626inherits(Sha256, Hash)
8b095871 49627
9987f0c1
IC
49628Sha256.prototype.init = function () {
49629 this._a = 0x6a09e667
49630 this._b = 0xbb67ae85
49631 this._c = 0x3c6ef372
49632 this._d = 0xa54ff53a
49633 this._e = 0x510e527f
49634 this._f = 0x9b05688c
49635 this._g = 0x1f83d9ab
49636 this._h = 0x5be0cd19
8b095871 49637
9987f0c1
IC
49638 return this
49639}
8b095871 49640
9987f0c1
IC
49641function ch (x, y, z) {
49642 return z ^ (x & (y ^ z))
8b095871
IC
49643}
49644
9987f0c1
IC
49645function maj (x, y, z) {
49646 return (x & y) | (z & (x | y))
8b095871
IC
49647}
49648
9987f0c1
IC
49649function sigma0 (x) {
49650 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
49651}
49652
9987f0c1
IC
49653function sigma1 (x) {
49654 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
49655}
8b095871 49656
9987f0c1
IC
49657function gamma0 (x) {
49658 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
49659}
8b095871 49660
9987f0c1
IC
49661function gamma1 (x) {
49662 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
49663}
8b095871 49664
9987f0c1
IC
49665Sha256.prototype._update = function (M) {
49666 var W = this._w
8b095871 49667
9987f0c1
IC
49668 var a = this._a | 0
49669 var b = this._b | 0
49670 var c = this._c | 0
49671 var d = this._d | 0
49672 var e = this._e | 0
49673 var f = this._f | 0
49674 var g = this._g | 0
49675 var h = this._h | 0
8b095871 49676
9987f0c1
IC
49677 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49678 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 49679
9987f0c1
IC
49680 for (var j = 0; j < 64; ++j) {
49681 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
49682 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 49683
9987f0c1
IC
49684 h = g
49685 g = f
49686 f = e
49687 e = (d + T1) | 0
49688 d = c
49689 c = b
49690 b = a
49691 a = (T1 + T2) | 0
8b095871
IC
49692 }
49693
9987f0c1
IC
49694 this._a = (a + this._a) | 0
49695 this._b = (b + this._b) | 0
49696 this._c = (c + this._c) | 0
49697 this._d = (d + this._d) | 0
49698 this._e = (e + this._e) | 0
49699 this._f = (f + this._f) | 0
49700 this._g = (g + this._g) | 0
49701 this._h = (h + this._h) | 0
8b095871
IC
49702}
49703
9987f0c1 49704Sha256.prototype._hash = function () {
cf6c2044 49705 var H = Buffer.allocUnsafe(32)
8b095871 49706
9987f0c1
IC
49707 H.writeInt32BE(this._a, 0)
49708 H.writeInt32BE(this._b, 4)
49709 H.writeInt32BE(this._c, 8)
49710 H.writeInt32BE(this._d, 12)
49711 H.writeInt32BE(this._e, 16)
49712 H.writeInt32BE(this._f, 20)
49713 H.writeInt32BE(this._g, 24)
49714 H.writeInt32BE(this._h, 28)
8b095871 49715
9987f0c1 49716 return H
8b095871
IC
49717}
49718
9987f0c1 49719module.exports = Sha256
8b095871 49720
cf6c2044 49721},{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
9987f0c1
IC
49722var inherits = require('inherits')
49723var SHA512 = require('./sha512')
49724var Hash = require('./hash')
cf6c2044 49725var Buffer = require('safe-buffer').Buffer
8b095871 49726
9987f0c1 49727var W = new Array(160)
8b095871 49728
9987f0c1
IC
49729function Sha384 () {
49730 this.init()
49731 this._w = W
8b095871 49732
9987f0c1
IC
49733 Hash.call(this, 128, 112)
49734}
8b095871 49735
9987f0c1 49736inherits(Sha384, SHA512)
8b095871 49737
9987f0c1
IC
49738Sha384.prototype.init = function () {
49739 this._ah = 0xcbbb9d5d
49740 this._bh = 0x629a292a
49741 this._ch = 0x9159015a
49742 this._dh = 0x152fecd8
49743 this._eh = 0x67332667
49744 this._fh = 0x8eb44a87
49745 this._gh = 0xdb0c2e0d
49746 this._hh = 0x47b5481d
8b095871 49747
9987f0c1
IC
49748 this._al = 0xc1059ed8
49749 this._bl = 0x367cd507
49750 this._cl = 0x3070dd17
49751 this._dl = 0xf70e5939
49752 this._el = 0xffc00b31
49753 this._fl = 0x68581511
49754 this._gl = 0x64f98fa7
49755 this._hl = 0xbefa4fa4
8b095871 49756
9987f0c1 49757 return this
8b095871
IC
49758}
49759
9987f0c1 49760Sha384.prototype._hash = function () {
cf6c2044 49761 var H = Buffer.allocUnsafe(48)
8b095871 49762
9987f0c1
IC
49763 function writeInt64BE (h, l, offset) {
49764 H.writeInt32BE(h, offset)
49765 H.writeInt32BE(l, offset + 4)
49766 }
8b095871 49767
9987f0c1
IC
49768 writeInt64BE(this._ah, this._al, 0)
49769 writeInt64BE(this._bh, this._bl, 8)
49770 writeInt64BE(this._ch, this._cl, 16)
49771 writeInt64BE(this._dh, this._dl, 24)
49772 writeInt64BE(this._eh, this._el, 32)
49773 writeInt64BE(this._fh, this._fl, 40)
8b095871 49774
9987f0c1
IC
49775 return H
49776}
8b095871 49777
9987f0c1 49778module.exports = Sha384
8b095871 49779
cf6c2044 49780},{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
9987f0c1
IC
49781var inherits = require('inherits')
49782var Hash = require('./hash')
cf6c2044 49783var Buffer = require('safe-buffer').Buffer
8b095871 49784
9987f0c1
IC
49785var K = [
49786 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
49787 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
49788 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
49789 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
49790 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
49791 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
49792 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
49793 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
49794 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
49795 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
49796 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
49797 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
49798 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
49799 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
49800 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
49801 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
49802 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
49803 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
49804 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
49805 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
49806 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
49807 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
49808 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
49809 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
49810 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
49811 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
49812 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
49813 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
49814 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
49815 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
49816 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
49817 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
49818 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
49819 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
49820 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
49821 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
49822 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
49823 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
49824 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
49825 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
49826]
8b095871 49827
9987f0c1 49828var W = new Array(160)
8b095871 49829
9987f0c1
IC
49830function Sha512 () {
49831 this.init()
49832 this._w = W
8b095871 49833
9987f0c1
IC
49834 Hash.call(this, 128, 112)
49835}
8b095871 49836
9987f0c1 49837inherits(Sha512, Hash)
8b095871 49838
9987f0c1
IC
49839Sha512.prototype.init = function () {
49840 this._ah = 0x6a09e667
49841 this._bh = 0xbb67ae85
49842 this._ch = 0x3c6ef372
49843 this._dh = 0xa54ff53a
49844 this._eh = 0x510e527f
49845 this._fh = 0x9b05688c
49846 this._gh = 0x1f83d9ab
49847 this._hh = 0x5be0cd19
8b095871 49848
9987f0c1
IC
49849 this._al = 0xf3bcc908
49850 this._bl = 0x84caa73b
49851 this._cl = 0xfe94f82b
49852 this._dl = 0x5f1d36f1
49853 this._el = 0xade682d1
49854 this._fl = 0x2b3e6c1f
49855 this._gl = 0xfb41bd6b
49856 this._hl = 0x137e2179
8b095871 49857
9987f0c1 49858 return this
8b095871
IC
49859}
49860
9987f0c1
IC
49861function Ch (x, y, z) {
49862 return z ^ (x & (y ^ z))
8b095871
IC
49863}
49864
9987f0c1
IC
49865function maj (x, y, z) {
49866 return (x & y) | (z & (x | y))
8b095871
IC
49867}
49868
9987f0c1
IC
49869function sigma0 (x, xl) {
49870 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
49871}
8b095871 49872
9987f0c1
IC
49873function sigma1 (x, xl) {
49874 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
49875}
8b095871 49876
9987f0c1
IC
49877function Gamma0 (x, xl) {
49878 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
49879}
49880
9987f0c1
IC
49881function Gamma0l (x, xl) {
49882 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
49883}
8b095871 49884
9987f0c1
IC
49885function Gamma1 (x, xl) {
49886 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
49887}
8b095871 49888
9987f0c1
IC
49889function Gamma1l (x, xl) {
49890 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
49891}
8b095871 49892
9987f0c1
IC
49893function getCarry (a, b) {
49894 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
49895}
49896
9987f0c1
IC
49897Sha512.prototype._update = function (M) {
49898 var W = this._w
8b095871 49899
9987f0c1
IC
49900 var ah = this._ah | 0
49901 var bh = this._bh | 0
49902 var ch = this._ch | 0
49903 var dh = this._dh | 0
49904 var eh = this._eh | 0
49905 var fh = this._fh | 0
49906 var gh = this._gh | 0
49907 var hh = this._hh | 0
8b095871 49908
9987f0c1
IC
49909 var al = this._al | 0
49910 var bl = this._bl | 0
49911 var cl = this._cl | 0
49912 var dl = this._dl | 0
49913 var el = this._el | 0
49914 var fl = this._fl | 0
49915 var gl = this._gl | 0
49916 var hl = this._hl | 0
8b095871 49917
9987f0c1
IC
49918 for (var i = 0; i < 32; i += 2) {
49919 W[i] = M.readInt32BE(i * 4)
49920 W[i + 1] = M.readInt32BE(i * 4 + 4)
49921 }
49922 for (; i < 160; i += 2) {
49923 var xh = W[i - 15 * 2]
49924 var xl = W[i - 15 * 2 + 1]
49925 var gamma0 = Gamma0(xh, xl)
49926 var gamma0l = Gamma0l(xl, xh)
8b095871 49927
9987f0c1
IC
49928 xh = W[i - 2 * 2]
49929 xl = W[i - 2 * 2 + 1]
49930 var gamma1 = Gamma1(xh, xl)
49931 var gamma1l = Gamma1l(xl, xh)
8b095871 49932
9987f0c1
IC
49933 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
49934 var Wi7h = W[i - 7 * 2]
49935 var Wi7l = W[i - 7 * 2 + 1]
8b095871 49936
9987f0c1
IC
49937 var Wi16h = W[i - 16 * 2]
49938 var Wi16l = W[i - 16 * 2 + 1]
8b095871 49939
9987f0c1
IC
49940 var Wil = (gamma0l + Wi7l) | 0
49941 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
49942 Wil = (Wil + gamma1l) | 0
49943 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
49944 Wil = (Wil + Wi16l) | 0
49945 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 49946
9987f0c1
IC
49947 W[i] = Wih
49948 W[i + 1] = Wil
8b095871
IC
49949 }
49950
9987f0c1
IC
49951 for (var j = 0; j < 160; j += 2) {
49952 Wih = W[j]
49953 Wil = W[j + 1]
8b095871 49954
9987f0c1
IC
49955 var majh = maj(ah, bh, ch)
49956 var majl = maj(al, bl, cl)
8b095871 49957
9987f0c1
IC
49958 var sigma0h = sigma0(ah, al)
49959 var sigma0l = sigma0(al, ah)
49960 var sigma1h = sigma1(eh, el)
49961 var sigma1l = sigma1(el, eh)
8b095871 49962
9987f0c1
IC
49963 // t1 = h + sigma1 + ch + K[j] + W[j]
49964 var Kih = K[j]
49965 var Kil = K[j + 1]
8b095871 49966
9987f0c1
IC
49967 var chh = Ch(eh, fh, gh)
49968 var chl = Ch(el, fl, gl)
8b095871 49969
9987f0c1
IC
49970 var t1l = (hl + sigma1l) | 0
49971 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
49972 t1l = (t1l + chl) | 0
49973 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
49974 t1l = (t1l + Kil) | 0
49975 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
49976 t1l = (t1l + Wil) | 0
49977 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 49978
9987f0c1
IC
49979 // t2 = sigma0 + maj
49980 var t2l = (sigma0l + majl) | 0
49981 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
49982
49983 hh = gh
49984 hl = gl
49985 gh = fh
49986 gl = fl
49987 fh = eh
49988 fl = el
49989 el = (dl + t1l) | 0
49990 eh = (dh + t1h + getCarry(el, dl)) | 0
49991 dh = ch
49992 dl = cl
49993 ch = bh
49994 cl = bl
49995 bh = ah
49996 bl = al
49997 al = (t1l + t2l) | 0
49998 ah = (t1h + t2h + getCarry(al, t1l)) | 0
49999 }
8b095871 50000
9987f0c1
IC
50001 this._al = (this._al + al) | 0
50002 this._bl = (this._bl + bl) | 0
50003 this._cl = (this._cl + cl) | 0
50004 this._dl = (this._dl + dl) | 0
50005 this._el = (this._el + el) | 0
50006 this._fl = (this._fl + fl) | 0
50007 this._gl = (this._gl + gl) | 0
50008 this._hl = (this._hl + hl) | 0
8b095871 50009
9987f0c1
IC
50010 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50011 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50012 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50013 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50014 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50015 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50016 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50017 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
50018}
8b095871 50019
9987f0c1 50020Sha512.prototype._hash = function () {
cf6c2044 50021 var H = Buffer.allocUnsafe(64)
8b095871 50022
9987f0c1
IC
50023 function writeInt64BE (h, l, offset) {
50024 H.writeInt32BE(h, offset)
50025 H.writeInt32BE(l, offset + 4)
8b095871
IC
50026 }
50027
9987f0c1
IC
50028 writeInt64BE(this._ah, this._al, 0)
50029 writeInt64BE(this._bh, this._bl, 8)
50030 writeInt64BE(this._ch, this._cl, 16)
50031 writeInt64BE(this._dh, this._dl, 24)
50032 writeInt64BE(this._eh, this._el, 32)
50033 writeInt64BE(this._fh, this._fl, 40)
50034 writeInt64BE(this._gh, this._gl, 48)
50035 writeInt64BE(this._hh, this._hl, 56)
50036
50037 return H
8b095871
IC
50038}
50039
9987f0c1 50040module.exports = Sha512
8b095871 50041
cf6c2044 50042},{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
9987f0c1 50043var native = require('./native')
8b095871 50044
9987f0c1
IC
50045function getTypeName (fn) {
50046 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
50047}
8b095871 50048
9987f0c1
IC
50049function getValueTypeName (value) {
50050 return native.Nil(value) ? '' : getTypeName(value.constructor)
50051}
8b095871 50052
9987f0c1
IC
50053function getValue (value) {
50054 if (native.Function(value)) return ''
50055 if (native.String(value)) return JSON.stringify(value)
50056 if (value && native.Object(value)) return ''
50057 return value
50058}
8b095871 50059
9987f0c1
IC
50060function tfJSON (type) {
50061 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
50062 if (native.Array(type)) return 'Array'
50063 if (type && native.Object(type)) return 'Object'
8b095871 50064
9987f0c1
IC
50065 return type !== undefined ? type : ''
50066}
8b095871 50067
9987f0c1
IC
50068function tfErrorString (type, value, valueTypeName) {
50069 var valueJson = getValue(value)
8b095871 50070
9987f0c1
IC
50071 return 'Expected ' + tfJSON(type) + ', got' +
50072 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
50073 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
50074}
50075
cf6c2044
IC
50076function TfTypeError (type, value, valueTypeName) {
50077 valueTypeName = valueTypeName || getValueTypeName(value)
50078 this.message = tfErrorString(type, value, valueTypeName)
50079
50080 Error.captureStackTrace(this, TfTypeError)
50081 this.__type = type
50082 this.__value = value
50083 this.__valueTypeName = valueTypeName
50084}
50085
50086TfTypeError.prototype = Object.create(Error.prototype)
50087TfTypeError.prototype.constructor = TfTypeError
50088
9987f0c1
IC
50089function tfPropertyErrorString (type, label, name, value, valueTypeName) {
50090 var description = '" of type '
50091 if (label === 'key') description = '" with key type '
8b095871 50092
9987f0c1 50093 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
50094}
50095
cf6c2044
IC
50096function TfPropertyTypeError (type, property, label, value, valueTypeName) {
50097 if (type) {
50098 valueTypeName = valueTypeName || getValueTypeName(value)
50099 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
50100 } else {
50101 this.message = 'Unexpected property "' + property + '"'
50102 }
50103
50104 Error.captureStackTrace(this, TfTypeError)
50105 this.__label = label
50106 this.__property = property
50107 this.__type = type
50108 this.__value = value
50109 this.__valueTypeName = valueTypeName
50110}
50111
50112TfPropertyTypeError.prototype = Object.create(Error.prototype)
50113TfPropertyTypeError.prototype.constructor = TfTypeError
50114
50115function tfCustomError (expected, actual) {
50116 return new TfTypeError(expected, {}, actual)
50117}
50118
50119function tfSubError (e, property, label) {
50120 // sub child?
50121 if (e instanceof TfPropertyTypeError) {
50122 property = property + '.' + e.__property
50123
50124 e = new TfPropertyTypeError(
50125 e.__type, property, e.__label, e.__value, e.__valueTypeName
50126 )
50127
50128 // child?
50129 } else if (e instanceof TfTypeError) {
50130 e = new TfPropertyTypeError(
50131 e.__type, property, label, e.__value, e.__valueTypeName
50132 )
50133 }
50134
50135 Error.captureStackTrace(e)
50136 return e
50137}
50138
9987f0c1
IC
50139module.exports = {
50140 TfTypeError: TfTypeError,
50141 TfPropertyTypeError: TfPropertyTypeError,
50142 tfCustomError: tfCustomError,
50143 tfSubError: tfSubError,
50144 tfJSON: tfJSON,
50145 getValueTypeName: getValueTypeName
8b095871
IC
50146}
50147
cf6c2044 50148},{"./native":140}],138:[function(require,module,exports){
9987f0c1
IC
50149(function (Buffer){
50150var NATIVE = require('./native')
50151var ERRORS = require('./errors')
50152
50153function _Buffer (value) {
50154 return Buffer.isBuffer(value)
8b095871
IC
50155}
50156
9987f0c1
IC
50157function Hex (value) {
50158 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
50159}
8b095871 50160
9987f0c1
IC
50161function _LengthN (type, length) {
50162 var name = type.toJSON()
8b095871 50163
9987f0c1
IC
50164 function Length (value) {
50165 if (!type(value)) return false
50166 if (value.length === length) return true
8b095871 50167
9987f0c1
IC
50168 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
50169 }
50170 Length.toJSON = function () { return name }
8b095871 50171
9987f0c1
IC
50172 return Length
50173}
8b095871 50174
9987f0c1
IC
50175var _ArrayN = _LengthN.bind(null, NATIVE.Array)
50176var _BufferN = _LengthN.bind(null, _Buffer)
50177var _HexN = _LengthN.bind(null, Hex)
cf6c2044 50178var _StringN = _LengthN.bind(null, NATIVE.String)
8b095871 50179
9987f0c1 50180var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 50181
9987f0c1
IC
50182function Finite (value) {
50183 return typeof value === 'number' && isFinite(value)
50184}
50185function Int8 (value) { return ((value << 24) >> 24) === value }
50186function Int16 (value) { return ((value << 16) >> 16) === value }
50187function Int32 (value) { return (value | 0) === value }
50188function UInt8 (value) { return (value & 0xff) === value }
50189function UInt16 (value) { return (value & 0xffff) === value }
50190function UInt32 (value) { return (value >>> 0) === value }
50191function UInt53 (value) {
50192 return typeof value === 'number' &&
50193 value >= 0 &&
50194 value <= UINT53_MAX &&
50195 Math.floor(value) === value
50196}
8b095871 50197
9987f0c1
IC
50198var types = {
50199 ArrayN: _ArrayN,
50200 Buffer: _Buffer,
50201 BufferN: _BufferN,
50202 Finite: Finite,
50203 Hex: Hex,
50204 HexN: _HexN,
50205 Int8: Int8,
50206 Int16: Int16,
50207 Int32: Int32,
cf6c2044 50208 StringN: _StringN,
9987f0c1
IC
50209 UInt8: UInt8,
50210 UInt16: UInt16,
50211 UInt32: UInt32,
50212 UInt53: UInt53
50213}
8b095871 50214
9987f0c1
IC
50215for (var typeName in types) {
50216 types[typeName].toJSON = function (t) {
50217 return t
50218 }.bind(null, typeName)
50219}
8b095871 50220
9987f0c1 50221module.exports = types
8b095871 50222
9987f0c1 50223}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
cf6c2044 50224},{"../../../../../.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){
9987f0c1
IC
50225var ERRORS = require('./errors')
50226var NATIVE = require('./native')
8b095871 50227
9987f0c1
IC
50228// short-hand
50229var tfJSON = ERRORS.tfJSON
50230var TfTypeError = ERRORS.TfTypeError
50231var TfPropertyTypeError = ERRORS.TfPropertyTypeError
50232var tfSubError = ERRORS.tfSubError
50233var getValueTypeName = ERRORS.getValueTypeName
8b095871 50234
9987f0c1
IC
50235var TYPES = {
50236 arrayOf: function arrayOf (type) {
50237 type = compile(type)
8b095871 50238
9987f0c1
IC
50239 function _arrayOf (array, strict) {
50240 if (!NATIVE.Array(array)) return false
cf6c2044 50241 if (NATIVE.Nil(array)) return false
8b095871 50242
9987f0c1
IC
50243 return array.every(function (value, i) {
50244 try {
50245 return typeforce(type, value, strict)
50246 } catch (e) {
50247 throw tfSubError(e, i)
50248 }
50249 })
8b095871 50250 }
9987f0c1 50251 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 50252
9987f0c1
IC
50253 return _arrayOf
50254 },
8b095871 50255
9987f0c1
IC
50256 maybe: function maybe (type) {
50257 type = compile(type)
8b095871 50258
9987f0c1
IC
50259 function _maybe (value, strict) {
50260 return NATIVE.Nil(value) || type(value, strict, maybe)
50261 }
50262 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 50263
9987f0c1
IC
50264 return _maybe
50265 },
8b095871 50266
9987f0c1
IC
50267 map: function map (propertyType, propertyKeyType) {
50268 propertyType = compile(propertyType)
50269 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 50270
9987f0c1 50271 function _map (value, strict) {
cf6c2044
IC
50272 if (!NATIVE.Object(value)) return false
50273 if (NATIVE.Nil(value)) return false
8b095871 50274
9987f0c1
IC
50275 for (var propertyName in value) {
50276 try {
50277 if (propertyKeyType) {
50278 typeforce(propertyKeyType, propertyName, strict)
50279 }
50280 } catch (e) {
50281 throw tfSubError(e, propertyName, 'key')
8b095871
IC
50282 }
50283
9987f0c1
IC
50284 try {
50285 var propertyValue = value[propertyName]
50286 typeforce(propertyType, propertyValue, strict)
50287 } catch (e) {
50288 throw tfSubError(e, propertyName)
8b095871
IC
50289 }
50290 }
50291
9987f0c1
IC
50292 return true
50293 }
8b095871 50294
9987f0c1
IC
50295 if (propertyKeyType) {
50296 _map.toJSON = function () {
50297 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 50298 }
9987f0c1
IC
50299 } else {
50300 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
50301 }
50302
9987f0c1
IC
50303 return _map
50304 },
8b095871 50305
9987f0c1
IC
50306 object: function object (uncompiled) {
50307 var type = {}
8b095871 50308
9987f0c1
IC
50309 for (var typePropertyName in uncompiled) {
50310 type[typePropertyName] = compile(uncompiled[typePropertyName])
50311 }
8b095871 50312
9987f0c1
IC
50313 function _object (value, strict) {
50314 if (!NATIVE.Object(value)) return false
50315 if (NATIVE.Nil(value)) return false
8b095871 50316
9987f0c1 50317 var propertyName
8b095871 50318
9987f0c1
IC
50319 try {
50320 for (propertyName in type) {
50321 var propertyType = type[propertyName]
50322 var propertyValue = value[propertyName]
8b095871 50323
9987f0c1
IC
50324 typeforce(propertyType, propertyValue, strict)
50325 }
50326 } catch (e) {
50327 throw tfSubError(e, propertyName)
50328 }
8b095871 50329
9987f0c1
IC
50330 if (strict) {
50331 for (propertyName in value) {
50332 if (type[propertyName]) continue
8b095871 50333
9987f0c1
IC
50334 throw new TfPropertyTypeError(undefined, propertyName)
50335 }
50336 }
8b095871 50337
9987f0c1
IC
50338 return true
50339 }
50340 _object.toJSON = function () { return tfJSON(type) }
8b095871 50341
9987f0c1
IC
50342 return _object
50343 },
8b095871 50344
9987f0c1
IC
50345 oneOf: function oneOf () {
50346 var types = [].slice.call(arguments).map(compile)
8b095871 50347
9987f0c1
IC
50348 function _oneOf (value, strict) {
50349 return types.some(function (type) {
50350 try {
50351 return typeforce(type, value, strict)
50352 } catch (e) {
50353 return false
50354 }
50355 })
50356 }
50357 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 50358
9987f0c1
IC
50359 return _oneOf
50360 },
8b095871 50361
9987f0c1
IC
50362 quacksLike: function quacksLike (type) {
50363 function _quacksLike (value) {
50364 return type === getValueTypeName(value)
50365 }
50366 _quacksLike.toJSON = function () { return type }
8b095871 50367
9987f0c1
IC
50368 return _quacksLike
50369 },
8b095871 50370
9987f0c1
IC
50371 tuple: function tuple () {
50372 var types = [].slice.call(arguments).map(compile)
8b095871 50373
9987f0c1 50374 function _tuple (values, strict) {
cf6c2044
IC
50375 if (NATIVE.Nil(values)) return false
50376 if (NATIVE.Nil(values.length)) return false
50377 if (strict && (values.length !== types.length)) return false
50378
9987f0c1
IC
50379 return types.every(function (type, i) {
50380 try {
50381 return typeforce(type, values[i], strict)
50382 } catch (e) {
50383 throw tfSubError(e, i)
50384 }
cf6c2044 50385 })
9987f0c1
IC
50386 }
50387 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 50388
9987f0c1
IC
50389 return _tuple
50390 },
8b095871 50391
9987f0c1
IC
50392 value: function value (expected) {
50393 function _value (actual) {
50394 return actual === expected
50395 }
50396 _value.toJSON = function () { return expected }
8b095871 50397
9987f0c1 50398 return _value
8b095871
IC
50399 }
50400}
50401
9987f0c1
IC
50402function compile (type) {
50403 if (NATIVE.String(type)) {
cf6c2044 50404 if (type[0] === '?') return TYPES.maybe(type.slice(1))
8b095871 50405
9987f0c1
IC
50406 return NATIVE[type] || TYPES.quacksLike(type)
50407 } else if (type && NATIVE.Object(type)) {
cf6c2044 50408 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
8b095871 50409
9987f0c1
IC
50410 return TYPES.object(type)
50411 } else if (NATIVE.Function(type)) {
50412 return type
50413 }
8b095871 50414
9987f0c1
IC
50415 return TYPES.value(type)
50416}
8b095871 50417
9987f0c1
IC
50418function typeforce (type, value, strict, surrogate) {
50419 if (NATIVE.Function(type)) {
50420 if (type(value, strict)) return true
8b095871 50421
9987f0c1 50422 throw new TfTypeError(surrogate || type, value)
ab78acc6 50423 }
8b095871 50424
9987f0c1
IC
50425 // JIT
50426 return typeforce(compile(type), value, strict)
50427}
8b095871 50428
9987f0c1
IC
50429// assign types to typeforce function
50430for (var typeName in NATIVE) {
50431 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
50432}
50433
9987f0c1
IC
50434for (typeName in TYPES) {
50435 typeforce[typeName] = TYPES[typeName]
8b095871
IC
50436}
50437
9987f0c1
IC
50438var EXTRA = require('./extra')
50439for (typeName in EXTRA) {
50440 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
50441}
50442
9987f0c1
IC
50443// async wrapper
50444function __async (type, value, strict, callback) {
50445 // default to falsy strict if using shorthand overload
50446 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 50447
9987f0c1
IC
50448 try {
50449 typeforce(type, value, strict)
50450 } catch (e) {
50451 return callback(e)
50452 }
8b095871 50453
9987f0c1
IC
50454 callback()
50455}
8b095871 50456
9987f0c1
IC
50457typeforce.async = __async
50458typeforce.compile = compile
50459typeforce.TfTypeError = TfTypeError
50460typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 50461
9987f0c1 50462module.exports = typeforce
8b095871 50463
cf6c2044 50464},{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
9987f0c1
IC
50465var types = {
50466 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
50467 Boolean: function (value) { return typeof value === 'boolean' },
50468 Function: function (value) { return typeof value === 'function' },
50469 Nil: function (value) { return value === undefined || value === null },
50470 Number: function (value) { return typeof value === 'number' },
50471 Object: function (value) { return typeof value === 'object' },
50472 String: function (value) { return typeof value === 'string' },
50473 '': function () { return true }
50474}
8b095871 50475
9987f0c1
IC
50476// TODO: deprecate
50477types.Null = types.Nil
8b095871 50478
9987f0c1
IC
50479for (var typeName in types) {
50480 types[typeName].toJSON = function (t) {
50481 return t
50482 }.bind(null, typeName)
50483}
8b095871 50484
9987f0c1 50485module.exports = types
8b095871 50486
cf6c2044 50487},{}],141:[function(require,module,exports){
9987f0c1
IC
50488(function (Buffer){
50489'use strict'
8b095871 50490
9987f0c1
IC
50491// Number.MAX_SAFE_INTEGER
50492var MAX_SAFE_INTEGER = 9007199254740991
8b095871 50493
9987f0c1
IC
50494function checkUInt53 (n) {
50495 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
50496}
50497
9987f0c1
IC
50498function encode (number, buffer, offset) {
50499 checkUInt53(number)
8b095871 50500
9987f0c1
IC
50501 if (!buffer) buffer = new Buffer(encodingLength(number))
50502 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50503 if (!offset) offset = 0
8b095871 50504
9987f0c1
IC
50505 // 8 bit
50506 if (number < 0xfd) {
50507 buffer.writeUInt8(number, offset)
50508 encode.bytes = 1
8b095871 50509
9987f0c1
IC
50510 // 16 bit
50511 } else if (number <= 0xffff) {
50512 buffer.writeUInt8(0xfd, offset)
50513 buffer.writeUInt16LE(number, offset + 1)
50514 encode.bytes = 3
8b095871 50515
9987f0c1
IC
50516 // 32 bit
50517 } else if (number <= 0xffffffff) {
50518 buffer.writeUInt8(0xfe, offset)
50519 buffer.writeUInt32LE(number, offset + 1)
50520 encode.bytes = 5
8b095871 50521
9987f0c1
IC
50522 // 64 bit
50523 } else {
50524 buffer.writeUInt8(0xff, offset)
50525 buffer.writeUInt32LE(number >>> 0, offset + 1)
50526 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
50527 encode.bytes = 9
ab78acc6 50528 }
8b095871 50529
9987f0c1 50530 return buffer
8b095871
IC
50531}
50532
9987f0c1
IC
50533function decode (buffer, offset) {
50534 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50535 if (!offset) offset = 0
8b095871 50536
9987f0c1 50537 var first = buffer.readUInt8(offset)
8b095871 50538
9987f0c1
IC
50539 // 8 bit
50540 if (first < 0xfd) {
50541 decode.bytes = 1
50542 return first
8b095871 50543
9987f0c1
IC
50544 // 16 bit
50545 } else if (first === 0xfd) {
50546 decode.bytes = 3
50547 return buffer.readUInt16LE(offset + 1)
8b095871 50548
9987f0c1
IC
50549 // 32 bit
50550 } else if (first === 0xfe) {
50551 decode.bytes = 5
50552 return buffer.readUInt32LE(offset + 1)
8b095871 50553
9987f0c1
IC
50554 // 64 bit
50555 } else {
50556 decode.bytes = 9
50557 var lo = buffer.readUInt32LE(offset + 1)
50558 var hi = buffer.readUInt32LE(offset + 5)
50559 var number = hi * 0x0100000000 + lo
50560 checkUInt53(number)
8b095871 50561
9987f0c1 50562 return number
8b095871 50563 }
ab78acc6
IC
50564}
50565
9987f0c1
IC
50566function encodingLength (number) {
50567 checkUInt53(number)
8b095871 50568
9987f0c1
IC
50569 return (
50570 number < 0xfd ? 1
50571 : number <= 0xffff ? 3
50572 : number <= 0xffffffff ? 5
50573 : 9
50574 )
ab78acc6 50575}
3af2954a 50576
9987f0c1 50577module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 50578
9987f0c1 50579}).call(this,require("buffer").Buffer)
cf6c2044 50580},{"buffer":5}],142:[function(require,module,exports){
9987f0c1
IC
50581(function (Buffer){
50582var bs58check = require('bs58check')
3af2954a 50583
9987f0c1
IC
50584function decodeRaw (buffer, version) {
50585 // check version only if defined
50586 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 50587
9987f0c1
IC
50588 // uncompressed
50589 if (buffer.length === 33) {
50590 return {
50591 version: buffer[0],
50592 privateKey: buffer.slice(1, 33),
50593 compressed: false
ab78acc6 50594 }
9987f0c1 50595 }
8b095871 50596
9987f0c1
IC
50597 // invalid length
50598 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 50599
9987f0c1
IC
50600 // invalid compression flag
50601 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 50602
9987f0c1
IC
50603 return {
50604 version: buffer[0],
50605 privateKey: buffer.slice(1, 33),
50606 compressed: true
50607 }
50608}
3af2954a 50609
9987f0c1
IC
50610function encodeRaw (version, privateKey, compressed) {
50611 var result = new Buffer(compressed ? 34 : 33)
8b095871 50612
9987f0c1
IC
50613 result.writeUInt8(version, 0)
50614 privateKey.copy(result, 1)
3af2954a 50615
9987f0c1
IC
50616 if (compressed) {
50617 result[33] = 0x01
50618 }
8b095871 50619
9987f0c1
IC
50620 return result
50621}
8b095871 50622
9987f0c1
IC
50623function decode (string, version) {
50624 return decodeRaw(bs58check.decode(string), version)
ab78acc6 50625}
3af2954a 50626
9987f0c1
IC
50627function encode (version, privateKey, compressed) {
50628 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 50629
9987f0c1
IC
50630 return bs58check.encode(
50631 encodeRaw(
50632 version.version,
50633 version.privateKey,
50634 version.compressed
50635 )
50636 )
ab78acc6 50637}
3af2954a 50638
9987f0c1
IC
50639module.exports = {
50640 decode: decode,
50641 decodeRaw: decodeRaw,
50642 encode: encode,
50643 encodeRaw: encodeRaw
50644}
8b095871
IC
50645
50646}).call(this,require("buffer").Buffer)
cf6c2044
IC
50647},{"bs58check":85,"buffer":5}]},{},[34])(34)
50648});</script>
9987f0c1 50649 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 50650 messagePrefix: 'unused',
8b095871
IC
50651 bip32: {
50652 public: 0xEE80286A,
50653 private: 0xEE8031E8
50654 },
50655 pubKeyHash: 0x3f,
50656 scriptHash: 0x7d,
861750ae 50657 wif: 0xbf
8b095871
IC
50658};
50659
9987f0c1 50660bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 50661 messagePrefix: 'unused',
8b095871
IC
50662 bip32: {
50663 public: 0x76C0FDFB,
50664 private: 0x76C1077A
50665 },
50666 pubKeyHash: 0x7f,
50667 scriptHash: 0xc4,
861750ae 50668 wif: 0xff
8b095871 50669};
3af2954a 50670
9987f0c1 50671bitcoinjs.bitcoin.networks.clam = {
861750ae 50672 messagePrefix: 'unused',
8b095871
IC
50673 bip32: {
50674 public: 0xa8c26d64,
50675 private: 0xa8c17826
50676 },
50677 pubKeyHash: 0x89,
9987f0c1 50678 scriptHash: 0x00, // TODO set this correctly
861750ae 50679 wif: 0x85
8b095871 50680};
3af2954a 50681
9987f0c1 50682bitcoinjs.bitcoin.networks.crown = {
861750ae 50683 messagePrefix: 'unused',
0921f370 50684 bip32: {
50685 public: 0x0488b21e,
50686 private: 0x0488ade4
50687 },
50688 pubKeyHash: 0x00,
50689 scriptHash: 0x05,
861750ae 50690 wif: 0x80
0921f370 50691};
50692
9987f0c1 50693bitcoinjs.bitcoin.networks.dash = {
861750ae 50694 messagePrefix: 'unused',
8b095871
IC
50695 bip32: {
50696 public: 0x0488b21e,
50697 private: 0x0488ade4
50698 },
50699 pubKeyHash: 0x4c,
50700 scriptHash: 0x10,
861750ae 50701 wif: 0xcc
8b095871 50702};
ab78acc6 50703
56ad9601 50704bitcoinjs.bitcoin.networks.maza = {
861750ae 50705 messagePrefix: 'unused',
56ad9601
JS
50706 bip32: {
50707 public: 0x0488b21e,
50708 private: 0x0488ade4
50709 },
50710 pubKeyHash: 0x32,
50711 scriptHash: 0x09,
861750ae 50712 wif: 0xe0
56ad9601
JS
50713};
50714
9987f0c1 50715bitcoinjs.bitcoin.networks.dashtn = {
861750ae 50716 messagePrefix: 'unused',
c0386f3b
KR
50717 bip32: {
50718 public: 0x043587cf,
50719 private: 0x04358394
50720 },
50721 pubKeyHash: 0x8c,
50722 scriptHash: 0x13,
861750ae 50723 wif: 0xef
c0386f3b
KR
50724};
50725
9987f0c1 50726bitcoinjs.bitcoin.networks.game = {
861750ae 50727 messagePrefix: 'unused',
f88fab20 50728 bip32: {
50729 public: 0x0488b21e,
50730 private: 0x0488ade4
50731 },
50732 pubKeyHash: 0x26,
50733 scriptHash: 0x05,
861750ae 50734 wif: 0xa6
f88fab20 50735};
50736
9987f0c1 50737bitcoinjs.bitcoin.networks.namecoin = {
861750ae 50738 messagePrefix: 'unused',
8b095871
IC
50739 bip32: {
50740 public: 0x0488b21e,
50741 private: 0x0488ade4
50742 },
50743 pubKeyHash: 0x34,
9987f0c1 50744 scriptHash: 0x00, // TODO set this correctly
861750ae 50745 wif: 0x80
8b095871 50746};
3af2954a 50747
9987f0c1 50748bitcoinjs.bitcoin.networks.peercoin = {
861750ae 50749 messagePrefix: 'unused',
8b095871
IC
50750 bip32: {
50751 public: 0x0488b21e,
50752 private: 0x0488ade4
50753 },
50754 pubKeyHash: 0x37,
9987f0c1 50755 scriptHash: 0x00, // TODO set this correctly
861750ae 50756 wif: 0xb7
8b095871 50757};
3af2954a 50758
9987f0c1 50759bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 50760 messagePrefix: 'unused',
01e81e53
GH
50761 bip32: {
50762 public: 0xef6adf10,
50763 private: 0xef69ea80
50764 },
50765 pubKeyHash: 0x3f,
50766 scriptHash: 0x7d,
861750ae 50767 wif: 0x46
01e81e53
GH
50768};
50769
9987f0c1 50770bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 50771 messagePrefix: 'unused',
01e81e53
GH
50772 bip32: {
50773 public: 0x043587CF,
50774 private: 0x04358394
50775 },
50776 pubKeyHash: 0x6f,
50777 scriptHash: 0xc4,
861750ae 50778 wif: 0x57
01e81e53
GH
50779};
50780
9987f0c1
IC
50781bitcoinjs.bitcoin.networks.dogecoin = {
50782 messagePrefix: '\x19Dogecoin Signed Message:\n',
50783 bip32: {
50784 public: 0x02facafd,
50785 private: 0x02fac398
50786 },
50787 pubKeyHash: 0x1e,
50788 scriptHash: 0x16,
861750ae
JC
50789 wif: 0x9e
50790};
9987f0c1
IC
50791
50792bitcoinjs.bitcoin.networks.viacoin = {
50793 messagePrefix: '\x18Viacoin Signed Message:\n',
50794 bip32: {
50795 public: 0x0488b21e,
50796 private: 0x0488ade4
50797 },
50798 pubKeyHash: 0x47,
50799 scriptHash: 0x21,
861750ae
JC
50800 wif: 0xc7
50801};
9987f0c1
IC
50802
50803bitcoinjs.bitcoin.networks.viacointestnet = {
50804 messagePrefix: '\x18Viacoin Signed Message:\n',
50805 bip32: {
50806 public: 0x043587cf,
50807 private: 0x04358394
50808 },
50809 pubKeyHash: 0x7f,
50810 scriptHash: 0xc4,
861750ae
JC
50811 wif: 0xff
50812};
9987f0c1
IC
50813
50814bitcoinjs.bitcoin.networks.gamerscoin = {
50815 messagePrefix: '\x19Gamerscoin Signed Message:\n',
50816 bip32: {
50817 public: 0x019da462,
50818 private: 0x019d9cfe
50819 },
50820 pubKeyHash: 0x26,
50821 scriptHash: 0x05,
861750ae
JC
50822 wif: 0xA6
50823};
9987f0c1
IC
50824
50825bitcoinjs.bitcoin.networks.jumbucks = {
50826 messagePrefix: '\x19Jumbucks Signed Message:\n',
50827 bip32: {
50828 public: 0x037a689a,
50829 private: 0x037a6460
50830 },
50831 pubKeyHash: 0x2b,
50832 scriptHash: 0x05,
861750ae
JC
50833 wif: 0xab
50834};
9987f0c1
IC
50835
50836bitcoinjs.bitcoin.networks.zetacoin = {
50837 messagePrefix: '\x18Zetacoin Signed Message:\n',
50838 bip32: {
50839 public: 0x0488b21e,
50840 private: 0x0488ade4
50841 },
50842 pubKeyHash: 0x50,
50843 scriptHash: 0x09,
861750ae
JC
50844 wif: 0xe0
50845};
b3cc3930
IC
50846
50847bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 50848 messagePrefix: 'unused',
b3cc3930
IC
50849 bip32: {
50850 public: 0x0488b21e,
50851 private: 0x0488ade4
50852 },
50853 pubKeyHash: 0x32,
50854 scriptHash: 0x00, // TODO set this correctly
861750ae 50855 wif: 0xb2
b3cc3930 50856};
f128bd58
IC
50857
50858bitcoinjs.bitcoin.networks.pivx = {
861750ae 50859 messagePrefix: 'unused',
f128bd58
IC
50860 bip32: {
50861 public: 0x022d2533,
50862 private: 0x0221312b
50863 },
50864 pubKeyHash: 0x1e,
50865 scriptHash: 0x0d,
861750ae 50866 wif: 0xd4
f128bd58
IC
50867};
50868
50869bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 50870 messagePrefix: 'unused',
f128bd58
IC
50871 bip32: {
50872 public: 0x3a8061a0,
50873 private: 0x3a805837
50874 },
50875 pubKeyHash: 0x8b,
50876 scriptHash: 0x13,
861750ae 50877 wif: 0xef
f128bd58 50878};
1102f201
IC
50879
50880bitcoinjs.bitcoin.networks.fujicoin = {
50881 messagePrefix: '\x19FujiCoin Signed Message:\n',
50882 bip32: {
50883 public: 0x0488b21e,
50884 private: 0x0488ade4
50885 },
50886 pubKeyHash: 0x24,
50887 scriptHash: 0x10,
50888 wif: 0xa4
50889};
0f6b34d6
IC
50890
50891bitcoinjs.bitcoin.networks.nubits = {
50892 messagePrefix: '\x18Nu Signed Message:\n',
50893 bip32: {
50894 public: 0x0488b21e,
50895 private: 0x0488ade4
50896 },
50897 pubKeyHash: 0x19,
50898 scriptHash: 0x1a,
50899 wif: 0x96,
50900};
50901
39608073
RS
50902bitcoinjs.bitcoin.networks.bgold = {
50903 messagePrefix: 'unused',
50904 bip32: {
50905 public: 0x0488b21e,
50906 private: 0x0488ade4
50907 },
50908 pubKeyHash: 38,
50909 scriptHash: 23,
50910 wif: 128
50911};
50912
0f6b34d6
IC
50913bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
50914 messagePrefix: '\x18Bitcoin Signed Message:\n',
50915 bip32: {
50916 public: 0x0488b21e,
50917 private: 0x0488ade4
50918 },
50919 pubKeyHash: 0x1c,
50920 scriptHash: 0x28,
50921 wif: 0x80
50922};
50923
924727ed
IC
50924bitcoinjs.bitcoin.networks.monacoin = {
50925 messagePrefix: '\x18Monacoin Signed Message:\n',
50926 bip32: {
50927 public: 0x0488b21e,
50928 private: 0x0488ade4
50929 },
50930 pubKeyHash: 0x32,
50931 scriptHash: 0x37,
50932 wif: 0xb0
50933};
50934
cf6c2044
IC
50935bitcoinjs.bitcoin.networks.litecoinXprv = {
50936 messagePrefix: '\x19Litecoin Signed Message:\n',
50937 bip32: {
50938 public: 0x0488b21e,
50939 private: 0x0488ade4,
50940 },
50941 pubKeyHash: 0x30,
50942 scriptHash: 0x32,
50943 wif: 0xb0
50944};
50945</script>
50946 <script>(function() {
50947
50948// p2wpkh
50949
50950bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
50951 baseNetwork: "bitcoin",
0f6b34d6 50952 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 50953 bech32: 'bc',
0f6b34d6 50954 bip32: {
cf6c2044
IC
50955 public: 0x04b24746,
50956 private: 0x04b2430c
0f6b34d6
IC
50957 },
50958 pubKeyHash: 0x00,
50959 scriptHash: 0x05,
50960 wif: 0x80
50961};
50962
cf6c2044
IC
50963// p2wpkh in p2sh
50964
50965bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
50966 baseNetwork: "bitcoin",
0f6b34d6 50967 messagePrefix: '\x18Bitcoin Signed Message:\n',
cf6c2044 50968 bech32: 'bc',
0f6b34d6 50969 bip32: {
cf6c2044
IC
50970 public: 0x049d7cb2,
50971 private: 0x049d7878
50972 },
50973 pubKeyHash: 0x00,
50974 scriptHash: 0x05,
50975 wif: 0x80
50976};
50977
50978bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
50979 baseNetwork: "testnet",
50980 messagePrefix: '\x18Bitcoin Signed Message:\n',
50981 bech32: 'tb',
50982 bip32: {
50983 public: 0x044a5262,
50984 private: 0x044a4e28
0f6b34d6
IC
50985 },
50986 pubKeyHash: 0x6f,
50987 scriptHash: 0xc4,
50988 wif: 0xef
50989};
50990
cf6c2044
IC
50991bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
50992 baseNetwork: "litecoin",
0f6b34d6
IC
50993 messagePrefix: '\x19Litecoin Signed Message:\n',
50994 bip32: {
cf6c2044
IC
50995 public: 0x01b26ef6,
50996 private: 0x01b26792
0f6b34d6
IC
50997 },
50998 pubKeyHash: 0x30,
50999 scriptHash: 0x32,
51000 wif: 0xb0
51001};
cf6c2044
IC
51002
51003})();
8b095871
IC
51004</script>
51005 <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){
51006(function (global){
51007'use strict';
3af2954a 51008
8b095871
IC
51009// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
51010// original notice:
3af2954a 51011
8b095871
IC
51012/*!
51013 * The buffer module from node.js, for the browser.
51014 *
51015 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
51016 * @license MIT
51017 */
51018function compare(a, b) {
51019 if (a === b) {
51020 return 0;
51021 }
3af2954a 51022
8b095871
IC
51023 var x = a.length;
51024 var y = b.length;
3af2954a 51025
8b095871
IC
51026 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
51027 if (a[i] !== b[i]) {
51028 x = a[i];
51029 y = b[i];
51030 break;
51031 }
51032 }
3af2954a 51033
8b095871
IC
51034 if (x < y) {
51035 return -1;
51036 }
51037 if (y < x) {
51038 return 1;
51039 }
51040 return 0;
ab78acc6 51041}
8b095871
IC
51042function isBuffer(b) {
51043 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
51044 return global.Buffer.isBuffer(b);
51045 }
51046 return !!(b != null && b._isBuffer);
ab78acc6 51047}
3af2954a 51048
8b095871
IC
51049// based on node assert, original notice:
51050
51051// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
51052//
51053// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
51054//
51055// Originally from narwhal.js (http://narwhaljs.org)
51056// Copyright (c) 2009 Thomas Robinson <280north.com>
51057//
51058// Permission is hereby granted, free of charge, to any person obtaining a copy
51059// of this software and associated documentation files (the 'Software'), to
51060// deal in the Software without restriction, including without limitation the
51061// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
51062// sell copies of the Software, and to permit persons to whom the Software is
51063// furnished to do so, subject to the following conditions:
51064//
51065// The above copyright notice and this permission notice shall be included in
51066// all copies or substantial portions of the Software.
51067//
51068// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
51069// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51070// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51071// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
51072// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
51073// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
51074
51075var util = require('util/');
51076var hasOwn = Object.prototype.hasOwnProperty;
51077var pSlice = Array.prototype.slice;
51078var functionsHaveNames = (function () {
51079 return function foo() {}.name === 'foo';
51080}());
51081function pToString (obj) {
51082 return Object.prototype.toString.call(obj);
51083}
51084function isView(arrbuf) {
51085 if (isBuffer(arrbuf)) {
51086 return false;
ab78acc6 51087 }
8b095871
IC
51088 if (typeof global.ArrayBuffer !== 'function') {
51089 return false;
51090 }
51091 if (typeof ArrayBuffer.isView === 'function') {
51092 return ArrayBuffer.isView(arrbuf);
51093 }
51094 if (!arrbuf) {
51095 return false;
51096 }
51097 if (arrbuf instanceof DataView) {
51098 return true;
51099 }
51100 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
51101 return true;
51102 }
51103 return false;
ab78acc6 51104}
8b095871
IC
51105// 1. The assert module provides functions that throw
51106// AssertionError's when particular conditions are not met. The
51107// assert module must conform to the following interface.
3af2954a 51108
8b095871 51109var assert = module.exports = ok;
3af2954a 51110
8b095871
IC
51111// 2. The AssertionError is defined in assert.
51112// new assert.AssertionError({ message: message,
51113// actual: actual,
51114// expected: expected })
51115
51116var regex = /\s*function\s+([^\(\s]*)\s*/;
51117// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
51118function getName(func) {
51119 if (!util.isFunction(func)) {
51120 return;
51121 }
51122 if (functionsHaveNames) {
51123 return func.name;
51124 }
51125 var str = func.toString();
51126 var match = str.match(regex);
51127 return match && match[1];
ab78acc6 51128}
8b095871
IC
51129assert.AssertionError = function AssertionError(options) {
51130 this.name = 'AssertionError';
51131 this.actual = options.actual;
51132 this.expected = options.expected;
51133 this.operator = options.operator;
51134 if (options.message) {
51135 this.message = options.message;
51136 this.generatedMessage = false;
51137 } else {
51138 this.message = getMessage(this);
51139 this.generatedMessage = true;
51140 }
51141 var stackStartFunction = options.stackStartFunction || fail;
51142 if (Error.captureStackTrace) {
51143 Error.captureStackTrace(this, stackStartFunction);
51144 } else {
51145 // non v8 browsers so we can have a stacktrace
51146 var err = new Error();
51147 if (err.stack) {
51148 var out = err.stack;
51149
51150 // try to strip useless frames
51151 var fn_name = getName(stackStartFunction);
51152 var idx = out.indexOf('\n' + fn_name);
51153 if (idx >= 0) {
51154 // once we have located the function frame
51155 // we need to strip out everything before it (and its line)
51156 var next_line = out.indexOf('\n', idx + 1);
51157 out = out.substring(next_line + 1);
51158 }
3af2954a 51159
8b095871
IC
51160 this.stack = out;
51161 }
51162 }
51163};
3af2954a 51164
8b095871
IC
51165// assert.AssertionError instanceof Error
51166util.inherits(assert.AssertionError, Error);
3af2954a 51167
8b095871
IC
51168function truncate(s, n) {
51169 if (typeof s === 'string') {
51170 return s.length < n ? s : s.slice(0, n);
51171 } else {
51172 return s;
3af2954a 51173 }
ab78acc6 51174}
8b095871
IC
51175function inspect(something) {
51176 if (functionsHaveNames || !util.isFunction(something)) {
51177 return util.inspect(something);
51178 }
51179 var rawname = getName(something);
51180 var name = rawname ? ': ' + rawname : '';
51181 return '[Function' + name + ']';
51182}
51183function getMessage(self) {
51184 return truncate(inspect(self.actual), 128) + ' ' +
51185 self.operator + ' ' +
51186 truncate(inspect(self.expected), 128);
ab78acc6 51187}
3af2954a 51188
8b095871
IC
51189// At present only the three keys mentioned above are used and
51190// understood by the spec. Implementations or sub modules can pass
51191// other keys to the AssertionError's constructor - they will be
51192// ignored.
3af2954a 51193
8b095871
IC
51194// 3. All of the following functions must throw an AssertionError
51195// when a corresponding condition is not met, with a message that
51196// may be undefined if not provided. All assertion methods provide
51197// both the actual and expected values to the assertion error for
51198// display purposes.
3af2954a 51199
8b095871
IC
51200function fail(actual, expected, message, operator, stackStartFunction) {
51201 throw new assert.AssertionError({
51202 message: message,
51203 actual: actual,
51204 expected: expected,
51205 operator: operator,
51206 stackStartFunction: stackStartFunction
51207 });
ab78acc6 51208}
3af2954a 51209
8b095871
IC
51210// EXTENSION! allows for well behaved errors defined elsewhere.
51211assert.fail = fail;
3af2954a 51212
8b095871
IC
51213// 4. Pure assertion tests whether a value is truthy, as determined
51214// by !!guard.
51215// assert.ok(guard, message_opt);
51216// This statement is equivalent to assert.equal(true, !!guard,
51217// message_opt);. To test strictly for the value true, use
51218// assert.strictEqual(true, guard, message_opt);.
3af2954a 51219
8b095871
IC
51220function ok(value, message) {
51221 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 51222}
8b095871 51223assert.ok = ok;
3af2954a 51224
8b095871
IC
51225// 5. The equality assertion tests shallow, coercive equality with
51226// ==.
51227// assert.equal(actual, expected, message_opt);
3af2954a 51228
8b095871
IC
51229assert.equal = function equal(actual, expected, message) {
51230 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
51231};
3af2954a 51232
8b095871
IC
51233// 6. The non-equality assertion tests for whether two objects are not equal
51234// with != assert.notEqual(actual, expected, message_opt);
3af2954a 51235
8b095871
IC
51236assert.notEqual = function notEqual(actual, expected, message) {
51237 if (actual == expected) {
51238 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 51239 }
8b095871
IC
51240};
51241
51242// 7. The equivalence assertion tests a deep equality relation.
51243// assert.deepEqual(actual, expected, message_opt);
51244
51245assert.deepEqual = function deepEqual(actual, expected, message) {
51246 if (!_deepEqual(actual, expected, false)) {
51247 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 51248 }
8b095871 51249};
3af2954a 51250
8b095871
IC
51251assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
51252 if (!_deepEqual(actual, expected, true)) {
51253 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 51254 }
8b095871
IC
51255};
51256
51257function _deepEqual(actual, expected, strict, memos) {
51258 // 7.1. All identical values are equivalent, as determined by ===.
51259 if (actual === expected) {
51260 return true;
51261 } else if (isBuffer(actual) && isBuffer(expected)) {
51262 return compare(actual, expected) === 0;
51263
51264 // 7.2. If the expected value is a Date object, the actual value is
51265 // equivalent if it is also a Date object that refers to the same time.
51266 } else if (util.isDate(actual) && util.isDate(expected)) {
51267 return actual.getTime() === expected.getTime();
51268
51269 // 7.3 If the expected value is a RegExp object, the actual value is
51270 // equivalent if it is also a RegExp object with the same source and
51271 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
51272 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
51273 return actual.source === expected.source &&
51274 actual.global === expected.global &&
51275 actual.multiline === expected.multiline &&
51276 actual.lastIndex === expected.lastIndex &&
51277 actual.ignoreCase === expected.ignoreCase;
51278
51279 // 7.4. Other pairs that do not both pass typeof value == 'object',
51280 // equivalence is determined by ==.
51281 } else if ((actual === null || typeof actual !== 'object') &&
51282 (expected === null || typeof expected !== 'object')) {
51283 return strict ? actual === expected : actual == expected;
51284
51285 // If both values are instances of typed arrays, wrap their underlying
51286 // ArrayBuffers in a Buffer each to increase performance
51287 // This optimization requires the arrays to have the same type as checked by
51288 // Object.prototype.toString (aka pToString). Never perform binary
51289 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
51290 // bit patterns are not identical.
51291 } else if (isView(actual) && isView(expected) &&
51292 pToString(actual) === pToString(expected) &&
51293 !(actual instanceof Float32Array ||
51294 actual instanceof Float64Array)) {
51295 return compare(new Uint8Array(actual.buffer),
51296 new Uint8Array(expected.buffer)) === 0;
51297
51298 // 7.5 For all other Object pairs, including Array objects, equivalence is
51299 // determined by having the same number of owned properties (as verified
51300 // with Object.prototype.hasOwnProperty.call), the same set of keys
51301 // (although not necessarily the same order), equivalent values for every
51302 // corresponding key, and an identical 'prototype' property. Note: this
51303 // accounts for both named and indexed properties on Arrays.
51304 } else if (isBuffer(actual) !== isBuffer(expected)) {
51305 return false;
51306 } else {
51307 memos = memos || {actual: [], expected: []};
3af2954a 51308
8b095871
IC
51309 var actualIndex = memos.actual.indexOf(actual);
51310 if (actualIndex !== -1) {
51311 if (actualIndex === memos.expected.indexOf(expected)) {
51312 return true;
ab78acc6 51313 }
3af2954a 51314 }
8b095871
IC
51315
51316 memos.actual.push(actual);
51317 memos.expected.push(expected);
51318
51319 return objEquiv(actual, expected, strict, memos);
3af2954a 51320 }
ab78acc6 51321}
3af2954a 51322
8b095871
IC
51323function isArguments(object) {
51324 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 51325}
3af2954a 51326
8b095871
IC
51327function objEquiv(a, b, strict, actualVisitedObjects) {
51328 if (a === null || a === undefined || b === null || b === undefined)
51329 return false;
51330 // if one is a primitive, the other must be same
51331 if (util.isPrimitive(a) || util.isPrimitive(b))
51332 return a === b;
51333 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
51334 return false;
51335 var aIsArgs = isArguments(a);
51336 var bIsArgs = isArguments(b);
51337 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
51338 return false;
51339 if (aIsArgs) {
51340 a = pSlice.call(a);
51341 b = pSlice.call(b);
51342 return _deepEqual(a, b, strict);
51343 }
51344 var ka = objectKeys(a);
51345 var kb = objectKeys(b);
51346 var key, i;
51347 // having the same number of owned properties (keys incorporates
51348 // hasOwnProperty)
51349 if (ka.length !== kb.length)
51350 return false;
51351 //the same set of keys (although not necessarily the same order),
51352 ka.sort();
51353 kb.sort();
51354 //~~~cheap key test
51355 for (i = ka.length - 1; i >= 0; i--) {
51356 if (ka[i] !== kb[i])
51357 return false;
51358 }
51359 //equivalent values for every corresponding key, and
51360 //~~~possibly expensive deep test
51361 for (i = ka.length - 1; i >= 0; i--) {
51362 key = ka[i];
51363 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
51364 return false;
51365 }
51366 return true;
ab78acc6 51367}
3af2954a 51368
8b095871
IC
51369// 8. The non-equivalence assertion tests for any deep inequality.
51370// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 51371
8b095871
IC
51372assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
51373 if (_deepEqual(actual, expected, false)) {
51374 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 51375 }
8b095871 51376};
3af2954a 51377
8b095871
IC
51378assert.notDeepStrictEqual = notDeepStrictEqual;
51379function notDeepStrictEqual(actual, expected, message) {
51380 if (_deepEqual(actual, expected, true)) {
51381 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
51382 }
ab78acc6 51383}
3af2954a 51384
3af2954a 51385
8b095871
IC
51386// 9. The strict equality assertion tests strict equality, as determined by ===.
51387// assert.strictEqual(actual, expected, message_opt);
3af2954a 51388
8b095871
IC
51389assert.strictEqual = function strictEqual(actual, expected, message) {
51390 if (actual !== expected) {
51391 fail(actual, expected, message, '===', assert.strictEqual);
51392 }
51393};
3af2954a 51394
8b095871
IC
51395// 10. The strict non-equality assertion tests for strict inequality, as
51396// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 51397
8b095871
IC
51398assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
51399 if (actual === expected) {
51400 fail(actual, expected, message, '!==', assert.notStrictEqual);
51401 }
51402};
3af2954a 51403
8b095871
IC
51404function expectedException(actual, expected) {
51405 if (!actual || !expected) {
51406 return false;
51407 }
3af2954a 51408
8b095871
IC
51409 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
51410 return expected.test(actual);
51411 }
3af2954a 51412
8b095871
IC
51413 try {
51414 if (actual instanceof expected) {
51415 return true;
51416 }
51417 } catch (e) {
51418 // Ignore. The instanceof check doesn't work for arrow functions.
51419 }
3af2954a 51420
8b095871
IC
51421 if (Error.isPrototypeOf(expected)) {
51422 return false;
51423 }
51424
51425 return expected.call({}, actual) === true;
ab78acc6 51426}
3af2954a 51427
8b095871
IC
51428function _tryBlock(block) {
51429 var error;
51430 try {
51431 block();
51432 } catch (e) {
51433 error = e;
51434 }
51435 return error;
ab78acc6 51436}
3af2954a 51437
8b095871
IC
51438function _throws(shouldThrow, block, expected, message) {
51439 var actual;
51440
51441 if (typeof block !== 'function') {
51442 throw new TypeError('"block" argument must be a function');
3af2954a 51443 }
8b095871
IC
51444
51445 if (typeof expected === 'string') {
51446 message = expected;
51447 expected = null;
ab78acc6 51448 }
8b095871
IC
51449
51450 actual = _tryBlock(block);
51451
51452 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
51453 (message ? ' ' + message : '.');
51454
51455 if (shouldThrow && !actual) {
51456 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 51457 }
8b095871
IC
51458
51459 var userProvidedMessage = typeof message === 'string';
51460 var isUnwantedException = !shouldThrow && util.isError(actual);
51461 var isUnexpectedException = !shouldThrow && actual && !expected;
51462
51463 if ((isUnwantedException &&
51464 userProvidedMessage &&
51465 expectedException(actual, expected)) ||
51466 isUnexpectedException) {
51467 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 51468 }
3af2954a 51469
8b095871
IC
51470 if ((shouldThrow && actual && expected &&
51471 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
51472 throw actual;
51473 }
ab78acc6 51474}
3af2954a 51475
8b095871
IC
51476// 11. Expected to throw an error:
51477// assert.throws(block, Error_opt, message_opt);
51478
51479assert.throws = function(block, /*optional*/error, /*optional*/message) {
51480 _throws(true, block, error, message);
51481};
51482
51483// EXTENSION! This is annoying to write outside this module.
51484assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
51485 _throws(false, block, error, message);
51486};
51487
51488assert.ifError = function(err) { if (err) throw err; };
51489
51490var objectKeys = Object.keys || function (obj) {
51491 var keys = [];
51492 for (var key in obj) {
51493 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 51494 }
8b095871
IC
51495 return keys;
51496};
3af2954a 51497
8b095871
IC
51498}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51499},{"util/":30}],2:[function(require,module,exports){
51500'use strict'
51501
51502exports.byteLength = byteLength
51503exports.toByteArray = toByteArray
51504exports.fromByteArray = fromByteArray
51505
51506var lookup = []
51507var revLookup = []
51508var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
51509
51510var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
51511for (var i = 0, len = code.length; i < len; ++i) {
51512 lookup[i] = code[i]
51513 revLookup[code.charCodeAt(i)] = i
51514}
51515
51516revLookup['-'.charCodeAt(0)] = 62
51517revLookup['_'.charCodeAt(0)] = 63
51518
51519function placeHoldersCount (b64) {
51520 var len = b64.length
51521 if (len % 4 > 0) {
51522 throw new Error('Invalid string. Length must be a multiple of 4')
51523 }
51524
51525 // the number of equal signs (place holders)
51526 // if there are two placeholders, than the two characters before it
51527 // represent one byte
51528 // if there is only one, then the three characters before it represent 2 bytes
51529 // this is just a cheap hack to not do indexOf twice
51530 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
51531}
51532
8b095871
IC
51533function byteLength (b64) {
51534 // base64 is 4/3 + up to two characters of the original data
51535 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 51536}
3af2954a 51537
8b095871
IC
51538function toByteArray (b64) {
51539 var i, j, l, tmp, placeHolders, arr
51540 var len = b64.length
51541 placeHolders = placeHoldersCount(b64)
51542
51543 arr = new Arr(len * 3 / 4 - placeHolders)
51544
51545 // if there are placeholders, only get up to the last complete 4 chars
51546 l = placeHolders > 0 ? len - 4 : len
51547
51548 var L = 0
51549
51550 for (i = 0, j = 0; i < l; i += 4, j += 3) {
51551 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
51552 arr[L++] = (tmp >> 16) & 0xFF
51553 arr[L++] = (tmp >> 8) & 0xFF
51554 arr[L++] = tmp & 0xFF
51555 }
51556
51557 if (placeHolders === 2) {
51558 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
51559 arr[L++] = tmp & 0xFF
51560 } else if (placeHolders === 1) {
51561 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
51562 arr[L++] = (tmp >> 8) & 0xFF
51563 arr[L++] = tmp & 0xFF
51564 }
51565
51566 return arr
ab78acc6 51567}
3af2954a 51568
8b095871
IC
51569function tripletToBase64 (num) {
51570 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 51571}
3af2954a 51572
8b095871
IC
51573function encodeChunk (uint8, start, end) {
51574 var tmp
51575 var output = []
51576 for (var i = start; i < end; i += 3) {
51577 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
51578 output.push(tripletToBase64(tmp))
51579 }
51580 return output.join('')
ab78acc6 51581}
3af2954a 51582
8b095871
IC
51583function fromByteArray (uint8) {
51584 var tmp
51585 var len = uint8.length
51586 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
51587 var output = ''
51588 var parts = []
51589 var maxChunkLength = 16383 // must be multiple of 3
51590
51591 // go through the array every three bytes, we'll deal with trailing stuff later
51592 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
51593 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
51594 }
51595
51596 // pad the end with zeros, but make sure to not forget the extra bytes
51597 if (extraBytes === 1) {
51598 tmp = uint8[len - 1]
51599 output += lookup[tmp >> 2]
51600 output += lookup[(tmp << 4) & 0x3F]
51601 output += '=='
51602 } else if (extraBytes === 2) {
51603 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
51604 output += lookup[tmp >> 10]
51605 output += lookup[(tmp >> 4) & 0x3F]
51606 output += lookup[(tmp << 2) & 0x3F]
51607 output += '='
51608 }
51609
51610 parts.push(output)
51611
51612 return parts.join('')
ab78acc6 51613}
3af2954a 51614
8b095871 51615},{}],3:[function(require,module,exports){
3af2954a 51616
8b095871
IC
51617},{}],4:[function(require,module,exports){
51618(function (global){
51619'use strict';
51620
51621var buffer = require('buffer');
51622var Buffer = buffer.Buffer;
51623var SlowBuffer = buffer.SlowBuffer;
51624var MAX_LEN = buffer.kMaxLength || 2147483647;
51625exports.alloc = function alloc(size, fill, encoding) {
51626 if (typeof Buffer.alloc === 'function') {
51627 return Buffer.alloc(size, fill, encoding);
ab78acc6 51628 }
8b095871
IC
51629 if (typeof encoding === 'number') {
51630 throw new TypeError('encoding must not be number');
51631 }
51632 if (typeof size !== 'number') {
51633 throw new TypeError('size must be a number');
51634 }
51635 if (size > MAX_LEN) {
51636 throw new RangeError('size is too large');
51637 }
51638 var enc = encoding;
51639 var _fill = fill;
51640 if (_fill === undefined) {
51641 enc = undefined;
51642 _fill = 0;
51643 }
51644 var buf = new Buffer(size);
51645 if (typeof _fill === 'string') {
51646 var fillBuf = new Buffer(_fill, enc);
51647 var flen = fillBuf.length;
51648 var i = -1;
51649 while (++i < size) {
51650 buf[i] = fillBuf[i % flen];
ab78acc6 51651 }
ab78acc6 51652 } else {
8b095871 51653 buf.fill(_fill);
ab78acc6 51654 }
8b095871 51655 return buf;
ab78acc6 51656}
8b095871
IC
51657exports.allocUnsafe = function allocUnsafe(size) {
51658 if (typeof Buffer.allocUnsafe === 'function') {
51659 return Buffer.allocUnsafe(size);
51660 }
51661 if (typeof size !== 'number') {
51662 throw new TypeError('size must be a number');
51663 }
51664 if (size > MAX_LEN) {
51665 throw new RangeError('size is too large');
51666 }
51667 return new Buffer(size);
ab78acc6 51668}
8b095871
IC
51669exports.from = function from(value, encodingOrOffset, length) {
51670 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
51671 return Buffer.from(value, encodingOrOffset, length);
51672 }
51673 if (typeof value === 'number') {
51674 throw new TypeError('"value" argument must not be a number');
51675 }
51676 if (typeof value === 'string') {
51677 return new Buffer(value, encodingOrOffset);
51678 }
51679 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
51680 var offset = encodingOrOffset;
51681 if (arguments.length === 1) {
51682 return new Buffer(value);
51683 }
51684 if (typeof offset === 'undefined') {
51685 offset = 0;
51686 }
51687 var len = length;
51688 if (typeof len === 'undefined') {
51689 len = value.byteLength - offset;
51690 }
51691 if (offset >= value.byteLength) {
51692 throw new RangeError('\'offset\' is out of bounds');
51693 }
51694 if (len > value.byteLength - offset) {
51695 throw new RangeError('\'length\' is out of bounds');
51696 }
51697 return new Buffer(value.slice(offset, offset + len));
51698 }
51699 if (Buffer.isBuffer(value)) {
51700 var out = new Buffer(value.length);
51701 value.copy(out, 0, 0, value.length);
51702 return out;
51703 }
51704 if (value) {
51705 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
51706 return new Buffer(value);
51707 }
51708 if (value.type === 'Buffer' && Array.isArray(value.data)) {
51709 return new Buffer(value.data);
51710 }
51711 }
3af2954a 51712
8b095871 51713 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 51714}
8b095871
IC
51715exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
51716 if (typeof Buffer.allocUnsafeSlow === 'function') {
51717 return Buffer.allocUnsafeSlow(size);
51718 }
51719 if (typeof size !== 'number') {
51720 throw new TypeError('size must be a number');
51721 }
51722 if (size >= MAX_LEN) {
51723 throw new RangeError('size is too large');
51724 }
51725 return new SlowBuffer(size);
ab78acc6 51726}
3af2954a 51727
8b095871
IC
51728}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51729},{"buffer":5}],5:[function(require,module,exports){
51730/*!
51731 * The buffer module from node.js, for the browser.
51732 *
51733 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
51734 * @license MIT
51735 */
51736/* eslint-disable no-proto */
3af2954a 51737
8b095871 51738'use strict'
3af2954a 51739
8b095871
IC
51740var base64 = require('base64-js')
51741var ieee754 = require('ieee754')
3af2954a 51742
8b095871
IC
51743exports.Buffer = Buffer
51744exports.SlowBuffer = SlowBuffer
51745exports.INSPECT_MAX_BYTES = 50
51746
51747var K_MAX_LENGTH = 0x7fffffff
51748exports.kMaxLength = K_MAX_LENGTH
51749
51750/**
51751 * If `Buffer.TYPED_ARRAY_SUPPORT`:
51752 * === true Use Uint8Array implementation (fastest)
51753 * === false Print warning and recommend using `buffer` v4.x which has an Object
51754 * implementation (most compatible, even IE6)
51755 *
51756 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
51757 * Opera 11.6+, iOS 4.2+.
51758 *
51759 * We report that the browser does not support typed arrays if the are not subclassable
51760 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
51761 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
51762 * for __proto__ and has a buggy typed array implementation.
51763 */
51764Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
51765
51766if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
51767 typeof console.error === 'function') {
51768 console.error(
51769 'This browser lacks typed array (Uint8Array) support which is required by ' +
51770 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
51771 )
ab78acc6 51772}
3af2954a 51773
8b095871
IC
51774function typedArraySupport () {
51775 // Can typed array instances can be augmented?
51776 try {
51777 var arr = new Uint8Array(1)
51778 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
51779 return arr.foo() === 42
51780 } catch (e) {
51781 return false
51782 }
ab78acc6 51783}
3af2954a 51784
8b095871
IC
51785function createBuffer (length) {
51786 if (length > K_MAX_LENGTH) {
51787 throw new RangeError('Invalid typed array length')
3af2954a 51788 }
8b095871
IC
51789 // Return an augmented `Uint8Array` instance
51790 var buf = new Uint8Array(length)
51791 buf.__proto__ = Buffer.prototype
51792 return buf
ab78acc6 51793}
3af2954a 51794
8b095871
IC
51795/**
51796 * The Buffer constructor returns instances of `Uint8Array` that have their
51797 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
51798 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
51799 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
51800 * returns a single octet.
51801 *
51802 * The `Uint8Array` prototype remains unmodified.
51803 */
3af2954a 51804
8b095871
IC
51805function Buffer (arg, encodingOrOffset, length) {
51806 // Common case.
51807 if (typeof arg === 'number') {
51808 if (typeof encodingOrOffset === 'string') {
51809 throw new Error(
51810 'If encoding is specified then the first argument must be a string'
51811 )
51812 }
51813 return allocUnsafe(arg)
51814 }
51815 return from(arg, encodingOrOffset, length)
ab78acc6 51816}
3af2954a 51817
8b095871
IC
51818// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
51819if (typeof Symbol !== 'undefined' && Symbol.species &&
51820 Buffer[Symbol.species] === Buffer) {
51821 Object.defineProperty(Buffer, Symbol.species, {
51822 value: null,
51823 configurable: true,
51824 enumerable: false,
51825 writable: false
51826 })
ab78acc6 51827}
3af2954a 51828
8b095871 51829Buffer.poolSize = 8192 // not used by this implementation
3af2954a 51830
8b095871
IC
51831function from (value, encodingOrOffset, length) {
51832 if (typeof value === 'number') {
51833 throw new TypeError('"value" argument must not be a number')
51834 }
3af2954a 51835
8b095871
IC
51836 if (value instanceof ArrayBuffer) {
51837 return fromArrayBuffer(value, encodingOrOffset, length)
51838 }
3af2954a 51839
8b095871
IC
51840 if (typeof value === 'string') {
51841 return fromString(value, encodingOrOffset)
51842 }
3af2954a 51843
8b095871 51844 return fromObject(value)
ab78acc6 51845}
3af2954a 51846
8b095871
IC
51847/**
51848 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
51849 * if value is a number.
51850 * Buffer.from(str[, encoding])
51851 * Buffer.from(array)
51852 * Buffer.from(buffer)
51853 * Buffer.from(arrayBuffer[, byteOffset[, length]])
51854 **/
51855Buffer.from = function (value, encodingOrOffset, length) {
51856 return from(value, encodingOrOffset, length)
ab78acc6 51857}
3af2954a 51858
8b095871
IC
51859// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
51860// https://github.com/feross/buffer/pull/148
51861Buffer.prototype.__proto__ = Uint8Array.prototype
51862Buffer.__proto__ = Uint8Array
51863
51864function assertSize (size) {
51865 if (typeof size !== 'number') {
51866 throw new TypeError('"size" argument must be a number')
51867 } else if (size < 0) {
51868 throw new RangeError('"size" argument must not be negative')
51869 }
51870}
51871
51872function alloc (size, fill, encoding) {
51873 assertSize(size)
51874 if (size <= 0) {
51875 return createBuffer(size)
3af2954a 51876 }
8b095871
IC
51877 if (fill !== undefined) {
51878 // Only pay attention to encoding if it's a string. This
51879 // prevents accidentally sending in a number that would
51880 // be interpretted as a start offset.
51881 return typeof encoding === 'string'
51882 ? createBuffer(size).fill(fill, encoding)
51883 : createBuffer(size).fill(fill)
51884 }
51885 return createBuffer(size)
ab78acc6 51886}
3af2954a 51887
8b095871
IC
51888/**
51889 * Creates a new filled Buffer instance.
51890 * alloc(size[, fill[, encoding]])
51891 **/
51892Buffer.alloc = function (size, fill, encoding) {
51893 return alloc(size, fill, encoding)
ab78acc6 51894}
3af2954a 51895
8b095871
IC
51896function allocUnsafe (size) {
51897 assertSize(size)
51898 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 51899}
3af2954a 51900
8b095871
IC
51901/**
51902 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
51903 * */
51904Buffer.allocUnsafe = function (size) {
51905 return allocUnsafe(size)
51906}
51907/**
51908 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
51909 */
51910Buffer.allocUnsafeSlow = function (size) {
51911 return allocUnsafe(size)
ab78acc6 51912}
3af2954a 51913
8b095871
IC
51914function fromString (string, encoding) {
51915 if (typeof encoding !== 'string' || encoding === '') {
51916 encoding = 'utf8'
51917 }
51918
51919 if (!Buffer.isEncoding(encoding)) {
51920 throw new TypeError('"encoding" must be a valid string encoding')
51921 }
51922
51923 var length = byteLength(string, encoding) | 0
51924 var buf = createBuffer(length)
51925
51926 var actual = buf.write(string, encoding)
51927
51928 if (actual !== length) {
51929 // Writing a hex string, for example, that contains invalid characters will
51930 // cause everything after the first invalid character to be ignored. (e.g.
51931 // 'abxxcd' will be treated as 'ab')
51932 buf = buf.slice(0, actual)
51933 }
51934
51935 return buf
ab78acc6 51936}
3af2954a 51937
8b095871
IC
51938function fromArrayLike (array) {
51939 var length = array.length < 0 ? 0 : checked(array.length) | 0
51940 var buf = createBuffer(length)
51941 for (var i = 0; i < length; i += 1) {
51942 buf[i] = array[i] & 255
51943 }
51944 return buf
51945}
3af2954a 51946
8b095871
IC
51947function fromArrayBuffer (array, byteOffset, length) {
51948 if (byteOffset < 0 || array.byteLength < byteOffset) {
51949 throw new RangeError('\'offset\' is out of bounds')
51950 }
3af2954a 51951
8b095871
IC
51952 if (array.byteLength < byteOffset + (length || 0)) {
51953 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
51954 }
51955
8b095871
IC
51956 var buf
51957 if (byteOffset === undefined && length === undefined) {
51958 buf = new Uint8Array(array)
51959 } else if (length === undefined) {
51960 buf = new Uint8Array(array, byteOffset)
51961 } else {
51962 buf = new Uint8Array(array, byteOffset, length)
51963 }
3af2954a 51964
8b095871
IC
51965 // Return an augmented `Uint8Array` instance
51966 buf.__proto__ = Buffer.prototype
51967 return buf
51968}
51969
51970function fromObject (obj) {
51971 if (Buffer.isBuffer(obj)) {
51972 var len = checked(obj.length) | 0
51973 var buf = createBuffer(len)
51974
51975 if (buf.length === 0) {
51976 return buf
ab78acc6 51977 }
8b095871
IC
51978
51979 obj.copy(buf, 0, 0, len)
51980 return buf
51981 }
51982
51983 if (obj) {
51984 if (ArrayBuffer.isView(obj) || 'length' in obj) {
51985 if (typeof obj.length !== 'number' || isnan(obj.length)) {
51986 return createBuffer(0)
ab78acc6 51987 }
8b095871 51988 return fromArrayLike(obj)
ab78acc6 51989 }
3af2954a 51990
8b095871
IC
51991 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
51992 return fromArrayLike(obj.data)
3af2954a
IC
51993 }
51994 }
8b095871
IC
51995
51996 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 51997}
3af2954a 51998
8b095871
IC
51999function checked (length) {
52000 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
52001 // length is NaN (which is otherwise coerced to zero.)
52002 if (length >= K_MAX_LENGTH) {
52003 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
52004 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 52005 }
8b095871
IC
52006 return length | 0
52007}
52008
52009function SlowBuffer (length) {
52010 if (+length != length) { // eslint-disable-line eqeqeq
52011 length = 0
3af2954a 52012 }
8b095871 52013 return Buffer.alloc(+length)
ab78acc6 52014}
3af2954a 52015
8b095871
IC
52016Buffer.isBuffer = function isBuffer (b) {
52017 return b != null && b._isBuffer === true
ab78acc6 52018}
3af2954a 52019
8b095871
IC
52020Buffer.compare = function compare (a, b) {
52021 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
52022 throw new TypeError('Arguments must be Buffers')
52023 }
52024
52025 if (a === b) return 0
52026
52027 var x = a.length
52028 var y = b.length
52029
52030 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
52031 if (a[i] !== b[i]) {
52032 x = a[i]
52033 y = b[i]
52034 break
ab78acc6
IC
52035 }
52036 }
8b095871
IC
52037
52038 if (x < y) return -1
52039 if (y < x) return 1
52040 return 0
52041}
52042
52043Buffer.isEncoding = function isEncoding (encoding) {
52044 switch (String(encoding).toLowerCase()) {
52045 case 'hex':
52046 case 'utf8':
52047 case 'utf-8':
52048 case 'ascii':
52049 case 'latin1':
52050 case 'binary':
52051 case 'base64':
52052 case 'ucs2':
52053 case 'ucs-2':
52054 case 'utf16le':
52055 case 'utf-16le':
52056 return true
52057 default:
52058 return false
52059 }
ab78acc6
IC
52060}
52061
8b095871
IC
52062Buffer.concat = function concat (list, length) {
52063 if (!Array.isArray(list)) {
52064 throw new TypeError('"list" argument must be an Array of Buffers')
52065 }
ab78acc6 52066
8b095871
IC
52067 if (list.length === 0) {
52068 return Buffer.alloc(0)
52069 }
ab78acc6 52070
8b095871
IC
52071 var i
52072 if (length === undefined) {
52073 length = 0
52074 for (i = 0; i < list.length; ++i) {
52075 length += list[i].length
52076 }
3af2954a 52077 }
8b095871
IC
52078
52079 var buffer = Buffer.allocUnsafe(length)
52080 var pos = 0
52081 for (i = 0; i < list.length; ++i) {
52082 var buf = list[i]
52083 if (!Buffer.isBuffer(buf)) {
52084 throw new TypeError('"list" argument must be an Array of Buffers')
52085 }
52086 buf.copy(buffer, pos)
52087 pos += buf.length
ab78acc6 52088 }
8b095871 52089 return buffer
ab78acc6
IC
52090}
52091
8b095871
IC
52092function byteLength (string, encoding) {
52093 if (Buffer.isBuffer(string)) {
52094 return string.length
52095 }
52096 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
52097 return string.byteLength
52098 }
52099 if (typeof string !== 'string') {
52100 string = '' + string
52101 }
52102
52103 var len = string.length
52104 if (len === 0) return 0
52105
52106 // Use a for loop to avoid recursion
52107 var loweredCase = false
52108 for (;;) {
52109 switch (encoding) {
52110 case 'ascii':
52111 case 'latin1':
52112 case 'binary':
52113 return len
52114 case 'utf8':
52115 case 'utf-8':
52116 case undefined:
52117 return utf8ToBytes(string).length
52118 case 'ucs2':
52119 case 'ucs-2':
52120 case 'utf16le':
52121 case 'utf-16le':
52122 return len * 2
52123 case 'hex':
52124 return len >>> 1
52125 case 'base64':
52126 return base64ToBytes(string).length
52127 default:
52128 if (loweredCase) return utf8ToBytes(string).length // assume utf8
52129 encoding = ('' + encoding).toLowerCase()
52130 loweredCase = true
ab78acc6 52131 }
3af2954a 52132 }
ab78acc6 52133}
8b095871 52134Buffer.byteLength = byteLength
3af2954a 52135
8b095871
IC
52136function slowToString (encoding, start, end) {
52137 var loweredCase = false
3af2954a 52138
8b095871
IC
52139 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
52140 // property of a typed array.
3af2954a 52141
8b095871
IC
52142 // This behaves neither like String nor Uint8Array in that we set start/end
52143 // to their upper/lower bounds if the value passed is out of range.
52144 // undefined is handled specially as per ECMA-262 6th Edition,
52145 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
52146 if (start === undefined || start < 0) {
52147 start = 0
52148 }
52149 // Return early if start > this.length. Done here to prevent potential uint32
52150 // coercion fail below.
52151 if (start > this.length) {
52152 return ''
52153 }
3af2954a 52154
8b095871
IC
52155 if (end === undefined || end > this.length) {
52156 end = this.length
52157 }
3af2954a 52158
8b095871
IC
52159 if (end <= 0) {
52160 return ''
52161 }
3af2954a 52162
8b095871
IC
52163 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
52164 end >>>= 0
52165 start >>>= 0
3af2954a 52166
8b095871
IC
52167 if (end <= start) {
52168 return ''
3af2954a
IC
52169 }
52170
8b095871 52171 if (!encoding) encoding = 'utf8'
3af2954a 52172
8b095871
IC
52173 while (true) {
52174 switch (encoding) {
52175 case 'hex':
52176 return hexSlice(this, start, end)
52177
52178 case 'utf8':
52179 case 'utf-8':
52180 return utf8Slice(this, start, end)
52181
52182 case 'ascii':
52183 return asciiSlice(this, start, end)
52184
52185 case 'latin1':
52186 case 'binary':
52187 return latin1Slice(this, start, end)
52188
52189 case 'base64':
52190 return base64Slice(this, start, end)
52191
52192 case 'ucs2':
52193 case 'ucs-2':
52194 case 'utf16le':
52195 case 'utf-16le':
52196 return utf16leSlice(this, start, end)
52197
52198 default:
52199 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
52200 encoding = (encoding + '').toLowerCase()
52201 loweredCase = true
52202 }
52203 }
ab78acc6 52204}
3af2954a 52205
8b095871
IC
52206// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
52207// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
52208// reliably in a browserify context because there could be multiple different
52209// copies of the 'buffer' package in use. This method works even for Buffer
52210// instances that were created from another copy of the `buffer` package.
52211// See: https://github.com/feross/buffer/issues/154
52212Buffer.prototype._isBuffer = true
52213
52214function swap (b, n, m) {
52215 var i = b[n]
52216 b[n] = b[m]
52217 b[m] = i
ab78acc6 52218}
3af2954a 52219
8b095871
IC
52220Buffer.prototype.swap16 = function swap16 () {
52221 var len = this.length
52222 if (len % 2 !== 0) {
52223 throw new RangeError('Buffer size must be a multiple of 16-bits')
52224 }
52225 for (var i = 0; i < len; i += 2) {
52226 swap(this, i, i + 1)
52227 }
52228 return this
52229}
3af2954a 52230
8b095871
IC
52231Buffer.prototype.swap32 = function swap32 () {
52232 var len = this.length
52233 if (len % 4 !== 0) {
52234 throw new RangeError('Buffer size must be a multiple of 32-bits')
52235 }
52236 for (var i = 0; i < len; i += 4) {
52237 swap(this, i, i + 3)
52238 swap(this, i + 1, i + 2)
52239 }
52240 return this
52241}
3af2954a 52242
8b095871
IC
52243Buffer.prototype.swap64 = function swap64 () {
52244 var len = this.length
52245 if (len % 8 !== 0) {
52246 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 52247 }
8b095871
IC
52248 for (var i = 0; i < len; i += 8) {
52249 swap(this, i, i + 7)
52250 swap(this, i + 1, i + 6)
52251 swap(this, i + 2, i + 5)
52252 swap(this, i + 3, i + 4)
52253 }
52254 return this
52255}
3af2954a 52256
8b095871
IC
52257Buffer.prototype.toString = function toString () {
52258 var length = this.length
52259 if (length === 0) return ''
52260 if (arguments.length === 0) return utf8Slice(this, 0, length)
52261 return slowToString.apply(this, arguments)
ab78acc6 52262}
3af2954a 52263
8b095871
IC
52264Buffer.prototype.equals = function equals (b) {
52265 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
52266 if (this === b) return true
52267 return Buffer.compare(this, b) === 0
52268}
3af2954a 52269
8b095871
IC
52270Buffer.prototype.inspect = function inspect () {
52271 var str = ''
52272 var max = exports.INSPECT_MAX_BYTES
52273 if (this.length > 0) {
52274 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
52275 if (this.length > max) str += ' ... '
52276 }
52277 return '<Buffer ' + str + '>'
ab78acc6 52278}
3af2954a 52279
8b095871
IC
52280Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
52281 if (!Buffer.isBuffer(target)) {
52282 throw new TypeError('Argument must be a Buffer')
52283 }
3af2954a 52284
8b095871
IC
52285 if (start === undefined) {
52286 start = 0
52287 }
52288 if (end === undefined) {
52289 end = target ? target.length : 0
52290 }
52291 if (thisStart === undefined) {
52292 thisStart = 0
52293 }
52294 if (thisEnd === undefined) {
52295 thisEnd = this.length
52296 }
3af2954a 52297
8b095871
IC
52298 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
52299 throw new RangeError('out of range index')
52300 }
3af2954a 52301
8b095871
IC
52302 if (thisStart >= thisEnd && start >= end) {
52303 return 0
52304 }
52305 if (thisStart >= thisEnd) {
52306 return -1
52307 }
52308 if (start >= end) {
52309 return 1
52310 }
3af2954a 52311
8b095871
IC
52312 start >>>= 0
52313 end >>>= 0
52314 thisStart >>>= 0
52315 thisEnd >>>= 0
3af2954a 52316
8b095871 52317 if (this === target) return 0
3af2954a 52318
8b095871
IC
52319 var x = thisEnd - thisStart
52320 var y = end - start
52321 var len = Math.min(x, y)
52322
52323 var thisCopy = this.slice(thisStart, thisEnd)
52324 var targetCopy = target.slice(start, end)
52325
52326 for (var i = 0; i < len; ++i) {
52327 if (thisCopy[i] !== targetCopy[i]) {
52328 x = thisCopy[i]
52329 y = targetCopy[i]
52330 break
3af2954a 52331 }
8b095871
IC
52332 }
52333
52334 if (x < y) return -1
52335 if (y < x) return 1
52336 return 0
ab78acc6 52337}
3af2954a 52338
8b095871
IC
52339// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
52340// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 52341//
8b095871
IC
52342// Arguments:
52343// - buffer - a Buffer to search
52344// - val - a string, Buffer, or number
52345// - byteOffset - an index into `buffer`; will be clamped to an int32
52346// - encoding - an optional encoding, relevant is val is a string
52347// - dir - true for indexOf, false for lastIndexOf
52348function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
52349 // Empty buffer means no match
52350 if (buffer.length === 0) return -1
52351
52352 // Normalize byteOffset
52353 if (typeof byteOffset === 'string') {
52354 encoding = byteOffset
52355 byteOffset = 0
52356 } else if (byteOffset > 0x7fffffff) {
52357 byteOffset = 0x7fffffff
52358 } else if (byteOffset < -0x80000000) {
52359 byteOffset = -0x80000000
52360 }
52361 byteOffset = +byteOffset // Coerce to Number.
52362 if (isNaN(byteOffset)) {
52363 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
52364 byteOffset = dir ? 0 : (buffer.length - 1)
52365 }
52366
52367 // Normalize byteOffset: negative offsets start from the end of the buffer
52368 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
52369 if (byteOffset >= buffer.length) {
52370 if (dir) return -1
52371 else byteOffset = buffer.length - 1
52372 } else if (byteOffset < 0) {
52373 if (dir) byteOffset = 0
52374 else return -1
52375 }
52376
52377 // Normalize val
52378 if (typeof val === 'string') {
52379 val = Buffer.from(val, encoding)
52380 }
3af2954a 52381
8b095871
IC
52382 // Finally, search either indexOf (if dir is true) or lastIndexOf
52383 if (Buffer.isBuffer(val)) {
52384 // Special case: looking for empty string/buffer always fails
52385 if (val.length === 0) {
52386 return -1
52387 }
52388 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
52389 } else if (typeof val === 'number') {
52390 val = val & 0xFF // Search for a byte value [0-255]
52391 if (typeof Uint8Array.prototype.indexOf === 'function') {
52392 if (dir) {
52393 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
52394 } else {
52395 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
52396 }
52397 }
52398 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
52399 }
3af2954a 52400
8b095871
IC
52401 throw new TypeError('val must be string, number or Buffer')
52402}
3af2954a 52403
8b095871
IC
52404function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
52405 var indexSize = 1
52406 var arrLength = arr.length
52407 var valLength = val.length
3af2954a 52408
8b095871
IC
52409 if (encoding !== undefined) {
52410 encoding = String(encoding).toLowerCase()
52411 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
52412 encoding === 'utf16le' || encoding === 'utf-16le') {
52413 if (arr.length < 2 || val.length < 2) {
52414 return -1
52415 }
52416 indexSize = 2
52417 arrLength /= 2
52418 valLength /= 2
52419 byteOffset /= 2
52420 }
52421 }
3af2954a 52422
8b095871
IC
52423 function read (buf, i) {
52424 if (indexSize === 1) {
52425 return buf[i]
52426 } else {
52427 return buf.readUInt16BE(i * indexSize)
52428 }
52429 }
3af2954a 52430
8b095871
IC
52431 var i
52432 if (dir) {
52433 var foundIndex = -1
52434 for (i = byteOffset; i < arrLength; i++) {
52435 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
52436 if (foundIndex === -1) foundIndex = i
52437 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
52438 } else {
52439 if (foundIndex !== -1) i -= i - foundIndex
52440 foundIndex = -1
52441 }
52442 }
ab78acc6 52443 } else {
8b095871
IC
52444 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
52445 for (i = byteOffset; i >= 0; i--) {
52446 var found = true
52447 for (var j = 0; j < valLength; j++) {
52448 if (read(arr, i + j) !== read(val, j)) {
52449 found = false
52450 break
52451 }
52452 }
52453 if (found) return i
52454 }
ab78acc6 52455 }
3af2954a 52456
8b095871
IC
52457 return -1
52458}
3af2954a 52459
8b095871
IC
52460Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
52461 return this.indexOf(val, byteOffset, encoding) !== -1
52462}
52463
52464Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
52465 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
52466}
3af2954a 52467
8b095871
IC
52468Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
52469 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
52470}
52471
52472function hexWrite (buf, string, offset, length) {
52473 offset = Number(offset) || 0
52474 var remaining = buf.length - offset
52475 if (!length) {
52476 length = remaining
52477 } else {
52478 length = Number(length)
52479 if (length > remaining) {
52480 length = remaining
3af2954a 52481 }
3af2954a
IC
52482 }
52483
8b095871
IC
52484 // must be an even number of digits
52485 var strLen = string.length
52486 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 52487
8b095871
IC
52488 if (length > strLen / 2) {
52489 length = strLen / 2
ab78acc6 52490 }
8b095871
IC
52491 for (var i = 0; i < length; ++i) {
52492 var parsed = parseInt(string.substr(i * 2, 2), 16)
52493 if (isNaN(parsed)) return i
52494 buf[offset + i] = parsed
ab78acc6 52495 }
8b095871 52496 return i
ab78acc6 52497}
3af2954a 52498
8b095871
IC
52499function utf8Write (buf, string, offset, length) {
52500 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 52501}
3af2954a 52502
8b095871
IC
52503function asciiWrite (buf, string, offset, length) {
52504 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 52505}
3af2954a 52506
8b095871
IC
52507function latin1Write (buf, string, offset, length) {
52508 return asciiWrite(buf, string, offset, length)
ab78acc6 52509}
3af2954a 52510
8b095871
IC
52511function base64Write (buf, string, offset, length) {
52512 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 52513}
3af2954a 52514
8b095871
IC
52515function ucs2Write (buf, string, offset, length) {
52516 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
52517}
3af2954a 52518
8b095871
IC
52519Buffer.prototype.write = function write (string, offset, length, encoding) {
52520 // Buffer#write(string)
52521 if (offset === undefined) {
52522 encoding = 'utf8'
52523 length = this.length
52524 offset = 0
52525 // Buffer#write(string, encoding)
52526 } else if (length === undefined && typeof offset === 'string') {
52527 encoding = offset
52528 length = this.length
52529 offset = 0
52530 // Buffer#write(string, offset[, length][, encoding])
52531 } else if (isFinite(offset)) {
52532 offset = offset >>> 0
52533 if (isFinite(length)) {
52534 length = length >>> 0
52535 if (encoding === undefined) encoding = 'utf8'
52536 } else {
52537 encoding = length
52538 length = undefined
52539 }
52540 } else {
52541 throw new Error(
52542 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
52543 )
3af2954a
IC
52544 }
52545
8b095871
IC
52546 var remaining = this.length - offset
52547 if (length === undefined || length > remaining) length = remaining
3af2954a 52548
8b095871
IC
52549 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
52550 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 52551 }
3af2954a 52552
8b095871 52553 if (!encoding) encoding = 'utf8'
3af2954a 52554
8b095871
IC
52555 var loweredCase = false
52556 for (;;) {
52557 switch (encoding) {
52558 case 'hex':
52559 return hexWrite(this, string, offset, length)
3af2954a 52560
8b095871
IC
52561 case 'utf8':
52562 case 'utf-8':
52563 return utf8Write(this, string, offset, length)
3af2954a 52564
8b095871
IC
52565 case 'ascii':
52566 return asciiWrite(this, string, offset, length)
3af2954a 52567
8b095871
IC
52568 case 'latin1':
52569 case 'binary':
52570 return latin1Write(this, string, offset, length)
3af2954a 52571
8b095871
IC
52572 case 'base64':
52573 // Warning: maxLength not taken into account in base64Write
52574 return base64Write(this, string, offset, length)
3af2954a 52575
8b095871
IC
52576 case 'ucs2':
52577 case 'ucs-2':
52578 case 'utf16le':
52579 case 'utf-16le':
52580 return ucs2Write(this, string, offset, length)
3af2954a 52581
8b095871
IC
52582 default:
52583 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
52584 encoding = ('' + encoding).toLowerCase()
52585 loweredCase = true
52586 }
3af2954a 52587 }
ab78acc6 52588}
3af2954a 52589
8b095871
IC
52590Buffer.prototype.toJSON = function toJSON () {
52591 return {
52592 type: 'Buffer',
52593 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 52594 }
ab78acc6
IC
52595}
52596
8b095871
IC
52597function base64Slice (buf, start, end) {
52598 if (start === 0 && end === buf.length) {
52599 return base64.fromByteArray(buf)
52600 } else {
52601 return base64.fromByteArray(buf.slice(start, end))
3af2954a 52602 }
8b095871 52603}
3af2954a 52604
8b095871
IC
52605function utf8Slice (buf, start, end) {
52606 end = Math.min(buf.length, end)
52607 var res = []
3af2954a 52608
8b095871
IC
52609 var i = start
52610 while (i < end) {
52611 var firstByte = buf[i]
52612 var codePoint = null
52613 var bytesPerSequence = (firstByte > 0xEF) ? 4
52614 : (firstByte > 0xDF) ? 3
52615 : (firstByte > 0xBF) ? 2
52616 : 1
3af2954a 52617
8b095871
IC
52618 if (i + bytesPerSequence <= end) {
52619 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 52620
8b095871
IC
52621 switch (bytesPerSequence) {
52622 case 1:
52623 if (firstByte < 0x80) {
52624 codePoint = firstByte
52625 }
52626 break
52627 case 2:
52628 secondByte = buf[i + 1]
52629 if ((secondByte & 0xC0) === 0x80) {
52630 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
52631 if (tempCodePoint > 0x7F) {
52632 codePoint = tempCodePoint
52633 }
52634 }
52635 break
52636 case 3:
52637 secondByte = buf[i + 1]
52638 thirdByte = buf[i + 2]
52639 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
52640 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
52641 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
52642 codePoint = tempCodePoint
52643 }
52644 }
52645 break
52646 case 4:
52647 secondByte = buf[i + 1]
52648 thirdByte = buf[i + 2]
52649 fourthByte = buf[i + 3]
52650 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
52651 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
52652 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
52653 codePoint = tempCodePoint
52654 }
52655 }
52656 }
52657 }
3af2954a 52658
8b095871
IC
52659 if (codePoint === null) {
52660 // we did not generate a valid codePoint so insert a
52661 // replacement char (U+FFFD) and advance only 1 byte
52662 codePoint = 0xFFFD
52663 bytesPerSequence = 1
52664 } else if (codePoint > 0xFFFF) {
52665 // encode to utf16 (surrogate pair dance)
52666 codePoint -= 0x10000
52667 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
52668 codePoint = 0xDC00 | codePoint & 0x3FF
52669 }
52670
52671 res.push(codePoint)
52672 i += bytesPerSequence
3af2954a
IC
52673 }
52674
8b095871 52675 return decodeCodePointsArray(res)
ab78acc6 52676}
3af2954a 52677
8b095871
IC
52678// Based on http://stackoverflow.com/a/22747272/680742, the browser with
52679// the lowest limit is Chrome, with 0x10000 args.
52680// We go 1 magnitude less, for safety
52681var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 52682
8b095871
IC
52683function decodeCodePointsArray (codePoints) {
52684 var len = codePoints.length
52685 if (len <= MAX_ARGUMENTS_LENGTH) {
52686 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
52687 }
52688
8b095871
IC
52689 // Decode in chunks to avoid "call stack size exceeded".
52690 var res = ''
52691 var i = 0
52692 while (i < len) {
52693 res += String.fromCharCode.apply(
52694 String,
52695 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
52696 )
3af2954a 52697 }
8b095871
IC
52698 return res
52699}
3af2954a 52700
8b095871
IC
52701function asciiSlice (buf, start, end) {
52702 var ret = ''
52703 end = Math.min(buf.length, end)
3af2954a 52704
8b095871
IC
52705 for (var i = start; i < end; ++i) {
52706 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 52707 }
8b095871
IC
52708 return ret
52709}
3af2954a 52710
8b095871
IC
52711function latin1Slice (buf, start, end) {
52712 var ret = ''
52713 end = Math.min(buf.length, end)
3af2954a 52714
8b095871
IC
52715 for (var i = start; i < end; ++i) {
52716 ret += String.fromCharCode(buf[i])
3af2954a 52717 }
8b095871 52718 return ret
ab78acc6 52719}
3af2954a 52720
8b095871
IC
52721function hexSlice (buf, start, end) {
52722 var len = buf.length
3af2954a 52723
8b095871
IC
52724 if (!start || start < 0) start = 0
52725 if (!end || end < 0 || end > len) end = len
3af2954a 52726
8b095871
IC
52727 var out = ''
52728 for (var i = start; i < end; ++i) {
52729 out += toHex(buf[i])
3af2954a 52730 }
8b095871
IC
52731 return out
52732}
3af2954a 52733
8b095871
IC
52734function utf16leSlice (buf, start, end) {
52735 var bytes = buf.slice(start, end)
52736 var res = ''
52737 for (var i = 0; i < bytes.length; i += 2) {
52738 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
52739 }
52740 return res
52741}
3af2954a 52742
8b095871
IC
52743Buffer.prototype.slice = function slice (start, end) {
52744 var len = this.length
52745 start = ~~start
52746 end = end === undefined ? len : ~~end
3af2954a 52747
8b095871
IC
52748 if (start < 0) {
52749 start += len
52750 if (start < 0) start = 0
52751 } else if (start > len) {
52752 start = len
52753 }
3af2954a 52754
8b095871
IC
52755 if (end < 0) {
52756 end += len
52757 if (end < 0) end = 0
52758 } else if (end > len) {
52759 end = len
52760 }
3af2954a 52761
8b095871 52762 if (end < start) end = start
3af2954a 52763
8b095871
IC
52764 var newBuf = this.subarray(start, end)
52765 // Return an augmented `Uint8Array` instance
52766 newBuf.__proto__ = Buffer.prototype
52767 return newBuf
52768}
3af2954a 52769
8b095871
IC
52770/*
52771 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 52772 */
8b095871
IC
52773function checkOffset (offset, ext, length) {
52774 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
52775 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 52776}
3af2954a 52777
8b095871
IC
52778Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
52779 offset = offset >>> 0
52780 byteLength = byteLength >>> 0
52781 if (!noAssert) checkOffset(offset, byteLength, this.length)
52782
52783 var val = this[offset]
52784 var mul = 1
52785 var i = 0
52786 while (++i < byteLength && (mul *= 0x100)) {
52787 val += this[offset + i] * mul
3af2954a
IC
52788 }
52789
8b095871
IC
52790 return val
52791}
3af2954a 52792
8b095871
IC
52793Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
52794 offset = offset >>> 0
52795 byteLength = byteLength >>> 0
52796 if (!noAssert) {
52797 checkOffset(offset, byteLength, this.length)
ab78acc6 52798 }
3af2954a 52799
8b095871
IC
52800 var val = this[offset + --byteLength]
52801 var mul = 1
52802 while (byteLength > 0 && (mul *= 0x100)) {
52803 val += this[offset + --byteLength] * mul
ab78acc6 52804 }
3af2954a 52805
8b095871 52806 return val
ab78acc6 52807}
3af2954a 52808
8b095871
IC
52809Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
52810 offset = offset >>> 0
52811 if (!noAssert) checkOffset(offset, 1, this.length)
52812 return this[offset]
ab78acc6 52813}
3af2954a 52814
8b095871
IC
52815Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
52816 offset = offset >>> 0
52817 if (!noAssert) checkOffset(offset, 2, this.length)
52818 return this[offset] | (this[offset + 1] << 8)
52819}
3af2954a 52820
8b095871
IC
52821Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
52822 offset = offset >>> 0
52823 if (!noAssert) checkOffset(offset, 2, this.length)
52824 return (this[offset] << 8) | this[offset + 1]
52825}
3af2954a 52826
8b095871
IC
52827Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
52828 offset = offset >>> 0
52829 if (!noAssert) checkOffset(offset, 4, this.length)
52830
52831 return ((this[offset]) |
52832 (this[offset + 1] << 8) |
52833 (this[offset + 2] << 16)) +
52834 (this[offset + 3] * 0x1000000)
ab78acc6 52835}
3af2954a 52836
8b095871
IC
52837Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
52838 offset = offset >>> 0
52839 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 52840
8b095871
IC
52841 return (this[offset] * 0x1000000) +
52842 ((this[offset + 1] << 16) |
52843 (this[offset + 2] << 8) |
52844 this[offset + 3])
52845}
3af2954a 52846
8b095871
IC
52847Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
52848 offset = offset >>> 0
52849 byteLength = byteLength >>> 0
52850 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 52851
8b095871
IC
52852 var val = this[offset]
52853 var mul = 1
52854 var i = 0
52855 while (++i < byteLength && (mul *= 0x100)) {
52856 val += this[offset + i] * mul
3af2954a 52857 }
8b095871 52858 mul *= 0x80
3af2954a 52859
8b095871 52860 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 52861
8b095871 52862 return val
ab78acc6 52863}
3af2954a 52864
8b095871
IC
52865Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
52866 offset = offset >>> 0
52867 byteLength = byteLength >>> 0
52868 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 52869
8b095871
IC
52870 var i = byteLength
52871 var mul = 1
52872 var val = this[offset + --i]
52873 while (i > 0 && (mul *= 0x100)) {
52874 val += this[offset + --i] * mul
3af2954a 52875 }
8b095871 52876 mul *= 0x80
3af2954a 52877
8b095871
IC
52878 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52879
52880 return val
ab78acc6 52881}
3af2954a 52882
8b095871
IC
52883Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
52884 offset = offset >>> 0
52885 if (!noAssert) checkOffset(offset, 1, this.length)
52886 if (!(this[offset] & 0x80)) return (this[offset])
52887 return ((0xff - this[offset] + 1) * -1)
ab78acc6 52888}
3af2954a 52889
8b095871
IC
52890Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
52891 offset = offset >>> 0
52892 if (!noAssert) checkOffset(offset, 2, this.length)
52893 var val = this[offset] | (this[offset + 1] << 8)
52894 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 52895}
3af2954a 52896
8b095871
IC
52897Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
52898 offset = offset >>> 0
52899 if (!noAssert) checkOffset(offset, 2, this.length)
52900 var val = this[offset + 1] | (this[offset] << 8)
52901 return (val & 0x8000) ? val | 0xFFFF0000 : val
52902}
ab78acc6 52903
8b095871
IC
52904Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
52905 offset = offset >>> 0
52906 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 52907
8b095871
IC
52908 return (this[offset]) |
52909 (this[offset + 1] << 8) |
52910 (this[offset + 2] << 16) |
52911 (this[offset + 3] << 24)
ab78acc6 52912}
3af2954a 52913
8b095871
IC
52914Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
52915 offset = offset >>> 0
52916 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 52917
8b095871
IC
52918 return (this[offset] << 24) |
52919 (this[offset + 1] << 16) |
52920 (this[offset + 2] << 8) |
52921 (this[offset + 3])
52922}
3af2954a 52923
8b095871
IC
52924Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
52925 offset = offset >>> 0
52926 if (!noAssert) checkOffset(offset, 4, this.length)
52927 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 52928}
3af2954a 52929
8b095871
IC
52930Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
52931 offset = offset >>> 0
52932 if (!noAssert) checkOffset(offset, 4, this.length)
52933 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 52934}
3af2954a 52935
8b095871
IC
52936Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
52937 offset = offset >>> 0
52938 if (!noAssert) checkOffset(offset, 8, this.length)
52939 return ieee754.read(this, offset, true, 52, 8)
52940}
3af2954a 52941
8b095871
IC
52942Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
52943 offset = offset >>> 0
52944 if (!noAssert) checkOffset(offset, 8, this.length)
52945 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 52946}
3af2954a 52947
8b095871
IC
52948function checkInt (buf, value, offset, ext, max, min) {
52949 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
52950 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
52951 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 52952}
3af2954a 52953
8b095871
IC
52954Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
52955 value = +value
52956 offset = offset >>> 0
52957 byteLength = byteLength >>> 0
52958 if (!noAssert) {
52959 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52960 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
52961 }
52962
8b095871 52963 var mul = 1
ab78acc6 52964 var i = 0
8b095871
IC
52965 this[offset] = value & 0xFF
52966 while (++i < byteLength && (mul *= 0x100)) {
52967 this[offset + i] = (value / mul) & 0xFF
52968 }
3af2954a 52969
8b095871
IC
52970 return offset + byteLength
52971}
52972
52973Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
52974 value = +value
52975 offset = offset >>> 0
52976 byteLength = byteLength >>> 0
52977 if (!noAssert) {
52978 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52979 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 52980 }
3af2954a 52981
8b095871
IC
52982 var i = byteLength - 1
52983 var mul = 1
52984 this[offset + i] = value & 0xFF
52985 while (--i >= 0 && (mul *= 0x100)) {
52986 this[offset + i] = (value / mul) & 0xFF
ab78acc6 52987 }
3af2954a 52988
8b095871
IC
52989 return offset + byteLength
52990}
52991
52992Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
52993 value = +value
52994 offset = offset >>> 0
52995 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
52996 this[offset] = (value & 0xff)
52997 return offset + 1
52998}
52999
53000Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
53001 value = +value
53002 offset = offset >>> 0
53003 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
53004 this[offset] = (value & 0xff)
53005 this[offset + 1] = (value >>> 8)
53006 return offset + 2
53007}
53008
53009Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
53010 value = +value
53011 offset = offset >>> 0
53012 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
53013 this[offset] = (value >>> 8)
53014 this[offset + 1] = (value & 0xff)
53015 return offset + 2
ab78acc6 53016}
3af2954a 53017
8b095871
IC
53018Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
53019 value = +value
53020 offset = offset >>> 0
53021 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
53022 this[offset + 3] = (value >>> 24)
53023 this[offset + 2] = (value >>> 16)
53024 this[offset + 1] = (value >>> 8)
53025 this[offset] = (value & 0xff)
53026 return offset + 4
ab78acc6 53027}
3af2954a 53028
8b095871
IC
53029Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
53030 value = +value
53031 offset = offset >>> 0
53032 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
53033 this[offset] = (value >>> 24)
53034 this[offset + 1] = (value >>> 16)
53035 this[offset + 2] = (value >>> 8)
53036 this[offset + 3] = (value & 0xff)
53037 return offset + 4
53038}
3af2954a 53039
8b095871
IC
53040Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
53041 value = +value
53042 offset = offset >>> 0
53043 if (!noAssert) {
53044 var limit = Math.pow(2, (8 * byteLength) - 1)
53045
53046 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
53047 }
53048
8b095871
IC
53049 var i = 0
53050 var mul = 1
53051 var sub = 0
53052 this[offset] = value & 0xFF
53053 while (++i < byteLength && (mul *= 0x100)) {
53054 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
53055 sub = 1
ab78acc6 53056 }
8b095871 53057 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
53058 }
53059
8b095871 53060 return offset + byteLength
ab78acc6 53061}
3af2954a 53062
8b095871
IC
53063Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
53064 value = +value
53065 offset = offset >>> 0
53066 if (!noAssert) {
53067 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 53068
8b095871
IC
53069 checkInt(this, value, offset, byteLength, limit - 1, -limit)
53070 }
ab78acc6 53071
8b095871
IC
53072 var i = byteLength - 1
53073 var mul = 1
53074 var sub = 0
53075 this[offset + i] = value & 0xFF
53076 while (--i >= 0 && (mul *= 0x100)) {
53077 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
53078 sub = 1
3af2954a 53079 }
8b095871 53080 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 53081 }
3af2954a 53082
8b095871
IC
53083 return offset + byteLength
53084}
3af2954a 53085
8b095871
IC
53086Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
53087 value = +value
53088 offset = offset >>> 0
53089 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
53090 if (value < 0) value = 0xff + value + 1
53091 this[offset] = (value & 0xff)
53092 return offset + 1
53093}
3af2954a 53094
8b095871
IC
53095Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
53096 value = +value
53097 offset = offset >>> 0
53098 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
53099 this[offset] = (value & 0xff)
53100 this[offset + 1] = (value >>> 8)
53101 return offset + 2
53102}
3af2954a 53103
8b095871
IC
53104Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
53105 value = +value
53106 offset = offset >>> 0
53107 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
53108 this[offset] = (value >>> 8)
53109 this[offset + 1] = (value & 0xff)
53110 return offset + 2
53111}
3af2954a 53112
8b095871
IC
53113Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
53114 value = +value
53115 offset = offset >>> 0
53116 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
53117 this[offset] = (value & 0xff)
53118 this[offset + 1] = (value >>> 8)
53119 this[offset + 2] = (value >>> 16)
53120 this[offset + 3] = (value >>> 24)
53121 return offset + 4
53122}
3af2954a 53123
8b095871
IC
53124Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
53125 value = +value
53126 offset = offset >>> 0
53127 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
53128 if (value < 0) value = 0xffffffff + value + 1
53129 this[offset] = (value >>> 24)
53130 this[offset + 1] = (value >>> 16)
53131 this[offset + 2] = (value >>> 8)
53132 this[offset + 3] = (value & 0xff)
53133 return offset + 4
53134}
3af2954a 53135
8b095871
IC
53136function checkIEEE754 (buf, value, offset, ext, max, min) {
53137 if (offset + ext > buf.length) throw new RangeError('Index out of range')
53138 if (offset < 0) throw new RangeError('Index out of range')
53139}
3af2954a 53140
8b095871
IC
53141function writeFloat (buf, value, offset, littleEndian, noAssert) {
53142 value = +value
53143 offset = offset >>> 0
53144 if (!noAssert) {
53145 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 53146 }
8b095871
IC
53147 ieee754.write(buf, value, offset, littleEndian, 23, 4)
53148 return offset + 4
ab78acc6 53149}
3af2954a 53150
8b095871
IC
53151Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
53152 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 53153}
3af2954a 53154
8b095871
IC
53155Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
53156 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 53157}
3af2954a 53158
8b095871
IC
53159function writeDouble (buf, value, offset, littleEndian, noAssert) {
53160 value = +value
53161 offset = offset >>> 0
53162 if (!noAssert) {
53163 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 53164 }
8b095871
IC
53165 ieee754.write(buf, value, offset, littleEndian, 52, 8)
53166 return offset + 8
ab78acc6 53167}
3af2954a 53168
8b095871
IC
53169Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
53170 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 53171}
3af2954a 53172
8b095871
IC
53173Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
53174 return writeDouble(this, value, offset, false, noAssert)
53175}
3af2954a 53176
8b095871
IC
53177// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
53178Buffer.prototype.copy = function copy (target, targetStart, start, end) {
53179 if (!start) start = 0
53180 if (!end && end !== 0) end = this.length
53181 if (targetStart >= target.length) targetStart = target.length
53182 if (!targetStart) targetStart = 0
53183 if (end > 0 && end < start) end = start
3af2954a 53184
8b095871
IC
53185 // Copy 0 bytes; we're done
53186 if (end === start) return 0
53187 if (target.length === 0 || this.length === 0) return 0
3af2954a 53188
8b095871
IC
53189 // Fatal error conditions
53190 if (targetStart < 0) {
53191 throw new RangeError('targetStart out of bounds')
3af2954a 53192 }
8b095871
IC
53193 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
53194 if (end < 0) throw new RangeError('sourceEnd out of bounds')
53195
53196 // Are we oob?
53197 if (end > this.length) end = this.length
53198 if (target.length - targetStart < end - start) {
53199 end = target.length - targetStart + start
3af2954a 53200 }
8b095871
IC
53201
53202 var len = end - start
53203 var i
53204
53205 if (this === target && start < targetStart && targetStart < end) {
53206 // descending copy from end
53207 for (i = len - 1; i >= 0; --i) {
53208 target[i + targetStart] = this[i + start]
3af2954a 53209 }
8b095871
IC
53210 } else if (len < 1000) {
53211 // ascending copy from start
53212 for (i = 0; i < len; ++i) {
53213 target[i + targetStart] = this[i + start]
53214 }
53215 } else {
53216 Uint8Array.prototype.set.call(
53217 target,
53218 this.subarray(start, start + len),
53219 targetStart
53220 )
3af2954a
IC
53221 }
53222
8b095871
IC
53223 return len
53224}
53225
53226// Usage:
53227// buffer.fill(number[, offset[, end]])
53228// buffer.fill(buffer[, offset[, end]])
53229// buffer.fill(string[, offset[, end]][, encoding])
53230Buffer.prototype.fill = function fill (val, start, end, encoding) {
53231 // Handle string cases:
53232 if (typeof val === 'string') {
53233 if (typeof start === 'string') {
53234 encoding = start
53235 start = 0
53236 end = this.length
53237 } else if (typeof end === 'string') {
53238 encoding = end
53239 end = this.length
53240 }
53241 if (val.length === 1) {
53242 var code = val.charCodeAt(0)
53243 if (code < 256) {
53244 val = code
3af2954a 53245 }
3af2954a 53246 }
8b095871
IC
53247 if (encoding !== undefined && typeof encoding !== 'string') {
53248 throw new TypeError('encoding must be a string')
53249 }
53250 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
53251 throw new TypeError('Unknown encoding: ' + encoding)
53252 }
53253 } else if (typeof val === 'number') {
53254 val = val & 255
ab78acc6 53255 }
3af2954a 53256
8b095871
IC
53257 // Invalid ranges are not set to a default, so can range check early.
53258 if (start < 0 || this.length < start || this.length < end) {
53259 throw new RangeError('Out of range index')
53260 }
3af2954a 53261
8b095871
IC
53262 if (end <= start) {
53263 return this
53264 }
3af2954a 53265
8b095871
IC
53266 start = start >>> 0
53267 end = end === undefined ? this.length : end >>> 0
3af2954a 53268
8b095871
IC
53269 if (!val) val = 0
53270
53271 var i
53272 if (typeof val === 'number') {
53273 for (i = start; i < end; ++i) {
53274 this[i] = val
53275 }
ab78acc6 53276 } else {
8b095871
IC
53277 var bytes = Buffer.isBuffer(val)
53278 ? val
53279 : new Buffer(val, encoding)
53280 var len = bytes.length
53281 for (i = 0; i < end - start; ++i) {
53282 this[i + start] = bytes[i % len]
ab78acc6
IC
53283 }
53284 }
3af2954a 53285
8b095871
IC
53286 return this
53287}
3af2954a 53288
8b095871
IC
53289// HELPER FUNCTIONS
53290// ================
53291
53292var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
53293
53294function base64clean (str) {
53295 // Node strips out invalid characters like \n and \t from the string, base64-js does not
53296 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
53297 // Node converts strings with length < 2 to ''
53298 if (str.length < 2) return ''
53299 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
53300 while (str.length % 4 !== 0) {
53301 str = str + '='
3af2954a 53302 }
8b095871 53303 return str
ab78acc6
IC
53304}
53305
8b095871
IC
53306function stringtrim (str) {
53307 if (str.trim) return str.trim()
53308 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 53309}
3af2954a 53310
8b095871
IC
53311function toHex (n) {
53312 if (n < 16) return '0' + n.toString(16)
53313 return n.toString(16)
ab78acc6 53314}
3af2954a 53315
8b095871
IC
53316function utf8ToBytes (string, units) {
53317 units = units || Infinity
53318 var codePoint
53319 var length = string.length
53320 var leadSurrogate = null
53321 var bytes = []
3af2954a 53322
8b095871
IC
53323 for (var i = 0; i < length; ++i) {
53324 codePoint = string.charCodeAt(i)
3af2954a 53325
8b095871
IC
53326 // is surrogate component
53327 if (codePoint > 0xD7FF && codePoint < 0xE000) {
53328 // last char was a lead
53329 if (!leadSurrogate) {
53330 // no lead yet
53331 if (codePoint > 0xDBFF) {
53332 // unexpected trail
53333 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53334 continue
53335 } else if (i + 1 === length) {
53336 // unpaired lead
53337 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53338 continue
53339 }
3af2954a 53340
8b095871
IC
53341 // valid lead
53342 leadSurrogate = codePoint
53343
53344 continue
53345 }
53346
53347 // 2 leads in a row
53348 if (codePoint < 0xDC00) {
53349 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53350 leadSurrogate = codePoint
53351 continue
53352 }
53353
53354 // valid surrogate pair
53355 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
53356 } else if (leadSurrogate) {
53357 // valid bmp char, but last char was a lead
53358 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53359 }
53360
53361 leadSurrogate = null
53362
53363 // encode utf8
53364 if (codePoint < 0x80) {
53365 if ((units -= 1) < 0) break
53366 bytes.push(codePoint)
53367 } else if (codePoint < 0x800) {
53368 if ((units -= 2) < 0) break
53369 bytes.push(
53370 codePoint >> 0x6 | 0xC0,
53371 codePoint & 0x3F | 0x80
53372 )
53373 } else if (codePoint < 0x10000) {
53374 if ((units -= 3) < 0) break
53375 bytes.push(
53376 codePoint >> 0xC | 0xE0,
53377 codePoint >> 0x6 & 0x3F | 0x80,
53378 codePoint & 0x3F | 0x80
53379 )
53380 } else if (codePoint < 0x110000) {
53381 if ((units -= 4) < 0) break
53382 bytes.push(
53383 codePoint >> 0x12 | 0xF0,
53384 codePoint >> 0xC & 0x3F | 0x80,
53385 codePoint >> 0x6 & 0x3F | 0x80,
53386 codePoint & 0x3F | 0x80
53387 )
ab78acc6 53388 } else {
8b095871 53389 throw new Error('Invalid code point')
ab78acc6 53390 }
3af2954a
IC
53391 }
53392
8b095871
IC
53393 return bytes
53394}
3af2954a 53395
8b095871
IC
53396function asciiToBytes (str) {
53397 var byteArray = []
53398 for (var i = 0; i < str.length; ++i) {
53399 // Node's code seems to be doing this and not & 0x7F..
53400 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 53401 }
8b095871
IC
53402 return byteArray
53403}
3af2954a 53404
8b095871
IC
53405function utf16leToBytes (str, units) {
53406 var c, hi, lo
53407 var byteArray = []
53408 for (var i = 0; i < str.length; ++i) {
53409 if ((units -= 2) < 0) break
3af2954a 53410
8b095871
IC
53411 c = str.charCodeAt(i)
53412 hi = c >> 8
53413 lo = c % 256
53414 byteArray.push(lo)
53415 byteArray.push(hi)
53416 }
ebd8d4e8 53417
8b095871
IC
53418 return byteArray
53419}
53420
53421function base64ToBytes (str) {
53422 return base64.toByteArray(base64clean(str))
53423}
53424
53425function blitBuffer (src, dst, offset, length) {
53426 for (var i = 0; i < length; ++i) {
53427 if ((i + offset >= dst.length) || (i >= src.length)) break
53428 dst[i + offset] = src[i]
53429 }
53430 return i
53431}
53432
53433function isnan (val) {
53434 return val !== val // eslint-disable-line no-self-compare
53435}
53436
53437},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
53438(function (Buffer){
53439// Copyright Joyent, Inc. and other Node contributors.
53440//
53441// Permission is hereby granted, free of charge, to any person obtaining a
53442// copy of this software and associated documentation files (the
53443// "Software"), to deal in the Software without restriction, including
53444// without limitation the rights to use, copy, modify, merge, publish,
53445// distribute, sublicense, and/or sell copies of the Software, and to permit
53446// persons to whom the Software is furnished to do so, subject to the
53447// following conditions:
53448//
53449// The above copyright notice and this permission notice shall be included
53450// in all copies or substantial portions of the Software.
53451//
53452// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
53453// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53454// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
53455// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
53456// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
53457// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
53458// USE OR OTHER DEALINGS IN THE SOFTWARE.
53459
53460// NOTE: These type checking functions intentionally don't use `instanceof`
53461// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 53462
8b095871
IC
53463function isArray(arg) {
53464 if (Array.isArray) {
53465 return Array.isArray(arg);
53466 }
53467 return objectToString(arg) === '[object Array]';
53468}
53469exports.isArray = isArray;
ebd8d4e8 53470
8b095871
IC
53471function isBoolean(arg) {
53472 return typeof arg === 'boolean';
53473}
53474exports.isBoolean = isBoolean;
ebd8d4e8 53475
8b095871
IC
53476function isNull(arg) {
53477 return arg === null;
53478}
53479exports.isNull = isNull;
ebd8d4e8 53480
8b095871
IC
53481function isNullOrUndefined(arg) {
53482 return arg == null;
53483}
53484exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 53485
8b095871
IC
53486function isNumber(arg) {
53487 return typeof arg === 'number';
ab78acc6 53488}
8b095871 53489exports.isNumber = isNumber;
212b1b46 53490
8b095871
IC
53491function isString(arg) {
53492 return typeof arg === 'string';
ab78acc6 53493}
8b095871 53494exports.isString = isString;
212b1b46 53495
8b095871
IC
53496function isSymbol(arg) {
53497 return typeof arg === 'symbol';
ab78acc6 53498}
8b095871 53499exports.isSymbol = isSymbol;
ab78acc6 53500
8b095871
IC
53501function isUndefined(arg) {
53502 return arg === void 0;
53503}
53504exports.isUndefined = isUndefined;
ab78acc6 53505
8b095871
IC
53506function isRegExp(re) {
53507 return objectToString(re) === '[object RegExp]';
53508}
53509exports.isRegExp = isRegExp;
ab78acc6 53510
8b095871
IC
53511function isObject(arg) {
53512 return typeof arg === 'object' && arg !== null;
53513}
53514exports.isObject = isObject;
212b1b46 53515
8b095871
IC
53516function isDate(d) {
53517 return objectToString(d) === '[object Date]';
53518}
53519exports.isDate = isDate;
212b1b46 53520
8b095871
IC
53521function isError(e) {
53522 return (objectToString(e) === '[object Error]' || e instanceof Error);
53523}
53524exports.isError = isError;
212b1b46 53525
8b095871
IC
53526function isFunction(arg) {
53527 return typeof arg === 'function';
53528}
53529exports.isFunction = isFunction;
212b1b46 53530
8b095871
IC
53531function isPrimitive(arg) {
53532 return arg === null ||
53533 typeof arg === 'boolean' ||
53534 typeof arg === 'number' ||
53535 typeof arg === 'string' ||
53536 typeof arg === 'symbol' || // ES6 symbol
53537 typeof arg === 'undefined';
ab78acc6 53538}
8b095871 53539exports.isPrimitive = isPrimitive;
212b1b46 53540
8b095871 53541exports.isBuffer = Buffer.isBuffer;
ab78acc6 53542
8b095871
IC
53543function objectToString(o) {
53544 return Object.prototype.toString.call(o);
ab78acc6 53545}
212b1b46 53546
8b095871
IC
53547}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
53548},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
53549// Copyright Joyent, Inc. and other Node contributors.
53550//
53551// Permission is hereby granted, free of charge, to any person obtaining a
53552// copy of this software and associated documentation files (the
53553// "Software"), to deal in the Software without restriction, including
53554// without limitation the rights to use, copy, modify, merge, publish,
53555// distribute, sublicense, and/or sell copies of the Software, and to permit
53556// persons to whom the Software is furnished to do so, subject to the
53557// following conditions:
53558//
53559// The above copyright notice and this permission notice shall be included
53560// in all copies or substantial portions of the Software.
53561//
53562// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
53563// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53564// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
53565// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
53566// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
53567// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
53568// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 53569
8b095871
IC
53570function EventEmitter() {
53571 this._events = this._events || {};
53572 this._maxListeners = this._maxListeners || undefined;
ab78acc6 53573}
8b095871 53574module.exports = EventEmitter;
212b1b46 53575
8b095871
IC
53576// Backwards-compat with node 0.10.x
53577EventEmitter.EventEmitter = EventEmitter;
212b1b46 53578
8b095871
IC
53579EventEmitter.prototype._events = undefined;
53580EventEmitter.prototype._maxListeners = undefined;
212b1b46 53581
8b095871
IC
53582// By default EventEmitters will print a warning if more than 10 listeners are
53583// added to it. This is a useful default which helps finding memory leaks.
53584EventEmitter.defaultMaxListeners = 10;
212b1b46 53585
8b095871
IC
53586// Obviously not all Emitters should be limited to 10. This function allows
53587// that to be increased. Set to zero for unlimited.
53588EventEmitter.prototype.setMaxListeners = function(n) {
53589 if (!isNumber(n) || n < 0 || isNaN(n))
53590 throw TypeError('n must be a positive number');
53591 this._maxListeners = n;
53592 return this;
53593};
212b1b46 53594
8b095871
IC
53595EventEmitter.prototype.emit = function(type) {
53596 var er, handler, len, args, i, listeners;
212b1b46 53597
8b095871
IC
53598 if (!this._events)
53599 this._events = {};
212b1b46 53600
8b095871
IC
53601 // If there is no 'error' event listener then throw.
53602 if (type === 'error') {
53603 if (!this._events.error ||
53604 (isObject(this._events.error) && !this._events.error.length)) {
53605 er = arguments[1];
53606 if (er instanceof Error) {
53607 throw er; // Unhandled 'error' event
53608 } else {
53609 // At least give some kind of context to the user
53610 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
53611 err.context = er;
53612 throw err;
53613 }
53614 }
ab78acc6 53615 }
212b1b46 53616
8b095871 53617 handler = this._events[type];
212b1b46 53618
8b095871
IC
53619 if (isUndefined(handler))
53620 return false;
53621
53622 if (isFunction(handler)) {
53623 switch (arguments.length) {
53624 // fast cases
53625 case 1:
53626 handler.call(this);
53627 break;
53628 case 2:
53629 handler.call(this, arguments[1]);
53630 break;
53631 case 3:
53632 handler.call(this, arguments[1], arguments[2]);
53633 break;
53634 // slower
53635 default:
53636 args = Array.prototype.slice.call(arguments, 1);
53637 handler.apply(this, args);
3af2954a 53638 }
8b095871
IC
53639 } else if (isObject(handler)) {
53640 args = Array.prototype.slice.call(arguments, 1);
53641 listeners = handler.slice();
53642 len = listeners.length;
53643 for (i = 0; i < len; i++)
53644 listeners[i].apply(this, args);
3af2954a 53645 }
212b1b46 53646
8b095871
IC
53647 return true;
53648};
ebd8d4e8 53649
8b095871
IC
53650EventEmitter.prototype.addListener = function(type, listener) {
53651 var m;
ebd8d4e8 53652
8b095871
IC
53653 if (!isFunction(listener))
53654 throw TypeError('listener must be a function');
ebd8d4e8 53655
8b095871
IC
53656 if (!this._events)
53657 this._events = {};
3af2954a 53658
8b095871
IC
53659 // To avoid recursion in the case that type === "newListener"! Before
53660 // adding it to the listeners, first emit "newListener".
53661 if (this._events.newListener)
53662 this.emit('newListener', type,
53663 isFunction(listener.listener) ?
53664 listener.listener : listener);
3af2954a 53665
8b095871
IC
53666 if (!this._events[type])
53667 // Optimize the case of one listener. Don't need the extra array object.
53668 this._events[type] = listener;
53669 else if (isObject(this._events[type]))
53670 // If we've already got an array, just append.
53671 this._events[type].push(listener);
53672 else
53673 // Adding the second element, need to change to array.
53674 this._events[type] = [this._events[type], listener];
3af2954a 53675
8b095871
IC
53676 // Check for listener leak
53677 if (isObject(this._events[type]) && !this._events[type].warned) {
53678 if (!isUndefined(this._maxListeners)) {
53679 m = this._maxListeners;
53680 } else {
53681 m = EventEmitter.defaultMaxListeners;
53682 }
3af2954a 53683
8b095871
IC
53684 if (m && m > 0 && this._events[type].length > m) {
53685 this._events[type].warned = true;
53686 console.error('(node) warning: possible EventEmitter memory ' +
53687 'leak detected. %d listeners added. ' +
53688 'Use emitter.setMaxListeners() to increase limit.',
53689 this._events[type].length);
53690 if (typeof console.trace === 'function') {
53691 // not supported in IE 10
53692 console.trace();
53693 }
53694 }
3af2954a
IC
53695 }
53696
8b095871
IC
53697 return this;
53698};
3af2954a 53699
8b095871 53700EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 53701
8b095871
IC
53702EventEmitter.prototype.once = function(type, listener) {
53703 if (!isFunction(listener))
53704 throw TypeError('listener must be a function');
3af2954a 53705
8b095871 53706 var fired = false;
ebd8d4e8 53707
8b095871
IC
53708 function g() {
53709 this.removeListener(type, g);
3af2954a 53710
8b095871
IC
53711 if (!fired) {
53712 fired = true;
53713 listener.apply(this, arguments);
53714 }
53715 }
3af2954a 53716
8b095871
IC
53717 g.listener = listener;
53718 this.on(type, g);
ebd8d4e8 53719
8b095871
IC
53720 return this;
53721};
ebd8d4e8 53722
8b095871
IC
53723// emits a 'removeListener' event iff the listener was removed
53724EventEmitter.prototype.removeListener = function(type, listener) {
53725 var list, position, length, i;
ebd8d4e8 53726
8b095871
IC
53727 if (!isFunction(listener))
53728 throw TypeError('listener must be a function');
ebd8d4e8 53729
8b095871
IC
53730 if (!this._events || !this._events[type])
53731 return this;
ab78acc6 53732
8b095871
IC
53733 list = this._events[type];
53734 length = list.length;
53735 position = -1;
ebd8d4e8 53736
8b095871
IC
53737 if (list === listener ||
53738 (isFunction(list.listener) && list.listener === listener)) {
53739 delete this._events[type];
53740 if (this._events.removeListener)
53741 this.emit('removeListener', type, listener);
ebd8d4e8 53742
8b095871
IC
53743 } else if (isObject(list)) {
53744 for (i = length; i-- > 0;) {
53745 if (list[i] === listener ||
53746 (list[i].listener && list[i].listener === listener)) {
53747 position = i;
53748 break;
53749 }
53750 }
53751
53752 if (position < 0)
53753 return this;
53754
53755 if (list.length === 1) {
53756 list.length = 0;
53757 delete this._events[type];
53758 } else {
53759 list.splice(position, 1);
53760 }
53761
53762 if (this._events.removeListener)
53763 this.emit('removeListener', type, listener);
ab78acc6 53764 }
ebd8d4e8 53765
8b095871
IC
53766 return this;
53767};
ebd8d4e8 53768
8b095871
IC
53769EventEmitter.prototype.removeAllListeners = function(type) {
53770 var key, listeners;
ebd8d4e8 53771
8b095871
IC
53772 if (!this._events)
53773 return this;
ab78acc6 53774
8b095871
IC
53775 // not listening for removeListener, no need to emit
53776 if (!this._events.removeListener) {
53777 if (arguments.length === 0)
53778 this._events = {};
53779 else if (this._events[type])
53780 delete this._events[type];
53781 return this;
53782 }
ab78acc6 53783
8b095871
IC
53784 // emit removeListener for all listeners on all events
53785 if (arguments.length === 0) {
53786 for (key in this._events) {
53787 if (key === 'removeListener') continue;
53788 this.removeAllListeners(key);
53789 }
53790 this.removeAllListeners('removeListener');
53791 this._events = {};
53792 return this;
53793 }
ebd8d4e8 53794
8b095871 53795 listeners = this._events[type];
ebd8d4e8 53796
8b095871
IC
53797 if (isFunction(listeners)) {
53798 this.removeListener(type, listeners);
53799 } else if (listeners) {
53800 // LIFO order
53801 while (listeners.length)
53802 this.removeListener(type, listeners[listeners.length - 1]);
53803 }
53804 delete this._events[type];
ebd8d4e8 53805
8b095871
IC
53806 return this;
53807};
ebd8d4e8 53808
8b095871
IC
53809EventEmitter.prototype.listeners = function(type) {
53810 var ret;
53811 if (!this._events || !this._events[type])
53812 ret = [];
53813 else if (isFunction(this._events[type]))
53814 ret = [this._events[type]];
53815 else
53816 ret = this._events[type].slice();
53817 return ret;
53818};
ebd8d4e8 53819
8b095871
IC
53820EventEmitter.prototype.listenerCount = function(type) {
53821 if (this._events) {
53822 var evlistener = this._events[type];
ebd8d4e8 53823
8b095871
IC
53824 if (isFunction(evlistener))
53825 return 1;
53826 else if (evlistener)
53827 return evlistener.length;
53828 }
53829 return 0;
53830};
53831
53832EventEmitter.listenerCount = function(emitter, type) {
53833 return emitter.listenerCount(type);
53834};
53835
53836function isFunction(arg) {
53837 return typeof arg === 'function';
ebd8d4e8
IC
53838}
53839
8b095871
IC
53840function isNumber(arg) {
53841 return typeof arg === 'number';
ebd8d4e8
IC
53842}
53843
8b095871
IC
53844function isObject(arg) {
53845 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
53846}
53847
8b095871
IC
53848function isUndefined(arg) {
53849 return arg === void 0;
ebd8d4e8
IC
53850}
53851
8b095871
IC
53852},{}],8:[function(require,module,exports){
53853exports.read = function (buffer, offset, isLE, mLen, nBytes) {
53854 var e, m
53855 var eLen = nBytes * 8 - mLen - 1
53856 var eMax = (1 << eLen) - 1
53857 var eBias = eMax >> 1
53858 var nBits = -7
53859 var i = isLE ? (nBytes - 1) : 0
53860 var d = isLE ? -1 : 1
53861 var s = buffer[offset + i]
ebd8d4e8 53862
8b095871 53863 i += d
ebd8d4e8 53864
8b095871
IC
53865 e = s & ((1 << (-nBits)) - 1)
53866 s >>= (-nBits)
53867 nBits += eLen
53868 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 53869
8b095871
IC
53870 m = e & ((1 << (-nBits)) - 1)
53871 e >>= (-nBits)
53872 nBits += mLen
53873 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 53874
8b095871
IC
53875 if (e === 0) {
53876 e = 1 - eBias
53877 } else if (e === eMax) {
53878 return m ? NaN : ((s ? -1 : 1) * Infinity)
53879 } else {
53880 m = m + Math.pow(2, mLen)
53881 e = e - eBias
ab78acc6 53882 }
8b095871 53883 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
53884}
53885
8b095871
IC
53886exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
53887 var e, m, c
53888 var eLen = nBytes * 8 - mLen - 1
53889 var eMax = (1 << eLen) - 1
53890 var eBias = eMax >> 1
53891 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
53892 var i = isLE ? 0 : (nBytes - 1)
53893 var d = isLE ? 1 : -1
53894 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 53895
8b095871 53896 value = Math.abs(value)
ebd8d4e8 53897
8b095871
IC
53898 if (isNaN(value) || value === Infinity) {
53899 m = isNaN(value) ? 1 : 0
53900 e = eMax
ab78acc6 53901 } else {
8b095871
IC
53902 e = Math.floor(Math.log(value) / Math.LN2)
53903 if (value * (c = Math.pow(2, -e)) < 1) {
53904 e--
53905 c *= 2
53906 }
53907 if (e + eBias >= 1) {
53908 value += rt / c
53909 } else {
53910 value += rt * Math.pow(2, 1 - eBias)
53911 }
53912 if (value * c >= 2) {
53913 e++
53914 c /= 2
53915 }
ebd8d4e8 53916
8b095871
IC
53917 if (e + eBias >= eMax) {
53918 m = 0
53919 e = eMax
53920 } else if (e + eBias >= 1) {
53921 m = (value * c - 1) * Math.pow(2, mLen)
53922 e = e + eBias
53923 } else {
53924 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
53925 e = 0
53926 }
ebd8d4e8 53927 }
ebd8d4e8 53928
8b095871 53929 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 53930
8b095871
IC
53931 e = (e << mLen) | m
53932 eLen += mLen
53933 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 53934
8b095871 53935 buffer[offset + i - d] |= s * 128
ab78acc6
IC
53936}
53937
8b095871
IC
53938},{}],9:[function(require,module,exports){
53939if (typeof Object.create === 'function') {
53940 // implementation from standard node.js 'util' module
53941 module.exports = function inherits(ctor, superCtor) {
53942 ctor.super_ = superCtor
53943 ctor.prototype = Object.create(superCtor.prototype, {
53944 constructor: {
53945 value: ctor,
53946 enumerable: false,
53947 writable: true,
53948 configurable: true
53949 }
53950 });
53951 };
53952} else {
53953 // old school shim for old browsers
53954 module.exports = function inherits(ctor, superCtor) {
53955 ctor.super_ = superCtor
53956 var TempCtor = function () {}
53957 TempCtor.prototype = superCtor.prototype
53958 ctor.prototype = new TempCtor()
53959 ctor.prototype.constructor = ctor
ebd8d4e8 53960 }
8b095871 53961}
ab78acc6 53962
8b095871
IC
53963},{}],10:[function(require,module,exports){
53964/*!
53965 * Determine if an object is a Buffer
53966 *
53967 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
53968 * @license MIT
53969 */
ebd8d4e8 53970
8b095871
IC
53971// The _isBuffer check is for Safari 5-7 support, because it's missing
53972// Object.prototype.constructor. Remove this eventually
53973module.exports = function (obj) {
53974 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
53975}
53976
8b095871
IC
53977function isBuffer (obj) {
53978 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
53979}
ebd8d4e8 53980
8b095871
IC
53981// For Node v0.10 support. Remove this eventually.
53982function isSlowBuffer (obj) {
53983 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
53984}
ebd8d4e8 53985
8b095871
IC
53986},{}],11:[function(require,module,exports){
53987var toString = {}.toString;
ab78acc6 53988
8b095871
IC
53989module.exports = Array.isArray || function (arr) {
53990 return toString.call(arr) == '[object Array]';
53991};
ebd8d4e8 53992
8b095871
IC
53993},{}],12:[function(require,module,exports){
53994(function (process){
53995'use strict';
ebd8d4e8 53996
8b095871
IC
53997if (!process.version ||
53998 process.version.indexOf('v0.') === 0 ||
53999 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
54000 module.exports = nextTick;
54001} else {
54002 module.exports = process.nextTick;
54003}
54004
54005function nextTick(fn, arg1, arg2, arg3) {
54006 if (typeof fn !== 'function') {
54007 throw new TypeError('"callback" argument must be a function');
54008 }
54009 var len = arguments.length;
54010 var args, i;
54011 switch (len) {
54012 case 0:
54013 case 1:
54014 return process.nextTick(fn);
54015 case 2:
54016 return process.nextTick(function afterTickOne() {
54017 fn.call(null, arg1);
54018 });
54019 case 3:
54020 return process.nextTick(function afterTickTwo() {
54021 fn.call(null, arg1, arg2);
54022 });
54023 case 4:
54024 return process.nextTick(function afterTickThree() {
54025 fn.call(null, arg1, arg2, arg3);
54026 });
54027 default:
54028 args = new Array(len - 1);
54029 i = 0;
54030 while (i < args.length) {
54031 args[i++] = arguments[i];
54032 }
54033 return process.nextTick(function afterTick() {
54034 fn.apply(null, args);
54035 });
ab78acc6 54036 }
ebd8d4e8
IC
54037}
54038
8b095871
IC
54039}).call(this,require('_process'))
54040},{"_process":13}],13:[function(require,module,exports){
54041// shim for using process in browser
54042var process = module.exports = {};
ebd8d4e8 54043
8b095871
IC
54044// cached from whatever global is present so that test runners that stub it
54045// don't break things. But we need to wrap it in a try catch in case it is
54046// wrapped in strict mode code which doesn't define any globals. It's inside a
54047// function because try/catches deoptimize in certain engines.
ab78acc6 54048
8b095871
IC
54049var cachedSetTimeout;
54050var cachedClearTimeout;
ebd8d4e8 54051
8b095871
IC
54052function defaultSetTimout() {
54053 throw new Error('setTimeout has not been defined');
ab78acc6 54054}
8b095871
IC
54055function defaultClearTimeout () {
54056 throw new Error('clearTimeout has not been defined');
ab78acc6 54057}
8b095871
IC
54058(function () {
54059 try {
54060 if (typeof setTimeout === 'function') {
54061 cachedSetTimeout = setTimeout;
54062 } else {
54063 cachedSetTimeout = defaultSetTimout;
54064 }
54065 } catch (e) {
54066 cachedSetTimeout = defaultSetTimout;
54067 }
54068 try {
54069 if (typeof clearTimeout === 'function') {
54070 cachedClearTimeout = clearTimeout;
54071 } else {
54072 cachedClearTimeout = defaultClearTimeout;
54073 }
54074 } catch (e) {
54075 cachedClearTimeout = defaultClearTimeout;
54076 }
54077} ())
54078function runTimeout(fun) {
54079 if (cachedSetTimeout === setTimeout) {
54080 //normal enviroments in sane situations
54081 return setTimeout(fun, 0);
54082 }
54083 // if setTimeout wasn't available but was latter defined
54084 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
54085 cachedSetTimeout = setTimeout;
54086 return setTimeout(fun, 0);
54087 }
54088 try {
54089 // when when somebody has screwed with setTimeout but no I.E. maddness
54090 return cachedSetTimeout(fun, 0);
54091 } catch(e){
54092 try {
54093 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
54094 return cachedSetTimeout.call(null, fun, 0);
54095 } catch(e){
54096 // 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
54097 return cachedSetTimeout.call(this, fun, 0);
54098 }
54099 }
54100
ebd8d4e8 54101
ab78acc6 54102}
8b095871
IC
54103function runClearTimeout(marker) {
54104 if (cachedClearTimeout === clearTimeout) {
54105 //normal enviroments in sane situations
54106 return clearTimeout(marker);
54107 }
54108 // if clearTimeout wasn't available but was latter defined
54109 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
54110 cachedClearTimeout = clearTimeout;
54111 return clearTimeout(marker);
54112 }
54113 try {
54114 // when when somebody has screwed with setTimeout but no I.E. maddness
54115 return cachedClearTimeout(marker);
54116 } catch (e){
54117 try {
54118 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
54119 return cachedClearTimeout.call(null, marker);
54120 } catch (e){
54121 // 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.
54122 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
54123 return cachedClearTimeout.call(this, marker);
54124 }
54125 }
54126
54127
ebd8d4e8 54128
ab78acc6 54129}
8b095871
IC
54130var queue = [];
54131var draining = false;
54132var currentQueue;
54133var queueIndex = -1;
ebd8d4e8 54134
8b095871
IC
54135function cleanUpNextTick() {
54136 if (!draining || !currentQueue) {
54137 return;
54138 }
54139 draining = false;
54140 if (currentQueue.length) {
54141 queue = currentQueue.concat(queue);
54142 } else {
54143 queueIndex = -1;
54144 }
54145 if (queue.length) {
54146 drainQueue();
54147 }
ebd8d4e8
IC
54148}
54149
8b095871
IC
54150function drainQueue() {
54151 if (draining) {
54152 return;
54153 }
54154 var timeout = runTimeout(cleanUpNextTick);
54155 draining = true;
54156
54157 var len = queue.length;
54158 while(len) {
54159 currentQueue = queue;
54160 queue = [];
54161 while (++queueIndex < len) {
54162 if (currentQueue) {
54163 currentQueue[queueIndex].run();
54164 }
54165 }
54166 queueIndex = -1;
54167 len = queue.length;
54168 }
54169 currentQueue = null;
54170 draining = false;
54171 runClearTimeout(timeout);
ebd8d4e8
IC
54172}
54173
8b095871
IC
54174process.nextTick = function (fun) {
54175 var args = new Array(arguments.length - 1);
54176 if (arguments.length > 1) {
54177 for (var i = 1; i < arguments.length; i++) {
54178 args[i - 1] = arguments[i];
54179 }
54180 }
54181 queue.push(new Item(fun, args));
54182 if (queue.length === 1 && !draining) {
54183 runTimeout(drainQueue);
54184 }
54185};
54186
54187// v8 likes predictible objects
54188function Item(fun, array) {
54189 this.fun = fun;
54190 this.array = array;
ab78acc6 54191}
8b095871
IC
54192Item.prototype.run = function () {
54193 this.fun.apply(null, this.array);
54194};
54195process.title = 'browser';
54196process.browser = true;
54197process.env = {};
54198process.argv = [];
54199process.version = ''; // empty string to avoid regexp issues
54200process.versions = {};
ebd8d4e8 54201
8b095871
IC
54202function noop() {}
54203
54204process.on = noop;
54205process.addListener = noop;
54206process.once = noop;
54207process.off = noop;
54208process.removeListener = noop;
54209process.removeAllListeners = noop;
54210process.emit = noop;
54211
54212process.binding = function (name) {
54213 throw new Error('process.binding is not supported');
54214};
54215
54216process.cwd = function () { return '/' };
54217process.chdir = function (dir) {
54218 throw new Error('process.chdir is not supported');
54219};
54220process.umask = function() { return 0; };
54221
54222},{}],14:[function(require,module,exports){
54223module.exports = require("./lib/_stream_duplex.js")
54224
54225},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
54226// a duplex stream is just a stream that is both readable and writable.
54227// Since JS doesn't have multiple prototypal inheritance, this class
54228// prototypally inherits from Readable, and then parasitically from
54229// Writable.
54230
54231'use strict';
54232
54233/*<replacement>*/
ab78acc6 54234
8b095871
IC
54235var objectKeys = Object.keys || function (obj) {
54236 var keys = [];
54237 for (var key in obj) {
54238 keys.push(key);
54239 }return keys;
54240};
54241/*</replacement>*/
ebd8d4e8 54242
8b095871 54243module.exports = Duplex;
ebd8d4e8 54244
8b095871
IC
54245/*<replacement>*/
54246var processNextTick = require('process-nextick-args');
54247/*</replacement>*/
ebd8d4e8 54248
8b095871
IC
54249/*<replacement>*/
54250var util = require('core-util-is');
54251util.inherits = require('inherits');
54252/*</replacement>*/
ebd8d4e8 54253
8b095871
IC
54254var Readable = require('./_stream_readable');
54255var Writable = require('./_stream_writable');
ebd8d4e8 54256
8b095871
IC
54257util.inherits(Duplex, Readable);
54258
54259var keys = objectKeys(Writable.prototype);
54260for (var v = 0; v < keys.length; v++) {
54261 var method = keys[v];
54262 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 54263}
ebd8d4e8 54264
8b095871
IC
54265function Duplex(options) {
54266 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 54267
8b095871
IC
54268 Readable.call(this, options);
54269 Writable.call(this, options);
ebd8d4e8 54270
8b095871 54271 if (options && options.readable === false) this.readable = false;
ebd8d4e8 54272
8b095871 54273 if (options && options.writable === false) this.writable = false;
ebd8d4e8 54274
8b095871
IC
54275 this.allowHalfOpen = true;
54276 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 54277
8b095871 54278 this.once('end', onend);
ebd8d4e8
IC
54279}
54280
8b095871
IC
54281// the no-half-open enforcer
54282function onend() {
54283 // if we allow half-open state, or if the writable side ended,
54284 // then we're ok.
54285 if (this.allowHalfOpen || this._writableState.ended) return;
54286
54287 // no more data can be written.
54288 // But allow more writes to happen in this tick.
54289 processNextTick(onEndNT, this);
ebd8d4e8
IC
54290}
54291
8b095871
IC
54292function onEndNT(self) {
54293 self.end();
54294}
ebd8d4e8 54295
8b095871
IC
54296function forEach(xs, f) {
54297 for (var i = 0, l = xs.length; i < l; i++) {
54298 f(xs[i], i);
54299 }
54300}
54301},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
54302// a passthrough stream.
54303// basically just the most minimal sort of Transform stream.
54304// Every written chunk gets output as-is.
ebd8d4e8 54305
8b095871 54306'use strict';
ebd8d4e8 54307
8b095871 54308module.exports = PassThrough;
ebd8d4e8 54309
8b095871 54310var Transform = require('./_stream_transform');
ebd8d4e8 54311
8b095871
IC
54312/*<replacement>*/
54313var util = require('core-util-is');
54314util.inherits = require('inherits');
54315/*</replacement>*/
ebd8d4e8 54316
8b095871 54317util.inherits(PassThrough, Transform);
ebd8d4e8 54318
8b095871
IC
54319function PassThrough(options) {
54320 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 54321
8b095871 54322 Transform.call(this, options);
ebd8d4e8
IC
54323}
54324
8b095871
IC
54325PassThrough.prototype._transform = function (chunk, encoding, cb) {
54326 cb(null, chunk);
54327};
54328},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
54329(function (process){
54330'use strict';
ebd8d4e8 54331
8b095871 54332module.exports = Readable;
ebd8d4e8 54333
8b095871
IC
54334/*<replacement>*/
54335var processNextTick = require('process-nextick-args');
54336/*</replacement>*/
ebd8d4e8 54337
8b095871
IC
54338/*<replacement>*/
54339var isArray = require('isarray');
54340/*</replacement>*/
ebd8d4e8 54341
8b095871
IC
54342/*<replacement>*/
54343var Duplex;
54344/*</replacement>*/
ebd8d4e8 54345
8b095871 54346Readable.ReadableState = ReadableState;
ebd8d4e8 54347
8b095871
IC
54348/*<replacement>*/
54349var EE = require('events').EventEmitter;
ebd8d4e8 54350
8b095871
IC
54351var EElistenerCount = function (emitter, type) {
54352 return emitter.listeners(type).length;
54353};
54354/*</replacement>*/
ebd8d4e8 54355
8b095871
IC
54356/*<replacement>*/
54357var Stream;
54358(function () {
54359 try {
54360 Stream = require('st' + 'ream');
54361 } catch (_) {} finally {
54362 if (!Stream) Stream = require('events').EventEmitter;
54363 }
54364})();
54365/*</replacement>*/
ebd8d4e8 54366
8b095871
IC
54367var Buffer = require('buffer').Buffer;
54368/*<replacement>*/
54369var bufferShim = require('buffer-shims');
54370/*</replacement>*/
ab78acc6 54371
8b095871
IC
54372/*<replacement>*/
54373var util = require('core-util-is');
54374util.inherits = require('inherits');
54375/*</replacement>*/
ab78acc6 54376
8b095871
IC
54377/*<replacement>*/
54378var debugUtil = require('util');
54379var debug = void 0;
54380if (debugUtil && debugUtil.debuglog) {
54381 debug = debugUtil.debuglog('stream');
54382} else {
54383 debug = function () {};
54384}
54385/*</replacement>*/
ab78acc6 54386
8b095871
IC
54387var BufferList = require('./internal/streams/BufferList');
54388var StringDecoder;
ab78acc6 54389
8b095871 54390util.inherits(Readable, Stream);
ab78acc6 54391
8b095871
IC
54392function prependListener(emitter, event, fn) {
54393 // Sadly this is not cacheable as some libraries bundle their own
54394 // event emitter implementation with them.
54395 if (typeof emitter.prependListener === 'function') {
54396 return emitter.prependListener(event, fn);
54397 } else {
54398 // This is a hack to make sure that our error handler is attached before any
54399 // userland ones. NEVER DO THIS. This is here only because this code needs
54400 // to continue to work with older versions of Node.js that do not include
54401 // the prependListener() method. The goal is to eventually remove this hack.
54402 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]];
ebd8d4e8 54403 }
ebd8d4e8
IC
54404}
54405
8b095871
IC
54406function ReadableState(options, stream) {
54407 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 54408
8b095871 54409 options = options || {};
ebd8d4e8 54410
8b095871
IC
54411 // object stream flag. Used to make read(n) ignore n and to
54412 // make all the buffer merging and length checks go away
54413 this.objectMode = !!options.objectMode;
ebd8d4e8 54414
8b095871 54415 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 54416
8b095871
IC
54417 // the point at which it stops calling _read() to fill the buffer
54418 // Note: 0 is a valid value, means "don't call _read preemptively ever"
54419 var hwm = options.highWaterMark;
54420 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
54421 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 54422
8b095871
IC
54423 // cast to ints.
54424 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 54425
8b095871
IC
54426 // A linked list is used to store data chunks instead of an array because the
54427 // linked list can remove elements from the beginning faster than
54428 // array.shift()
54429 this.buffer = new BufferList();
54430 this.length = 0;
54431 this.pipes = null;
54432 this.pipesCount = 0;
54433 this.flowing = null;
54434 this.ended = false;
54435 this.endEmitted = false;
54436 this.reading = false;
ab78acc6 54437
8b095871
IC
54438 // a flag to be able to tell if the onwrite cb is called immediately,
54439 // or on a later tick. We set this to true at first, because any
54440 // actions that shouldn't happen until "later" should generally also
54441 // not happen before the first write call.
54442 this.sync = true;
ebd8d4e8 54443
8b095871
IC
54444 // whenever we return null, then we set a flag to say
54445 // that we're awaiting a 'readable' event emission.
54446 this.needReadable = false;
54447 this.emittedReadable = false;
54448 this.readableListening = false;
54449 this.resumeScheduled = false;
ebd8d4e8 54450
8b095871
IC
54451 // Crypto is kind of old and crusty. Historically, its default string
54452 // encoding is 'binary' so we have to make this configurable.
54453 // Everything else in the universe uses 'utf8', though.
54454 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 54455
8b095871
IC
54456 // when piping, we only care about 'readable' events that happen
54457 // after read()ing all the bytes and not getting any pushback.
54458 this.ranOut = false;
ebd8d4e8 54459
8b095871
IC
54460 // the number of writers that are awaiting a drain event in .pipe()s
54461 this.awaitDrain = 0;
ebd8d4e8 54462
8b095871
IC
54463 // if true, a maybeReadMore has been scheduled
54464 this.readingMore = false;
ebd8d4e8 54465
8b095871
IC
54466 this.decoder = null;
54467 this.encoding = null;
54468 if (options.encoding) {
54469 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
54470 this.decoder = new StringDecoder(options.encoding);
54471 this.encoding = options.encoding;
54472 }
54473}
ebd8d4e8 54474
8b095871
IC
54475function Readable(options) {
54476 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 54477
8b095871 54478 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 54479
8b095871 54480 this._readableState = new ReadableState(options, this);
ebd8d4e8 54481
8b095871
IC
54482 // legacy
54483 this.readable = true;
ebd8d4e8 54484
8b095871 54485 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 54486
8b095871
IC
54487 Stream.call(this);
54488}
ebd8d4e8 54489
8b095871
IC
54490// Manually shove something into the read() buffer.
54491// This returns true if the highWaterMark has not been hit yet,
54492// similar to how Writable.write() returns true if you should
54493// write() some more.
54494Readable.prototype.push = function (chunk, encoding) {
54495 var state = this._readableState;
ebd8d4e8 54496
8b095871
IC
54497 if (!state.objectMode && typeof chunk === 'string') {
54498 encoding = encoding || state.defaultEncoding;
54499 if (encoding !== state.encoding) {
54500 chunk = bufferShim.from(chunk, encoding);
54501 encoding = '';
54502 }
54503 }
ebd8d4e8 54504
8b095871
IC
54505 return readableAddChunk(this, state, chunk, encoding, false);
54506};
ebd8d4e8 54507
8b095871
IC
54508// Unshift should *always* be something directly out of read()
54509Readable.prototype.unshift = function (chunk) {
54510 var state = this._readableState;
54511 return readableAddChunk(this, state, chunk, '', true);
54512};
ebd8d4e8 54513
8b095871
IC
54514Readable.prototype.isPaused = function () {
54515 return this._readableState.flowing === false;
54516};
54517
54518function readableAddChunk(stream, state, chunk, encoding, addToFront) {
54519 var er = chunkInvalid(state, chunk);
54520 if (er) {
54521 stream.emit('error', er);
54522 } else if (chunk === null) {
54523 state.reading = false;
54524 onEofChunk(stream, state);
54525 } else if (state.objectMode || chunk && chunk.length > 0) {
54526 if (state.ended && !addToFront) {
54527 var e = new Error('stream.push() after EOF');
54528 stream.emit('error', e);
54529 } else if (state.endEmitted && addToFront) {
54530 var _e = new Error('stream.unshift() after end event');
54531 stream.emit('error', _e);
54532 } else {
54533 var skipAdd;
54534 if (state.decoder && !addToFront && !encoding) {
54535 chunk = state.decoder.write(chunk);
54536 skipAdd = !state.objectMode && chunk.length === 0;
54537 }
ebd8d4e8 54538
8b095871 54539 if (!addToFront) state.reading = false;
ebd8d4e8 54540
8b095871
IC
54541 // Don't add to the buffer if we've decoded to an empty string chunk and
54542 // we're not in object mode
54543 if (!skipAdd) {
54544 // if we want the data now, just emit it.
54545 if (state.flowing && state.length === 0 && !state.sync) {
54546 stream.emit('data', chunk);
54547 stream.read(0);
54548 } else {
54549 // update the buffer info.
54550 state.length += state.objectMode ? 1 : chunk.length;
54551 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 54552
8b095871
IC
54553 if (state.needReadable) emitReadable(stream);
54554 }
54555 }
ab78acc6 54556
8b095871
IC
54557 maybeReadMore(stream, state);
54558 }
54559 } else if (!addToFront) {
54560 state.reading = false;
54561 }
ab78acc6 54562
8b095871
IC
54563 return needMoreData(state);
54564}
ab78acc6 54565
8b095871
IC
54566// if it's past the high water mark, we can push in some more.
54567// Also, if we have no data yet, we can stand some
54568// more bytes. This is to work around cases where hwm=0,
54569// such as the repl. Also, if the push() triggered a
54570// readable event, and the user called read(largeNumber) such that
54571// needReadable was set, then we ought to push more, so that another
54572// 'readable' event will be triggered.
54573function needMoreData(state) {
54574 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
54575}
ebd8d4e8 54576
8b095871
IC
54577// backwards compatibility.
54578Readable.prototype.setEncoding = function (enc) {
54579 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
54580 this._readableState.decoder = new StringDecoder(enc);
54581 this._readableState.encoding = enc;
54582 return this;
54583};
54584
54585// Don't raise the hwm > 8MB
54586var MAX_HWM = 0x800000;
54587function computeNewHighWaterMark(n) {
54588 if (n >= MAX_HWM) {
54589 n = MAX_HWM;
ab78acc6 54590 } else {
8b095871
IC
54591 // Get the next highest power of 2 to prevent increasing hwm excessively in
54592 // tiny amounts
54593 n--;
54594 n |= n >>> 1;
54595 n |= n >>> 2;
54596 n |= n >>> 4;
54597 n |= n >>> 8;
54598 n |= n >>> 16;
54599 n++;
ebd8d4e8 54600 }
8b095871 54601 return n;
ebd8d4e8
IC
54602}
54603
8b095871
IC
54604// This function is designed to be inlinable, so please take care when making
54605// changes to the function body.
54606function howMuchToRead(n, state) {
54607 if (n <= 0 || state.length === 0 && state.ended) return 0;
54608 if (state.objectMode) return 1;
54609 if (n !== n) {
54610 // Only flow one buffer at a time
54611 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
54612 }
54613 // If we're asking for more than the current hwm, then raise the hwm.
54614 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
54615 if (n <= state.length) return n;
54616 // Don't have enough
54617 if (!state.ended) {
54618 state.needReadable = true;
54619 return 0;
54620 }
54621 return state.length;
54622}
ebd8d4e8 54623
8b095871
IC
54624// you can override either this method, or the async _read(n) below.
54625Readable.prototype.read = function (n) {
54626 debug('read', n);
54627 n = parseInt(n, 10);
54628 var state = this._readableState;
54629 var nOrig = n;
ebd8d4e8 54630
8b095871 54631 if (n !== 0) state.emittedReadable = false;
ab78acc6 54632
8b095871
IC
54633 // if we're doing read(0) to trigger a readable event, but we
54634 // already have a bunch of data in the buffer, then just trigger
54635 // the 'readable' event and move on.
54636 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
54637 debug('read: emitReadable', state.length, state.ended);
54638 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
54639 return null;
ebd8d4e8 54640 }
ebd8d4e8 54641
8b095871 54642 n = howMuchToRead(n, state);
ebd8d4e8 54643
8b095871
IC
54644 // if we've ended, and we're now clear, then finish it up.
54645 if (n === 0 && state.ended) {
54646 if (state.length === 0) endReadable(this);
54647 return null;
54648 }
ebd8d4e8 54649
8b095871
IC
54650 // All the actual chunk generation logic needs to be
54651 // *below* the call to _read. The reason is that in certain
54652 // synthetic stream cases, such as passthrough streams, _read
54653 // may be a completely synchronous operation which may change
54654 // the state of the read buffer, providing enough data when
54655 // before there was *not* enough.
54656 //
54657 // So, the steps are:
54658 // 1. Figure out what the state of things will be after we do
54659 // a read from the buffer.
54660 //
54661 // 2. If that resulting state will trigger a _read, then call _read.
54662 // Note that this may be asynchronous, or synchronous. Yes, it is
54663 // deeply ugly to write APIs this way, but that still doesn't mean
54664 // that the Readable class should behave improperly, as streams are
54665 // designed to be sync/async agnostic.
54666 // Take note if the _read call is sync or async (ie, if the read call
54667 // has returned yet), so that we know whether or not it's safe to emit
54668 // 'readable' etc.
54669 //
54670 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 54671
8b095871
IC
54672 // if we need a readable event, then we need to do some reading.
54673 var doRead = state.needReadable;
54674 debug('need readable', doRead);
ebd8d4e8 54675
8b095871
IC
54676 // if we currently have less than the highWaterMark, then also read some
54677 if (state.length === 0 || state.length - n < state.highWaterMark) {
54678 doRead = true;
54679 debug('length less than watermark', doRead);
54680 }
ebd8d4e8 54681
8b095871
IC
54682 // however, if we've ended, then there's no point, and if we're already
54683 // reading, then it's unnecessary.
54684 if (state.ended || state.reading) {
54685 doRead = false;
54686 debug('reading or ended', doRead);
54687 } else if (doRead) {
54688 debug('do read');
54689 state.reading = true;
54690 state.sync = true;
54691 // if the length is currently zero, then we *need* a readable event.
54692 if (state.length === 0) state.needReadable = true;
54693 // call internal read method
54694 this._read(state.highWaterMark);
54695 state.sync = false;
54696 // If _read pushed data synchronously, then `reading` will be false,
54697 // and we need to re-evaluate how much data we can return to the user.
54698 if (!state.reading) n = howMuchToRead(nOrig, state);
54699 }
ebd8d4e8 54700
8b095871
IC
54701 var ret;
54702 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 54703
8b095871
IC
54704 if (ret === null) {
54705 state.needReadable = true;
54706 n = 0;
54707 } else {
54708 state.length -= n;
54709 }
ebd8d4e8 54710
8b095871
IC
54711 if (state.length === 0) {
54712 // If we have nothing in the buffer, then we want to know
54713 // as soon as we *do* get something into the buffer.
54714 if (!state.ended) state.needReadable = true;
ebd8d4e8 54715
8b095871
IC
54716 // If we tried to read() past the EOF, then emit end on the next tick.
54717 if (nOrig !== n && state.ended) endReadable(this);
54718 }
54719
54720 if (ret !== null) this.emit('data', ret);
54721
54722 return ret;
ab78acc6
IC
54723};
54724
8b095871
IC
54725function chunkInvalid(state, chunk) {
54726 var er = null;
54727 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
54728 er = new TypeError('Invalid non-string/buffer chunk');
54729 }
54730 return er;
54731}
ab78acc6 54732
8b095871
IC
54733function onEofChunk(stream, state) {
54734 if (state.ended) return;
54735 if (state.decoder) {
54736 var chunk = state.decoder.end();
54737 if (chunk && chunk.length) {
54738 state.buffer.push(chunk);
54739 state.length += state.objectMode ? 1 : chunk.length;
54740 }
54741 }
54742 state.ended = true;
54743
54744 // emit 'readable' now to make sure it gets picked up.
54745 emitReadable(stream);
54746}
54747
54748// Don't emit readable right away in sync mode, because this can trigger
54749// another read() call => stack overflow. This way, it might trigger
54750// a nextTick recursion warning, but that's not so bad.
54751function emitReadable(stream) {
54752 var state = stream._readableState;
54753 state.needReadable = false;
54754 if (!state.emittedReadable) {
54755 debug('emitReadable', state.flowing);
54756 state.emittedReadable = true;
54757 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
54758 }
ebd8d4e8
IC
54759}
54760
8b095871
IC
54761function emitReadable_(stream) {
54762 debug('emit readable');
54763 stream.emit('readable');
54764 flow(stream);
54765}
ebd8d4e8 54766
8b095871
IC
54767// at this point, the user has presumably seen the 'readable' event,
54768// and called read() to consume some data. that may have triggered
54769// in turn another _read(n) call, in which case reading = true if
54770// it's in progress.
54771// However, if we're not ended, or reading, and the length < hwm,
54772// then go ahead and try to read some more preemptively.
54773function maybeReadMore(stream, state) {
54774 if (!state.readingMore) {
54775 state.readingMore = true;
54776 processNextTick(maybeReadMore_, stream, state);
54777 }
54778}
ab78acc6 54779
8b095871
IC
54780function maybeReadMore_(stream, state) {
54781 var len = state.length;
54782 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
54783 debug('maybeReadMore read 0');
54784 stream.read(0);
54785 if (len === state.length)
54786 // didn't get any data, stop spinning.
54787 break;else len = state.length;
54788 }
54789 state.readingMore = false;
54790}
ab78acc6 54791
8b095871
IC
54792// abstract method. to be overridden in specific implementation classes.
54793// call cb(er, data) where data is <= n in length.
54794// for virtual (non-string, non-buffer) streams, "length" is somewhat
54795// arbitrary, and perhaps not very meaningful.
54796Readable.prototype._read = function (n) {
54797 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
54798};
54799
8b095871
IC
54800Readable.prototype.pipe = function (dest, pipeOpts) {
54801 var src = this;
54802 var state = this._readableState;
ab78acc6 54803
8b095871
IC
54804 switch (state.pipesCount) {
54805 case 0:
54806 state.pipes = dest;
54807 break;
54808 case 1:
54809 state.pipes = [state.pipes, dest];
54810 break;
54811 default:
54812 state.pipes.push(dest);
54813 break;
ab78acc6 54814 }
8b095871
IC
54815 state.pipesCount += 1;
54816 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 54817
8b095871 54818 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 54819
8b095871
IC
54820 var endFn = doEnd ? onend : cleanup;
54821 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 54822
8b095871
IC
54823 dest.on('unpipe', onunpipe);
54824 function onunpipe(readable) {
54825 debug('onunpipe');
54826 if (readable === src) {
54827 cleanup();
ab78acc6 54828 }
8b095871 54829 }
ebd8d4e8 54830
8b095871
IC
54831 function onend() {
54832 debug('onend');
54833 dest.end();
ebd8d4e8
IC
54834 }
54835
8b095871
IC
54836 // when the dest drains, it reduces the awaitDrain counter
54837 // on the source. This would be more elegant with a .once()
54838 // handler in flow(), but adding and removing repeatedly is
54839 // too slow.
54840 var ondrain = pipeOnDrain(src);
54841 dest.on('drain', ondrain);
ebd8d4e8 54842
8b095871
IC
54843 var cleanedUp = false;
54844 function cleanup() {
54845 debug('cleanup');
54846 // cleanup event handlers once the pipe is broken
54847 dest.removeListener('close', onclose);
54848 dest.removeListener('finish', onfinish);
54849 dest.removeListener('drain', ondrain);
54850 dest.removeListener('error', onerror);
54851 dest.removeListener('unpipe', onunpipe);
54852 src.removeListener('end', onend);
54853 src.removeListener('end', cleanup);
54854 src.removeListener('data', ondata);
ebd8d4e8 54855
8b095871 54856 cleanedUp = true;
ebd8d4e8 54857
8b095871
IC
54858 // if the reader is waiting for a drain event from this
54859 // specific writer, then it would cause it to never start
54860 // flowing again.
54861 // So, if this is awaiting a drain, then we just call it now.
54862 // If we don't know, then assume that we are waiting for one.
54863 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
54864 }
ebd8d4e8 54865
8b095871
IC
54866 // If the user pushes more data while we're writing to dest then we'll end up
54867 // in ondata again. However, we only want to increase awaitDrain once because
54868 // dest will only emit one 'drain' event for the multiple writes.
54869 // => Introduce a guard on increasing awaitDrain.
54870 var increasedAwaitDrain = false;
54871 src.on('data', ondata);
54872 function ondata(chunk) {
54873 debug('ondata');
54874 increasedAwaitDrain = false;
54875 var ret = dest.write(chunk);
54876 if (false === ret && !increasedAwaitDrain) {
54877 // If the user unpiped during `dest.write()`, it is possible
54878 // to get stuck in a permanently paused state if that write
54879 // also returned false.
54880 // => Check whether `dest` is still a piping destination.
54881 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
54882 debug('false write response, pause', src._readableState.awaitDrain);
54883 src._readableState.awaitDrain++;
54884 increasedAwaitDrain = true;
54885 }
54886 src.pause();
54887 }
54888 }
ebd8d4e8 54889
8b095871
IC
54890 // if the dest has an error, then stop piping into it.
54891 // however, don't suppress the throwing behavior for this.
54892 function onerror(er) {
54893 debug('onerror', er);
54894 unpipe();
54895 dest.removeListener('error', onerror);
54896 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
54897 }
ab78acc6 54898
8b095871
IC
54899 // Make sure our error handler is attached before userland ones.
54900 prependListener(dest, 'error', onerror);
ab78acc6 54901
8b095871
IC
54902 // Both close and finish should trigger unpipe, but only once.
54903 function onclose() {
54904 dest.removeListener('finish', onfinish);
54905 unpipe();
54906 }
54907 dest.once('close', onclose);
54908 function onfinish() {
54909 debug('onfinish');
54910 dest.removeListener('close', onclose);
54911 unpipe();
ab78acc6 54912 }
8b095871 54913 dest.once('finish', onfinish);
ebd8d4e8 54914
8b095871
IC
54915 function unpipe() {
54916 debug('unpipe');
54917 src.unpipe(dest);
54918 }
54919
54920 // tell the dest that it's being piped to
54921 dest.emit('pipe', src);
54922
54923 // start the flow if it hasn't been started already.
54924 if (!state.flowing) {
54925 debug('pipe resume');
54926 src.resume();
54927 }
54928
54929 return dest;
ab78acc6 54930};
ebd8d4e8 54931
8b095871
IC
54932function pipeOnDrain(src) {
54933 return function () {
54934 var state = src._readableState;
54935 debug('pipeOnDrain', state.awaitDrain);
54936 if (state.awaitDrain) state.awaitDrain--;
54937 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
54938 state.flowing = true;
54939 flow(src);
54940 }
54941 };
54942}
ebd8d4e8 54943
8b095871
IC
54944Readable.prototype.unpipe = function (dest) {
54945 var state = this._readableState;
ebd8d4e8 54946
8b095871
IC
54947 // if we're not piping anywhere, then do nothing.
54948 if (state.pipesCount === 0) return this;
ebd8d4e8 54949
8b095871
IC
54950 // just one destination. most common case.
54951 if (state.pipesCount === 1) {
54952 // passed in one, but it's not the right one.
54953 if (dest && dest !== state.pipes) return this;
ebd8d4e8 54954
8b095871
IC
54955 if (!dest) dest = state.pipes;
54956
54957 // got a match.
54958 state.pipes = null;
54959 state.pipesCount = 0;
54960 state.flowing = false;
54961 if (dest) dest.emit('unpipe', this);
54962 return this;
ab78acc6 54963 }
ebd8d4e8 54964
8b095871 54965 // slow case. multiple pipe destinations.
ebd8d4e8 54966
8b095871
IC
54967 if (!dest) {
54968 // remove all.
54969 var dests = state.pipes;
54970 var len = state.pipesCount;
54971 state.pipes = null;
54972 state.pipesCount = 0;
54973 state.flowing = false;
ebd8d4e8 54974
8b095871
IC
54975 for (var i = 0; i < len; i++) {
54976 dests[i].emit('unpipe', this);
54977 }return this;
54978 }
ebd8d4e8 54979
8b095871
IC
54980 // try to find the right one.
54981 var index = indexOf(state.pipes, dest);
54982 if (index === -1) return this;
ebd8d4e8 54983
8b095871
IC
54984 state.pipes.splice(index, 1);
54985 state.pipesCount -= 1;
54986 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 54987
8b095871 54988 dest.emit('unpipe', this);
ab78acc6 54989
8b095871
IC
54990 return this;
54991};
ab78acc6 54992
8b095871
IC
54993// set up data events if they are asked for
54994// Ensure readable listeners eventually get something
54995Readable.prototype.on = function (ev, fn) {
54996 var res = Stream.prototype.on.call(this, ev, fn);
54997
54998 if (ev === 'data') {
54999 // Start flowing on next tick if stream isn't explicitly paused
55000 if (this._readableState.flowing !== false) this.resume();
55001 } else if (ev === 'readable') {
55002 var state = this._readableState;
55003 if (!state.endEmitted && !state.readableListening) {
55004 state.readableListening = state.needReadable = true;
55005 state.emittedReadable = false;
55006 if (!state.reading) {
55007 processNextTick(nReadingNextTick, this);
55008 } else if (state.length) {
55009 emitReadable(this, state);
ebd8d4e8 55010 }
ab78acc6 55011 }
8b095871 55012 }
ebd8d4e8 55013
8b095871
IC
55014 return res;
55015};
55016Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 55017
8b095871
IC
55018function nReadingNextTick(self) {
55019 debug('readable nexttick read 0');
55020 self.read(0);
55021}
ab78acc6 55022
8b095871
IC
55023// pause() and resume() are remnants of the legacy readable stream API
55024// If the user uses them, then switch into old mode.
55025Readable.prototype.resume = function () {
55026 var state = this._readableState;
55027 if (!state.flowing) {
55028 debug('resume');
55029 state.flowing = true;
55030 resume(this, state);
ebd8d4e8 55031 }
ab78acc6 55032 return this;
ebd8d4e8
IC
55033};
55034
8b095871
IC
55035function resume(stream, state) {
55036 if (!state.resumeScheduled) {
55037 state.resumeScheduled = true;
55038 processNextTick(resume_, stream, state);
ebd8d4e8 55039 }
8b095871 55040}
ab78acc6 55041
8b095871
IC
55042function resume_(stream, state) {
55043 if (!state.reading) {
55044 debug('resume read 0');
55045 stream.read(0);
ebd8d4e8 55046 }
ebd8d4e8 55047
8b095871
IC
55048 state.resumeScheduled = false;
55049 state.awaitDrain = 0;
55050 stream.emit('resume');
55051 flow(stream);
55052 if (state.flowing && !state.reading) stream.read(0);
55053}
ab78acc6 55054
8b095871
IC
55055Readable.prototype.pause = function () {
55056 debug('call pause flowing=%j', this._readableState.flowing);
55057 if (false !== this._readableState.flowing) {
55058 debug('pause');
55059 this._readableState.flowing = false;
55060 this.emit('pause');
ebd8d4e8 55061 }
ab78acc6
IC
55062 return this;
55063};
ebd8d4e8 55064
8b095871
IC
55065function flow(stream) {
55066 var state = stream._readableState;
55067 debug('flow', state.flowing);
55068 while (state.flowing && stream.read() !== null) {}
55069}
ebd8d4e8 55070
8b095871
IC
55071// wrap an old-style stream as the async data source.
55072// This is *not* part of the readable stream interface.
55073// It is an ugly unfortunate mess of history.
55074Readable.prototype.wrap = function (stream) {
55075 var state = this._readableState;
55076 var paused = false;
ebd8d4e8 55077
8b095871
IC
55078 var self = this;
55079 stream.on('end', function () {
55080 debug('wrapped end');
55081 if (state.decoder && !state.ended) {
55082 var chunk = state.decoder.end();
55083 if (chunk && chunk.length) self.push(chunk);
55084 }
ebd8d4e8 55085
8b095871
IC
55086 self.push(null);
55087 });
ebd8d4e8 55088
8b095871
IC
55089 stream.on('data', function (chunk) {
55090 debug('wrapped data');
55091 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 55092
8b095871
IC
55093 // don't skip over falsy values in objectMode
55094 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 55095
8b095871
IC
55096 var ret = self.push(chunk);
55097 if (!ret) {
55098 paused = true;
55099 stream.pause();
55100 }
55101 });
55102
55103 // proxy all the other methods.
55104 // important when wrapping filters and duplexes.
55105 for (var i in stream) {
55106 if (this[i] === undefined && typeof stream[i] === 'function') {
55107 this[i] = function (method) {
55108 return function () {
55109 return stream[method].apply(stream, arguments);
55110 };
55111 }(i);
55112 }
ab78acc6 55113 }
ebd8d4e8 55114
8b095871
IC
55115 // proxy certain important events.
55116 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
55117 forEach(events, function (ev) {
55118 stream.on(ev, self.emit.bind(self, ev));
55119 });
55120
55121 // when we try to consume some more bytes, simply unpause the
55122 // underlying stream.
55123 self._read = function (n) {
55124 debug('wrapped _read', n);
55125 if (paused) {
55126 paused = false;
55127 stream.resume();
55128 }
55129 };
55130
55131 return self;
ebd8d4e8
IC
55132};
55133
8b095871
IC
55134// exposed for testing purposes only.
55135Readable._fromList = fromList;
ebd8d4e8 55136
8b095871
IC
55137// Pluck off n bytes from an array of buffers.
55138// Length is the combined lengths of all the buffers in the list.
55139// This function is designed to be inlinable, so please take care when making
55140// changes to the function body.
55141function fromList(n, state) {
55142 // nothing buffered
55143 if (state.length === 0) return null;
ab78acc6 55144
8b095871
IC
55145 var ret;
55146 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
55147 // read it all, truncate the list
55148 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);
55149 state.buffer.clear();
55150 } else {
55151 // read part of list
55152 ret = fromListPartial(n, state.buffer, state.decoder);
55153 }
55154
55155 return ret;
55156}
55157
55158// Extracts only enough buffered data to satisfy the amount requested.
55159// This function is designed to be inlinable, so please take care when making
55160// changes to the function body.
55161function fromListPartial(n, list, hasStrings) {
55162 var ret;
55163 if (n < list.head.data.length) {
55164 // slice is the same for buffers and strings
55165 ret = list.head.data.slice(0, n);
55166 list.head.data = list.head.data.slice(n);
55167 } else if (n === list.head.data.length) {
55168 // first chunk is a perfect match
55169 ret = list.shift();
55170 } else {
55171 // result spans more than one buffer
55172 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
55173 }
55174 return ret;
ab78acc6 55175}
ebd8d4e8 55176
8b095871
IC
55177// Copies a specified amount of characters from the list of buffered data
55178// chunks.
55179// This function is designed to be inlinable, so please take care when making
55180// changes to the function body.
55181function copyFromBufferString(n, list) {
55182 var p = list.head;
55183 var c = 1;
55184 var ret = p.data;
55185 n -= ret.length;
55186 while (p = p.next) {
55187 var str = p.data;
55188 var nb = n > str.length ? str.length : n;
55189 if (nb === str.length) ret += str;else ret += str.slice(0, n);
55190 n -= nb;
55191 if (n === 0) {
55192 if (nb === str.length) {
55193 ++c;
55194 if (p.next) list.head = p.next;else list.head = list.tail = null;
55195 } else {
55196 list.head = p;
55197 p.data = str.slice(nb);
55198 }
55199 break;
ab78acc6 55200 }
8b095871
IC
55201 ++c;
55202 }
55203 list.length -= c;
55204 return ret;
ab78acc6
IC
55205}
55206
8b095871
IC
55207// Copies a specified amount of bytes from the list of buffered data chunks.
55208// This function is designed to be inlinable, so please take care when making
55209// changes to the function body.
55210function copyFromBuffer(n, list) {
55211 var ret = bufferShim.allocUnsafe(n);
55212 var p = list.head;
55213 var c = 1;
55214 p.data.copy(ret);
55215 n -= p.data.length;
55216 while (p = p.next) {
55217 var buf = p.data;
55218 var nb = n > buf.length ? buf.length : n;
55219 buf.copy(ret, ret.length - n, 0, nb);
55220 n -= nb;
55221 if (n === 0) {
55222 if (nb === buf.length) {
55223 ++c;
55224 if (p.next) list.head = p.next;else list.head = list.tail = null;
55225 } else {
55226 list.head = p;
55227 p.data = buf.slice(nb);
55228 }
55229 break;
ab78acc6 55230 }
8b095871
IC
55231 ++c;
55232 }
55233 list.length -= c;
55234 return ret;
ab78acc6 55235}
ebd8d4e8 55236
8b095871
IC
55237function endReadable(stream) {
55238 var state = stream._readableState;
ab78acc6 55239
8b095871
IC
55240 // If we get here before consuming all the bytes, then that is a
55241 // bug in node. Should never happen.
55242 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 55243
8b095871
IC
55244 if (!state.endEmitted) {
55245 state.ended = true;
55246 processNextTick(endReadableNT, state, stream);
55247 }
55248}
ebd8d4e8 55249
8b095871
IC
55250function endReadableNT(state, stream) {
55251 // Check that we didn't get one last unshift.
55252 if (!state.endEmitted && state.length === 0) {
55253 state.endEmitted = true;
55254 stream.readable = false;
55255 stream.emit('end');
55256 }
55257}
ebd8d4e8 55258
8b095871
IC
55259function forEach(xs, f) {
55260 for (var i = 0, l = xs.length; i < l; i++) {
55261 f(xs[i], i);
55262 }
55263}
ebd8d4e8 55264
8b095871
IC
55265function indexOf(xs, x) {
55266 for (var i = 0, l = xs.length; i < l; i++) {
55267 if (xs[i] === x) return i;
55268 }
55269 return -1;
55270}
55271}).call(this,require('_process'))
55272},{"./_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){
55273// a transform stream is a readable/writable stream where you do
55274// something with the data. Sometimes it's called a "filter",
55275// but that's not a great name for it, since that implies a thing where
55276// some bits pass through, and others are simply ignored. (That would
55277// be a valid example of a transform, of course.)
ab78acc6 55278//
8b095871
IC
55279// While the output is causally related to the input, it's not a
55280// necessarily symmetric or synchronous transformation. For example,
55281// a zlib stream might take multiple plain-text writes(), and then
55282// emit a single compressed chunk some time in the future.
ab78acc6 55283//
8b095871 55284// Here's how this works:
ab78acc6 55285//
8b095871
IC
55286// The Transform stream has all the aspects of the readable and writable
55287// stream classes. When you write(chunk), that calls _write(chunk,cb)
55288// internally, and returns false if there's a lot of pending writes
55289// buffered up. When you call read(), that calls _read(n) until
55290// there's enough pending readable data buffered up.
55291//
55292// In a transform stream, the written data is placed in a buffer. When
55293// _read(n) is called, it transforms the queued up data, calling the
55294// buffered _write cb's as it consumes chunks. If consuming a single
55295// written chunk would result in multiple output chunks, then the first
55296// outputted bit calls the readcb, and subsequent chunks just go into
55297// the read buffer, and will cause it to emit 'readable' if necessary.
55298//
55299// This way, back-pressure is actually determined by the reading side,
55300// since _read has to be called to start processing a new chunk. However,
55301// a pathological inflate type of transform can cause excessive buffering
55302// here. For example, imagine a stream where every byte of input is
55303// interpreted as an integer from 0-255, and then results in that many
55304// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
55305// 1kb of data being output. In this case, you could write a very small
55306// amount of input, and end up with a very large amount of output. In
55307// such a pathological inflating mechanism, there'd be no way to tell
55308// the system to stop doing the transform. A single 4MB write could
55309// cause the system to run out of memory.
55310//
55311// However, even in such a pathological case, only a single written chunk
55312// would be consumed, and then the rest would wait (un-transformed) until
55313// the results of the previous transformed chunk were consumed.
ebd8d4e8 55314
8b095871 55315'use strict';
ebd8d4e8 55316
8b095871 55317module.exports = Transform;
ebd8d4e8 55318
8b095871 55319var Duplex = require('./_stream_duplex');
ebd8d4e8 55320
ab78acc6
IC
55321/*<replacement>*/
55322var util = require('core-util-is');
55323util.inherits = require('inherits');
55324/*</replacement>*/
ebd8d4e8 55325
8b095871 55326util.inherits(Transform, Duplex);
ebd8d4e8 55327
8b095871
IC
55328function TransformState(stream) {
55329 this.afterTransform = function (er, data) {
55330 return afterTransform(stream, er, data);
55331 };
ebd8d4e8 55332
8b095871
IC
55333 this.needTransform = false;
55334 this.transforming = false;
55335 this.writecb = null;
55336 this.writechunk = null;
55337 this.writeencoding = null;
55338}
ebd8d4e8 55339
8b095871
IC
55340function afterTransform(stream, er, data) {
55341 var ts = stream._transformState;
55342 ts.transforming = false;
ebd8d4e8 55343
8b095871 55344 var cb = ts.writecb;
ebd8d4e8 55345
8b095871 55346 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 55347
8b095871
IC
55348 ts.writechunk = null;
55349 ts.writecb = null;
ebd8d4e8 55350
8b095871 55351 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 55352
8b095871
IC
55353 cb(er);
55354
55355 var rs = stream._readableState;
55356 rs.reading = false;
55357 if (rs.needReadable || rs.length < rs.highWaterMark) {
55358 stream._read(rs.highWaterMark);
55359 }
ebd8d4e8
IC
55360}
55361
8b095871
IC
55362function Transform(options) {
55363 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 55364
8b095871 55365 Duplex.call(this, options);
ebd8d4e8 55366
8b095871
IC
55367 this._transformState = new TransformState(this);
55368
55369 var stream = this;
55370
55371 // start out asking for a readable event once data is transformed.
55372 this._readableState.needReadable = true;
55373
55374 // we have implemented the _read method, and done the other things
55375 // that Readable wants before the first _read call, so unset the
55376 // sync guard flag.
55377 this._readableState.sync = false;
55378
55379 if (options) {
55380 if (typeof options.transform === 'function') this._transform = options.transform;
55381
55382 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 55383 }
8b095871
IC
55384
55385 // When the writable side finishes, then flush out anything remaining.
55386 this.once('prefinish', function () {
55387 if (typeof this._flush === 'function') this._flush(function (er, data) {
55388 done(stream, er, data);
55389 });else done(stream);
55390 });
ab78acc6 55391}
ebd8d4e8 55392
8b095871
IC
55393Transform.prototype.push = function (chunk, encoding) {
55394 this._transformState.needTransform = false;
55395 return Duplex.prototype.push.call(this, chunk, encoding);
55396};
55397
55398// This is the part where you do stuff!
55399// override this function in implementation classes.
55400// 'chunk' is an input chunk.
ab78acc6 55401//
8b095871
IC
55402// Call `push(newChunk)` to pass along transformed output
55403// to the readable side. You may call 'push' zero or more times.
ab78acc6 55404//
8b095871
IC
55405// Call `cb(err)` when you are done with this chunk. If you pass
55406// an error, then that'll put the hurt on the whole operation. If you
55407// never call cb(), then you'll never get another chunk.
55408Transform.prototype._transform = function (chunk, encoding, cb) {
55409 throw new Error('_transform() is not implemented');
55410};
ebd8d4e8 55411
8b095871
IC
55412Transform.prototype._write = function (chunk, encoding, cb) {
55413 var ts = this._transformState;
55414 ts.writecb = cb;
55415 ts.writechunk = chunk;
55416 ts.writeencoding = encoding;
55417 if (!ts.transforming) {
55418 var rs = this._readableState;
55419 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
55420 }
55421};
ebd8d4e8 55422
8b095871
IC
55423// Doesn't matter what the args are here.
55424// _transform does all the work.
55425// That we got here means that the readable side wants more data.
55426Transform.prototype._read = function (n) {
55427 var ts = this._transformState;
ebd8d4e8 55428
8b095871
IC
55429 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
55430 ts.transforming = true;
55431 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
55432 } else {
55433 // mark that we need a transform, so that any data that comes in
55434 // will get processed, now that we've asked for it.
55435 ts.needTransform = true;
55436 }
55437};
ebd8d4e8 55438
8b095871
IC
55439function done(stream, er, data) {
55440 if (er) return stream.emit('error', er);
ebd8d4e8 55441
8b095871 55442 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 55443
8b095871
IC
55444 // if there's nothing in the write buffer, then that means
55445 // that nothing more will ever be provided
55446 var ws = stream._writableState;
55447 var ts = stream._transformState;
ebd8d4e8 55448
8b095871 55449 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 55450
8b095871 55451 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 55452
8b095871
IC
55453 return stream.push(null);
55454}
55455},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 55456(function (process){
8b095871
IC
55457// A bit simpler than readable streams.
55458// Implement an async ._write(chunk, encoding, cb), and it'll handle all
55459// the drain event emission and buffering.
ebd8d4e8 55460
8b095871
IC
55461'use strict';
55462
55463module.exports = Writable;
ebd8d4e8 55464
ab78acc6 55465/*<replacement>*/
8b095871 55466var processNextTick = require('process-nextick-args');
ab78acc6
IC
55467/*</replacement>*/
55468
ab78acc6 55469/*<replacement>*/
8b095871 55470var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
55471/*</replacement>*/
55472
ab78acc6 55473/*<replacement>*/
8b095871 55474var Duplex;
ab78acc6
IC
55475/*</replacement>*/
55476
8b095871 55477Writable.WritableState = WritableState;
ab78acc6
IC
55478
55479/*<replacement>*/
55480var util = require('core-util-is');
55481util.inherits = require('inherits');
55482/*</replacement>*/
55483
8b095871
IC
55484/*<replacement>*/
55485var internalUtil = {
55486 deprecate: require('util-deprecate')
55487};
55488/*</replacement>*/
ab78acc6 55489
8b095871
IC
55490/*<replacement>*/
55491var Stream;
55492(function () {
55493 try {
55494 Stream = require('st' + 'ream');
55495 } catch (_) {} finally {
55496 if (!Stream) Stream = require('events').EventEmitter;
55497 }
55498})();
55499/*</replacement>*/
ab78acc6 55500
8b095871 55501var Buffer = require('buffer').Buffer;
ab78acc6 55502/*<replacement>*/
8b095871 55503var bufferShim = require('buffer-shims');
ab78acc6
IC
55504/*</replacement>*/
55505
8b095871
IC
55506util.inherits(Writable, Stream);
55507
55508function nop() {}
ab78acc6 55509
8b095871
IC
55510function WriteReq(chunk, encoding, cb) {
55511 this.chunk = chunk;
55512 this.encoding = encoding;
55513 this.callback = cb;
55514 this.next = null;
55515}
ab78acc6 55516
8b095871
IC
55517function WritableState(options, stream) {
55518 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
55519
55520 options = options || {};
55521
8b095871
IC
55522 // object stream flag to indicate whether or not this stream
55523 // contains buffers or objects.
55524 this.objectMode = !!options.objectMode;
55525
55526 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
55527
55528 // the point at which write() starts returning false
55529 // Note: 0 is a valid value, means that we always return false if
55530 // the entire buffer is not flushed immediately on write()
ab78acc6 55531 var hwm = options.highWaterMark;
8b095871
IC
55532 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
55533 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
55534
55535 // cast to ints.
8b095871 55536 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 55537
8b095871
IC
55538 // drain event flag.
55539 this.needDrain = false;
55540 // at the start of calling end()
55541 this.ending = false;
55542 // when end() has been called, and returned
ab78acc6 55543 this.ended = false;
8b095871
IC
55544 // when 'finish' is emitted
55545 this.finished = false;
55546
55547 // should we decode strings into buffers before passing to _write?
55548 // this is here so that some node-core streams can optimize string
55549 // handling at a lower level.
55550 var noDecode = options.decodeStrings === false;
55551 this.decodeStrings = !noDecode;
55552
55553 // Crypto is kind of old and crusty. Historically, its default string
55554 // encoding is 'binary' so we have to make this configurable.
55555 // Everything else in the universe uses 'utf8', though.
55556 this.defaultEncoding = options.defaultEncoding || 'utf8';
55557
55558 // not an actual buffer we keep track of, but a measurement
55559 // of how much we're waiting to get pushed to some underlying
55560 // socket or file.
55561 this.length = 0;
55562
55563 // a flag to see when we're in the middle of a write.
55564 this.writing = false;
55565
55566 // when true all writes will be buffered until .uncork() call
55567 this.corked = 0;
ebd8d4e8 55568
ab78acc6
IC
55569 // a flag to be able to tell if the onwrite cb is called immediately,
55570 // or on a later tick. We set this to true at first, because any
55571 // actions that shouldn't happen until "later" should generally also
55572 // not happen before the first write call.
55573 this.sync = true;
ebd8d4e8 55574
8b095871
IC
55575 // a flag to know if we're processing previously buffered items, which
55576 // may call the _write() callback in the same tick, so that we don't
55577 // end up in an overlapped onwrite situation.
55578 this.bufferProcessing = false;
55579
55580 // the callback that's passed to _write(chunk,cb)
55581 this.onwrite = function (er) {
55582 onwrite(stream, er);
55583 };
55584
55585 // the callback that the user supplies to write(chunk,encoding,cb)
55586 this.writecb = null;
55587
55588 // the amount that is being written when _write is called.
55589 this.writelen = 0;
55590
55591 this.bufferedRequest = null;
55592 this.lastBufferedRequest = null;
55593
55594 // number of pending user-supplied write callbacks
55595 // this must be 0 before 'finish' can be emitted
55596 this.pendingcb = 0;
55597
55598 // emit prefinish if the only thing we're waiting for is _write cbs
55599 // This is relevant for synchronous Transform streams
55600 this.prefinished = false;
55601
55602 // True if the error was already emitted and should not be thrown again
55603 this.errorEmitted = false;
55604
55605 // count buffered requests
55606 this.bufferedRequestCount = 0;
55607
55608 // allocate the first CorkedRequest, there is always
55609 // one allocated and free to use, and we maintain at most two
55610 this.corkedRequestsFree = new CorkedRequest(this);
55611}
55612
55613WritableState.prototype.getBuffer = function getBuffer() {
55614 var current = this.bufferedRequest;
55615 var out = [];
55616 while (current) {
55617 out.push(current);
55618 current = current.next;
55619 }
55620 return out;
55621};
55622
55623(function () {
55624 try {
55625 Object.defineProperty(WritableState.prototype, 'buffer', {
55626 get: internalUtil.deprecate(function () {
55627 return this.getBuffer();
55628 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
55629 });
55630 } catch (_) {}
55631})();
55632
55633// Test _writableState for inheritance to account for Duplex streams,
55634// whose prototype chain only points to Readable.
55635var realHasInstance;
55636if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
55637 realHasInstance = Function.prototype[Symbol.hasInstance];
55638 Object.defineProperty(Writable, Symbol.hasInstance, {
55639 value: function (object) {
55640 if (realHasInstance.call(this, object)) return true;
55641
55642 return object && object._writableState instanceof WritableState;
55643 }
55644 });
55645} else {
55646 realHasInstance = function (object) {
55647 return object instanceof this;
55648 };
55649}
55650
55651function Writable(options) {
55652 Duplex = Duplex || require('./_stream_duplex');
55653
55654 // Writable ctor is applied to Duplexes, too.
55655 // `realHasInstance` is necessary because using plain `instanceof`
55656 // would return false, as no `_writableState` property is attached.
55657
55658 // Trying to use the custom `instanceof` for Writable here will also break the
55659 // Node.js LazyTransform implementation, which has a non-trivial getter for
55660 // `_writableState` that would lead to infinite recursion.
55661 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
55662 return new Writable(options);
55663 }
55664
55665 this._writableState = new WritableState(options, this);
55666
55667 // legacy.
55668 this.writable = true;
55669
55670 if (options) {
55671 if (typeof options.write === 'function') this._write = options.write;
55672
55673 if (typeof options.writev === 'function') this._writev = options.writev;
55674 }
55675
55676 Stream.call(this);
55677}
55678
55679// Otherwise people can pipe Writable streams, which is just wrong.
55680Writable.prototype.pipe = function () {
55681 this.emit('error', new Error('Cannot pipe, not readable'));
55682};
55683
55684function writeAfterEnd(stream, cb) {
55685 var er = new Error('write after end');
55686 // TODO: defer error events consistently everywhere, not just the cb
55687 stream.emit('error', er);
55688 processNextTick(cb, er);
55689}
55690
55691// If we get something that is not a buffer, string, null, or undefined,
55692// and we're not in objectMode, then that's an error.
55693// Otherwise stream chunks are all considered to be of length=1, and the
55694// watermarks determine how many objects to keep in the buffer, rather than
55695// how many bytes or characters.
55696function validChunk(stream, state, chunk, cb) {
55697 var valid = true;
55698 var er = false;
55699 // Always throw error if a null is written
55700 // if we are not in object mode then throw
55701 // if it is not a buffer, string, or undefined.
55702 if (chunk === null) {
55703 er = new TypeError('May not write null values to stream');
55704 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
55705 er = new TypeError('Invalid non-string/buffer chunk');
55706 }
55707 if (er) {
55708 stream.emit('error', er);
55709 processNextTick(cb, er);
55710 valid = false;
55711 }
55712 return valid;
55713}
ebd8d4e8 55714
8b095871
IC
55715Writable.prototype.write = function (chunk, encoding, cb) {
55716 var state = this._writableState;
55717 var ret = false;
ab78acc6 55718
8b095871
IC
55719 if (typeof encoding === 'function') {
55720 cb = encoding;
55721 encoding = null;
55722 }
ab78acc6 55723
8b095871 55724 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 55725
8b095871 55726 if (typeof cb !== 'function') cb = nop;
ab78acc6 55727
8b095871
IC
55728 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
55729 state.pendingcb++;
55730 ret = writeOrBuffer(this, state, chunk, encoding, cb);
55731 }
ab78acc6 55732
8b095871
IC
55733 return ret;
55734};
ab78acc6 55735
8b095871
IC
55736Writable.prototype.cork = function () {
55737 var state = this._writableState;
ab78acc6 55738
8b095871
IC
55739 state.corked++;
55740};
ebd8d4e8 55741
8b095871
IC
55742Writable.prototype.uncork = function () {
55743 var state = this._writableState;
ab78acc6 55744
8b095871
IC
55745 if (state.corked) {
55746 state.corked--;
ab78acc6 55747
8b095871
IC
55748 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
55749 }
55750};
ab78acc6 55751
8b095871
IC
55752Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
55753 // node::ParseEncoding() requires lower case.
55754 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
55755 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);
55756 this._writableState.defaultEncoding = encoding;
55757 return this;
55758};
ab78acc6 55759
8b095871
IC
55760function decodeChunk(state, chunk, encoding) {
55761 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
55762 chunk = bufferShim.from(chunk, encoding);
55763 }
55764 return chunk;
ab78acc6
IC
55765}
55766
8b095871
IC
55767// if we're already writing something, then just put this
55768// in the queue, and wait our turn. Otherwise, call _write
55769// If we return false, then we need a drain event, so set that flag.
55770function writeOrBuffer(stream, state, chunk, encoding, cb) {
55771 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 55772
8b095871
IC
55773 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
55774 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 55775
8b095871 55776 state.length += len;
ebd8d4e8 55777
8b095871
IC
55778 var ret = state.length < state.highWaterMark;
55779 // we must ensure that previous needDrain will not be reset to false.
55780 if (!ret) state.needDrain = true;
ebd8d4e8 55781
8b095871
IC
55782 if (state.writing || state.corked) {
55783 var last = state.lastBufferedRequest;
55784 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
55785 if (last) {
55786 last.next = state.lastBufferedRequest;
ebd8d4e8 55787 } else {
8b095871
IC
55788 state.bufferedRequest = state.lastBufferedRequest;
55789 }
55790 state.bufferedRequestCount += 1;
55791 } else {
55792 doWrite(stream, state, false, len, chunk, encoding, cb);
55793 }
ab78acc6 55794
8b095871
IC
55795 return ret;
55796}
ab78acc6 55797
8b095871
IC
55798function doWrite(stream, state, writev, len, chunk, encoding, cb) {
55799 state.writelen = len;
55800 state.writecb = cb;
55801 state.writing = true;
55802 state.sync = true;
55803 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
55804 state.sync = false;
55805}
ab78acc6 55806
8b095871
IC
55807function onwriteError(stream, state, sync, er, cb) {
55808 --state.pendingcb;
55809 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 55810
8b095871
IC
55811 stream._writableState.errorEmitted = true;
55812 stream.emit('error', er);
55813}
ebd8d4e8 55814
8b095871
IC
55815function onwriteStateUpdate(state) {
55816 state.writing = false;
55817 state.writecb = null;
55818 state.length -= state.writelen;
55819 state.writelen = 0;
ab78acc6 55820}
ebd8d4e8 55821
8b095871
IC
55822function onwrite(stream, er) {
55823 var state = stream._writableState;
55824 var sync = state.sync;
55825 var cb = state.writecb;
ab78acc6 55826
8b095871 55827 onwriteStateUpdate(state);
ab78acc6 55828
8b095871
IC
55829 if (er) onwriteError(stream, state, sync, er, cb);else {
55830 // Check if we're actually ready to finish, but don't emit yet
55831 var finished = needFinish(state);
55832
55833 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
55834 clearBuffer(stream, state);
55835 }
55836
55837 if (sync) {
55838 /*<replacement>*/
55839 asyncWrite(afterWrite, stream, state, finished, cb);
55840 /*</replacement>*/
55841 } else {
55842 afterWrite(stream, state, finished, cb);
55843 }
55844 }
ab78acc6
IC
55845}
55846
8b095871
IC
55847function afterWrite(stream, state, finished, cb) {
55848 if (!finished) onwriteDrain(stream, state);
55849 state.pendingcb--;
55850 cb();
55851 finishMaybe(stream, state);
55852}
ab78acc6 55853
8b095871
IC
55854// Must force callback to be called on nextTick, so that we don't
55855// emit 'drain' before the write() consumer gets the 'false' return
55856// value, and has a chance to attach a 'drain' listener.
55857function onwriteDrain(stream, state) {
55858 if (state.length === 0 && state.needDrain) {
55859 state.needDrain = false;
55860 stream.emit('drain');
ebd8d4e8 55861 }
ebd8d4e8 55862}
ebd8d4e8 55863
8b095871
IC
55864// if there's something in the buffer waiting, then process it
55865function clearBuffer(stream, state) {
55866 state.bufferProcessing = true;
55867 var entry = state.bufferedRequest;
ebd8d4e8 55868
8b095871
IC
55869 if (stream._writev && entry && entry.next) {
55870 // Fast case, write everything using _writev()
55871 var l = state.bufferedRequestCount;
55872 var buffer = new Array(l);
55873 var holder = state.corkedRequestsFree;
55874 holder.entry = entry;
ebd8d4e8 55875
8b095871
IC
55876 var count = 0;
55877 while (entry) {
55878 buffer[count] = entry;
55879 entry = entry.next;
55880 count += 1;
55881 }
ebd8d4e8 55882
8b095871 55883 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 55884
8b095871
IC
55885 // doWrite is almost always async, defer these to save a bit of time
55886 // as the hot path ends with doWrite
55887 state.pendingcb++;
55888 state.lastBufferedRequest = null;
55889 if (holder.next) {
55890 state.corkedRequestsFree = holder.next;
55891 holder.next = null;
55892 } else {
55893 state.corkedRequestsFree = new CorkedRequest(state);
55894 }
55895 } else {
55896 // Slow case, write chunks one-by-one
55897 while (entry) {
55898 var chunk = entry.chunk;
55899 var encoding = entry.encoding;
55900 var cb = entry.callback;
55901 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 55902
8b095871
IC
55903 doWrite(stream, state, false, len, chunk, encoding, cb);
55904 entry = entry.next;
55905 // if we didn't call the onwrite immediately, then
55906 // it means that we need to wait until it does.
55907 // also, that means that the chunk and cb are currently
55908 // being processed, so move the buffer counter past them.
55909 if (state.writing) {
55910 break;
55911 }
55912 }
55913
55914 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 55915 }
ab78acc6 55916
8b095871
IC
55917 state.bufferedRequestCount = 0;
55918 state.bufferedRequest = entry;
55919 state.bufferProcessing = false;
ebd8d4e8
IC
55920}
55921
8b095871
IC
55922Writable.prototype._write = function (chunk, encoding, cb) {
55923 cb(new Error('_write() is not implemented'));
55924};
ebd8d4e8 55925
8b095871 55926Writable.prototype._writev = null;
ab78acc6 55927
8b095871
IC
55928Writable.prototype.end = function (chunk, encoding, cb) {
55929 var state = this._writableState;
55930
55931 if (typeof chunk === 'function') {
55932 cb = chunk;
55933 chunk = null;
55934 encoding = null;
55935 } else if (typeof encoding === 'function') {
55936 cb = encoding;
55937 encoding = null;
ab78acc6
IC
55938 }
55939
8b095871 55940 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 55941
8b095871
IC
55942 // .end() fully uncorks
55943 if (state.corked) {
55944 state.corked = 1;
55945 this.uncork();
ab78acc6
IC
55946 }
55947
8b095871
IC
55948 // ignore unnecessary end() calls.
55949 if (!state.ending && !state.finished) endWritable(this, state, cb);
55950};
ab78acc6 55951
8b095871
IC
55952function needFinish(state) {
55953 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
55954}
ab78acc6 55955
8b095871
IC
55956function prefinish(stream, state) {
55957 if (!state.prefinished) {
55958 state.prefinished = true;
55959 stream.emit('prefinish');
ab78acc6 55960 }
8b095871 55961}
ab78acc6 55962
8b095871
IC
55963function finishMaybe(stream, state) {
55964 var need = needFinish(state);
55965 if (need) {
55966 if (state.pendingcb === 0) {
55967 prefinish(stream, state);
55968 state.finished = true;
55969 stream.emit('finish');
55970 } else {
55971 prefinish(stream, state);
55972 }
ab78acc6 55973 }
8b095871
IC
55974 return need;
55975}
ab78acc6 55976
8b095871
IC
55977function endWritable(stream, state, cb) {
55978 state.ending = true;
55979 finishMaybe(stream, state);
55980 if (cb) {
55981 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 55982 }
8b095871
IC
55983 state.ended = true;
55984 stream.writable = false;
55985}
ab78acc6 55986
8b095871
IC
55987// It seems a linked list but it is not
55988// there will be only 2 of these for each stream
55989function CorkedRequest(state) {
55990 var _this = this;
ab78acc6 55991
8b095871
IC
55992 this.next = null;
55993 this.entry = null;
ebd8d4e8 55994
8b095871
IC
55995 this.finish = function (err) {
55996 var entry = _this.entry;
55997 _this.entry = null;
55998 while (entry) {
55999 var cb = entry.callback;
56000 state.pendingcb--;
56001 cb(err);
56002 entry = entry.next;
56003 }
56004 if (state.corkedRequestsFree) {
56005 state.corkedRequestsFree.next = _this;
56006 } else {
56007 state.corkedRequestsFree = _this;
56008 }
56009 };
56010}
56011}).call(this,require('_process'))
56012},{"./_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){
56013'use strict';
ebd8d4e8 56014
8b095871
IC
56015var Buffer = require('buffer').Buffer;
56016/*<replacement>*/
56017var bufferShim = require('buffer-shims');
56018/*</replacement>*/
ebd8d4e8 56019
8b095871 56020module.exports = BufferList;
ebd8d4e8 56021
8b095871
IC
56022function BufferList() {
56023 this.head = null;
56024 this.tail = null;
56025 this.length = 0;
56026}
ab78acc6 56027
8b095871
IC
56028BufferList.prototype.push = function (v) {
56029 var entry = { data: v, next: null };
56030 if (this.length > 0) this.tail.next = entry;else this.head = entry;
56031 this.tail = entry;
56032 ++this.length;
56033};
56034
56035BufferList.prototype.unshift = function (v) {
56036 var entry = { data: v, next: this.head };
56037 if (this.length === 0) this.tail = entry;
56038 this.head = entry;
56039 ++this.length;
56040};
ab78acc6 56041
8b095871
IC
56042BufferList.prototype.shift = function () {
56043 if (this.length === 0) return;
56044 var ret = this.head.data;
56045 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
56046 --this.length;
ab78acc6
IC
56047 return ret;
56048};
56049
8b095871
IC
56050BufferList.prototype.clear = function () {
56051 this.head = this.tail = null;
56052 this.length = 0;
56053};
ebd8d4e8 56054
8b095871
IC
56055BufferList.prototype.join = function (s) {
56056 if (this.length === 0) return '';
56057 var p = this.head;
56058 var ret = '' + p.data;
56059 while (p = p.next) {
56060 ret += s + p.data;
56061 }return ret;
56062};
ebd8d4e8 56063
8b095871
IC
56064BufferList.prototype.concat = function (n) {
56065 if (this.length === 0) return bufferShim.alloc(0);
56066 if (this.length === 1) return this.head.data;
56067 var ret = bufferShim.allocUnsafe(n >>> 0);
56068 var p = this.head;
56069 var i = 0;
56070 while (p) {
56071 p.data.copy(ret, i);
56072 i += p.data.length;
56073 p = p.next;
ebd8d4e8 56074 }
8b095871
IC
56075 return ret;
56076};
56077},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
56078module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 56079
8b095871
IC
56080},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
56081(function (process){
56082var Stream = (function (){
56083 try {
56084 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
56085 } catch(_){}
56086}());
56087exports = module.exports = require('./lib/_stream_readable.js');
56088exports.Stream = Stream || exports;
56089exports.Readable = exports;
56090exports.Writable = require('./lib/_stream_writable.js');
56091exports.Duplex = require('./lib/_stream_duplex.js');
56092exports.Transform = require('./lib/_stream_transform.js');
56093exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 56094
8b095871
IC
56095if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
56096 module.exports = Stream;
ab78acc6 56097}
ebd8d4e8 56098
8b095871
IC
56099}).call(this,require('_process'))
56100},{"./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){
56101module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 56102
8b095871
IC
56103},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
56104module.exports = require("./lib/_stream_writable.js")
ab78acc6 56105
8b095871
IC
56106},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
56107// Copyright Joyent, Inc. and other Node contributors.
56108//
56109// Permission is hereby granted, free of charge, to any person obtaining a
56110// copy of this software and associated documentation files (the
56111// "Software"), to deal in the Software without restriction, including
56112// without limitation the rights to use, copy, modify, merge, publish,
56113// distribute, sublicense, and/or sell copies of the Software, and to permit
56114// persons to whom the Software is furnished to do so, subject to the
56115// following conditions:
56116//
56117// The above copyright notice and this permission notice shall be included
56118// in all copies or substantial portions of the Software.
56119//
56120// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56121// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56122// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56123// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56124// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56125// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56126// USE OR OTHER DEALINGS IN THE SOFTWARE.
56127
56128module.exports = Stream;
56129
56130var EE = require('events').EventEmitter;
56131var inherits = require('inherits');
56132
56133inherits(Stream, EE);
56134Stream.Readable = require('readable-stream/readable.js');
56135Stream.Writable = require('readable-stream/writable.js');
56136Stream.Duplex = require('readable-stream/duplex.js');
56137Stream.Transform = require('readable-stream/transform.js');
56138Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 56139
8b095871
IC
56140// Backwards-compat with node 0.4.x
56141Stream.Stream = Stream;
ebd8d4e8 56142
ab78acc6 56143
ab78acc6 56144
8b095871
IC
56145// old-style streams. Note that the pipe method (the only relevant
56146// part of this class) is overridden in the Readable class.
ebd8d4e8 56147
8b095871
IC
56148function Stream() {
56149 EE.call(this);
56150}
ebd8d4e8 56151
8b095871
IC
56152Stream.prototype.pipe = function(dest, options) {
56153 var source = this;
ab78acc6 56154
8b095871
IC
56155 function ondata(chunk) {
56156 if (dest.writable) {
56157 if (false === dest.write(chunk) && source.pause) {
56158 source.pause();
56159 }
ab78acc6
IC
56160 }
56161 }
56162
8b095871
IC
56163 source.on('data', ondata);
56164
56165 function ondrain() {
56166 if (source.readable && source.resume) {
56167 source.resume();
56168 }
ab78acc6
IC
56169 }
56170
ab78acc6
IC
56171 dest.on('drain', ondrain);
56172
8b095871
IC
56173 // If the 'end' option is not supplied, dest.end() will be called when
56174 // source gets the 'end' or 'close' events. Only dest.end() once.
56175 if (!dest._isStdio && (!options || options.end !== false)) {
56176 source.on('end', onend);
56177 source.on('close', onclose);
ab78acc6
IC
56178 }
56179
8b095871
IC
56180 var didOnEnd = false;
56181 function onend() {
56182 if (didOnEnd) return;
56183 didOnEnd = true;
ab78acc6 56184
8b095871 56185 dest.end();
ab78acc6 56186 }
ab78acc6
IC
56187
56188
ab78acc6 56189 function onclose() {
8b095871
IC
56190 if (didOnEnd) return;
56191 didOnEnd = true;
ebd8d4e8 56192
8b095871 56193 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
56194 }
56195
8b095871
IC
56196 // don't leave dangling pipes when there are errors.
56197 function onerror(er) {
56198 cleanup();
56199 if (EE.listenerCount(this, 'error') === 0) {
56200 throw er; // Unhandled stream error in pipe.
56201 }
ebd8d4e8
IC
56202 }
56203
8b095871
IC
56204 source.on('error', onerror);
56205 dest.on('error', onerror);
ab78acc6 56206
8b095871
IC
56207 // remove all the event listeners that were added.
56208 function cleanup() {
56209 source.removeListener('data', ondata);
56210 dest.removeListener('drain', ondrain);
ab78acc6 56211
8b095871
IC
56212 source.removeListener('end', onend);
56213 source.removeListener('close', onclose);
ab78acc6 56214
8b095871
IC
56215 source.removeListener('error', onerror);
56216 dest.removeListener('error', onerror);
ab78acc6 56217
8b095871
IC
56218 source.removeListener('end', cleanup);
56219 source.removeListener('close', cleanup);
ab78acc6 56220
8b095871
IC
56221 dest.removeListener('close', cleanup);
56222 }
ab78acc6 56223
8b095871
IC
56224 source.on('end', cleanup);
56225 source.on('close', cleanup);
ab78acc6 56226
8b095871 56227 dest.on('close', cleanup);
ebd8d4e8 56228
8b095871 56229 dest.emit('pipe', source);
ab78acc6 56230
8b095871
IC
56231 // Allow for unix-like usage: A.pipe(B).pipe(C)
56232 return dest;
56233};
ab78acc6 56234
8b095871
IC
56235},{"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){
56236// Copyright Joyent, Inc. and other Node contributors.
56237//
56238// Permission is hereby granted, free of charge, to any person obtaining a
56239// copy of this software and associated documentation files (the
56240// "Software"), to deal in the Software without restriction, including
56241// without limitation the rights to use, copy, modify, merge, publish,
56242// distribute, sublicense, and/or sell copies of the Software, and to permit
56243// persons to whom the Software is furnished to do so, subject to the
56244// following conditions:
56245//
56246// The above copyright notice and this permission notice shall be included
56247// in all copies or substantial portions of the Software.
56248//
56249// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56250// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56251// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56252// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56253// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56254// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56255// USE OR OTHER DEALINGS IN THE SOFTWARE.
56256
56257var Buffer = require('buffer').Buffer;
ebd8d4e8 56258
8b095871
IC
56259var isBufferEncoding = Buffer.isEncoding
56260 || function(encoding) {
56261 switch (encoding && encoding.toLowerCase()) {
56262 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;
56263 default: return false;
56264 }
56265 }
ab78acc6 56266
ab78acc6 56267
8b095871
IC
56268function assertEncoding(encoding) {
56269 if (encoding && !isBufferEncoding(encoding)) {
56270 throw new Error('Unknown encoding: ' + encoding);
56271 }
56272}
ebd8d4e8 56273
8b095871
IC
56274// StringDecoder provides an interface for efficiently splitting a series of
56275// buffers into a series of JS strings without breaking apart multi-byte
56276// characters. CESU-8 is handled as part of the UTF-8 encoding.
56277//
56278// @TODO Handling all encodings inside a single object makes it very difficult
56279// to reason about this code, so it should be split up in the future.
56280// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
56281// points as used by CESU-8.
56282var StringDecoder = exports.StringDecoder = function(encoding) {
56283 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
56284 assertEncoding(encoding);
56285 switch (this.encoding) {
56286 case 'utf8':
56287 // CESU-8 represents each of Surrogate Pair by 3-bytes
56288 this.surrogateSize = 3;
56289 break;
56290 case 'ucs2':
56291 case 'utf16le':
56292 // UTF-16 represents each of Surrogate Pair by 2-bytes
56293 this.surrogateSize = 2;
56294 this.detectIncompleteChar = utf16DetectIncompleteChar;
56295 break;
56296 case 'base64':
56297 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
56298 this.surrogateSize = 3;
56299 this.detectIncompleteChar = base64DetectIncompleteChar;
56300 break;
56301 default:
56302 this.write = passThroughWrite;
56303 return;
56304 }
56305
56306 // Enough space to store all bytes of a single character. UTF-8 needs 4
56307 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
56308 this.charBuffer = new Buffer(6);
56309 // Number of bytes received for the current incomplete multi-byte character.
56310 this.charReceived = 0;
56311 // Number of bytes expected for the current incomplete multi-byte character.
56312 this.charLength = 0;
ab78acc6
IC
56313};
56314
ab78acc6 56315
8b095871
IC
56316// write decodes the given buffer and returns it as JS string that is
56317// guaranteed to not contain any partial multi-byte characters. Any partial
56318// character found at the end of the buffer is buffered up, and will be
56319// returned when calling write again with the remaining bytes.
56320//
56321// Note: Converting a Buffer containing an orphan surrogate to a String
56322// currently works, but converting a String to a Buffer (via `new Buffer`, or
56323// Buffer#write) will replace incomplete surrogates with the unicode
56324// replacement character. See https://codereview.chromium.org/121173009/ .
56325StringDecoder.prototype.write = function(buffer) {
56326 var charStr = '';
56327 // if our last write ended with an incomplete multibyte character
56328 while (this.charLength) {
56329 // determine how many remaining bytes this buffer has to offer for this char
56330 var available = (buffer.length >= this.charLength - this.charReceived) ?
56331 this.charLength - this.charReceived :
56332 buffer.length;
ab78acc6 56333
8b095871
IC
56334 // add the new bytes to the char buffer
56335 buffer.copy(this.charBuffer, this.charReceived, 0, available);
56336 this.charReceived += available;
56337
56338 if (this.charReceived < this.charLength) {
56339 // still not enough chars in this buffer? wait for more ...
56340 return '';
ebd8d4e8 56341 }
ebd8d4e8 56342
8b095871
IC
56343 // remove bytes belonging to the current character from the buffer
56344 buffer = buffer.slice(available, buffer.length);
ab78acc6 56345
8b095871
IC
56346 // get the character that was split
56347 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
56348
56349 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
56350 var charCode = charStr.charCodeAt(charStr.length - 1);
56351 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
56352 this.charLength += this.surrogateSize;
56353 charStr = '';
56354 continue;
ab78acc6 56355 }
8b095871 56356 this.charReceived = this.charLength = 0;
ebd8d4e8 56357
8b095871
IC
56358 // if there are no more bytes in this buffer, just emit our char
56359 if (buffer.length === 0) {
56360 return charStr;
56361 }
56362 break;
ebd8d4e8 56363 }
ebd8d4e8 56364
8b095871
IC
56365 // determine and set charLength / charReceived
56366 this.detectIncompleteChar(buffer);
ebd8d4e8 56367
8b095871
IC
56368 var end = buffer.length;
56369 if (this.charLength) {
56370 // buffer the incomplete character bytes we got
56371 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
56372 end -= this.charReceived;
ab78acc6 56373 }
ebd8d4e8 56374
8b095871
IC
56375 charStr += buffer.toString(this.encoding, 0, end);
56376
56377 var end = charStr.length - 1;
56378 var charCode = charStr.charCodeAt(end);
56379 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
56380 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
56381 var size = this.surrogateSize;
56382 this.charLength += size;
56383 this.charReceived += size;
56384 this.charBuffer.copy(this.charBuffer, size, 0, size);
56385 buffer.copy(this.charBuffer, 0, 0, size);
56386 return charStr.substring(0, end);
ab78acc6 56387 }
ebd8d4e8 56388
8b095871
IC
56389 // or just emit the charStr
56390 return charStr;
56391};
ebd8d4e8 56392
8b095871
IC
56393// detectIncompleteChar determines if there is an incomplete UTF-8 character at
56394// the end of the given buffer. If so, it sets this.charLength to the byte
56395// length that character, and sets this.charReceived to the number of bytes
56396// that are available for this character.
56397StringDecoder.prototype.detectIncompleteChar = function(buffer) {
56398 // determine how many bytes we have to check at the end of this buffer
56399 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 56400
8b095871
IC
56401 // Figure out if one of the last i bytes of our buffer announces an
56402 // incomplete char.
56403 for (; i > 0; i--) {
56404 var c = buffer[buffer.length - i];
ebd8d4e8 56405
8b095871 56406 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 56407
8b095871
IC
56408 // 110XXXXX
56409 if (i == 1 && c >> 5 == 0x06) {
56410 this.charLength = 2;
56411 break;
ebd8d4e8 56412 }
ab78acc6 56413
8b095871
IC
56414 // 1110XXXX
56415 if (i <= 2 && c >> 4 == 0x0E) {
56416 this.charLength = 3;
56417 break;
56418 }
56419
56420 // 11110XXX
56421 if (i <= 3 && c >> 3 == 0x1E) {
56422 this.charLength = 4;
56423 break;
ebd8d4e8
IC
56424 }
56425 }
8b095871
IC
56426 this.charReceived = i;
56427};
ab78acc6 56428
8b095871
IC
56429StringDecoder.prototype.end = function(buffer) {
56430 var res = '';
56431 if (buffer && buffer.length)
56432 res = this.write(buffer);
ab78acc6 56433
8b095871
IC
56434 if (this.charReceived) {
56435 var cr = this.charReceived;
56436 var buf = this.charBuffer;
56437 var enc = this.encoding;
56438 res += buf.slice(0, cr).toString(enc);
56439 }
ab78acc6 56440
8b095871 56441 return res;
ab78acc6
IC
56442};
56443
8b095871
IC
56444function passThroughWrite(buffer) {
56445 return buffer.toString(this.encoding);
56446}
ab78acc6 56447
8b095871
IC
56448function utf16DetectIncompleteChar(buffer) {
56449 this.charReceived = buffer.length % 2;
56450 this.charLength = this.charReceived ? 2 : 0;
56451}
ab78acc6 56452
8b095871
IC
56453function base64DetectIncompleteChar(buffer) {
56454 this.charReceived = buffer.length % 3;
56455 this.charLength = this.charReceived ? 3 : 0;
56456}
ab78acc6 56457
8b095871
IC
56458},{"buffer":5}],27:[function(require,module,exports){
56459(function (global){
ab78acc6 56460
8b095871
IC
56461/**
56462 * Module exports.
56463 */
ebd8d4e8 56464
8b095871 56465module.exports = deprecate;
ebd8d4e8 56466
8b095871
IC
56467/**
56468 * Mark that a method should not be used.
56469 * Returns a modified function which warns once by default.
56470 *
56471 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
56472 *
56473 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
56474 * will throw an Error when invoked.
56475 *
56476 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
56477 * will invoke `console.trace()` instead of `console.error()`.
56478 *
56479 * @param {Function} fn - the function to deprecate
56480 * @param {String} msg - the string to print to the console when `fn` is invoked
56481 * @returns {Function} a new "deprecated" version of `fn`
56482 * @api public
56483 */
ebd8d4e8 56484
8b095871
IC
56485function deprecate (fn, msg) {
56486 if (config('noDeprecation')) {
56487 return fn;
56488 }
ebd8d4e8 56489
8b095871
IC
56490 var warned = false;
56491 function deprecated() {
56492 if (!warned) {
56493 if (config('throwDeprecation')) {
56494 throw new Error(msg);
56495 } else if (config('traceDeprecation')) {
56496 console.trace(msg);
56497 } else {
56498 console.warn(msg);
ab78acc6 56499 }
8b095871 56500 warned = true;
ab78acc6 56501 }
8b095871 56502 return fn.apply(this, arguments);
ebd8d4e8
IC
56503 }
56504
8b095871 56505 return deprecated;
ebd8d4e8
IC
56506}
56507
8b095871
IC
56508/**
56509 * Checks `localStorage` for boolean values for the given `name`.
56510 *
56511 * @param {String} name
56512 * @returns {Boolean}
56513 * @api private
56514 */
ebd8d4e8 56515
8b095871
IC
56516function config (name) {
56517 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
56518 try {
56519 if (!global.localStorage) return false;
56520 } catch (_) {
56521 return false;
ab78acc6 56522 }
8b095871
IC
56523 var val = global.localStorage[name];
56524 if (null == val) return false;
56525 return String(val).toLowerCase() === 'true';
ebd8d4e8 56526}
ebd8d4e8 56527
8b095871
IC
56528}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
56529},{}],28:[function(require,module,exports){
56530arguments[4][9][0].apply(exports,arguments)
56531},{"dup":9}],29:[function(require,module,exports){
56532module.exports = function isBuffer(arg) {
56533 return arg && typeof arg === 'object'
56534 && typeof arg.copy === 'function'
56535 && typeof arg.fill === 'function'
56536 && typeof arg.readUInt8 === 'function';
ebd8d4e8 56537}
8b095871
IC
56538},{}],30:[function(require,module,exports){
56539(function (process,global){
ab78acc6
IC
56540// Copyright Joyent, Inc. and other Node contributors.
56541//
56542// Permission is hereby granted, free of charge, to any person obtaining a
56543// copy of this software and associated documentation files (the
56544// "Software"), to deal in the Software without restriction, including
56545// without limitation the rights to use, copy, modify, merge, publish,
56546// distribute, sublicense, and/or sell copies of the Software, and to permit
56547// persons to whom the Software is furnished to do so, subject to the
56548// following conditions:
56549//
56550// The above copyright notice and this permission notice shall be included
56551// in all copies or substantial portions of the Software.
56552//
56553// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56554// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56555// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56556// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56557// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56558// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56559// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 56560
8b095871
IC
56561var formatRegExp = /%[sdj%]/g;
56562exports.format = function(f) {
56563 if (!isString(f)) {
56564 var objects = [];
56565 for (var i = 0; i < arguments.length; i++) {
56566 objects.push(inspect(arguments[i]));
56567 }
56568 return objects.join(' ');
56569 }
ebd8d4e8 56570
8b095871
IC
56571 var i = 1;
56572 var args = arguments;
56573 var len = args.length;
56574 var str = String(f).replace(formatRegExp, function(x) {
56575 if (x === '%%') return '%';
56576 if (i >= len) return x;
56577 switch (x) {
56578 case '%s': return String(args[i++]);
56579 case '%d': return Number(args[i++]);
56580 case '%j':
56581 try {
56582 return JSON.stringify(args[i++]);
56583 } catch (_) {
56584 return '[Circular]';
56585 }
56586 default:
56587 return x;
56588 }
56589 });
56590 for (var x = args[i]; i < len; x = args[++i]) {
56591 if (isNull(x) || !isObject(x)) {
56592 str += ' ' + x;
56593 } else {
56594 str += ' ' + inspect(x);
56595 }
56596 }
56597 return str;
56598};
ebd8d4e8 56599
ebd8d4e8 56600
8b095871
IC
56601// Mark that a method should not be used.
56602// Returns a modified function which warns once by default.
56603// If --no-deprecation is set, then it is a no-op.
56604exports.deprecate = function(fn, msg) {
56605 // Allow for deprecating things in the process of starting up.
56606 if (isUndefined(global.process)) {
56607 return function() {
56608 return exports.deprecate(fn, msg).apply(this, arguments);
56609 };
56610 }
56611
56612 if (process.noDeprecation === true) {
56613 return fn;
56614 }
56615
56616 var warned = false;
56617 function deprecated() {
56618 if (!warned) {
56619 if (process.throwDeprecation) {
56620 throw new Error(msg);
56621 } else if (process.traceDeprecation) {
56622 console.trace(msg);
56623 } else {
56624 console.error(msg);
56625 }
56626 warned = true;
56627 }
56628 return fn.apply(this, arguments);
56629 }
56630
56631 return deprecated;
56632};
ebd8d4e8 56633
ab78acc6 56634
8b095871
IC
56635var debugs = {};
56636var debugEnviron;
56637exports.debuglog = function(set) {
56638 if (isUndefined(debugEnviron))
56639 debugEnviron = process.env.NODE_DEBUG || '';
56640 set = set.toUpperCase();
56641 if (!debugs[set]) {
56642 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
56643 var pid = process.pid;
56644 debugs[set] = function() {
56645 var msg = exports.format.apply(exports, arguments);
56646 console.error('%s %d: %s', set, pid, msg);
56647 };
56648 } else {
56649 debugs[set] = function() {};
56650 }
56651 }
56652 return debugs[set];
56653};
ab78acc6
IC
56654
56655
8b095871
IC
56656/**
56657 * Echos the value of a value. Trys to print the value out
56658 * in the best way possible given the different types.
56659 *
56660 * @param {Object} obj The object to print out.
56661 * @param {Object} opts Optional options object that alters the output.
56662 */
56663/* legacy: obj, showHidden, depth, colors*/
56664function inspect(obj, opts) {
56665 // default options
56666 var ctx = {
56667 seen: [],
56668 stylize: stylizeNoColor
ab78acc6 56669 };
8b095871
IC
56670 // legacy...
56671 if (arguments.length >= 3) ctx.depth = arguments[2];
56672 if (arguments.length >= 4) ctx.colors = arguments[3];
56673 if (isBoolean(opts)) {
56674 // legacy...
56675 ctx.showHidden = opts;
56676 } else if (opts) {
56677 // got an "options" object
56678 exports._extend(ctx, opts);
56679 }
56680 // set default options
56681 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
56682 if (isUndefined(ctx.depth)) ctx.depth = 2;
56683 if (isUndefined(ctx.colors)) ctx.colors = false;
56684 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
56685 if (ctx.colors) ctx.stylize = stylizeWithColor;
56686 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 56687}
8b095871 56688exports.inspect = inspect;
ebd8d4e8 56689
ab78acc6 56690
8b095871
IC
56691// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
56692inspect.colors = {
56693 'bold' : [1, 22],
56694 'italic' : [3, 23],
56695 'underline' : [4, 24],
56696 'inverse' : [7, 27],
56697 'white' : [37, 39],
56698 'grey' : [90, 39],
56699 'black' : [30, 39],
56700 'blue' : [34, 39],
56701 'cyan' : [36, 39],
56702 'green' : [32, 39],
56703 'magenta' : [35, 39],
56704 'red' : [31, 39],
56705 'yellow' : [33, 39]
56706};
ab78acc6 56707
8b095871
IC
56708// Don't use 'blue' not visible on cmd.exe
56709inspect.styles = {
56710 'special': 'cyan',
56711 'number': 'yellow',
56712 'boolean': 'yellow',
56713 'undefined': 'grey',
56714 'null': 'bold',
56715 'string': 'green',
56716 'date': 'magenta',
56717 // "name": intentionally not styling
56718 'regexp': 'red'
56719};
ab78acc6 56720
ab78acc6 56721
8b095871
IC
56722function stylizeWithColor(str, styleType) {
56723 var style = inspect.styles[styleType];
ab78acc6 56724
8b095871
IC
56725 if (style) {
56726 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
56727 '\u001b[' + inspect.colors[style][1] + 'm';
56728 } else {
56729 return str;
ab78acc6 56730 }
ebd8d4e8 56731}
ebd8d4e8 56732
ab78acc6 56733
8b095871
IC
56734function stylizeNoColor(str, styleType) {
56735 return str;
56736}
ab78acc6 56737
ab78acc6 56738
8b095871
IC
56739function arrayToHash(array) {
56740 var hash = {};
ab78acc6 56741
8b095871
IC
56742 array.forEach(function(val, idx) {
56743 hash[val] = true;
ab78acc6 56744 });
ebd8d4e8 56745
8b095871
IC
56746 return hash;
56747}
ab78acc6 56748
ab78acc6 56749
8b095871
IC
56750function formatValue(ctx, value, recurseTimes) {
56751 // Provide a hook for user-specified inspect functions.
56752 // Check that value is an object with an inspect function on it
56753 if (ctx.customInspect &&
56754 value &&
56755 isFunction(value.inspect) &&
56756 // Filter out the util module, it's inspect function is special
56757 value.inspect !== exports.inspect &&
56758 // Also filter out any prototype objects using the circular check.
56759 !(value.constructor && value.constructor.prototype === value)) {
56760 var ret = value.inspect(recurseTimes, ctx);
56761 if (!isString(ret)) {
56762 ret = formatValue(ctx, ret, recurseTimes);
56763 }
56764 return ret;
ab78acc6 56765 }
ebd8d4e8 56766
8b095871
IC
56767 // Primitive types cannot have properties
56768 var primitive = formatPrimitive(ctx, value);
56769 if (primitive) {
56770 return primitive;
ab78acc6 56771 }
ebd8d4e8 56772
8b095871
IC
56773 // Look up the keys of the object.
56774 var keys = Object.keys(value);
56775 var visibleKeys = arrayToHash(keys);
ebd8d4e8 56776
8b095871
IC
56777 if (ctx.showHidden) {
56778 keys = Object.getOwnPropertyNames(value);
56779 }
ebd8d4e8 56780
8b095871
IC
56781 // IE doesn't make error fields non-enumerable
56782 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
56783 if (isError(value)
56784 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
56785 return formatError(value);
56786 }
ebd8d4e8 56787
8b095871
IC
56788 // Some type of object without properties can be shortcutted.
56789 if (keys.length === 0) {
56790 if (isFunction(value)) {
56791 var name = value.name ? ': ' + value.name : '';
56792 return ctx.stylize('[Function' + name + ']', 'special');
56793 }
56794 if (isRegExp(value)) {
56795 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
56796 }
56797 if (isDate(value)) {
56798 return ctx.stylize(Date.prototype.toString.call(value), 'date');
56799 }
56800 if (isError(value)) {
56801 return formatError(value);
56802 }
56803 }
ab78acc6 56804
8b095871 56805 var base = '', array = false, braces = ['{', '}'];
ab78acc6 56806
8b095871
IC
56807 // Make Array say that they are Array
56808 if (isArray(value)) {
56809 array = true;
56810 braces = ['[', ']'];
56811 }
ebd8d4e8 56812
8b095871
IC
56813 // Make functions say that they are functions
56814 if (isFunction(value)) {
56815 var n = value.name ? ': ' + value.name : '';
56816 base = ' [Function' + n + ']';
56817 }
ebd8d4e8 56818
8b095871
IC
56819 // Make RegExps say that they are RegExps
56820 if (isRegExp(value)) {
56821 base = ' ' + RegExp.prototype.toString.call(value);
56822 }
ebd8d4e8 56823
8b095871
IC
56824 // Make dates with properties first say the date
56825 if (isDate(value)) {
56826 base = ' ' + Date.prototype.toUTCString.call(value);
56827 }
ebd8d4e8 56828
8b095871
IC
56829 // Make error with message first say the error
56830 if (isError(value)) {
56831 base = ' ' + formatError(value);
56832 }
ebd8d4e8 56833
8b095871
IC
56834 if (keys.length === 0 && (!array || value.length == 0)) {
56835 return braces[0] + base + braces[1];
56836 }
ebd8d4e8 56837
8b095871
IC
56838 if (recurseTimes < 0) {
56839 if (isRegExp(value)) {
56840 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
56841 } else {
56842 return ctx.stylize('[Object]', 'special');
56843 }
56844 }
ebd8d4e8 56845
8b095871 56846 ctx.seen.push(value);
ebd8d4e8 56847
8b095871
IC
56848 var output;
56849 if (array) {
56850 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
56851 } else {
56852 output = keys.map(function(key) {
56853 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
56854 });
56855 }
ebd8d4e8 56856
8b095871 56857 ctx.seen.pop();
ebd8d4e8 56858
8b095871 56859 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
56860}
56861
ebd8d4e8 56862
8b095871
IC
56863function formatPrimitive(ctx, value) {
56864 if (isUndefined(value))
56865 return ctx.stylize('undefined', 'undefined');
56866 if (isString(value)) {
56867 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
56868 .replace(/'/g, "\\'")
56869 .replace(/\\"/g, '"') + '\'';
56870 return ctx.stylize(simple, 'string');
56871 }
56872 if (isNumber(value))
56873 return ctx.stylize('' + value, 'number');
56874 if (isBoolean(value))
56875 return ctx.stylize('' + value, 'boolean');
56876 // For some reason typeof null is "object", so special case here.
56877 if (isNull(value))
56878 return ctx.stylize('null', 'null');
56879}
ebd8d4e8 56880
ebd8d4e8 56881
8b095871
IC
56882function formatError(value) {
56883 return '[' + Error.prototype.toString.call(value) + ']';
56884}
ebd8d4e8 56885
ebd8d4e8 56886
8b095871
IC
56887function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
56888 var output = [];
56889 for (var i = 0, l = value.length; i < l; ++i) {
56890 if (hasOwnProperty(value, String(i))) {
56891 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
56892 String(i), true));
56893 } else {
56894 output.push('');
56895 }
56896 }
56897 keys.forEach(function(key) {
56898 if (!key.match(/^\d+$/)) {
56899 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
56900 key, true));
56901 }
56902 });
56903 return output;
56904}
ebd8d4e8 56905
ebd8d4e8 56906
8b095871
IC
56907function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
56908 var name, str, desc;
56909 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
56910 if (desc.get) {
56911 if (desc.set) {
56912 str = ctx.stylize('[Getter/Setter]', 'special');
56913 } else {
56914 str = ctx.stylize('[Getter]', 'special');
56915 }
56916 } else {
56917 if (desc.set) {
56918 str = ctx.stylize('[Setter]', 'special');
56919 }
56920 }
56921 if (!hasOwnProperty(visibleKeys, key)) {
56922 name = '[' + key + ']';
56923 }
56924 if (!str) {
56925 if (ctx.seen.indexOf(desc.value) < 0) {
56926 if (isNull(recurseTimes)) {
56927 str = formatValue(ctx, desc.value, null);
56928 } else {
56929 str = formatValue(ctx, desc.value, recurseTimes - 1);
56930 }
56931 if (str.indexOf('\n') > -1) {
56932 if (array) {
56933 str = str.split('\n').map(function(line) {
56934 return ' ' + line;
56935 }).join('\n').substr(2);
56936 } else {
56937 str = '\n' + str.split('\n').map(function(line) {
56938 return ' ' + line;
56939 }).join('\n');
56940 }
56941 }
56942 } else {
56943 str = ctx.stylize('[Circular]', 'special');
56944 }
56945 }
56946 if (isUndefined(name)) {
56947 if (array && key.match(/^\d+$/)) {
56948 return str;
56949 }
56950 name = JSON.stringify('' + key);
56951 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
56952 name = name.substr(1, name.length - 2);
56953 name = ctx.stylize(name, 'name');
56954 } else {
56955 name = name.replace(/'/g, "\\'")
56956 .replace(/\\"/g, '"')
56957 .replace(/(^"|"$)/g, "'");
56958 name = ctx.stylize(name, 'string');
56959 }
56960 }
ebd8d4e8 56961
8b095871
IC
56962 return name + ': ' + str;
56963}
ebd8d4e8 56964
ebd8d4e8 56965
8b095871
IC
56966function reduceToSingleString(output, base, braces) {
56967 var numLinesEst = 0;
56968 var length = output.reduce(function(prev, cur) {
56969 numLinesEst++;
56970 if (cur.indexOf('\n') >= 0) numLinesEst++;
56971 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
56972 }, 0);
ebd8d4e8 56973
8b095871
IC
56974 if (length > 60) {
56975 return braces[0] +
56976 (base === '' ? '' : base + '\n ') +
56977 ' ' +
56978 output.join(',\n ') +
56979 ' ' +
56980 braces[1];
56981 }
ebd8d4e8 56982
8b095871
IC
56983 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
56984}
ebd8d4e8 56985
ebd8d4e8 56986
8b095871
IC
56987// NOTE: These type checking functions intentionally don't use `instanceof`
56988// because it is fragile and can be easily faked with `Object.create()`.
56989function isArray(ar) {
56990 return Array.isArray(ar);
56991}
56992exports.isArray = isArray;
ebd8d4e8 56993
8b095871
IC
56994function isBoolean(arg) {
56995 return typeof arg === 'boolean';
56996}
56997exports.isBoolean = isBoolean;
ebd8d4e8 56998
8b095871
IC
56999function isNull(arg) {
57000 return arg === null;
57001}
57002exports.isNull = isNull;
ebd8d4e8 57003
8b095871
IC
57004function isNullOrUndefined(arg) {
57005 return arg == null;
ebd8d4e8 57006}
8b095871 57007exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 57008
8b095871
IC
57009function isNumber(arg) {
57010 return typeof arg === 'number';
57011}
57012exports.isNumber = isNumber;
ebd8d4e8 57013
8b095871
IC
57014function isString(arg) {
57015 return typeof arg === 'string';
57016}
57017exports.isString = isString;
ebd8d4e8 57018
8b095871
IC
57019function isSymbol(arg) {
57020 return typeof arg === 'symbol';
57021}
57022exports.isSymbol = isSymbol;
ebd8d4e8 57023
8b095871
IC
57024function isUndefined(arg) {
57025 return arg === void 0;
57026}
57027exports.isUndefined = isUndefined;
ebd8d4e8 57028
8b095871
IC
57029function isRegExp(re) {
57030 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 57031}
8b095871 57032exports.isRegExp = isRegExp;
ebd8d4e8 57033
8b095871
IC
57034function isObject(arg) {
57035 return typeof arg === 'object' && arg !== null;
57036}
57037exports.isObject = isObject;
ebd8d4e8 57038
8b095871
IC
57039function isDate(d) {
57040 return isObject(d) && objectToString(d) === '[object Date]';
57041}
57042exports.isDate = isDate;
ebd8d4e8 57043
8b095871
IC
57044function isError(e) {
57045 return isObject(e) &&
57046 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 57047}
8b095871 57048exports.isError = isError;
ebd8d4e8 57049
8b095871
IC
57050function isFunction(arg) {
57051 return typeof arg === 'function';
ebd8d4e8 57052}
8b095871 57053exports.isFunction = isFunction;
ebd8d4e8 57054
8b095871
IC
57055function isPrimitive(arg) {
57056 return arg === null ||
57057 typeof arg === 'boolean' ||
57058 typeof arg === 'number' ||
57059 typeof arg === 'string' ||
57060 typeof arg === 'symbol' || // ES6 symbol
57061 typeof arg === 'undefined';
57062}
57063exports.isPrimitive = isPrimitive;
ebd8d4e8 57064
8b095871 57065exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 57066
8b095871
IC
57067function objectToString(o) {
57068 return Object.prototype.toString.call(o);
57069}
ab78acc6 57070
ab78acc6 57071
8b095871
IC
57072function pad(n) {
57073 return n < 10 ? '0' + n.toString(10) : n.toString(10);
57074}
ebd8d4e8 57075
ab78acc6 57076
8b095871
IC
57077var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
57078 'Oct', 'Nov', 'Dec'];
ab78acc6 57079
8b095871
IC
57080// 26 Feb 16:19:34
57081function timestamp() {
57082 var d = new Date();
57083 var time = [pad(d.getHours()),
57084 pad(d.getMinutes()),
57085 pad(d.getSeconds())].join(':');
57086 return [d.getDate(), months[d.getMonth()], time].join(' ');
57087}
57088
57089
57090// log is just a thin wrapper to console.log that prepends a timestamp
57091exports.log = function() {
57092 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 57093};
ebd8d4e8 57094
ebd8d4e8 57095
8b095871
IC
57096/**
57097 * Inherit the prototype methods from one constructor into another.
57098 *
57099 * The Function.prototype.inherits from lang.js rewritten as a standalone
57100 * function (not on Function.prototype). NOTE: If this file is to be loaded
57101 * during bootstrapping this function needs to be rewritten using some native
57102 * functions as prototype setup using normal JavaScript does not work as
57103 * expected during bootstrapping (see mirror.js in r114903).
57104 *
57105 * @param {function} ctor Constructor function which needs to inherit the
57106 * prototype.
57107 * @param {function} superCtor Constructor function to inherit prototype from.
57108 */
57109exports.inherits = require('inherits');
ebd8d4e8 57110
8b095871
IC
57111exports._extend = function(origin, add) {
57112 // Don't do anything if add isn't an object
57113 if (!add || !isObject(add)) return origin;
57114
57115 var keys = Object.keys(add);
57116 var i = keys.length;
57117 while (i--) {
57118 origin[keys[i]] = add[keys[i]];
ebd8d4e8 57119 }
8b095871 57120 return origin;
ab78acc6 57121};
ebd8d4e8 57122
8b095871
IC
57123function hasOwnProperty(obj, prop) {
57124 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
57125}
57126
8b095871
IC
57127}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
57128},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
57129(function (Buffer){
57130const createKeccakHash = require('keccak')
57131const secp256k1 = require('secp256k1')
57132const assert = require('assert')
57133const rlp = require('rlp')
57134const BN = require('bn.js')
57135const createHash = require('create-hash')
57136Object.assign(exports, require('ethjs-util'))
ab78acc6 57137
8b095871
IC
57138/**
57139 * the max integer that this VM can handle (a ```BN```)
57140 * @var {BN} MAX_INTEGER
57141 */
57142exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 57143
8b095871
IC
57144/**
57145 * 2^256 (a ```BN```)
57146 * @var {BN} TWO_POW256
57147 */
57148exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 57149
8b095871
IC
57150/**
57151 * SHA3-256 hash of null (a ```String```)
57152 * @var {String} SHA3_NULL_S
57153 */
57154exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 57155
8b095871
IC
57156/**
57157 * SHA3-256 hash of null (a ```Buffer```)
57158 * @var {Buffer} SHA3_NULL
57159 */
57160exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 57161
8b095871
IC
57162/**
57163 * SHA3-256 of an RLP of an empty array (a ```String```)
57164 * @var {String} SHA3_RLP_ARRAY_S
57165 */
57166exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 57167
8b095871
IC
57168/**
57169 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
57170 * @var {Buffer} SHA3_RLP_ARRAY
57171 */
57172exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 57173
8b095871
IC
57174/**
57175 * SHA3-256 hash of the RLP of null (a ```String```)
57176 * @var {String} SHA3_RLP_S
57177 */
57178exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 57179
8b095871
IC
57180/**
57181 * SHA3-256 hash of the RLP of null (a ```Buffer```)
57182 * @var {Buffer} SHA3_RLP
57183 */
57184exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 57185
8b095871
IC
57186/**
57187 * [`BN`](https://github.com/indutny/bn.js)
57188 * @var {Function}
57189 */
57190exports.BN = BN
ebd8d4e8 57191
8b095871
IC
57192/**
57193 * [`rlp`](https://github.com/ethereumjs/rlp)
57194 * @var {Function}
57195 */
57196exports.rlp = rlp
ebd8d4e8 57197
8b095871
IC
57198/**
57199 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
57200 * @var {Object}
57201 */
57202exports.secp256k1 = secp256k1
ab78acc6 57203
8b095871
IC
57204/**
57205 * Returns a buffer filled with 0s
57206 * @method zeros
57207 * @param {Number} bytes the number of bytes the buffer should be
57208 * @return {Buffer}
57209 */
57210exports.zeros = function (bytes) {
57211 return Buffer.allocUnsafe(bytes).fill(0)
57212}
57213
57214/**
57215 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
57216 * Or it truncates the beginning if it exceeds.
57217 * @method lsetLength
57218 * @param {Buffer|Array} msg the value to pad
57219 * @param {Number} length the number of bytes the output should be
57220 * @param {Boolean} [right=false] whether to start padding form the left or right
57221 * @return {Buffer|Array}
57222 */
57223exports.setLengthLeft = exports.setLength = function (msg, length, right) {
57224 var buf = exports.zeros(length)
57225 msg = exports.toBuffer(msg)
57226 if (right) {
57227 if (msg.length < length) {
57228 msg.copy(buf)
57229 return buf
57230 }
57231 return msg.slice(0, length)
57232 } else {
57233 if (msg.length < length) {
57234 msg.copy(buf, length - msg.length)
57235 return buf
ebd8d4e8 57236 }
8b095871 57237 return msg.slice(-length)
ebd8d4e8
IC
57238 }
57239}
57240
8b095871
IC
57241/**
57242 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
57243 * Or it truncates the beginning if it exceeds.
57244 * @param {Buffer|Array} msg the value to pad
57245 * @param {Number} length the number of bytes the output should be
57246 * @return {Buffer|Array}
57247 */
57248exports.setLengthRight = function (msg, length) {
57249 return exports.setLength(msg, length, true)
ab78acc6
IC
57250}
57251
8b095871
IC
57252/**
57253 * Trims leading zeros from a `Buffer` or an `Array`
57254 * @param {Buffer|Array|String} a
57255 * @return {Buffer|Array|String}
57256 */
57257exports.unpad = exports.stripZeros = function (a) {
57258 a = exports.stripHexPrefix(a)
57259 var first = a[0]
57260 while (a.length > 0 && first.toString() === '0') {
57261 a = a.slice(1)
57262 first = a[0]
57263 }
57264 return a
57265}
57266/**
57267 * 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.
57268 * @param {*} v the value
57269 */
57270exports.toBuffer = function (v) {
57271 if (!Buffer.isBuffer(v)) {
57272 if (Array.isArray(v)) {
57273 v = Buffer.from(v)
57274 } else if (typeof v === 'string') {
57275 if (exports.isHexPrefixed(v)) {
57276 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
57277 } else {
57278 v = Buffer.from(v)
57279 }
57280 } else if (typeof v === 'number') {
57281 v = exports.intToBuffer(v)
57282 } else if (v === null || v === undefined) {
57283 v = Buffer.allocUnsafe(0)
57284 } else if (v.toArray) {
57285 // converts a BN to a Buffer
57286 v = Buffer.from(v.toArray())
57287 } else {
57288 throw new Error('invalid type')
57289 }
ebd8d4e8 57290 }
8b095871 57291 return v
ebd8d4e8
IC
57292}
57293
8b095871
IC
57294/**
57295 * Converts a `Buffer` to a `Number`
57296 * @param {Buffer} buf
57297 * @return {Number}
57298 * @throws If the input number exceeds 53 bits.
57299 */
57300exports.bufferToInt = function (buf) {
57301 return new BN(exports.toBuffer(buf)).toNumber()
57302}
ebd8d4e8 57303
8b095871
IC
57304/**
57305 * Converts a `Buffer` into a hex `String`
57306 * @param {Buffer} buf
57307 * @return {String}
57308 */
57309exports.bufferToHex = function (buf) {
57310 buf = exports.toBuffer(buf)
57311 return '0x' + buf.toString('hex')
57312}
ab78acc6 57313
8b095871
IC
57314/**
57315 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
57316 * @param {Buffer} num
57317 * @return {BN}
57318 */
57319exports.fromSigned = function (num) {
57320 return new BN(num).fromTwos(256)
57321}
ab78acc6 57322
8b095871
IC
57323/**
57324 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
57325 * @param {BN} num
57326 * @return {Buffer}
57327 */
57328exports.toUnsigned = function (num) {
57329 return Buffer.from(num.toTwos(256).toArray())
57330}
ab78acc6 57331
8b095871
IC
57332/**
57333 * Creates SHA-3 hash of the input
57334 * @param {Buffer|Array|String|Number} a the input data
57335 * @param {Number} [bits=256] the SHA width
57336 * @return {Buffer}
57337 */
57338exports.sha3 = function (a, bits) {
57339 a = exports.toBuffer(a)
57340 if (!bits) bits = 256
ab78acc6 57341
8b095871
IC
57342 return createKeccakHash('keccak' + bits).update(a).digest()
57343}
ab78acc6 57344
8b095871
IC
57345/**
57346 * Creates SHA256 hash of the input
57347 * @param {Buffer|Array|String|Number} a the input data
57348 * @return {Buffer}
57349 */
57350exports.sha256 = function (a) {
57351 a = exports.toBuffer(a)
57352 return createHash('sha256').update(a).digest()
57353}
ab78acc6 57354
8b095871
IC
57355/**
57356 * Creates RIPEMD160 hash of the input
57357 * @param {Buffer|Array|String|Number} a the input data
57358 * @param {Boolean} padded whether it should be padded to 256 bits or not
57359 * @return {Buffer}
57360 */
57361exports.ripemd160 = function (a, padded) {
57362 a = exports.toBuffer(a)
57363 var hash = createHash('rmd160').update(a).digest()
57364 if (padded === true) {
57365 return exports.setLength(hash, 32)
57366 } else {
57367 return hash
ebd8d4e8 57368 }
8b095871 57369}
ebd8d4e8 57370
8b095871
IC
57371/**
57372 * Creates SHA-3 hash of the RLP encoded version of the input
57373 * @param {Buffer|Array|String|Number} a the input data
57374 * @return {Buffer}
57375 */
57376exports.rlphash = function (a) {
57377 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
57378}
57379
8b095871
IC
57380/**
57381 * Checks if the private key satisfies the rules of the curve secp256k1.
57382 * @param {Buffer} privateKey
57383 * @return {Boolean}
57384 */
57385exports.isValidPrivate = function (privateKey) {
57386 return secp256k1.privateKeyVerify(privateKey)
57387}
ebd8d4e8 57388
8b095871
IC
57389/**
57390 * Checks if the public key satisfies the rules of the curve secp256k1
57391 * and the requirements of Ethereum.
57392 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
57393 * @param {Boolean} [sanitize=false] Accept public keys in other formats
57394 * @return {Boolean}
57395 */
57396exports.isValidPublic = function (publicKey, sanitize) {
57397 if (publicKey.length === 64) {
57398 // Convert to SEC1 for secp256k1
57399 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
57400 }
ebd8d4e8 57401
8b095871
IC
57402 if (!sanitize) {
57403 return false
57404 }
ebd8d4e8 57405
8b095871
IC
57406 return secp256k1.publicKeyVerify(publicKey)
57407}
ebd8d4e8 57408
8b095871
IC
57409/**
57410 * Returns the ethereum address of a given public key.
57411 * Accepts "Ethereum public keys" and SEC1 encoded keys.
57412 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
57413 * @param {Boolean} [sanitize=false] Accept public keys in other formats
57414 * @return {Buffer}
57415 */
57416exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
57417 pubKey = exports.toBuffer(pubKey)
57418 if (sanitize && (pubKey.length !== 64)) {
57419 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 57420 }
8b095871
IC
57421 assert(pubKey.length === 64)
57422 // Only take the lower 160bits of the hash
57423 return exports.sha3(pubKey).slice(-20)
57424}
ebd8d4e8 57425
8b095871
IC
57426/**
57427 * Returns the ethereum public key of a given private key
57428 * @param {Buffer} privateKey A private key must be 256 bits wide
57429 * @return {Buffer}
57430 */
57431var privateToPublic = exports.privateToPublic = function (privateKey) {
57432 privateKey = exports.toBuffer(privateKey)
57433 // skip the type flag and use the X, Y points
57434 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
57435}
ab78acc6 57436
8b095871
IC
57437/**
57438 * Converts a public key to the Ethereum format.
57439 * @param {Buffer} publicKey
57440 * @return {Buffer}
57441 */
57442exports.importPublic = function (publicKey) {
57443 publicKey = exports.toBuffer(publicKey)
57444 if (publicKey.length !== 64) {
57445 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 57446 }
8b095871
IC
57447 return publicKey
57448}
ab78acc6 57449
8b095871
IC
57450/**
57451 * ECDSA sign
57452 * @param {Buffer} msgHash
57453 * @param {Buffer} privateKey
57454 * @return {Object}
57455 */
57456exports.ecsign = function (msgHash, privateKey) {
57457 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 57458
8b095871
IC
57459 var ret = {}
57460 ret.r = sig.signature.slice(0, 32)
57461 ret.s = sig.signature.slice(32, 64)
57462 ret.v = sig.recovery + 27
57463 return ret
ebd8d4e8
IC
57464}
57465
8b095871
IC
57466/**
57467 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
57468 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
57469 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
57470 * used to produce the signature.
57471 * @param message
57472 * @returns {Buffer} hash
57473 */
57474exports.hashPersonalMessage = function (message) {
57475 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
57476 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
57477}
57478
8b095871
IC
57479/**
57480 * ECDSA public key recovery from signature
57481 * @param {Buffer} msgHash
57482 * @param {Number} v
57483 * @param {Buffer} r
57484 * @param {Buffer} s
57485 * @return {Buffer} publicKey
57486 */
57487exports.ecrecover = function (msgHash, v, r, s) {
57488 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
57489 var recovery = v - 27
57490 if (recovery !== 0 && recovery !== 1) {
57491 throw new Error('Invalid signature v value')
ab78acc6 57492 }
8b095871
IC
57493 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
57494 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 57495}
ebd8d4e8 57496
8b095871
IC
57497/**
57498 * Convert signature parameters into the format of `eth_sign` RPC method
57499 * @param {Number} v
57500 * @param {Buffer} r
57501 * @param {Buffer} s
57502 * @return {String} sig
57503 */
57504exports.toRpcSig = function (v, r, s) {
57505 // NOTE: with potential introduction of chainId this might need to be updated
57506 if (v !== 27 && v !== 28) {
57507 throw new Error('Invalid recovery id')
57508 }
57509
57510 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
57511 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
57512 return exports.bufferToHex(Buffer.concat([
57513 exports.setLengthLeft(r, 32),
57514 exports.setLengthLeft(s, 32),
57515 exports.toBuffer(v - 27)
57516 ]))
ebd8d4e8
IC
57517}
57518
8b095871
IC
57519/**
57520 * Convert signature format of the `eth_sign` RPC method to signature parameters
57521 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
57522 * @param {String} sig
57523 * @return {Object}
57524 */
57525exports.fromRpcSig = function (sig) {
57526 sig = exports.toBuffer(sig)
ebd8d4e8 57527
8b095871
IC
57528 // NOTE: with potential introduction of chainId this might need to be updated
57529 if (sig.length !== 65) {
57530 throw new Error('Invalid signature length')
57531 }
57532
57533 var v = sig[64]
57534 // support both versions of `eth_sign` responses
57535 if (v < 27) {
57536 v += 27
57537 }
57538
57539 return {
57540 v: v,
57541 r: sig.slice(0, 32),
57542 s: sig.slice(32, 64)
57543 }
ebd8d4e8
IC
57544}
57545
8b095871
IC
57546/**
57547 * Returns the ethereum address of a given private key
57548 * @param {Buffer} privateKey A private key must be 256 bits wide
57549 * @return {Buffer}
57550 */
57551exports.privateToAddress = function (privateKey) {
57552 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 57553}
ebd8d4e8 57554
8b095871
IC
57555/**
57556 * Checks if the address is a valid. Accepts checksummed addresses too
57557 * @param {String} address
57558 * @return {Boolean}
57559 */
57560exports.isValidAddress = function (address) {
57561 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 57562}
ebd8d4e8 57563
8b095871
IC
57564/**
57565 * Returns a checksummed address
57566 * @param {String} address
57567 * @return {String}
57568 */
57569exports.toChecksumAddress = function (address) {
57570 address = exports.stripHexPrefix(address).toLowerCase()
57571 var hash = exports.sha3(address).toString('hex')
57572 var ret = '0x'
57573
57574 for (var i = 0; i < address.length; i++) {
57575 if (parseInt(hash[i], 16) >= 8) {
57576 ret += address[i].toUpperCase()
57577 } else {
57578 ret += address[i]
57579 }
57580 }
57581
57582 return ret
ebd8d4e8
IC
57583}
57584
8b095871
IC
57585/**
57586 * Checks if the address is a valid checksummed address
57587 * @param {Buffer} address
57588 * @return {Boolean}
57589 */
57590exports.isValidChecksumAddress = function (address) {
57591 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 57592}
ebd8d4e8 57593
8b095871
IC
57594/**
57595 * Generates an address of a newly created contract
57596 * @param {Buffer} from the address which is creating this new address
57597 * @param {Buffer} nonce the nonce of the from account
57598 * @return {Buffer}
57599 */
57600exports.generateAddress = function (from, nonce) {
57601 from = exports.toBuffer(from)
57602 nonce = new BN(nonce)
57603
57604 if (nonce.isZero()) {
57605 // in RLP we want to encode null in the case of zero nonce
57606 // read the RLP documentation for an answer if you dare
57607 nonce = null
57608 } else {
57609 nonce = Buffer.from(nonce.toArray())
57610 }
57611
57612 // Only take the lower 160bits of the hash
57613 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 57614}
ebd8d4e8 57615
8b095871
IC
57616/**
57617 * Returns true if the supplied address belongs to a precompiled account
57618 * @param {Buffer|String} address
57619 * @return {Boolean}
57620 */
57621exports.isPrecompiled = function (address) {
57622 var a = exports.unpad(address)
57623 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
57624}
57625
8b095871
IC
57626/**
57627 * Adds "0x" to a given `String` if it does not already start with "0x"
57628 * @param {String} str
57629 * @return {String}
57630 */
57631exports.addHexPrefix = function (str) {
57632 if (typeof str !== 'string') {
57633 return str
57634 }
57635
57636 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
57637}
57638
8b095871
IC
57639/**
57640 * Validate ECDSA signature
57641 * @method isValidSignature
57642 * @param {Buffer} v
57643 * @param {Buffer} r
57644 * @param {Buffer} s
57645 * @param {Boolean} [homestead=true]
57646 * @return {Boolean}
57647 */
57648
57649exports.isValidSignature = function (v, r, s, homestead) {
57650 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
57651 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
57652
57653 if (r.length !== 32 || s.length !== 32) {
57654 return false
57655 }
57656
57657 if (v !== 27 && v !== 28) {
57658 return false
57659 }
57660
57661 r = new BN(r)
57662 s = new BN(s)
57663
57664 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
57665 return false
57666 }
57667
57668 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
57669 return false
57670 }
57671
57672 return true
ebd8d4e8
IC
57673}
57674
8b095871
IC
57675/**
57676 * Converts a `Buffer` or `Array` to JSON
57677 * @param {Buffer|Array} ba
57678 * @return {Array|String|null}
57679 */
57680exports.baToJSON = function (ba) {
57681 if (Buffer.isBuffer(ba)) {
57682 return '0x' + ba.toString('hex')
57683 } else if (ba instanceof Array) {
57684 var array = []
57685 for (var i = 0; i < ba.length; i++) {
57686 array.push(exports.baToJSON(ba[i]))
57687 }
57688 return array
57689 }
ab78acc6 57690}
ebd8d4e8 57691
8b095871
IC
57692/**
57693 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
57694 * @param {Object} self the `Object` to define properties on
57695 * @param {Array} fields an array fields to define. Fields can contain:
57696 * * `name` - the name of the properties
57697 * * `length` - the number of bytes the field can have
57698 * * `allowLess` - if the field can be less than the length
57699 * * `allowEmpty`
57700 * @param {*} data data to be validated against the definitions
57701 */
57702exports.defineProperties = function (self, fields, data) {
57703 self.raw = []
57704 self._fields = []
57705
57706 // attach the `toJSON`
57707 self.toJSON = function (label) {
57708 if (label) {
57709 var obj = {}
57710 self._fields.forEach(function (field) {
57711 obj[field] = '0x' + self[field].toString('hex')
57712 })
57713 return obj
57714 }
57715 return exports.baToJSON(this.raw)
57716 }
57717
57718 self.serialize = function serialize () {
57719 return rlp.encode(self.raw)
57720 }
57721
57722 fields.forEach(function (field, i) {
57723 self._fields.push(field.name)
57724 function getter () {
57725 return self.raw[i]
57726 }
57727 function setter (v) {
57728 v = exports.toBuffer(v)
57729
57730 if (v.toString('hex') === '00' && !field.allowZero) {
57731 v = Buffer.allocUnsafe(0)
57732 }
57733
57734 if (field.allowLess && field.length) {
57735 v = exports.stripZeros(v)
57736 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
57737 } else if (!(field.allowZero && v.length === 0) && field.length) {
57738 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
57739 }
57740
57741 self.raw[i] = v
57742 }
57743
57744 Object.defineProperty(self, field.name, {
57745 enumerable: true,
57746 configurable: true,
57747 get: getter,
57748 set: setter
57749 })
57750
57751 if (field.default) {
57752 self[field.name] = field.default
57753 }
57754
57755 // attach alias
57756 if (field.alias) {
57757 Object.defineProperty(self, field.alias, {
57758 enumerable: false,
57759 configurable: true,
57760 set: setter,
57761 get: getter
57762 })
57763 }
57764 })
57765
57766 // if the constuctor is passed data
57767 if (data) {
57768 if (typeof data === 'string') {
57769 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
57770 }
57771
57772 if (Buffer.isBuffer(data)) {
57773 data = rlp.decode(data)
57774 }
57775
57776 if (Array.isArray(data)) {
57777 if (data.length > self._fields.length) {
57778 throw (new Error('wrong number of fields in data'))
57779 }
57780
57781 // make sure all the items are buffers
57782 data.forEach(function (d, i) {
57783 self[self._fields[i]] = exports.toBuffer(d)
57784 })
57785 } else if (typeof data === 'object') {
57786 const keys = Object.keys(data)
57787 fields.forEach(function (field) {
57788 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
57789 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
57790 })
57791 } else {
57792 throw new Error('invalid data')
57793 }
57794 }
ab78acc6 57795}
ebd8d4e8 57796
8b095871
IC
57797}).call(this,require("buffer").Buffer)
57798},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
57799(function (Buffer){
57800// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
57801// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
57802// NOTE: SIGHASH byte ignored AND restricted, truncate before use
57803
57804function check (buffer) {
57805 if (buffer.length < 8) return false
57806 if (buffer.length > 72) return false
57807 if (buffer[0] !== 0x30) return false
57808 if (buffer[1] !== buffer.length - 2) return false
57809 if (buffer[2] !== 0x02) return false
57810
57811 var lenR = buffer[3]
57812 if (lenR === 0) return false
57813 if (5 + lenR >= buffer.length) return false
57814 if (buffer[4 + lenR] !== 0x02) return false
57815
57816 var lenS = buffer[5 + lenR]
57817 if (lenS === 0) return false
57818 if ((6 + lenR + lenS) !== buffer.length) return false
57819
57820 if (buffer[4] & 0x80) return false
57821 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
57822
57823 if (buffer[lenR + 6] & 0x80) return false
57824 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
57825 return true
ab78acc6 57826}
ab78acc6 57827
8b095871
IC
57828function decode (buffer) {
57829 if (buffer.length < 8) throw new Error('DER sequence length is too short')
57830 if (buffer.length > 72) throw new Error('DER sequence length is too long')
57831 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
57832 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
57833 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
57834
57835 var lenR = buffer[3]
57836 if (lenR === 0) throw new Error('R length is zero')
57837 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
57838 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
57839
57840 var lenS = buffer[5 + lenR]
57841 if (lenS === 0) throw new Error('S length is zero')
57842 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
57843
57844 if (buffer[4] & 0x80) throw new Error('R value is negative')
57845 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
57846
57847 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
57848 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
57849
57850 // non-BIP66 - extract R, S values
57851 return {
57852 r: buffer.slice(4, 4 + lenR),
57853 s: buffer.slice(6 + lenR)
57854 }
ebd8d4e8
IC
57855}
57856
8b095871
IC
57857/*
57858 * Expects r and s to be positive DER integers.
57859 *
57860 * The DER format uses the most significant bit as a sign bit (& 0x80).
57861 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
57862 *
57863 * Examples:
57864 *
57865 * 0 => 0x00
57866 * 1 => 0x01
57867 * -1 => 0xff
57868 * 127 => 0x7f
57869 * -127 => 0x81
57870 * 128 => 0x0080
57871 * -128 => 0x80
57872 * 255 => 0x00ff
57873 * -255 => 0xff01
57874 * 16300 => 0x3fac
57875 * -16300 => 0xc054
57876 * 62300 => 0x00f35c
57877 * -62300 => 0xff0ca4
57878*/
57879function encode (r, s) {
57880 var lenR = r.length
57881 var lenS = s.length
57882 if (lenR === 0) throw new Error('R length is zero')
57883 if (lenS === 0) throw new Error('S length is zero')
57884 if (lenR > 33) throw new Error('R length is too long')
57885 if (lenS > 33) throw new Error('S length is too long')
57886 if (r[0] & 0x80) throw new Error('R value is negative')
57887 if (s[0] & 0x80) throw new Error('S value is negative')
57888 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
57889 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
57890
57891 var signature = new Buffer(6 + lenR + lenS)
57892
57893 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
57894 signature[0] = 0x30
57895 signature[1] = signature.length - 2
57896 signature[2] = 0x02
57897 signature[3] = r.length
57898 r.copy(signature, 4)
57899 signature[4 + lenR] = 0x02
57900 signature[5 + lenR] = s.length
57901 s.copy(signature, 6 + lenR)
57902
57903 return signature
ebd8d4e8
IC
57904}
57905
8b095871
IC
57906module.exports = {
57907 check: check,
57908 decode: decode,
57909 encode: encode
ebd8d4e8 57910}
8b095871 57911
ab78acc6 57912}).call(this,require("buffer").Buffer)
8b095871
IC
57913},{"buffer":5}],33:[function(require,module,exports){
57914(function (module, exports) {
57915 'use strict';
ebd8d4e8 57916
8b095871
IC
57917 // Utils
57918 function assert (val, msg) {
57919 if (!val) throw new Error(msg || 'Assertion failed');
57920 }
ebd8d4e8 57921
8b095871
IC
57922 // Could use `inherits` module, but don't want to move from single file
57923 // architecture yet.
57924 function inherits (ctor, superCtor) {
57925 ctor.super_ = superCtor;
57926 var TempCtor = function () {};
57927 TempCtor.prototype = superCtor.prototype;
57928 ctor.prototype = new TempCtor();
57929 ctor.prototype.constructor = ctor;
57930 }
ebd8d4e8 57931
8b095871 57932 // BN
ab78acc6 57933
8b095871
IC
57934 function BN (number, base, endian) {
57935 if (BN.isBN(number)) {
57936 return number;
57937 }
ab78acc6 57938
8b095871
IC
57939 this.negative = 0;
57940 this.words = null;
57941 this.length = 0;
ab78acc6 57942
8b095871
IC
57943 // Reduction context
57944 this.red = null;
ab78acc6 57945
8b095871
IC
57946 if (number !== null) {
57947 if (base === 'le' || base === 'be') {
57948 endian = base;
57949 base = 10;
57950 }
ab78acc6 57951
8b095871
IC
57952 this._init(number || 0, base || 10, endian || 'be');
57953 }
57954 }
57955 if (typeof module === 'object') {
57956 module.exports = BN;
57957 } else {
57958 exports.BN = BN;
57959 }
ab78acc6 57960
8b095871
IC
57961 BN.BN = BN;
57962 BN.wordSize = 26;
ab78acc6 57963
8b095871
IC
57964 var Buffer;
57965 try {
57966 Buffer = require('buf' + 'fer').Buffer;
57967 } catch (e) {
57968 }
ab78acc6 57969
8b095871
IC
57970 BN.isBN = function isBN (num) {
57971 if (num instanceof BN) {
57972 return true;
57973 }
ab78acc6 57974
8b095871
IC
57975 return num !== null && typeof num === 'object' &&
57976 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
57977 };
ebd8d4e8 57978
8b095871
IC
57979 BN.max = function max (left, right) {
57980 if (left.cmp(right) > 0) return left;
57981 return right;
57982 };
ebd8d4e8 57983
8b095871
IC
57984 BN.min = function min (left, right) {
57985 if (left.cmp(right) < 0) return left;
57986 return right;
57987 };
57988
57989 BN.prototype._init = function init (number, base, endian) {
57990 if (typeof number === 'number') {
57991 return this._initNumber(number, base, endian);
ab78acc6 57992 }
ebd8d4e8 57993
8b095871
IC
57994 if (typeof number === 'object') {
57995 return this._initArray(number, base, endian);
57996 }
ebd8d4e8 57997
8b095871
IC
57998 if (base === 'hex') {
57999 base = 16;
58000 }
58001 assert(base === (base | 0) && base >= 2 && base <= 36);
58002
58003 number = number.toString().replace(/\s+/g, '');
58004 var start = 0;
58005 if (number[0] === '-') {
58006 start++;
58007 }
58008
58009 if (base === 16) {
58010 this._parseHex(number, start);
58011 } else {
58012 this._parseBase(number, base, start);
ab78acc6 58013 }
ebd8d4e8 58014
8b095871
IC
58015 if (number[0] === '-') {
58016 this.negative = 1;
58017 }
ebd8d4e8 58018
8b095871 58019 this.strip();
ebd8d4e8 58020
8b095871 58021 if (endian !== 'le') return;
ebd8d4e8 58022
8b095871
IC
58023 this._initArray(this.toArray(), base, endian);
58024 };
ebd8d4e8 58025
8b095871
IC
58026 BN.prototype._initNumber = function _initNumber (number, base, endian) {
58027 if (number < 0) {
58028 this.negative = 1;
58029 number = -number;
58030 }
58031 if (number < 0x4000000) {
58032 this.words = [ number & 0x3ffffff ];
58033 this.length = 1;
58034 } else if (number < 0x10000000000000) {
58035 this.words = [
58036 number & 0x3ffffff,
58037 (number / 0x4000000) & 0x3ffffff
58038 ];
58039 this.length = 2;
58040 } else {
58041 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
58042 this.words = [
58043 number & 0x3ffffff,
58044 (number / 0x4000000) & 0x3ffffff,
58045 1
58046 ];
58047 this.length = 3;
58048 }
ebd8d4e8 58049
8b095871 58050 if (endian !== 'le') return;
ebd8d4e8 58051
8b095871
IC
58052 // Reverse the bytes
58053 this._initArray(this.toArray(), base, endian);
58054 };
ebd8d4e8 58055
8b095871
IC
58056 BN.prototype._initArray = function _initArray (number, base, endian) {
58057 // Perhaps a Uint8Array
58058 assert(typeof number.length === 'number');
58059 if (number.length <= 0) {
58060 this.words = [ 0 ];
58061 this.length = 1;
58062 return this;
ab78acc6 58063 }
ebd8d4e8 58064
8b095871
IC
58065 this.length = Math.ceil(number.length / 3);
58066 this.words = new Array(this.length);
58067 for (var i = 0; i < this.length; i++) {
58068 this.words[i] = 0;
58069 }
ebd8d4e8 58070
8b095871
IC
58071 var j, w;
58072 var off = 0;
58073 if (endian === 'be') {
58074 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
58075 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
58076 this.words[j] |= (w << off) & 0x3ffffff;
58077 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
58078 off += 24;
58079 if (off >= 26) {
58080 off -= 26;
58081 j++;
58082 }
58083 }
58084 } else if (endian === 'le') {
58085 for (i = 0, j = 0; i < number.length; i += 3) {
58086 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
58087 this.words[j] |= (w << off) & 0x3ffffff;
58088 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
58089 off += 24;
58090 if (off >= 26) {
58091 off -= 26;
58092 j++;
58093 }
58094 }
58095 }
58096 return this.strip();
58097 };
ebd8d4e8 58098
8b095871
IC
58099 function parseHex (str, start, end) {
58100 var r = 0;
58101 var len = Math.min(str.length, end);
58102 for (var i = start; i < len; i++) {
58103 var c = str.charCodeAt(i) - 48;
ab78acc6 58104
8b095871 58105 r <<= 4;
ab78acc6 58106
8b095871
IC
58107 // 'a' - 'f'
58108 if (c >= 49 && c <= 54) {
58109 r |= c - 49 + 0xa;
ab78acc6 58110
8b095871
IC
58111 // 'A' - 'F'
58112 } else if (c >= 17 && c <= 22) {
58113 r |= c - 17 + 0xa;
ebd8d4e8 58114
8b095871
IC
58115 // '0' - '9'
58116 } else {
58117 r |= c & 0xf;
58118 }
58119 }
58120 return r;
58121 }
58122
58123 BN.prototype._parseHex = function _parseHex (number, start) {
58124 // Create possibly bigger array to ensure that it fits the number
58125 this.length = Math.ceil((number.length - start) / 6);
58126 this.words = new Array(this.length);
58127 for (var i = 0; i < this.length; i++) {
58128 this.words[i] = 0;
58129 }
58130
58131 var j, w;
58132 // Scan 24-bit chunks and add them to the number
58133 var off = 0;
58134 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
58135 w = parseHex(number, i, i + 6);
58136 this.words[j] |= (w << off) & 0x3ffffff;
58137 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
58138 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
58139 off += 24;
58140 if (off >= 26) {
58141 off -= 26;
58142 j++;
58143 }
58144 }
58145 if (i + 6 !== start) {
58146 w = parseHex(number, start, i + 6);
58147 this.words[j] |= (w << off) & 0x3ffffff;
58148 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
58149 }
58150 this.strip();
58151 };
ebd8d4e8 58152
8b095871
IC
58153 function parseBase (str, start, end, mul) {
58154 var r = 0;
58155 var len = Math.min(str.length, end);
58156 for (var i = start; i < len; i++) {
58157 var c = str.charCodeAt(i) - 48;
ebd8d4e8 58158
8b095871 58159 r *= mul;
ebd8d4e8 58160
8b095871
IC
58161 // 'a'
58162 if (c >= 49) {
58163 r += c - 49 + 0xa;
ebd8d4e8 58164
8b095871
IC
58165 // 'A'
58166 } else if (c >= 17) {
58167 r += c - 17 + 0xa;
ebd8d4e8 58168
8b095871
IC
58169 // '0' - '9'
58170 } else {
58171 r += c;
58172 }
58173 }
58174 return r;
58175 }
ebd8d4e8 58176
8b095871
IC
58177 BN.prototype._parseBase = function _parseBase (number, base, start) {
58178 // Initialize as zero
58179 this.words = [ 0 ];
58180 this.length = 1;
ebd8d4e8 58181
8b095871
IC
58182 // Find length of limb in base
58183 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
58184 limbLen++;
58185 }
58186 limbLen--;
58187 limbPow = (limbPow / base) | 0;
ebd8d4e8 58188
8b095871
IC
58189 var total = number.length - start;
58190 var mod = total % limbLen;
58191 var end = Math.min(total, total - mod) + start;
ebd8d4e8 58192
8b095871
IC
58193 var word = 0;
58194 for (var i = start; i < end; i += limbLen) {
58195 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 58196
8b095871
IC
58197 this.imuln(limbPow);
58198 if (this.words[0] + word < 0x4000000) {
58199 this.words[0] += word;
58200 } else {
58201 this._iaddn(word);
58202 }
58203 }
ebd8d4e8 58204
8b095871
IC
58205 if (mod !== 0) {
58206 var pow = 1;
58207 word = parseBase(number, i, number.length, base);
ebd8d4e8 58208
8b095871
IC
58209 for (i = 0; i < mod; i++) {
58210 pow *= base;
58211 }
ab78acc6 58212
8b095871
IC
58213 this.imuln(pow);
58214 if (this.words[0] + word < 0x4000000) {
58215 this.words[0] += word;
58216 } else {
58217 this._iaddn(word);
58218 }
58219 }
58220 };
ab78acc6 58221
8b095871
IC
58222 BN.prototype.copy = function copy (dest) {
58223 dest.words = new Array(this.length);
58224 for (var i = 0; i < this.length; i++) {
58225 dest.words[i] = this.words[i];
ab78acc6 58226 }
8b095871
IC
58227 dest.length = this.length;
58228 dest.negative = this.negative;
58229 dest.red = this.red;
58230 };
ab78acc6 58231
8b095871
IC
58232 BN.prototype.clone = function clone () {
58233 var r = new BN(null);
58234 this.copy(r);
58235 return r;
58236 };
ab78acc6 58237
8b095871
IC
58238 BN.prototype._expand = function _expand (size) {
58239 while (this.length < size) {
58240 this.words[this.length++] = 0;
58241 }
58242 return this;
58243 };
ab78acc6 58244
8b095871
IC
58245 // Remove leading `0` from `this`
58246 BN.prototype.strip = function strip () {
58247 while (this.length > 1 && this.words[this.length - 1] === 0) {
58248 this.length--;
ab78acc6 58249 }
8b095871
IC
58250 return this._normSign();
58251 };
ebd8d4e8 58252
8b095871
IC
58253 BN.prototype._normSign = function _normSign () {
58254 // -0 = 0
58255 if (this.length === 1 && this.words[0] === 0) {
58256 this.negative = 0;
ab78acc6 58257 }
8b095871
IC
58258 return this;
58259 };
ebd8d4e8 58260
8b095871
IC
58261 BN.prototype.inspect = function inspect () {
58262 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
58263 };
ebd8d4e8 58264
8b095871 58265 /*
ebd8d4e8 58266
8b095871
IC
58267 var zeros = [];
58268 var groupSizes = [];
58269 var groupBases = [];
ebd8d4e8 58270
8b095871
IC
58271 var s = '';
58272 var i = -1;
58273 while (++i < BN.wordSize) {
58274 zeros[i] = s;
58275 s += '0';
58276 }
58277 groupSizes[0] = 0;
58278 groupSizes[1] = 0;
58279 groupBases[0] = 0;
58280 groupBases[1] = 0;
58281 var base = 2 - 1;
58282 while (++base < 36 + 1) {
58283 var groupSize = 0;
58284 var groupBase = 1;
58285 while (groupBase < (1 << BN.wordSize) / base) {
58286 groupBase *= base;
58287 groupSize += 1;
58288 }
58289 groupSizes[base] = groupSize;
58290 groupBases[base] = groupBase;
ebd8d4e8
IC
58291 }
58292
8b095871 58293 */
ebd8d4e8 58294
8b095871
IC
58295 var zeros = [
58296 '',
58297 '0',
58298 '00',
58299 '000',
58300 '0000',
58301 '00000',
58302 '000000',
58303 '0000000',
58304 '00000000',
58305 '000000000',
58306 '0000000000',
58307 '00000000000',
58308 '000000000000',
58309 '0000000000000',
58310 '00000000000000',
58311 '000000000000000',
58312 '0000000000000000',
58313 '00000000000000000',
58314 '000000000000000000',
58315 '0000000000000000000',
58316 '00000000000000000000',
58317 '000000000000000000000',
58318 '0000000000000000000000',
58319 '00000000000000000000000',
58320 '000000000000000000000000',
58321 '0000000000000000000000000'
58322 ];
58323
58324 var groupSizes = [
58325 0, 0,
58326 25, 16, 12, 11, 10, 9, 8,
58327 8, 7, 7, 7, 7, 6, 6,
58328 6, 6, 6, 6, 6, 5, 5,
58329 5, 5, 5, 5, 5, 5, 5,
58330 5, 5, 5, 5, 5, 5, 5
58331 ];
58332
58333 var groupBases = [
58334 0, 0,
58335 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
58336 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
58337 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
58338 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
58339 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
58340 ];
58341
58342 BN.prototype.toString = function toString (base, padding) {
58343 base = base || 10;
58344 padding = padding | 0 || 1;
58345
58346 var out;
58347 if (base === 16 || base === 'hex') {
58348 out = '';
58349 var off = 0;
58350 var carry = 0;
58351 for (var i = 0; i < this.length; i++) {
58352 var w = this.words[i];
58353 var word = (((w << off) | carry) & 0xffffff).toString(16);
58354 carry = (w >>> (24 - off)) & 0xffffff;
58355 if (carry !== 0 || i !== this.length - 1) {
58356 out = zeros[6 - word.length] + word + out;
58357 } else {
58358 out = word + out;
58359 }
58360 off += 2;
58361 if (off >= 26) {
58362 off -= 26;
58363 i--;
58364 }
58365 }
58366 if (carry !== 0) {
58367 out = carry.toString(16) + out;
58368 }
58369 while (out.length % padding !== 0) {
58370 out = '0' + out;
58371 }
58372 if (this.negative !== 0) {
58373 out = '-' + out;
58374 }
58375 return out;
58376 }
58377
58378 if (base === (base | 0) && base >= 2 && base <= 36) {
58379 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
58380 var groupSize = groupSizes[base];
58381 // var groupBase = Math.pow(base, groupSize);
58382 var groupBase = groupBases[base];
58383 out = '';
58384 var c = this.clone();
58385 c.negative = 0;
58386 while (!c.isZero()) {
58387 var r = c.modn(groupBase).toString(base);
58388 c = c.idivn(groupBase);
58389
58390 if (!c.isZero()) {
58391 out = zeros[groupSize - r.length] + r + out;
58392 } else {
58393 out = r + out;
58394 }
58395 }
58396 if (this.isZero()) {
58397 out = '0' + out;
58398 }
58399 while (out.length % padding !== 0) {
58400 out = '0' + out;
58401 }
58402 if (this.negative !== 0) {
58403 out = '-' + out;
58404 }
58405 return out;
58406 }
58407
58408 assert(false, 'Base should be between 2 and 36');
58409 };
58410
58411 BN.prototype.toNumber = function toNumber () {
58412 var ret = this.words[0];
58413 if (this.length === 2) {
58414 ret += this.words[1] * 0x4000000;
58415 } else if (this.length === 3 && this.words[2] === 0x01) {
58416 // NOTE: at this stage it is known that the top bit is set
58417 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
58418 } else if (this.length > 2) {
58419 assert(false, 'Number can only safely store up to 53 bits');
58420 }
58421 return (this.negative !== 0) ? -ret : ret;
58422 };
58423
58424 BN.prototype.toJSON = function toJSON () {
58425 return this.toString(16);
58426 };
58427
58428 BN.prototype.toBuffer = function toBuffer (endian, length) {
58429 assert(typeof Buffer !== 'undefined');
58430 return this.toArrayLike(Buffer, endian, length);
58431 };
ebd8d4e8 58432
8b095871
IC
58433 BN.prototype.toArray = function toArray (endian, length) {
58434 return this.toArrayLike(Array, endian, length);
58435 };
ebd8d4e8 58436
8b095871
IC
58437 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
58438 var byteLength = this.byteLength();
58439 var reqLength = length || Math.max(1, byteLength);
58440 assert(byteLength <= reqLength, 'byte array longer than desired length');
58441 assert(reqLength > 0, 'Requested array length <= 0');
58442
58443 this.strip();
58444 var littleEndian = endian === 'le';
58445 var res = new ArrayType(reqLength);
58446
58447 var b, i;
58448 var q = this.clone();
58449 if (!littleEndian) {
58450 // Assume big-endian
58451 for (i = 0; i < reqLength - byteLength; i++) {
58452 res[i] = 0;
58453 }
ebd8d4e8 58454
8b095871
IC
58455 for (i = 0; !q.isZero(); i++) {
58456 b = q.andln(0xff);
58457 q.iushrn(8);
ebd8d4e8 58458
8b095871
IC
58459 res[reqLength - i - 1] = b;
58460 }
58461 } else {
58462 for (i = 0; !q.isZero(); i++) {
58463 b = q.andln(0xff);
58464 q.iushrn(8);
ebd8d4e8 58465
8b095871
IC
58466 res[i] = b;
58467 }
58468
58469 for (; i < reqLength; i++) {
58470 res[i] = 0;
58471 }
ab78acc6 58472 }
ebd8d4e8 58473
8b095871
IC
58474 return res;
58475 };
ebd8d4e8 58476
8b095871
IC
58477 if (Math.clz32) {
58478 BN.prototype._countBits = function _countBits (w) {
58479 return 32 - Math.clz32(w);
58480 };
58481 } else {
58482 BN.prototype._countBits = function _countBits (w) {
58483 var t = w;
58484 var r = 0;
58485 if (t >= 0x1000) {
58486 r += 13;
58487 t >>>= 13;
58488 }
58489 if (t >= 0x40) {
58490 r += 7;
58491 t >>>= 7;
58492 }
58493 if (t >= 0x8) {
58494 r += 4;
58495 t >>>= 4;
58496 }
58497 if (t >= 0x02) {
58498 r += 2;
58499 t >>>= 2;
58500 }
58501 return r + t;
58502 };
ebd8d4e8
IC
58503 }
58504
8b095871
IC
58505 BN.prototype._zeroBits = function _zeroBits (w) {
58506 // Short-cut
58507 if (w === 0) return 26;
ebd8d4e8 58508
8b095871
IC
58509 var t = w;
58510 var r = 0;
58511 if ((t & 0x1fff) === 0) {
58512 r += 13;
58513 t >>>= 13;
58514 }
58515 if ((t & 0x7f) === 0) {
58516 r += 7;
58517 t >>>= 7;
58518 }
58519 if ((t & 0xf) === 0) {
58520 r += 4;
58521 t >>>= 4;
58522 }
58523 if ((t & 0x3) === 0) {
58524 r += 2;
58525 t >>>= 2;
58526 }
58527 if ((t & 0x1) === 0) {
58528 r++;
58529 }
58530 return r;
58531 };
ebd8d4e8 58532
8b095871
IC
58533 // Return number of used bits in a BN
58534 BN.prototype.bitLength = function bitLength () {
58535 var w = this.words[this.length - 1];
58536 var hi = this._countBits(w);
58537 return (this.length - 1) * 26 + hi;
58538 };
ebd8d4e8 58539
8b095871
IC
58540 function toBitArray (num) {
58541 var w = new Array(num.bitLength());
ebd8d4e8 58542
8b095871
IC
58543 for (var bit = 0; bit < w.length; bit++) {
58544 var off = (bit / 26) | 0;
58545 var wbit = bit % 26;
ebd8d4e8 58546
8b095871 58547 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 58548 }
8b095871
IC
58549
58550 return w;
ab78acc6 58551 }
ebd8d4e8 58552
8b095871
IC
58553 // Number of trailing zero bits
58554 BN.prototype.zeroBits = function zeroBits () {
58555 if (this.isZero()) return 0;
58556
58557 var r = 0;
58558 for (var i = 0; i < this.length; i++) {
58559 var b = this._zeroBits(this.words[i]);
58560 r += b;
58561 if (b !== 26) break;
ab78acc6 58562 }
8b095871
IC
58563 return r;
58564 };
58565
58566 BN.prototype.byteLength = function byteLength () {
58567 return Math.ceil(this.bitLength() / 8);
58568 };
58569
58570 BN.prototype.toTwos = function toTwos (width) {
58571 if (this.negative !== 0) {
58572 return this.abs().inotn(width).iaddn(1);
ab78acc6 58573 }
8b095871
IC
58574 return this.clone();
58575 };
ebd8d4e8 58576
8b095871
IC
58577 BN.prototype.fromTwos = function fromTwos (width) {
58578 if (this.testn(width - 1)) {
58579 return this.notn(width).iaddn(1).ineg();
58580 }
58581 return this.clone();
58582 };
ebd8d4e8 58583
8b095871
IC
58584 BN.prototype.isNeg = function isNeg () {
58585 return this.negative !== 0;
58586 };
ebd8d4e8 58587
8b095871
IC
58588 // Return negative clone of `this`
58589 BN.prototype.neg = function neg () {
58590 return this.clone().ineg();
58591 };
ebd8d4e8 58592
8b095871
IC
58593 BN.prototype.ineg = function ineg () {
58594 if (!this.isZero()) {
58595 this.negative ^= 1;
ab78acc6 58596 }
ebd8d4e8 58597
8b095871
IC
58598 return this;
58599 };
ebd8d4e8 58600
8b095871
IC
58601 // Or `num` with `this` in-place
58602 BN.prototype.iuor = function iuor (num) {
58603 while (this.length < num.length) {
58604 this.words[this.length++] = 0;
58605 }
ebd8d4e8 58606
8b095871
IC
58607 for (var i = 0; i < num.length; i++) {
58608 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 58609 }
ebd8d4e8 58610
8b095871
IC
58611 return this.strip();
58612 };
ebd8d4e8 58613
8b095871
IC
58614 BN.prototype.ior = function ior (num) {
58615 assert((this.negative | num.negative) === 0);
58616 return this.iuor(num);
ab78acc6 58617 };
ebd8d4e8 58618
8b095871
IC
58619 // Or `num` with `this`
58620 BN.prototype.or = function or (num) {
58621 if (this.length > num.length) return this.clone().ior(num);
58622 return num.clone().ior(this);
58623 };
ebd8d4e8 58624
8b095871
IC
58625 BN.prototype.uor = function uor (num) {
58626 if (this.length > num.length) return this.clone().iuor(num);
58627 return num.clone().iuor(this);
58628 };
ebd8d4e8 58629
8b095871
IC
58630 // And `num` with `this` in-place
58631 BN.prototype.iuand = function iuand (num) {
58632 // b = min-length(num, this)
58633 var b;
58634 if (this.length > num.length) {
58635 b = num;
58636 } else {
58637 b = this;
58638 }
58639
58640 for (var i = 0; i < b.length; i++) {
58641 this.words[i] = this.words[i] & num.words[i];
58642 }
ebd8d4e8 58643
8b095871 58644 this.length = b.length;
ebd8d4e8 58645
8b095871
IC
58646 return this.strip();
58647 };
ebd8d4e8 58648
8b095871
IC
58649 BN.prototype.iand = function iand (num) {
58650 assert((this.negative | num.negative) === 0);
58651 return this.iuand(num);
58652 };
ebd8d4e8 58653
8b095871
IC
58654 // And `num` with `this`
58655 BN.prototype.and = function and (num) {
58656 if (this.length > num.length) return this.clone().iand(num);
58657 return num.clone().iand(this);
58658 };
ebd8d4e8 58659
8b095871
IC
58660 BN.prototype.uand = function uand (num) {
58661 if (this.length > num.length) return this.clone().iuand(num);
58662 return num.clone().iuand(this);
58663 };
ebd8d4e8 58664
8b095871
IC
58665 // Xor `num` with `this` in-place
58666 BN.prototype.iuxor = function iuxor (num) {
58667 // a.length > b.length
58668 var a;
58669 var b;
58670 if (this.length > num.length) {
58671 a = this;
58672 b = num;
58673 } else {
58674 a = num;
58675 b = this;
58676 }
ebd8d4e8 58677
8b095871
IC
58678 for (var i = 0; i < b.length; i++) {
58679 this.words[i] = a.words[i] ^ b.words[i];
58680 }
ebd8d4e8 58681
8b095871
IC
58682 if (this !== a) {
58683 for (; i < a.length; i++) {
58684 this.words[i] = a.words[i];
58685 }
58686 }
ebd8d4e8 58687
8b095871 58688 this.length = a.length;
ebd8d4e8 58689
8b095871
IC
58690 return this.strip();
58691 };
ebd8d4e8 58692
8b095871
IC
58693 BN.prototype.ixor = function ixor (num) {
58694 assert((this.negative | num.negative) === 0);
58695 return this.iuxor(num);
58696 };
ebd8d4e8 58697
8b095871
IC
58698 // Xor `num` with `this`
58699 BN.prototype.xor = function xor (num) {
58700 if (this.length > num.length) return this.clone().ixor(num);
58701 return num.clone().ixor(this);
58702 };
ebd8d4e8 58703
8b095871
IC
58704 BN.prototype.uxor = function uxor (num) {
58705 if (this.length > num.length) return this.clone().iuxor(num);
58706 return num.clone().iuxor(this);
58707 };
ebd8d4e8 58708
8b095871
IC
58709 // Not ``this`` with ``width`` bitwidth
58710 BN.prototype.inotn = function inotn (width) {
58711 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 58712
8b095871
IC
58713 var bytesNeeded = Math.ceil(width / 26) | 0;
58714 var bitsLeft = width % 26;
ebd8d4e8 58715
8b095871
IC
58716 // Extend the buffer with leading zeroes
58717 this._expand(bytesNeeded);
58718
58719 if (bitsLeft > 0) {
58720 bytesNeeded--;
ab78acc6 58721 }
8b095871
IC
58722
58723 // Handle complete words
58724 for (var i = 0; i < bytesNeeded; i++) {
58725 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 58726 }
8b095871
IC
58727
58728 // Handle the residue
58729 if (bitsLeft > 0) {
58730 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 58731 }
ebd8d4e8 58732
8b095871
IC
58733 // And remove leading zeroes
58734 return this.strip();
58735 };
ebd8d4e8 58736
8b095871
IC
58737 BN.prototype.notn = function notn (width) {
58738 return this.clone().inotn(width);
58739 };
ebd8d4e8 58740
8b095871
IC
58741 // Set `bit` of `this`
58742 BN.prototype.setn = function setn (bit, val) {
58743 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 58744
8b095871
IC
58745 var off = (bit / 26) | 0;
58746 var wbit = bit % 26;
ebd8d4e8 58747
8b095871 58748 this._expand(off + 1);
ebd8d4e8 58749
8b095871
IC
58750 if (val) {
58751 this.words[off] = this.words[off] | (1 << wbit);
58752 } else {
58753 this.words[off] = this.words[off] & ~(1 << wbit);
58754 }
ebd8d4e8 58755
8b095871
IC
58756 return this.strip();
58757 };
ebd8d4e8 58758
8b095871
IC
58759 // Add `num` to `this` in-place
58760 BN.prototype.iadd = function iadd (num) {
58761 var r;
58762
58763 // negative + positive
58764 if (this.negative !== 0 && num.negative === 0) {
58765 this.negative = 0;
58766 r = this.isub(num);
58767 this.negative ^= 1;
58768 return this._normSign();
58769
58770 // positive + negative
58771 } else if (this.negative === 0 && num.negative !== 0) {
58772 num.negative = 0;
58773 r = this.isub(num);
58774 num.negative = 1;
58775 return r._normSign();
58776 }
58777
58778 // a.length > b.length
58779 var a, b;
58780 if (this.length > num.length) {
58781 a = this;
58782 b = num;
ab78acc6 58783 } else {
8b095871
IC
58784 a = num;
58785 b = this;
58786 }
58787
58788 var carry = 0;
58789 for (var i = 0; i < b.length; i++) {
58790 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
58791 this.words[i] = r & 0x3ffffff;
58792 carry = r >>> 26;
58793 }
58794 for (; carry !== 0 && i < a.length; i++) {
58795 r = (a.words[i] | 0) + carry;
58796 this.words[i] = r & 0x3ffffff;
58797 carry = r >>> 26;
58798 }
58799
58800 this.length = a.length;
58801 if (carry !== 0) {
58802 this.words[this.length] = carry;
58803 this.length++;
58804 // Copy the rest of the words
58805 } else if (a !== this) {
58806 for (; i < a.length; i++) {
58807 this.words[i] = a.words[i];
58808 }
ab78acc6 58809 }
ebd8d4e8 58810
8b095871
IC
58811 return this;
58812 };
ebd8d4e8 58813
8b095871
IC
58814 // Add `num` to `this`
58815 BN.prototype.add = function add (num) {
58816 var res;
58817 if (num.negative !== 0 && this.negative === 0) {
58818 num.negative = 0;
58819 res = this.sub(num);
58820 num.negative ^= 1;
58821 return res;
58822 } else if (num.negative === 0 && this.negative !== 0) {
58823 this.negative = 0;
58824 res = num.sub(this);
58825 this.negative = 1;
58826 return res;
58827 }
ebd8d4e8 58828
8b095871 58829 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 58830
8b095871
IC
58831 return num.clone().iadd(this);
58832 };
ebd8d4e8 58833
8b095871
IC
58834 // Subtract `num` from `this` in-place
58835 BN.prototype.isub = function isub (num) {
58836 // this - (-num) = this + num
58837 if (num.negative !== 0) {
58838 num.negative = 0;
58839 var r = this.iadd(num);
58840 num.negative = 1;
58841 return r._normSign();
58842
58843 // -this - num = -(this + num)
58844 } else if (this.negative !== 0) {
58845 this.negative = 0;
58846 this.iadd(num);
58847 this.negative = 1;
58848 return this._normSign();
58849 }
58850
58851 // At this point both numbers are positive
58852 var cmp = this.cmp(num);
58853
58854 // Optimization - zeroify
58855 if (cmp === 0) {
58856 this.negative = 0;
58857 this.length = 1;
58858 this.words[0] = 0;
58859 return this;
58860 }
ebd8d4e8 58861
8b095871
IC
58862 // a > b
58863 var a, b;
58864 if (cmp > 0) {
58865 a = this;
58866 b = num;
58867 } else {
58868 a = num;
58869 b = this;
58870 }
ebd8d4e8 58871
8b095871
IC
58872 var carry = 0;
58873 for (var i = 0; i < b.length; i++) {
58874 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
58875 carry = r >> 26;
58876 this.words[i] = r & 0x3ffffff;
58877 }
58878 for (; carry !== 0 && i < a.length; i++) {
58879 r = (a.words[i] | 0) + carry;
58880 carry = r >> 26;
58881 this.words[i] = r & 0x3ffffff;
58882 }
ebd8d4e8 58883
8b095871
IC
58884 // Copy rest of the words
58885 if (carry === 0 && i < a.length && a !== this) {
58886 for (; i < a.length; i++) {
58887 this.words[i] = a.words[i];
58888 }
58889 }
ebd8d4e8 58890
8b095871 58891 this.length = Math.max(this.length, i);
ebd8d4e8 58892
8b095871
IC
58893 if (a !== this) {
58894 this.negative = 1;
ab78acc6 58895 }
ebd8d4e8 58896
8b095871
IC
58897 return this.strip();
58898 };
ebd8d4e8 58899
8b095871
IC
58900 // Subtract `num` from `this`
58901 BN.prototype.sub = function sub (num) {
58902 return this.clone().isub(num);
58903 };
58904
58905 function smallMulTo (self, num, out) {
58906 out.negative = num.negative ^ self.negative;
58907 var len = (self.length + num.length) | 0;
58908 out.length = len;
58909 len = (len - 1) | 0;
58910
58911 // Peel one iteration (compiler can't do it, because of code complexity)
58912 var a = self.words[0] | 0;
58913 var b = num.words[0] | 0;
58914 var r = a * b;
58915
58916 var lo = r & 0x3ffffff;
58917 var carry = (r / 0x4000000) | 0;
58918 out.words[0] = lo;
58919
58920 for (var k = 1; k < len; k++) {
58921 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
58922 // note that ncarry could be >= 0x3ffffff
58923 var ncarry = carry >>> 26;
58924 var rword = carry & 0x3ffffff;
58925 var maxJ = Math.min(k, num.length - 1);
58926 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
58927 var i = (k - j) | 0;
58928 a = self.words[i] | 0;
58929 b = num.words[j] | 0;
58930 r = a * b + rword;
58931 ncarry += (r / 0x4000000) | 0;
58932 rword = r & 0x3ffffff;
58933 }
58934 out.words[k] = rword | 0;
58935 carry = ncarry | 0;
58936 }
58937 if (carry !== 0) {
58938 out.words[k] = carry | 0;
ab78acc6 58939 } else {
8b095871
IC
58940 out.length--;
58941 }
58942
58943 return out.strip();
58944 }
58945
58946 // TODO(indutny): it may be reasonable to omit it for users who don't need
58947 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
58948 // multiplication (like elliptic secp256k1).
58949 var comb10MulTo = function comb10MulTo (self, num, out) {
58950 var a = self.words;
58951 var b = num.words;
58952 var o = out.words;
58953 var c = 0;
58954 var lo;
58955 var mid;
58956 var hi;
58957 var a0 = a[0] | 0;
58958 var al0 = a0 & 0x1fff;
58959 var ah0 = a0 >>> 13;
58960 var a1 = a[1] | 0;
58961 var al1 = a1 & 0x1fff;
58962 var ah1 = a1 >>> 13;
58963 var a2 = a[2] | 0;
58964 var al2 = a2 & 0x1fff;
58965 var ah2 = a2 >>> 13;
58966 var a3 = a[3] | 0;
58967 var al3 = a3 & 0x1fff;
58968 var ah3 = a3 >>> 13;
58969 var a4 = a[4] | 0;
58970 var al4 = a4 & 0x1fff;
58971 var ah4 = a4 >>> 13;
58972 var a5 = a[5] | 0;
58973 var al5 = a5 & 0x1fff;
58974 var ah5 = a5 >>> 13;
58975 var a6 = a[6] | 0;
58976 var al6 = a6 & 0x1fff;
58977 var ah6 = a6 >>> 13;
58978 var a7 = a[7] | 0;
58979 var al7 = a7 & 0x1fff;
58980 var ah7 = a7 >>> 13;
58981 var a8 = a[8] | 0;
58982 var al8 = a8 & 0x1fff;
58983 var ah8 = a8 >>> 13;
58984 var a9 = a[9] | 0;
58985 var al9 = a9 & 0x1fff;
58986 var ah9 = a9 >>> 13;
58987 var b0 = b[0] | 0;
58988 var bl0 = b0 & 0x1fff;
58989 var bh0 = b0 >>> 13;
58990 var b1 = b[1] | 0;
58991 var bl1 = b1 & 0x1fff;
58992 var bh1 = b1 >>> 13;
58993 var b2 = b[2] | 0;
58994 var bl2 = b2 & 0x1fff;
58995 var bh2 = b2 >>> 13;
58996 var b3 = b[3] | 0;
58997 var bl3 = b3 & 0x1fff;
58998 var bh3 = b3 >>> 13;
58999 var b4 = b[4] | 0;
59000 var bl4 = b4 & 0x1fff;
59001 var bh4 = b4 >>> 13;
59002 var b5 = b[5] | 0;
59003 var bl5 = b5 & 0x1fff;
59004 var bh5 = b5 >>> 13;
59005 var b6 = b[6] | 0;
59006 var bl6 = b6 & 0x1fff;
59007 var bh6 = b6 >>> 13;
59008 var b7 = b[7] | 0;
59009 var bl7 = b7 & 0x1fff;
59010 var bh7 = b7 >>> 13;
59011 var b8 = b[8] | 0;
59012 var bl8 = b8 & 0x1fff;
59013 var bh8 = b8 >>> 13;
59014 var b9 = b[9] | 0;
59015 var bl9 = b9 & 0x1fff;
59016 var bh9 = b9 >>> 13;
59017
59018 out.negative = self.negative ^ num.negative;
59019 out.length = 19;
59020 /* k = 0 */
59021 lo = Math.imul(al0, bl0);
59022 mid = Math.imul(al0, bh0);
59023 mid = (mid + Math.imul(ah0, bl0)) | 0;
59024 hi = Math.imul(ah0, bh0);
59025 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59026 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
59027 w0 &= 0x3ffffff;
59028 /* k = 1 */
59029 lo = Math.imul(al1, bl0);
59030 mid = Math.imul(al1, bh0);
59031 mid = (mid + Math.imul(ah1, bl0)) | 0;
59032 hi = Math.imul(ah1, bh0);
59033 lo = (lo + Math.imul(al0, bl1)) | 0;
59034 mid = (mid + Math.imul(al0, bh1)) | 0;
59035 mid = (mid + Math.imul(ah0, bl1)) | 0;
59036 hi = (hi + Math.imul(ah0, bh1)) | 0;
59037 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59038 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
59039 w1 &= 0x3ffffff;
59040 /* k = 2 */
59041 lo = Math.imul(al2, bl0);
59042 mid = Math.imul(al2, bh0);
59043 mid = (mid + Math.imul(ah2, bl0)) | 0;
59044 hi = Math.imul(ah2, bh0);
59045 lo = (lo + Math.imul(al1, bl1)) | 0;
59046 mid = (mid + Math.imul(al1, bh1)) | 0;
59047 mid = (mid + Math.imul(ah1, bl1)) | 0;
59048 hi = (hi + Math.imul(ah1, bh1)) | 0;
59049 lo = (lo + Math.imul(al0, bl2)) | 0;
59050 mid = (mid + Math.imul(al0, bh2)) | 0;
59051 mid = (mid + Math.imul(ah0, bl2)) | 0;
59052 hi = (hi + Math.imul(ah0, bh2)) | 0;
59053 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59054 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
59055 w2 &= 0x3ffffff;
59056 /* k = 3 */
59057 lo = Math.imul(al3, bl0);
59058 mid = Math.imul(al3, bh0);
59059 mid = (mid + Math.imul(ah3, bl0)) | 0;
59060 hi = Math.imul(ah3, bh0);
59061 lo = (lo + Math.imul(al2, bl1)) | 0;
59062 mid = (mid + Math.imul(al2, bh1)) | 0;
59063 mid = (mid + Math.imul(ah2, bl1)) | 0;
59064 hi = (hi + Math.imul(ah2, bh1)) | 0;
59065 lo = (lo + Math.imul(al1, bl2)) | 0;
59066 mid = (mid + Math.imul(al1, bh2)) | 0;
59067 mid = (mid + Math.imul(ah1, bl2)) | 0;
59068 hi = (hi + Math.imul(ah1, bh2)) | 0;
59069 lo = (lo + Math.imul(al0, bl3)) | 0;
59070 mid = (mid + Math.imul(al0, bh3)) | 0;
59071 mid = (mid + Math.imul(ah0, bl3)) | 0;
59072 hi = (hi + Math.imul(ah0, bh3)) | 0;
59073 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59074 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
59075 w3 &= 0x3ffffff;
59076 /* k = 4 */
59077 lo = Math.imul(al4, bl0);
59078 mid = Math.imul(al4, bh0);
59079 mid = (mid + Math.imul(ah4, bl0)) | 0;
59080 hi = Math.imul(ah4, bh0);
59081 lo = (lo + Math.imul(al3, bl1)) | 0;
59082 mid = (mid + Math.imul(al3, bh1)) | 0;
59083 mid = (mid + Math.imul(ah3, bl1)) | 0;
59084 hi = (hi + Math.imul(ah3, bh1)) | 0;
59085 lo = (lo + Math.imul(al2, bl2)) | 0;
59086 mid = (mid + Math.imul(al2, bh2)) | 0;
59087 mid = (mid + Math.imul(ah2, bl2)) | 0;
59088 hi = (hi + Math.imul(ah2, bh2)) | 0;
59089 lo = (lo + Math.imul(al1, bl3)) | 0;
59090 mid = (mid + Math.imul(al1, bh3)) | 0;
59091 mid = (mid + Math.imul(ah1, bl3)) | 0;
59092 hi = (hi + Math.imul(ah1, bh3)) | 0;
59093 lo = (lo + Math.imul(al0, bl4)) | 0;
59094 mid = (mid + Math.imul(al0, bh4)) | 0;
59095 mid = (mid + Math.imul(ah0, bl4)) | 0;
59096 hi = (hi + Math.imul(ah0, bh4)) | 0;
59097 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59098 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
59099 w4 &= 0x3ffffff;
59100 /* k = 5 */
59101 lo = Math.imul(al5, bl0);
59102 mid = Math.imul(al5, bh0);
59103 mid = (mid + Math.imul(ah5, bl0)) | 0;
59104 hi = Math.imul(ah5, bh0);
59105 lo = (lo + Math.imul(al4, bl1)) | 0;
59106 mid = (mid + Math.imul(al4, bh1)) | 0;
59107 mid = (mid + Math.imul(ah4, bl1)) | 0;
59108 hi = (hi + Math.imul(ah4, bh1)) | 0;
59109 lo = (lo + Math.imul(al3, bl2)) | 0;
59110 mid = (mid + Math.imul(al3, bh2)) | 0;
59111 mid = (mid + Math.imul(ah3, bl2)) | 0;
59112 hi = (hi + Math.imul(ah3, bh2)) | 0;
59113 lo = (lo + Math.imul(al2, bl3)) | 0;
59114 mid = (mid + Math.imul(al2, bh3)) | 0;
59115 mid = (mid + Math.imul(ah2, bl3)) | 0;
59116 hi = (hi + Math.imul(ah2, bh3)) | 0;
59117 lo = (lo + Math.imul(al1, bl4)) | 0;
59118 mid = (mid + Math.imul(al1, bh4)) | 0;
59119 mid = (mid + Math.imul(ah1, bl4)) | 0;
59120 hi = (hi + Math.imul(ah1, bh4)) | 0;
59121 lo = (lo + Math.imul(al0, bl5)) | 0;
59122 mid = (mid + Math.imul(al0, bh5)) | 0;
59123 mid = (mid + Math.imul(ah0, bl5)) | 0;
59124 hi = (hi + Math.imul(ah0, bh5)) | 0;
59125 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59126 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
59127 w5 &= 0x3ffffff;
59128 /* k = 6 */
59129 lo = Math.imul(al6, bl0);
59130 mid = Math.imul(al6, bh0);
59131 mid = (mid + Math.imul(ah6, bl0)) | 0;
59132 hi = Math.imul(ah6, bh0);
59133 lo = (lo + Math.imul(al5, bl1)) | 0;
59134 mid = (mid + Math.imul(al5, bh1)) | 0;
59135 mid = (mid + Math.imul(ah5, bl1)) | 0;
59136 hi = (hi + Math.imul(ah5, bh1)) | 0;
59137 lo = (lo + Math.imul(al4, bl2)) | 0;
59138 mid = (mid + Math.imul(al4, bh2)) | 0;
59139 mid = (mid + Math.imul(ah4, bl2)) | 0;
59140 hi = (hi + Math.imul(ah4, bh2)) | 0;
59141 lo = (lo + Math.imul(al3, bl3)) | 0;
59142 mid = (mid + Math.imul(al3, bh3)) | 0;
59143 mid = (mid + Math.imul(ah3, bl3)) | 0;
59144 hi = (hi + Math.imul(ah3, bh3)) | 0;
59145 lo = (lo + Math.imul(al2, bl4)) | 0;
59146 mid = (mid + Math.imul(al2, bh4)) | 0;
59147 mid = (mid + Math.imul(ah2, bl4)) | 0;
59148 hi = (hi + Math.imul(ah2, bh4)) | 0;
59149 lo = (lo + Math.imul(al1, bl5)) | 0;
59150 mid = (mid + Math.imul(al1, bh5)) | 0;
59151 mid = (mid + Math.imul(ah1, bl5)) | 0;
59152 hi = (hi + Math.imul(ah1, bh5)) | 0;
59153 lo = (lo + Math.imul(al0, bl6)) | 0;
59154 mid = (mid + Math.imul(al0, bh6)) | 0;
59155 mid = (mid + Math.imul(ah0, bl6)) | 0;
59156 hi = (hi + Math.imul(ah0, bh6)) | 0;
59157 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59158 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
59159 w6 &= 0x3ffffff;
59160 /* k = 7 */
59161 lo = Math.imul(al7, bl0);
59162 mid = Math.imul(al7, bh0);
59163 mid = (mid + Math.imul(ah7, bl0)) | 0;
59164 hi = Math.imul(ah7, bh0);
59165 lo = (lo + Math.imul(al6, bl1)) | 0;
59166 mid = (mid + Math.imul(al6, bh1)) | 0;
59167 mid = (mid + Math.imul(ah6, bl1)) | 0;
59168 hi = (hi + Math.imul(ah6, bh1)) | 0;
59169 lo = (lo + Math.imul(al5, bl2)) | 0;
59170 mid = (mid + Math.imul(al5, bh2)) | 0;
59171 mid = (mid + Math.imul(ah5, bl2)) | 0;
59172 hi = (hi + Math.imul(ah5, bh2)) | 0;
59173 lo = (lo + Math.imul(al4, bl3)) | 0;
59174 mid = (mid + Math.imul(al4, bh3)) | 0;
59175 mid = (mid + Math.imul(ah4, bl3)) | 0;
59176 hi = (hi + Math.imul(ah4, bh3)) | 0;
59177 lo = (lo + Math.imul(al3, bl4)) | 0;
59178 mid = (mid + Math.imul(al3, bh4)) | 0;
59179 mid = (mid + Math.imul(ah3, bl4)) | 0;
59180 hi = (hi + Math.imul(ah3, bh4)) | 0;
59181 lo = (lo + Math.imul(al2, bl5)) | 0;
59182 mid = (mid + Math.imul(al2, bh5)) | 0;
59183 mid = (mid + Math.imul(ah2, bl5)) | 0;
59184 hi = (hi + Math.imul(ah2, bh5)) | 0;
59185 lo = (lo + Math.imul(al1, bl6)) | 0;
59186 mid = (mid + Math.imul(al1, bh6)) | 0;
59187 mid = (mid + Math.imul(ah1, bl6)) | 0;
59188 hi = (hi + Math.imul(ah1, bh6)) | 0;
59189 lo = (lo + Math.imul(al0, bl7)) | 0;
59190 mid = (mid + Math.imul(al0, bh7)) | 0;
59191 mid = (mid + Math.imul(ah0, bl7)) | 0;
59192 hi = (hi + Math.imul(ah0, bh7)) | 0;
59193 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59194 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
59195 w7 &= 0x3ffffff;
59196 /* k = 8 */
59197 lo = Math.imul(al8, bl0);
59198 mid = Math.imul(al8, bh0);
59199 mid = (mid + Math.imul(ah8, bl0)) | 0;
59200 hi = Math.imul(ah8, bh0);
59201 lo = (lo + Math.imul(al7, bl1)) | 0;
59202 mid = (mid + Math.imul(al7, bh1)) | 0;
59203 mid = (mid + Math.imul(ah7, bl1)) | 0;
59204 hi = (hi + Math.imul(ah7, bh1)) | 0;
59205 lo = (lo + Math.imul(al6, bl2)) | 0;
59206 mid = (mid + Math.imul(al6, bh2)) | 0;
59207 mid = (mid + Math.imul(ah6, bl2)) | 0;
59208 hi = (hi + Math.imul(ah6, bh2)) | 0;
59209 lo = (lo + Math.imul(al5, bl3)) | 0;
59210 mid = (mid + Math.imul(al5, bh3)) | 0;
59211 mid = (mid + Math.imul(ah5, bl3)) | 0;
59212 hi = (hi + Math.imul(ah5, bh3)) | 0;
59213 lo = (lo + Math.imul(al4, bl4)) | 0;
59214 mid = (mid + Math.imul(al4, bh4)) | 0;
59215 mid = (mid + Math.imul(ah4, bl4)) | 0;
59216 hi = (hi + Math.imul(ah4, bh4)) | 0;
59217 lo = (lo + Math.imul(al3, bl5)) | 0;
59218 mid = (mid + Math.imul(al3, bh5)) | 0;
59219 mid = (mid + Math.imul(ah3, bl5)) | 0;
59220 hi = (hi + Math.imul(ah3, bh5)) | 0;
59221 lo = (lo + Math.imul(al2, bl6)) | 0;
59222 mid = (mid + Math.imul(al2, bh6)) | 0;
59223 mid = (mid + Math.imul(ah2, bl6)) | 0;
59224 hi = (hi + Math.imul(ah2, bh6)) | 0;
59225 lo = (lo + Math.imul(al1, bl7)) | 0;
59226 mid = (mid + Math.imul(al1, bh7)) | 0;
59227 mid = (mid + Math.imul(ah1, bl7)) | 0;
59228 hi = (hi + Math.imul(ah1, bh7)) | 0;
59229 lo = (lo + Math.imul(al0, bl8)) | 0;
59230 mid = (mid + Math.imul(al0, bh8)) | 0;
59231 mid = (mid + Math.imul(ah0, bl8)) | 0;
59232 hi = (hi + Math.imul(ah0, bh8)) | 0;
59233 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59234 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
59235 w8 &= 0x3ffffff;
59236 /* k = 9 */
59237 lo = Math.imul(al9, bl0);
59238 mid = Math.imul(al9, bh0);
59239 mid = (mid + Math.imul(ah9, bl0)) | 0;
59240 hi = Math.imul(ah9, bh0);
59241 lo = (lo + Math.imul(al8, bl1)) | 0;
59242 mid = (mid + Math.imul(al8, bh1)) | 0;
59243 mid = (mid + Math.imul(ah8, bl1)) | 0;
59244 hi = (hi + Math.imul(ah8, bh1)) | 0;
59245 lo = (lo + Math.imul(al7, bl2)) | 0;
59246 mid = (mid + Math.imul(al7, bh2)) | 0;
59247 mid = (mid + Math.imul(ah7, bl2)) | 0;
59248 hi = (hi + Math.imul(ah7, bh2)) | 0;
59249 lo = (lo + Math.imul(al6, bl3)) | 0;
59250 mid = (mid + Math.imul(al6, bh3)) | 0;
59251 mid = (mid + Math.imul(ah6, bl3)) | 0;
59252 hi = (hi + Math.imul(ah6, bh3)) | 0;
59253 lo = (lo + Math.imul(al5, bl4)) | 0;
59254 mid = (mid + Math.imul(al5, bh4)) | 0;
59255 mid = (mid + Math.imul(ah5, bl4)) | 0;
59256 hi = (hi + Math.imul(ah5, bh4)) | 0;
59257 lo = (lo + Math.imul(al4, bl5)) | 0;
59258 mid = (mid + Math.imul(al4, bh5)) | 0;
59259 mid = (mid + Math.imul(ah4, bl5)) | 0;
59260 hi = (hi + Math.imul(ah4, bh5)) | 0;
59261 lo = (lo + Math.imul(al3, bl6)) | 0;
59262 mid = (mid + Math.imul(al3, bh6)) | 0;
59263 mid = (mid + Math.imul(ah3, bl6)) | 0;
59264 hi = (hi + Math.imul(ah3, bh6)) | 0;
59265 lo = (lo + Math.imul(al2, bl7)) | 0;
59266 mid = (mid + Math.imul(al2, bh7)) | 0;
59267 mid = (mid + Math.imul(ah2, bl7)) | 0;
59268 hi = (hi + Math.imul(ah2, bh7)) | 0;
59269 lo = (lo + Math.imul(al1, bl8)) | 0;
59270 mid = (mid + Math.imul(al1, bh8)) | 0;
59271 mid = (mid + Math.imul(ah1, bl8)) | 0;
59272 hi = (hi + Math.imul(ah1, bh8)) | 0;
59273 lo = (lo + Math.imul(al0, bl9)) | 0;
59274 mid = (mid + Math.imul(al0, bh9)) | 0;
59275 mid = (mid + Math.imul(ah0, bl9)) | 0;
59276 hi = (hi + Math.imul(ah0, bh9)) | 0;
59277 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59278 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
59279 w9 &= 0x3ffffff;
59280 /* k = 10 */
59281 lo = Math.imul(al9, bl1);
59282 mid = Math.imul(al9, bh1);
59283 mid = (mid + Math.imul(ah9, bl1)) | 0;
59284 hi = Math.imul(ah9, bh1);
59285 lo = (lo + Math.imul(al8, bl2)) | 0;
59286 mid = (mid + Math.imul(al8, bh2)) | 0;
59287 mid = (mid + Math.imul(ah8, bl2)) | 0;
59288 hi = (hi + Math.imul(ah8, bh2)) | 0;
59289 lo = (lo + Math.imul(al7, bl3)) | 0;
59290 mid = (mid + Math.imul(al7, bh3)) | 0;
59291 mid = (mid + Math.imul(ah7, bl3)) | 0;
59292 hi = (hi + Math.imul(ah7, bh3)) | 0;
59293 lo = (lo + Math.imul(al6, bl4)) | 0;
59294 mid = (mid + Math.imul(al6, bh4)) | 0;
59295 mid = (mid + Math.imul(ah6, bl4)) | 0;
59296 hi = (hi + Math.imul(ah6, bh4)) | 0;
59297 lo = (lo + Math.imul(al5, bl5)) | 0;
59298 mid = (mid + Math.imul(al5, bh5)) | 0;
59299 mid = (mid + Math.imul(ah5, bl5)) | 0;
59300 hi = (hi + Math.imul(ah5, bh5)) | 0;
59301 lo = (lo + Math.imul(al4, bl6)) | 0;
59302 mid = (mid + Math.imul(al4, bh6)) | 0;
59303 mid = (mid + Math.imul(ah4, bl6)) | 0;
59304 hi = (hi + Math.imul(ah4, bh6)) | 0;
59305 lo = (lo + Math.imul(al3, bl7)) | 0;
59306 mid = (mid + Math.imul(al3, bh7)) | 0;
59307 mid = (mid + Math.imul(ah3, bl7)) | 0;
59308 hi = (hi + Math.imul(ah3, bh7)) | 0;
59309 lo = (lo + Math.imul(al2, bl8)) | 0;
59310 mid = (mid + Math.imul(al2, bh8)) | 0;
59311 mid = (mid + Math.imul(ah2, bl8)) | 0;
59312 hi = (hi + Math.imul(ah2, bh8)) | 0;
59313 lo = (lo + Math.imul(al1, bl9)) | 0;
59314 mid = (mid + Math.imul(al1, bh9)) | 0;
59315 mid = (mid + Math.imul(ah1, bl9)) | 0;
59316 hi = (hi + Math.imul(ah1, bh9)) | 0;
59317 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59318 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
59319 w10 &= 0x3ffffff;
59320 /* k = 11 */
59321 lo = Math.imul(al9, bl2);
59322 mid = Math.imul(al9, bh2);
59323 mid = (mid + Math.imul(ah9, bl2)) | 0;
59324 hi = Math.imul(ah9, bh2);
59325 lo = (lo + Math.imul(al8, bl3)) | 0;
59326 mid = (mid + Math.imul(al8, bh3)) | 0;
59327 mid = (mid + Math.imul(ah8, bl3)) | 0;
59328 hi = (hi + Math.imul(ah8, bh3)) | 0;
59329 lo = (lo + Math.imul(al7, bl4)) | 0;
59330 mid = (mid + Math.imul(al7, bh4)) | 0;
59331 mid = (mid + Math.imul(ah7, bl4)) | 0;
59332 hi = (hi + Math.imul(ah7, bh4)) | 0;
59333 lo = (lo + Math.imul(al6, bl5)) | 0;
59334 mid = (mid + Math.imul(al6, bh5)) | 0;
59335 mid = (mid + Math.imul(ah6, bl5)) | 0;
59336 hi = (hi + Math.imul(ah6, bh5)) | 0;
59337 lo = (lo + Math.imul(al5, bl6)) | 0;
59338 mid = (mid + Math.imul(al5, bh6)) | 0;
59339 mid = (mid + Math.imul(ah5, bl6)) | 0;
59340 hi = (hi + Math.imul(ah5, bh6)) | 0;
59341 lo = (lo + Math.imul(al4, bl7)) | 0;
59342 mid = (mid + Math.imul(al4, bh7)) | 0;
59343 mid = (mid + Math.imul(ah4, bl7)) | 0;
59344 hi = (hi + Math.imul(ah4, bh7)) | 0;
59345 lo = (lo + Math.imul(al3, bl8)) | 0;
59346 mid = (mid + Math.imul(al3, bh8)) | 0;
59347 mid = (mid + Math.imul(ah3, bl8)) | 0;
59348 hi = (hi + Math.imul(ah3, bh8)) | 0;
59349 lo = (lo + Math.imul(al2, bl9)) | 0;
59350 mid = (mid + Math.imul(al2, bh9)) | 0;
59351 mid = (mid + Math.imul(ah2, bl9)) | 0;
59352 hi = (hi + Math.imul(ah2, bh9)) | 0;
59353 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59354 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
59355 w11 &= 0x3ffffff;
59356 /* k = 12 */
59357 lo = Math.imul(al9, bl3);
59358 mid = Math.imul(al9, bh3);
59359 mid = (mid + Math.imul(ah9, bl3)) | 0;
59360 hi = Math.imul(ah9, bh3);
59361 lo = (lo + Math.imul(al8, bl4)) | 0;
59362 mid = (mid + Math.imul(al8, bh4)) | 0;
59363 mid = (mid + Math.imul(ah8, bl4)) | 0;
59364 hi = (hi + Math.imul(ah8, bh4)) | 0;
59365 lo = (lo + Math.imul(al7, bl5)) | 0;
59366 mid = (mid + Math.imul(al7, bh5)) | 0;
59367 mid = (mid + Math.imul(ah7, bl5)) | 0;
59368 hi = (hi + Math.imul(ah7, bh5)) | 0;
59369 lo = (lo + Math.imul(al6, bl6)) | 0;
59370 mid = (mid + Math.imul(al6, bh6)) | 0;
59371 mid = (mid + Math.imul(ah6, bl6)) | 0;
59372 hi = (hi + Math.imul(ah6, bh6)) | 0;
59373 lo = (lo + Math.imul(al5, bl7)) | 0;
59374 mid = (mid + Math.imul(al5, bh7)) | 0;
59375 mid = (mid + Math.imul(ah5, bl7)) | 0;
59376 hi = (hi + Math.imul(ah5, bh7)) | 0;
59377 lo = (lo + Math.imul(al4, bl8)) | 0;
59378 mid = (mid + Math.imul(al4, bh8)) | 0;
59379 mid = (mid + Math.imul(ah4, bl8)) | 0;
59380 hi = (hi + Math.imul(ah4, bh8)) | 0;
59381 lo = (lo + Math.imul(al3, bl9)) | 0;
59382 mid = (mid + Math.imul(al3, bh9)) | 0;
59383 mid = (mid + Math.imul(ah3, bl9)) | 0;
59384 hi = (hi + Math.imul(ah3, bh9)) | 0;
59385 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59386 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
59387 w12 &= 0x3ffffff;
59388 /* k = 13 */
59389 lo = Math.imul(al9, bl4);
59390 mid = Math.imul(al9, bh4);
59391 mid = (mid + Math.imul(ah9, bl4)) | 0;
59392 hi = Math.imul(ah9, bh4);
59393 lo = (lo + Math.imul(al8, bl5)) | 0;
59394 mid = (mid + Math.imul(al8, bh5)) | 0;
59395 mid = (mid + Math.imul(ah8, bl5)) | 0;
59396 hi = (hi + Math.imul(ah8, bh5)) | 0;
59397 lo = (lo + Math.imul(al7, bl6)) | 0;
59398 mid = (mid + Math.imul(al7, bh6)) | 0;
59399 mid = (mid + Math.imul(ah7, bl6)) | 0;
59400 hi = (hi + Math.imul(ah7, bh6)) | 0;
59401 lo = (lo + Math.imul(al6, bl7)) | 0;
59402 mid = (mid + Math.imul(al6, bh7)) | 0;
59403 mid = (mid + Math.imul(ah6, bl7)) | 0;
59404 hi = (hi + Math.imul(ah6, bh7)) | 0;
59405 lo = (lo + Math.imul(al5, bl8)) | 0;
59406 mid = (mid + Math.imul(al5, bh8)) | 0;
59407 mid = (mid + Math.imul(ah5, bl8)) | 0;
59408 hi = (hi + Math.imul(ah5, bh8)) | 0;
59409 lo = (lo + Math.imul(al4, bl9)) | 0;
59410 mid = (mid + Math.imul(al4, bh9)) | 0;
59411 mid = (mid + Math.imul(ah4, bl9)) | 0;
59412 hi = (hi + Math.imul(ah4, bh9)) | 0;
59413 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59414 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
59415 w13 &= 0x3ffffff;
59416 /* k = 14 */
59417 lo = Math.imul(al9, bl5);
59418 mid = Math.imul(al9, bh5);
59419 mid = (mid + Math.imul(ah9, bl5)) | 0;
59420 hi = Math.imul(ah9, bh5);
59421 lo = (lo + Math.imul(al8, bl6)) | 0;
59422 mid = (mid + Math.imul(al8, bh6)) | 0;
59423 mid = (mid + Math.imul(ah8, bl6)) | 0;
59424 hi = (hi + Math.imul(ah8, bh6)) | 0;
59425 lo = (lo + Math.imul(al7, bl7)) | 0;
59426 mid = (mid + Math.imul(al7, bh7)) | 0;
59427 mid = (mid + Math.imul(ah7, bl7)) | 0;
59428 hi = (hi + Math.imul(ah7, bh7)) | 0;
59429 lo = (lo + Math.imul(al6, bl8)) | 0;
59430 mid = (mid + Math.imul(al6, bh8)) | 0;
59431 mid = (mid + Math.imul(ah6, bl8)) | 0;
59432 hi = (hi + Math.imul(ah6, bh8)) | 0;
59433 lo = (lo + Math.imul(al5, bl9)) | 0;
59434 mid = (mid + Math.imul(al5, bh9)) | 0;
59435 mid = (mid + Math.imul(ah5, bl9)) | 0;
59436 hi = (hi + Math.imul(ah5, bh9)) | 0;
59437 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59438 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
59439 w14 &= 0x3ffffff;
59440 /* k = 15 */
59441 lo = Math.imul(al9, bl6);
59442 mid = Math.imul(al9, bh6);
59443 mid = (mid + Math.imul(ah9, bl6)) | 0;
59444 hi = Math.imul(ah9, bh6);
59445 lo = (lo + Math.imul(al8, bl7)) | 0;
59446 mid = (mid + Math.imul(al8, bh7)) | 0;
59447 mid = (mid + Math.imul(ah8, bl7)) | 0;
59448 hi = (hi + Math.imul(ah8, bh7)) | 0;
59449 lo = (lo + Math.imul(al7, bl8)) | 0;
59450 mid = (mid + Math.imul(al7, bh8)) | 0;
59451 mid = (mid + Math.imul(ah7, bl8)) | 0;
59452 hi = (hi + Math.imul(ah7, bh8)) | 0;
59453 lo = (lo + Math.imul(al6, bl9)) | 0;
59454 mid = (mid + Math.imul(al6, bh9)) | 0;
59455 mid = (mid + Math.imul(ah6, bl9)) | 0;
59456 hi = (hi + Math.imul(ah6, bh9)) | 0;
59457 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59458 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
59459 w15 &= 0x3ffffff;
59460 /* k = 16 */
59461 lo = Math.imul(al9, bl7);
59462 mid = Math.imul(al9, bh7);
59463 mid = (mid + Math.imul(ah9, bl7)) | 0;
59464 hi = Math.imul(ah9, bh7);
59465 lo = (lo + Math.imul(al8, bl8)) | 0;
59466 mid = (mid + Math.imul(al8, bh8)) | 0;
59467 mid = (mid + Math.imul(ah8, bl8)) | 0;
59468 hi = (hi + Math.imul(ah8, bh8)) | 0;
59469 lo = (lo + Math.imul(al7, bl9)) | 0;
59470 mid = (mid + Math.imul(al7, bh9)) | 0;
59471 mid = (mid + Math.imul(ah7, bl9)) | 0;
59472 hi = (hi + Math.imul(ah7, bh9)) | 0;
59473 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59474 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
59475 w16 &= 0x3ffffff;
59476 /* k = 17 */
59477 lo = Math.imul(al9, bl8);
59478 mid = Math.imul(al9, bh8);
59479 mid = (mid + Math.imul(ah9, bl8)) | 0;
59480 hi = Math.imul(ah9, bh8);
59481 lo = (lo + Math.imul(al8, bl9)) | 0;
59482 mid = (mid + Math.imul(al8, bh9)) | 0;
59483 mid = (mid + Math.imul(ah8, bl9)) | 0;
59484 hi = (hi + Math.imul(ah8, bh9)) | 0;
59485 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59486 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
59487 w17 &= 0x3ffffff;
59488 /* k = 18 */
59489 lo = Math.imul(al9, bl9);
59490 mid = Math.imul(al9, bh9);
59491 mid = (mid + Math.imul(ah9, bl9)) | 0;
59492 hi = Math.imul(ah9, bh9);
59493 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59494 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
59495 w18 &= 0x3ffffff;
59496 o[0] = w0;
59497 o[1] = w1;
59498 o[2] = w2;
59499 o[3] = w3;
59500 o[4] = w4;
59501 o[5] = w5;
59502 o[6] = w6;
59503 o[7] = w7;
59504 o[8] = w8;
59505 o[9] = w9;
59506 o[10] = w10;
59507 o[11] = w11;
59508 o[12] = w12;
59509 o[13] = w13;
59510 o[14] = w14;
59511 o[15] = w15;
59512 o[16] = w16;
59513 o[17] = w17;
59514 o[18] = w18;
59515 if (c !== 0) {
59516 o[19] = c;
59517 out.length++;
ab78acc6 59518 }
8b095871
IC
59519 return out;
59520 };
59521
59522 // Polyfill comb
59523 if (!Math.imul) {
59524 comb10MulTo = smallMulTo;
59525 }
59526
59527 function bigMulTo (self, num, out) {
59528 out.negative = num.negative ^ self.negative;
59529 out.length = self.length + num.length;
59530
59531 var carry = 0;
59532 var hncarry = 0;
59533 for (var k = 0; k < out.length - 1; k++) {
59534 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
59535 // note that ncarry could be >= 0x3ffffff
59536 var ncarry = hncarry;
59537 hncarry = 0;
59538 var rword = carry & 0x3ffffff;
59539 var maxJ = Math.min(k, num.length - 1);
59540 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
59541 var i = k - j;
59542 var a = self.words[i] | 0;
59543 var b = num.words[j] | 0;
59544 var r = a * b;
59545
59546 var lo = r & 0x3ffffff;
59547 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
59548 lo = (lo + rword) | 0;
59549 rword = lo & 0x3ffffff;
59550 ncarry = (ncarry + (lo >>> 26)) | 0;
59551
59552 hncarry += ncarry >>> 26;
59553 ncarry &= 0x3ffffff;
59554 }
59555 out.words[k] = rword;
59556 carry = ncarry;
59557 ncarry = hncarry;
59558 }
59559 if (carry !== 0) {
59560 out.words[k] = carry;
59561 } else {
59562 out.length--;
ab78acc6 59563 }
8b095871
IC
59564
59565 return out.strip();
ab78acc6 59566 }
8b095871
IC
59567
59568 function jumboMulTo (self, num, out) {
59569 var fftm = new FFTM();
59570 return fftm.mulp(self, num, out);
ab78acc6 59571 }
8b095871
IC
59572
59573 BN.prototype.mulTo = function mulTo (num, out) {
59574 var res;
59575 var len = this.length + num.length;
59576 if (this.length === 10 && num.length === 10) {
59577 res = comb10MulTo(this, num, out);
59578 } else if (len < 63) {
59579 res = smallMulTo(this, num, out);
59580 } else if (len < 1024) {
59581 res = bigMulTo(this, num, out);
ab78acc6 59582 } else {
8b095871 59583 res = jumboMulTo(this, num, out);
ab78acc6 59584 }
8b095871
IC
59585
59586 return res;
59587 };
59588
59589 // Cooley-Tukey algorithm for FFT
59590 // slightly revisited to rely on looping instead of recursion
59591
59592 function FFTM (x, y) {
59593 this.x = x;
59594 this.y = y;
ab78acc6 59595 }
8b095871
IC
59596
59597 FFTM.prototype.makeRBT = function makeRBT (N) {
59598 var t = new Array(N);
59599 var l = BN.prototype._countBits(N) - 1;
59600 for (var i = 0; i < N; i++) {
59601 t[i] = this.revBin(i, l, N);
59602 }
59603
59604 return t;
59605 };
59606
59607 // Returns binary-reversed representation of `x`
59608 FFTM.prototype.revBin = function revBin (x, l, N) {
59609 if (x === 0 || x === N - 1) return x;
59610
59611 var rb = 0;
59612 for (var i = 0; i < l; i++) {
59613 rb |= (x & 1) << (l - i - 1);
59614 x >>= 1;
59615 }
59616
59617 return rb;
59618 };
59619
59620 // Performs "tweedling" phase, therefore 'emulating'
59621 // behaviour of the recursive algorithm
59622 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
59623 for (var i = 0; i < N; i++) {
59624 rtws[i] = rws[rbt[i]];
59625 itws[i] = iws[rbt[i]];
59626 }
59627 };
59628
59629 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
59630 this.permute(rbt, rws, iws, rtws, itws, N);
59631
59632 for (var s = 1; s < N; s <<= 1) {
59633 var l = s << 1;
59634
59635 var rtwdf = Math.cos(2 * Math.PI / l);
59636 var itwdf = Math.sin(2 * Math.PI / l);
59637
59638 for (var p = 0; p < N; p += l) {
59639 var rtwdf_ = rtwdf;
59640 var itwdf_ = itwdf;
59641
59642 for (var j = 0; j < s; j++) {
59643 var re = rtws[p + j];
59644 var ie = itws[p + j];
59645
59646 var ro = rtws[p + j + s];
59647 var io = itws[p + j + s];
59648
59649 var rx = rtwdf_ * ro - itwdf_ * io;
59650
59651 io = rtwdf_ * io + itwdf_ * ro;
59652 ro = rx;
59653
59654 rtws[p + j] = re + ro;
59655 itws[p + j] = ie + io;
59656
59657 rtws[p + j + s] = re - ro;
59658 itws[p + j + s] = ie - io;
59659
59660 /* jshint maxdepth : false */
59661 if (j !== l) {
59662 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
59663
59664 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
59665 rtwdf_ = rx;
59666 }
59667 }
59668 }
ab78acc6 59669 }
8b095871
IC
59670 };
59671
59672 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
59673 var N = Math.max(m, n) | 1;
59674 var odd = N & 1;
59675 var i = 0;
59676 for (N = N / 2 | 0; N; N = N >>> 1) {
59677 i++;
ab78acc6 59678 }
ebd8d4e8 59679
8b095871
IC
59680 return 1 << i + 1 + odd;
59681 };
ebd8d4e8 59682
8b095871
IC
59683 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
59684 if (N <= 1) return;
ebd8d4e8 59685
8b095871
IC
59686 for (var i = 0; i < N / 2; i++) {
59687 var t = rws[i];
ebd8d4e8 59688
8b095871
IC
59689 rws[i] = rws[N - i - 1];
59690 rws[N - i - 1] = t;
ebd8d4e8 59691
8b095871 59692 t = iws[i];
ebd8d4e8 59693
8b095871
IC
59694 iws[i] = -iws[N - i - 1];
59695 iws[N - i - 1] = -t;
59696 }
59697 };
ebd8d4e8 59698
8b095871
IC
59699 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
59700 var carry = 0;
59701 for (var i = 0; i < N / 2; i++) {
59702 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
59703 Math.round(ws[2 * i] / N) +
59704 carry;
ebd8d4e8 59705
8b095871 59706 ws[i] = w & 0x3ffffff;
ebd8d4e8 59707
8b095871
IC
59708 if (w < 0x4000000) {
59709 carry = 0;
59710 } else {
59711 carry = w / 0x4000000 | 0;
59712 }
59713 }
ebd8d4e8 59714
8b095871
IC
59715 return ws;
59716 };
ebd8d4e8 59717
8b095871
IC
59718 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
59719 var carry = 0;
59720 for (var i = 0; i < len; i++) {
59721 carry = carry + (ws[i] | 0);
ebd8d4e8 59722
8b095871
IC
59723 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
59724 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
59725 }
ebd8d4e8 59726
8b095871
IC
59727 // Pad with zeroes
59728 for (i = 2 * len; i < N; ++i) {
59729 rws[i] = 0;
59730 }
ebd8d4e8 59731
8b095871
IC
59732 assert(carry === 0);
59733 assert((carry & ~0x1fff) === 0);
59734 };
ebd8d4e8 59735
8b095871
IC
59736 FFTM.prototype.stub = function stub (N) {
59737 var ph = new Array(N);
59738 for (var i = 0; i < N; i++) {
59739 ph[i] = 0;
59740 }
ebd8d4e8 59741
8b095871
IC
59742 return ph;
59743 };
ebd8d4e8 59744
8b095871
IC
59745 FFTM.prototype.mulp = function mulp (x, y, out) {
59746 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 59747
8b095871 59748 var rbt = this.makeRBT(N);
ebd8d4e8 59749
8b095871 59750 var _ = this.stub(N);
ebd8d4e8 59751
8b095871
IC
59752 var rws = new Array(N);
59753 var rwst = new Array(N);
59754 var iwst = new Array(N);
ebd8d4e8 59755
8b095871
IC
59756 var nrws = new Array(N);
59757 var nrwst = new Array(N);
59758 var niwst = new Array(N);
ebd8d4e8 59759
8b095871
IC
59760 var rmws = out.words;
59761 rmws.length = N;
ebd8d4e8 59762
8b095871
IC
59763 this.convert13b(x.words, x.length, rws, N);
59764 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 59765
8b095871
IC
59766 this.transform(rws, _, rwst, iwst, N, rbt);
59767 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 59768
8b095871
IC
59769 for (var i = 0; i < N; i++) {
59770 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
59771 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
59772 rwst[i] = rx;
59773 }
ebd8d4e8 59774
8b095871
IC
59775 this.conjugate(rwst, iwst, N);
59776 this.transform(rwst, iwst, rmws, _, N, rbt);
59777 this.conjugate(rmws, _, N);
59778 this.normalize13b(rmws, N);
ebd8d4e8 59779
8b095871
IC
59780 out.negative = x.negative ^ y.negative;
59781 out.length = x.length + y.length;
59782 return out.strip();
59783 };
ebd8d4e8 59784
8b095871
IC
59785 // Multiply `this` by `num`
59786 BN.prototype.mul = function mul (num) {
59787 var out = new BN(null);
59788 out.words = new Array(this.length + num.length);
59789 return this.mulTo(num, out);
59790 };
ab78acc6 59791
8b095871
IC
59792 // Multiply employing FFT
59793 BN.prototype.mulf = function mulf (num) {
59794 var out = new BN(null);
59795 out.words = new Array(this.length + num.length);
59796 return jumboMulTo(this, num, out);
59797 };
ebd8d4e8 59798
8b095871
IC
59799 // In-place Multiplication
59800 BN.prototype.imul = function imul (num) {
59801 return this.clone().mulTo(num, this);
59802 };
ab78acc6 59803
8b095871
IC
59804 BN.prototype.imuln = function imuln (num) {
59805 assert(typeof num === 'number');
59806 assert(num < 0x4000000);
ab78acc6 59807
8b095871
IC
59808 // Carry
59809 var carry = 0;
59810 for (var i = 0; i < this.length; i++) {
59811 var w = (this.words[i] | 0) * num;
59812 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
59813 carry >>= 26;
59814 carry += (w / 0x4000000) | 0;
59815 // NOTE: lo is 27bit maximum
59816 carry += lo >>> 26;
59817 this.words[i] = lo & 0x3ffffff;
59818 }
ab78acc6 59819
8b095871
IC
59820 if (carry !== 0) {
59821 this.words[i] = carry;
59822 this.length++;
59823 }
ab78acc6 59824
8b095871
IC
59825 return this;
59826 };
ab78acc6 59827
8b095871
IC
59828 BN.prototype.muln = function muln (num) {
59829 return this.clone().imuln(num);
59830 };
ebd8d4e8 59831
8b095871
IC
59832 // `this` * `this`
59833 BN.prototype.sqr = function sqr () {
59834 return this.mul(this);
59835 };
ebd8d4e8 59836
8b095871
IC
59837 // `this` * `this` in-place
59838 BN.prototype.isqr = function isqr () {
59839 return this.imul(this.clone());
59840 };
ab78acc6 59841
8b095871
IC
59842 // Math.pow(`this`, `num`)
59843 BN.prototype.pow = function pow (num) {
59844 var w = toBitArray(num);
59845 if (w.length === 0) return new BN(1);
ab78acc6 59846
8b095871
IC
59847 // Skip leading zeroes
59848 var res = this;
59849 for (var i = 0; i < w.length; i++, res = res.sqr()) {
59850 if (w[i] !== 0) break;
59851 }
ebd8d4e8 59852
8b095871
IC
59853 if (++i < w.length) {
59854 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
59855 if (w[i] === 0) continue;
ebd8d4e8 59856
8b095871
IC
59857 res = res.mul(q);
59858 }
ab78acc6
IC
59859 }
59860
8b095871
IC
59861 return res;
59862 };
ab78acc6 59863
8b095871
IC
59864 // Shift-left in-place
59865 BN.prototype.iushln = function iushln (bits) {
59866 assert(typeof bits === 'number' && bits >= 0);
59867 var r = bits % 26;
59868 var s = (bits - r) / 26;
59869 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
59870 var i;
59871
59872 if (r !== 0) {
59873 var carry = 0;
59874
59875 for (i = 0; i < this.length; i++) {
59876 var newCarry = this.words[i] & carryMask;
59877 var c = ((this.words[i] | 0) - newCarry) << r;
59878 this.words[i] = c | carry;
59879 carry = newCarry >>> (26 - r);
59880 }
59881
59882 if (carry) {
59883 this.words[i] = carry;
59884 this.length++;
59885 }
ab78acc6 59886 }
ebd8d4e8 59887
8b095871
IC
59888 if (s !== 0) {
59889 for (i = this.length - 1; i >= 0; i--) {
59890 this.words[i + s] = this.words[i];
59891 }
ebd8d4e8 59892
8b095871
IC
59893 for (i = 0; i < s; i++) {
59894 this.words[i] = 0;
59895 }
ebd8d4e8 59896
8b095871
IC
59897 this.length += s;
59898 }
ebd8d4e8 59899
8b095871
IC
59900 return this.strip();
59901 };
ebd8d4e8 59902
8b095871
IC
59903 BN.prototype.ishln = function ishln (bits) {
59904 // TODO(indutny): implement me
59905 assert(this.negative === 0);
59906 return this.iushln(bits);
59907 };
ebd8d4e8 59908
8b095871
IC
59909 // Shift-right in-place
59910 // NOTE: `hint` is a lowest bit before trailing zeroes
59911 // NOTE: if `extended` is present - it will be filled with destroyed bits
59912 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
59913 assert(typeof bits === 'number' && bits >= 0);
59914 var h;
59915 if (hint) {
59916 h = (hint - (hint % 26)) / 26;
59917 } else {
59918 h = 0;
59919 }
ebd8d4e8 59920
8b095871
IC
59921 var r = bits % 26;
59922 var s = Math.min((bits - r) / 26, this.length);
59923 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
59924 var maskedWords = extended;
59925
59926 h -= s;
59927 h = Math.max(0, h);
59928
59929 // Extended mode, copy masked part
59930 if (maskedWords) {
59931 for (var i = 0; i < s; i++) {
59932 maskedWords.words[i] = this.words[i];
59933 }
59934 maskedWords.length = s;
ab78acc6 59935 }
ebd8d4e8 59936
8b095871
IC
59937 if (s === 0) {
59938 // No-op, we should not move anything at all
59939 } else if (this.length > s) {
59940 this.length -= s;
59941 for (i = 0; i < this.length; i++) {
59942 this.words[i] = this.words[i + s];
59943 }
59944 } else {
59945 this.words[0] = 0;
59946 this.length = 1;
59947 }
ab78acc6 59948
8b095871
IC
59949 var carry = 0;
59950 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
59951 var word = this.words[i] | 0;
59952 this.words[i] = (carry << (26 - r)) | (word >>> r);
59953 carry = word & mask;
ab78acc6 59954 }
ebd8d4e8 59955
8b095871
IC
59956 // Push carried bits as a mask
59957 if (maskedWords && carry !== 0) {
59958 maskedWords.words[maskedWords.length++] = carry;
59959 }
59960
59961 if (this.length === 0) {
59962 this.words[0] = 0;
59963 this.length = 1;
59964 }
59965
59966 return this.strip();
59967 };
59968
59969 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
59970 // TODO(indutny): implement me
59971 assert(this.negative === 0);
59972 return this.iushrn(bits, hint, extended);
59973 };
59974
59975 // Shift-left
59976 BN.prototype.shln = function shln (bits) {
59977 return this.clone().ishln(bits);
59978 };
59979
59980 BN.prototype.ushln = function ushln (bits) {
59981 return this.clone().iushln(bits);
59982 };
59983
59984 // Shift-right
59985 BN.prototype.shrn = function shrn (bits) {
59986 return this.clone().ishrn(bits);
59987 };
ebd8d4e8 59988
8b095871
IC
59989 BN.prototype.ushrn = function ushrn (bits) {
59990 return this.clone().iushrn(bits);
59991 };
ebd8d4e8 59992
8b095871
IC
59993 // Test if n bit is set
59994 BN.prototype.testn = function testn (bit) {
59995 assert(typeof bit === 'number' && bit >= 0);
59996 var r = bit % 26;
59997 var s = (bit - r) / 26;
59998 var q = 1 << r;
ebd8d4e8 59999
8b095871
IC
60000 // Fast case: bit is much higher than all existing words
60001 if (this.length <= s) return false;
ab78acc6 60002
8b095871
IC
60003 // Check bit and return
60004 var w = this.words[s];
ab78acc6 60005
8b095871
IC
60006 return !!(w & q);
60007 };
ab78acc6 60008
8b095871
IC
60009 // Return only lowers bits of number (in-place)
60010 BN.prototype.imaskn = function imaskn (bits) {
60011 assert(typeof bits === 'number' && bits >= 0);
60012 var r = bits % 26;
60013 var s = (bits - r) / 26;
ab78acc6 60014
8b095871 60015 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 60016
8b095871
IC
60017 if (this.length <= s) {
60018 return this;
60019 }
ab78acc6 60020
8b095871
IC
60021 if (r !== 0) {
60022 s++;
60023 }
60024 this.length = Math.min(s, this.length);
ab78acc6 60025
8b095871
IC
60026 if (r !== 0) {
60027 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
60028 this.words[this.length - 1] &= mask;
60029 }
ab78acc6 60030
8b095871
IC
60031 return this.strip();
60032 };
ab78acc6 60033
8b095871
IC
60034 // Return only lowers bits of number
60035 BN.prototype.maskn = function maskn (bits) {
60036 return this.clone().imaskn(bits);
60037 };
ebd8d4e8 60038
8b095871
IC
60039 // Add plain number `num` to `this`
60040 BN.prototype.iaddn = function iaddn (num) {
60041 assert(typeof num === 'number');
60042 assert(num < 0x4000000);
60043 if (num < 0) return this.isubn(-num);
60044
60045 // Possible sign change
60046 if (this.negative !== 0) {
60047 if (this.length === 1 && (this.words[0] | 0) < num) {
60048 this.words[0] = num - (this.words[0] | 0);
60049 this.negative = 0;
60050 return this;
60051 }
ebd8d4e8 60052
8b095871
IC
60053 this.negative = 0;
60054 this.isubn(num);
60055 this.negative = 1;
60056 return this;
60057 }
ebd8d4e8 60058
8b095871
IC
60059 // Add without checks
60060 return this._iaddn(num);
60061 };
ebd8d4e8 60062
8b095871
IC
60063 BN.prototype._iaddn = function _iaddn (num) {
60064 this.words[0] += num;
ebd8d4e8 60065
8b095871
IC
60066 // Carry
60067 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
60068 this.words[i] -= 0x4000000;
60069 if (i === this.length - 1) {
60070 this.words[i + 1] = 1;
60071 } else {
60072 this.words[i + 1]++;
60073 }
60074 }
60075 this.length = Math.max(this.length, i + 1);
ebd8d4e8 60076
8b095871
IC
60077 return this;
60078 };
ebd8d4e8 60079
8b095871
IC
60080 // Subtract plain number `num` from `this`
60081 BN.prototype.isubn = function isubn (num) {
60082 assert(typeof num === 'number');
60083 assert(num < 0x4000000);
60084 if (num < 0) return this.iaddn(-num);
ebd8d4e8 60085
8b095871
IC
60086 if (this.negative !== 0) {
60087 this.negative = 0;
60088 this.iaddn(num);
60089 this.negative = 1;
60090 return this;
60091 }
ebd8d4e8 60092
8b095871 60093 this.words[0] -= num;
ab78acc6 60094
8b095871
IC
60095 if (this.length === 1 && this.words[0] < 0) {
60096 this.words[0] = -this.words[0];
60097 this.negative = 1;
60098 } else {
60099 // Carry
60100 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
60101 this.words[i] += 0x4000000;
60102 this.words[i + 1] -= 1;
60103 }
60104 }
ebd8d4e8 60105
8b095871
IC
60106 return this.strip();
60107 };
ab78acc6 60108
8b095871
IC
60109 BN.prototype.addn = function addn (num) {
60110 return this.clone().iaddn(num);
60111 };
ab78acc6 60112
8b095871
IC
60113 BN.prototype.subn = function subn (num) {
60114 return this.clone().isubn(num);
60115 };
ab78acc6 60116
8b095871
IC
60117 BN.prototype.iabs = function iabs () {
60118 this.negative = 0;
ab78acc6 60119
8b095871
IC
60120 return this;
60121 };
ab78acc6 60122
8b095871
IC
60123 BN.prototype.abs = function abs () {
60124 return this.clone().iabs();
60125 };
ab78acc6 60126
8b095871
IC
60127 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
60128 var len = num.length + shift;
60129 var i;
ab78acc6 60130
8b095871 60131 this._expand(len);
ab78acc6 60132
8b095871
IC
60133 var w;
60134 var carry = 0;
60135 for (i = 0; i < num.length; i++) {
60136 w = (this.words[i + shift] | 0) + carry;
60137 var right = (num.words[i] | 0) * mul;
60138 w -= right & 0x3ffffff;
60139 carry = (w >> 26) - ((right / 0x4000000) | 0);
60140 this.words[i + shift] = w & 0x3ffffff;
60141 }
60142 for (; i < this.length - shift; i++) {
60143 w = (this.words[i + shift] | 0) + carry;
60144 carry = w >> 26;
60145 this.words[i + shift] = w & 0x3ffffff;
60146 }
ebd8d4e8 60147
8b095871 60148 if (carry === 0) return this.strip();
ab78acc6 60149
8b095871
IC
60150 // Subtraction overflow
60151 assert(carry === -1);
60152 carry = 0;
60153 for (i = 0; i < this.length; i++) {
60154 w = -(this.words[i] | 0) + carry;
60155 carry = w >> 26;
60156 this.words[i] = w & 0x3ffffff;
60157 }
60158 this.negative = 1;
ab78acc6 60159
8b095871
IC
60160 return this.strip();
60161 };
ab78acc6 60162
8b095871
IC
60163 BN.prototype._wordDiv = function _wordDiv (num, mode) {
60164 var shift = this.length - num.length;
ebd8d4e8 60165
8b095871
IC
60166 var a = this.clone();
60167 var b = num;
ab78acc6 60168
8b095871
IC
60169 // Normalize
60170 var bhi = b.words[b.length - 1] | 0;
60171 var bhiBits = this._countBits(bhi);
60172 shift = 26 - bhiBits;
60173 if (shift !== 0) {
60174 b = b.ushln(shift);
60175 a.iushln(shift);
60176 bhi = b.words[b.length - 1] | 0;
60177 }
ebd8d4e8 60178
8b095871
IC
60179 // Initialize quotient
60180 var m = a.length - b.length;
60181 var q;
ab78acc6 60182
8b095871
IC
60183 if (mode !== 'mod') {
60184 q = new BN(null);
60185 q.length = m + 1;
60186 q.words = new Array(q.length);
60187 for (var i = 0; i < q.length; i++) {
60188 q.words[i] = 0;
60189 }
60190 }
ebd8d4e8 60191
8b095871
IC
60192 var diff = a.clone()._ishlnsubmul(b, 1, m);
60193 if (diff.negative === 0) {
60194 a = diff;
60195 if (q) {
60196 q.words[m] = 1;
60197 }
60198 }
ebd8d4e8 60199
8b095871
IC
60200 for (var j = m - 1; j >= 0; j--) {
60201 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
60202 (a.words[b.length + j - 1] | 0);
ebd8d4e8 60203
8b095871
IC
60204 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
60205 // (0x7ffffff)
60206 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 60207
8b095871
IC
60208 a._ishlnsubmul(b, qj, j);
60209 while (a.negative !== 0) {
60210 qj--;
60211 a.negative = 0;
60212 a._ishlnsubmul(b, 1, j);
60213 if (!a.isZero()) {
60214 a.negative ^= 1;
60215 }
60216 }
60217 if (q) {
60218 q.words[j] = qj;
60219 }
60220 }
60221 if (q) {
60222 q.strip();
60223 }
60224 a.strip();
ebd8d4e8 60225
8b095871
IC
60226 // Denormalize
60227 if (mode !== 'div' && shift !== 0) {
60228 a.iushrn(shift);
60229 }
ebd8d4e8 60230
8b095871
IC
60231 return {
60232 div: q || null,
60233 mod: a
60234 };
60235 };
ebd8d4e8 60236
8b095871
IC
60237 // NOTE: 1) `mode` can be set to `mod` to request mod only,
60238 // to `div` to request div only, or be absent to
60239 // request both div & mod
60240 // 2) `positive` is true if unsigned mod is requested
60241 BN.prototype.divmod = function divmod (num, mode, positive) {
60242 assert(!num.isZero());
60243
60244 if (this.isZero()) {
60245 return {
60246 div: new BN(0),
60247 mod: new BN(0)
60248 };
60249 }
ebd8d4e8 60250
8b095871
IC
60251 var div, mod, res;
60252 if (this.negative !== 0 && num.negative === 0) {
60253 res = this.neg().divmod(num, mode);
ebd8d4e8 60254
8b095871
IC
60255 if (mode !== 'mod') {
60256 div = res.div.neg();
60257 }
ebd8d4e8 60258
8b095871
IC
60259 if (mode !== 'div') {
60260 mod = res.mod.neg();
60261 if (positive && mod.negative !== 0) {
60262 mod.iadd(num);
60263 }
60264 }
ebd8d4e8 60265
8b095871
IC
60266 return {
60267 div: div,
60268 mod: mod
60269 };
60270 }
ebd8d4e8 60271
8b095871
IC
60272 if (this.negative === 0 && num.negative !== 0) {
60273 res = this.divmod(num.neg(), mode);
ebd8d4e8 60274
8b095871
IC
60275 if (mode !== 'mod') {
60276 div = res.div.neg();
60277 }
ebd8d4e8 60278
8b095871
IC
60279 return {
60280 div: div,
60281 mod: res.mod
60282 };
60283 }
ebd8d4e8 60284
8b095871
IC
60285 if ((this.negative & num.negative) !== 0) {
60286 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 60287
8b095871
IC
60288 if (mode !== 'div') {
60289 mod = res.mod.neg();
60290 if (positive && mod.negative !== 0) {
60291 mod.isub(num);
60292 }
60293 }
ebd8d4e8 60294
8b095871
IC
60295 return {
60296 div: res.div,
60297 mod: mod
60298 };
60299 }
ebd8d4e8 60300
8b095871 60301 // Both numbers are positive at this point
ebd8d4e8 60302
8b095871
IC
60303 // Strip both numbers to approximate shift value
60304 if (num.length > this.length || this.cmp(num) < 0) {
60305 return {
60306 div: new BN(0),
60307 mod: this
60308 };
60309 }
ebd8d4e8 60310
8b095871
IC
60311 // Very short reduction
60312 if (num.length === 1) {
60313 if (mode === 'div') {
60314 return {
60315 div: this.divn(num.words[0]),
60316 mod: null
60317 };
60318 }
ebd8d4e8 60319
8b095871
IC
60320 if (mode === 'mod') {
60321 return {
60322 div: null,
60323 mod: new BN(this.modn(num.words[0]))
60324 };
60325 }
ebd8d4e8 60326
8b095871
IC
60327 return {
60328 div: this.divn(num.words[0]),
60329 mod: new BN(this.modn(num.words[0]))
60330 };
60331 }
ebd8d4e8 60332
8b095871
IC
60333 return this._wordDiv(num, mode);
60334 };
ab78acc6 60335
8b095871
IC
60336 // Find `this` / `num`
60337 BN.prototype.div = function div (num) {
60338 return this.divmod(num, 'div', false).div;
60339 };
ab78acc6 60340
8b095871
IC
60341 // Find `this` % `num`
60342 BN.prototype.mod = function mod (num) {
60343 return this.divmod(num, 'mod', false).mod;
60344 };
ab78acc6 60345
8b095871
IC
60346 BN.prototype.umod = function umod (num) {
60347 return this.divmod(num, 'mod', true).mod;
60348 };
ebd8d4e8 60349
8b095871
IC
60350 // Find Round(`this` / `num`)
60351 BN.prototype.divRound = function divRound (num) {
60352 var dm = this.divmod(num);
ebd8d4e8 60353
8b095871
IC
60354 // Fast case - exact division
60355 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 60356
8b095871 60357 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 60358
8b095871
IC
60359 var half = num.ushrn(1);
60360 var r2 = num.andln(1);
60361 var cmp = mod.cmp(half);
ebd8d4e8 60362
8b095871
IC
60363 // Round down
60364 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 60365
8b095871
IC
60366 // Round up
60367 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
60368 };
ab78acc6 60369
8b095871
IC
60370 BN.prototype.modn = function modn (num) {
60371 assert(num <= 0x3ffffff);
60372 var p = (1 << 26) % num;
ab78acc6 60373
8b095871
IC
60374 var acc = 0;
60375 for (var i = this.length - 1; i >= 0; i--) {
60376 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 60377 }
ab78acc6 60378
8b095871
IC
60379 return acc;
60380 };
60381
60382 // In-place division by number
60383 BN.prototype.idivn = function idivn (num) {
60384 assert(num <= 0x3ffffff);
60385
60386 var carry = 0;
60387 for (var i = this.length - 1; i >= 0; i--) {
60388 var w = (this.words[i] | 0) + carry * 0x4000000;
60389 this.words[i] = (w / num) | 0;
60390 carry = w % num;
ebd8d4e8 60391 }
ebd8d4e8 60392
8b095871
IC
60393 return this.strip();
60394 };
ab78acc6 60395
8b095871
IC
60396 BN.prototype.divn = function divn (num) {
60397 return this.clone().idivn(num);
60398 };
ebd8d4e8 60399
8b095871
IC
60400 BN.prototype.egcd = function egcd (p) {
60401 assert(p.negative === 0);
60402 assert(!p.isZero());
ebd8d4e8 60403
8b095871
IC
60404 var x = this;
60405 var y = p.clone();
60406
60407 if (x.negative !== 0) {
60408 x = x.umod(p);
60409 } else {
60410 x = x.clone();
60411 }
60412
60413 // A * x + B * y = x
60414 var A = new BN(1);
60415 var B = new BN(0);
60416
60417 // C * x + D * y = y
60418 var C = new BN(0);
60419 var D = new BN(1);
60420
60421 var g = 0;
60422
60423 while (x.isEven() && y.isEven()) {
60424 x.iushrn(1);
60425 y.iushrn(1);
60426 ++g;
60427 }
ebd8d4e8 60428
8b095871
IC
60429 var yp = y.clone();
60430 var xp = x.clone();
ebd8d4e8 60431
8b095871
IC
60432 while (!x.isZero()) {
60433 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
60434 if (i > 0) {
60435 x.iushrn(i);
60436 while (i-- > 0) {
60437 if (A.isOdd() || B.isOdd()) {
60438 A.iadd(yp);
60439 B.isub(xp);
60440 }
ebd8d4e8 60441
8b095871
IC
60442 A.iushrn(1);
60443 B.iushrn(1);
60444 }
60445 }
ebd8d4e8 60446
8b095871
IC
60447 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
60448 if (j > 0) {
60449 y.iushrn(j);
60450 while (j-- > 0) {
60451 if (C.isOdd() || D.isOdd()) {
60452 C.iadd(yp);
60453 D.isub(xp);
60454 }
ab78acc6 60455
8b095871
IC
60456 C.iushrn(1);
60457 D.iushrn(1);
60458 }
60459 }
ebd8d4e8 60460
8b095871
IC
60461 if (x.cmp(y) >= 0) {
60462 x.isub(y);
60463 A.isub(C);
60464 B.isub(D);
60465 } else {
60466 y.isub(x);
60467 C.isub(A);
60468 D.isub(B);
60469 }
60470 }
ebd8d4e8 60471
8b095871
IC
60472 return {
60473 a: C,
60474 b: D,
60475 gcd: y.iushln(g)
60476 };
60477 };
ebd8d4e8 60478
8b095871
IC
60479 // This is reduced incarnation of the binary EEA
60480 // above, designated to invert members of the
60481 // _prime_ fields F(p) at a maximal speed
60482 BN.prototype._invmp = function _invmp (p) {
60483 assert(p.negative === 0);
60484 assert(!p.isZero());
ebd8d4e8 60485
8b095871
IC
60486 var a = this;
60487 var b = p.clone();
ebd8d4e8 60488
8b095871
IC
60489 if (a.negative !== 0) {
60490 a = a.umod(p);
60491 } else {
60492 a = a.clone();
60493 }
ebd8d4e8 60494
8b095871
IC
60495 var x1 = new BN(1);
60496 var x2 = new BN(0);
ebd8d4e8 60497
8b095871 60498 var delta = b.clone();
ebd8d4e8 60499
8b095871
IC
60500 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
60501 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
60502 if (i > 0) {
60503 a.iushrn(i);
60504 while (i-- > 0) {
60505 if (x1.isOdd()) {
60506 x1.iadd(delta);
60507 }
ebd8d4e8 60508
8b095871
IC
60509 x1.iushrn(1);
60510 }
60511 }
ab78acc6 60512
8b095871
IC
60513 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
60514 if (j > 0) {
60515 b.iushrn(j);
60516 while (j-- > 0) {
60517 if (x2.isOdd()) {
60518 x2.iadd(delta);
60519 }
ebd8d4e8 60520
8b095871
IC
60521 x2.iushrn(1);
60522 }
60523 }
ebd8d4e8 60524
8b095871
IC
60525 if (a.cmp(b) >= 0) {
60526 a.isub(b);
60527 x1.isub(x2);
60528 } else {
60529 b.isub(a);
60530 x2.isub(x1);
60531 }
60532 }
ebd8d4e8 60533
8b095871
IC
60534 var res;
60535 if (a.cmpn(1) === 0) {
60536 res = x1;
60537 } else {
60538 res = x2;
60539 }
ebd8d4e8 60540
8b095871
IC
60541 if (res.cmpn(0) < 0) {
60542 res.iadd(p);
ab78acc6
IC
60543 }
60544
8b095871
IC
60545 return res;
60546 };
ebd8d4e8 60547
8b095871
IC
60548 BN.prototype.gcd = function gcd (num) {
60549 if (this.isZero()) return num.abs();
60550 if (num.isZero()) return this.abs();
60551
60552 var a = this.clone();
60553 var b = num.clone();
60554 a.negative = 0;
60555 b.negative = 0;
60556
60557 // Remove common factor of two
60558 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
60559 a.iushrn(1);
60560 b.iushrn(1);
ab78acc6 60561 }
ab78acc6 60562
8b095871
IC
60563 do {
60564 while (a.isEven()) {
60565 a.iushrn(1);
60566 }
60567 while (b.isEven()) {
60568 b.iushrn(1);
60569 }
ebd8d4e8 60570
8b095871
IC
60571 var r = a.cmp(b);
60572 if (r < 0) {
60573 // Swap `a` and `b` to make `a` always bigger than `b`
60574 var t = a;
60575 a = b;
60576 b = t;
60577 } else if (r === 0 || b.cmpn(1) === 0) {
60578 break;
60579 }
ab78acc6 60580
8b095871
IC
60581 a.isub(b);
60582 } while (true);
ab78acc6 60583
8b095871
IC
60584 return b.iushln(shift);
60585 };
ab78acc6 60586
8b095871
IC
60587 // Invert number in the field F(num)
60588 BN.prototype.invm = function invm (num) {
60589 return this.egcd(num).a.umod(num);
60590 };
ebd8d4e8 60591
8b095871
IC
60592 BN.prototype.isEven = function isEven () {
60593 return (this.words[0] & 1) === 0;
60594 };
ab78acc6 60595
8b095871
IC
60596 BN.prototype.isOdd = function isOdd () {
60597 return (this.words[0] & 1) === 1;
60598 };
ebd8d4e8 60599
8b095871
IC
60600 // And first word and num
60601 BN.prototype.andln = function andln (num) {
60602 return this.words[0] & num;
60603 };
ebd8d4e8 60604
8b095871
IC
60605 // Increment at the bit position in-line
60606 BN.prototype.bincn = function bincn (bit) {
60607 assert(typeof bit === 'number');
60608 var r = bit % 26;
60609 var s = (bit - r) / 26;
60610 var q = 1 << r;
60611
60612 // Fast case: bit is much higher than all existing words
60613 if (this.length <= s) {
60614 this._expand(s + 1);
60615 this.words[s] |= q;
60616 return this;
60617 }
ebd8d4e8 60618
8b095871
IC
60619 // Add bit and propagate, if needed
60620 var carry = q;
60621 for (var i = s; carry !== 0 && i < this.length; i++) {
60622 var w = this.words[i] | 0;
60623 w += carry;
60624 carry = w >>> 26;
60625 w &= 0x3ffffff;
60626 this.words[i] = w;
60627 }
60628 if (carry !== 0) {
60629 this.words[i] = carry;
60630 this.length++;
60631 }
60632 return this;
60633 };
ebd8d4e8 60634
8b095871
IC
60635 BN.prototype.isZero = function isZero () {
60636 return this.length === 1 && this.words[0] === 0;
60637 };
ebd8d4e8 60638
8b095871
IC
60639 BN.prototype.cmpn = function cmpn (num) {
60640 var negative = num < 0;
ebd8d4e8 60641
8b095871
IC
60642 if (this.negative !== 0 && !negative) return -1;
60643 if (this.negative === 0 && negative) return 1;
ab78acc6 60644
8b095871 60645 this.strip();
ab78acc6 60646
8b095871
IC
60647 var res;
60648 if (this.length > 1) {
60649 res = 1;
60650 } else {
60651 if (negative) {
60652 num = -num;
60653 }
ebd8d4e8 60654
8b095871 60655 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 60656
8b095871
IC
60657 var w = this.words[0] | 0;
60658 res = w === num ? 0 : w < num ? -1 : 1;
60659 }
60660 if (this.negative !== 0) return -res | 0;
60661 return res;
60662 };
ebd8d4e8 60663
8b095871
IC
60664 // Compare two numbers and return:
60665 // 1 - if `this` > `num`
60666 // 0 - if `this` == `num`
60667 // -1 - if `this` < `num`
60668 BN.prototype.cmp = function cmp (num) {
60669 if (this.negative !== 0 && num.negative === 0) return -1;
60670 if (this.negative === 0 && num.negative !== 0) return 1;
60671
60672 var res = this.ucmp(num);
60673 if (this.negative !== 0) return -res | 0;
60674 return res;
60675 };
ebd8d4e8 60676
8b095871
IC
60677 // Unsigned comparison
60678 BN.prototype.ucmp = function ucmp (num) {
60679 // At this point both numbers have the same sign
60680 if (this.length > num.length) return 1;
60681 if (this.length < num.length) return -1;
60682
60683 var res = 0;
60684 for (var i = this.length - 1; i >= 0; i--) {
60685 var a = this.words[i] | 0;
60686 var b = num.words[i] | 0;
60687
60688 if (a === b) continue;
60689 if (a < b) {
60690 res = -1;
60691 } else if (a > b) {
60692 res = 1;
60693 }
60694 break;
60695 }
60696 return res;
60697 };
ebd8d4e8 60698
8b095871
IC
60699 BN.prototype.gtn = function gtn (num) {
60700 return this.cmpn(num) === 1;
60701 };
ebd8d4e8 60702
8b095871
IC
60703 BN.prototype.gt = function gt (num) {
60704 return this.cmp(num) === 1;
60705 };
ebd8d4e8 60706
8b095871
IC
60707 BN.prototype.gten = function gten (num) {
60708 return this.cmpn(num) >= 0;
60709 };
ab78acc6 60710
8b095871
IC
60711 BN.prototype.gte = function gte (num) {
60712 return this.cmp(num) >= 0;
60713 };
ab78acc6 60714
8b095871
IC
60715 BN.prototype.ltn = function ltn (num) {
60716 return this.cmpn(num) === -1;
60717 };
ab78acc6 60718
8b095871
IC
60719 BN.prototype.lt = function lt (num) {
60720 return this.cmp(num) === -1;
60721 };
ebd8d4e8 60722
8b095871
IC
60723 BN.prototype.lten = function lten (num) {
60724 return this.cmpn(num) <= 0;
60725 };
ab78acc6 60726
8b095871
IC
60727 BN.prototype.lte = function lte (num) {
60728 return this.cmp(num) <= 0;
60729 };
ab78acc6 60730
8b095871
IC
60731 BN.prototype.eqn = function eqn (num) {
60732 return this.cmpn(num) === 0;
60733 };
ab78acc6 60734
8b095871
IC
60735 BN.prototype.eq = function eq (num) {
60736 return this.cmp(num) === 0;
60737 };
ebd8d4e8 60738
8b095871
IC
60739 //
60740 // A reduce context, could be using montgomery or something better, depending
60741 // on the `m` itself.
60742 //
60743 BN.red = function red (num) {
60744 return new Red(num);
60745 };
ab78acc6 60746
8b095871
IC
60747 BN.prototype.toRed = function toRed (ctx) {
60748 assert(!this.red, 'Already a number in reduction context');
60749 assert(this.negative === 0, 'red works only with positives');
60750 return ctx.convertTo(this)._forceRed(ctx);
60751 };
60752
60753 BN.prototype.fromRed = function fromRed () {
60754 assert(this.red, 'fromRed works only with numbers in reduction context');
60755 return this.red.convertFrom(this);
60756 };
60757
60758 BN.prototype._forceRed = function _forceRed (ctx) {
60759 this.red = ctx;
60760 return this;
60761 };
60762
60763 BN.prototype.forceRed = function forceRed (ctx) {
60764 assert(!this.red, 'Already a number in reduction context');
60765 return this._forceRed(ctx);
60766 };
60767
60768 BN.prototype.redAdd = function redAdd (num) {
60769 assert(this.red, 'redAdd works only with red numbers');
60770 return this.red.add(this, num);
60771 };
ebd8d4e8 60772
8b095871
IC
60773 BN.prototype.redIAdd = function redIAdd (num) {
60774 assert(this.red, 'redIAdd works only with red numbers');
60775 return this.red.iadd(this, num);
60776 };
ab78acc6 60777
8b095871
IC
60778 BN.prototype.redSub = function redSub (num) {
60779 assert(this.red, 'redSub works only with red numbers');
60780 return this.red.sub(this, num);
60781 };
ab78acc6 60782
8b095871
IC
60783 BN.prototype.redISub = function redISub (num) {
60784 assert(this.red, 'redISub works only with red numbers');
60785 return this.red.isub(this, num);
60786 };
ebd8d4e8 60787
8b095871
IC
60788 BN.prototype.redShl = function redShl (num) {
60789 assert(this.red, 'redShl works only with red numbers');
60790 return this.red.shl(this, num);
60791 };
ebd8d4e8 60792
8b095871
IC
60793 BN.prototype.redMul = function redMul (num) {
60794 assert(this.red, 'redMul works only with red numbers');
60795 this.red._verify2(this, num);
60796 return this.red.mul(this, num);
60797 };
ebd8d4e8 60798
8b095871
IC
60799 BN.prototype.redIMul = function redIMul (num) {
60800 assert(this.red, 'redMul works only with red numbers');
60801 this.red._verify2(this, num);
60802 return this.red.imul(this, num);
60803 };
ebd8d4e8 60804
8b095871
IC
60805 BN.prototype.redSqr = function redSqr () {
60806 assert(this.red, 'redSqr works only with red numbers');
60807 this.red._verify1(this);
60808 return this.red.sqr(this);
60809 };
ebd8d4e8 60810
8b095871
IC
60811 BN.prototype.redISqr = function redISqr () {
60812 assert(this.red, 'redISqr works only with red numbers');
60813 this.red._verify1(this);
60814 return this.red.isqr(this);
60815 };
ebd8d4e8 60816
8b095871
IC
60817 // Square root over p
60818 BN.prototype.redSqrt = function redSqrt () {
60819 assert(this.red, 'redSqrt works only with red numbers');
60820 this.red._verify1(this);
60821 return this.red.sqrt(this);
60822 };
ebd8d4e8 60823
8b095871
IC
60824 BN.prototype.redInvm = function redInvm () {
60825 assert(this.red, 'redInvm works only with red numbers');
60826 this.red._verify1(this);
60827 return this.red.invm(this);
60828 };
ebd8d4e8 60829
8b095871
IC
60830 // Return negative clone of `this` % `red modulo`
60831 BN.prototype.redNeg = function redNeg () {
60832 assert(this.red, 'redNeg works only with red numbers');
60833 this.red._verify1(this);
60834 return this.red.neg(this);
60835 };
ebd8d4e8 60836
8b095871
IC
60837 BN.prototype.redPow = function redPow (num) {
60838 assert(this.red && !num.red, 'redPow(normalNum)');
60839 this.red._verify1(this);
60840 return this.red.pow(this, num);
60841 };
ebd8d4e8 60842
8b095871
IC
60843 // Prime numbers with efficient reduction
60844 var primes = {
60845 k256: null,
60846 p224: null,
60847 p192: null,
60848 p25519: null
60849 };
ebd8d4e8 60850
8b095871
IC
60851 // Pseudo-Mersenne prime
60852 function MPrime (name, p) {
60853 // P = 2 ^ N - K
60854 this.name = name;
60855 this.p = new BN(p, 16);
60856 this.n = this.p.bitLength();
60857 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 60858
8b095871
IC
60859 this.tmp = this._tmp();
60860 }
ebd8d4e8 60861
8b095871
IC
60862 MPrime.prototype._tmp = function _tmp () {
60863 var tmp = new BN(null);
60864 tmp.words = new Array(Math.ceil(this.n / 13));
60865 return tmp;
60866 };
ebd8d4e8 60867
8b095871
IC
60868 MPrime.prototype.ireduce = function ireduce (num) {
60869 // Assumes that `num` is less than `P^2`
60870 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
60871 var r = num;
60872 var rlen;
ebd8d4e8 60873
8b095871
IC
60874 do {
60875 this.split(r, this.tmp);
60876 r = this.imulK(r);
60877 r = r.iadd(this.tmp);
60878 rlen = r.bitLength();
60879 } while (rlen > this.n);
60880
60881 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
60882 if (cmp === 0) {
60883 r.words[0] = 0;
60884 r.length = 1;
60885 } else if (cmp > 0) {
60886 r.isub(this.p);
60887 } else {
60888 r.strip();
60889 }
ebd8d4e8 60890
8b095871
IC
60891 return r;
60892 };
ebd8d4e8 60893
8b095871
IC
60894 MPrime.prototype.split = function split (input, out) {
60895 input.iushrn(this.n, 0, out);
60896 };
ebd8d4e8 60897
8b095871
IC
60898 MPrime.prototype.imulK = function imulK (num) {
60899 return num.imul(this.k);
60900 };
ebd8d4e8 60901
8b095871
IC
60902 function K256 () {
60903 MPrime.call(
60904 this,
60905 'k256',
60906 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
60907 }
60908 inherits(K256, MPrime);
ebd8d4e8 60909
8b095871
IC
60910 K256.prototype.split = function split (input, output) {
60911 // 256 = 9 * 26 + 22
60912 var mask = 0x3fffff;
ebd8d4e8 60913
8b095871
IC
60914 var outLen = Math.min(input.length, 9);
60915 for (var i = 0; i < outLen; i++) {
60916 output.words[i] = input.words[i];
60917 }
60918 output.length = outLen;
ebd8d4e8 60919
8b095871
IC
60920 if (input.length <= 9) {
60921 input.words[0] = 0;
60922 input.length = 1;
60923 return;
60924 }
ebd8d4e8 60925
8b095871
IC
60926 // Shift by 9 limbs
60927 var prev = input.words[9];
60928 output.words[output.length++] = prev & mask;
ebd8d4e8 60929
8b095871
IC
60930 for (i = 10; i < input.length; i++) {
60931 var next = input.words[i] | 0;
60932 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
60933 prev = next;
60934 }
60935 prev >>>= 22;
60936 input.words[i - 10] = prev;
60937 if (prev === 0 && input.length > 10) {
60938 input.length -= 10;
60939 } else {
60940 input.length -= 9;
60941 }
60942 };
ebd8d4e8 60943
8b095871
IC
60944 K256.prototype.imulK = function imulK (num) {
60945 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
60946 num.words[num.length] = 0;
60947 num.words[num.length + 1] = 0;
60948 num.length += 2;
60949
60950 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
60951 var lo = 0;
60952 for (var i = 0; i < num.length; i++) {
60953 var w = num.words[i] | 0;
60954 lo += w * 0x3d1;
60955 num.words[i] = lo & 0x3ffffff;
60956 lo = w * 0x40 + ((lo / 0x4000000) | 0);
60957 }
60958
60959 // Fast length reduction
60960 if (num.words[num.length - 1] === 0) {
60961 num.length--;
60962 if (num.words[num.length - 1] === 0) {
60963 num.length--;
60964 }
60965 }
60966 return num;
60967 };
ebd8d4e8 60968
8b095871
IC
60969 function P224 () {
60970 MPrime.call(
60971 this,
60972 'p224',
60973 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
60974 }
60975 inherits(P224, MPrime);
ebd8d4e8 60976
8b095871
IC
60977 function P192 () {
60978 MPrime.call(
60979 this,
60980 'p192',
60981 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
60982 }
60983 inherits(P192, MPrime);
ebd8d4e8 60984
8b095871
IC
60985 function P25519 () {
60986 // 2 ^ 255 - 19
60987 MPrime.call(
60988 this,
60989 '25519',
60990 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
60991 }
60992 inherits(P25519, MPrime);
ebd8d4e8 60993
8b095871
IC
60994 P25519.prototype.imulK = function imulK (num) {
60995 // K = 0x13
60996 var carry = 0;
60997 for (var i = 0; i < num.length; i++) {
60998 var hi = (num.words[i] | 0) * 0x13 + carry;
60999 var lo = hi & 0x3ffffff;
61000 hi >>>= 26;
ebd8d4e8 61001
8b095871
IC
61002 num.words[i] = lo;
61003 carry = hi;
61004 }
61005 if (carry !== 0) {
61006 num.words[num.length++] = carry;
61007 }
61008 return num;
61009 };
ebd8d4e8 61010
8b095871
IC
61011 // Exported mostly for testing purposes, use plain name instead
61012 BN._prime = function prime (name) {
61013 // Cached version of prime
61014 if (primes[name]) return primes[name];
61015
61016 var prime;
61017 if (name === 'k256') {
61018 prime = new K256();
61019 } else if (name === 'p224') {
61020 prime = new P224();
61021 } else if (name === 'p192') {
61022 prime = new P192();
61023 } else if (name === 'p25519') {
61024 prime = new P25519();
61025 } else {
61026 throw new Error('Unknown prime ' + name);
61027 }
61028 primes[name] = prime;
ab78acc6 61029
8b095871
IC
61030 return prime;
61031 };
ab78acc6 61032
8b095871
IC
61033 //
61034 // Base reduction engine
61035 //
61036 function Red (m) {
61037 if (typeof m === 'string') {
61038 var prime = BN._prime(m);
61039 this.m = prime.p;
61040 this.prime = prime;
61041 } else {
61042 assert(m.gtn(1), 'modulus must be greater than 1');
61043 this.m = m;
61044 this.prime = null;
61045 }
61046 }
ab78acc6 61047
8b095871
IC
61048 Red.prototype._verify1 = function _verify1 (a) {
61049 assert(a.negative === 0, 'red works only with positives');
61050 assert(a.red, 'red works only with red numbers');
61051 };
ab78acc6 61052
8b095871
IC
61053 Red.prototype._verify2 = function _verify2 (a, b) {
61054 assert((a.negative | b.negative) === 0, 'red works only with positives');
61055 assert(a.red && a.red === b.red,
61056 'red works only with red numbers');
61057 };
ebd8d4e8 61058
8b095871
IC
61059 Red.prototype.imod = function imod (a) {
61060 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
61061 return a.umod(this.m)._forceRed(this);
61062 };
ebd8d4e8 61063
8b095871
IC
61064 Red.prototype.neg = function neg (a) {
61065 if (a.isZero()) {
61066 return a.clone();
61067 }
ebd8d4e8 61068
8b095871
IC
61069 return this.m.sub(a)._forceRed(this);
61070 };
ab78acc6 61071
8b095871
IC
61072 Red.prototype.add = function add (a, b) {
61073 this._verify2(a, b);
ab78acc6 61074
8b095871
IC
61075 var res = a.add(b);
61076 if (res.cmp(this.m) >= 0) {
61077 res.isub(this.m);
61078 }
61079 return res._forceRed(this);
61080 };
ab78acc6 61081
8b095871
IC
61082 Red.prototype.iadd = function iadd (a, b) {
61083 this._verify2(a, b);
ab78acc6 61084
8b095871
IC
61085 var res = a.iadd(b);
61086 if (res.cmp(this.m) >= 0) {
61087 res.isub(this.m);
61088 }
61089 return res;
61090 };
ab78acc6 61091
8b095871
IC
61092 Red.prototype.sub = function sub (a, b) {
61093 this._verify2(a, b);
ab78acc6 61094
8b095871
IC
61095 var res = a.sub(b);
61096 if (res.cmpn(0) < 0) {
61097 res.iadd(this.m);
61098 }
61099 return res._forceRed(this);
61100 };
ab78acc6 61101
8b095871
IC
61102 Red.prototype.isub = function isub (a, b) {
61103 this._verify2(a, b);
ebd8d4e8 61104
8b095871
IC
61105 var res = a.isub(b);
61106 if (res.cmpn(0) < 0) {
61107 res.iadd(this.m);
61108 }
61109 return res;
61110 };
ebd8d4e8 61111
8b095871
IC
61112 Red.prototype.shl = function shl (a, num) {
61113 this._verify1(a);
61114 return this.imod(a.ushln(num));
61115 };
ebd8d4e8 61116
8b095871
IC
61117 Red.prototype.imul = function imul (a, b) {
61118 this._verify2(a, b);
61119 return this.imod(a.imul(b));
61120 };
ebd8d4e8 61121
8b095871
IC
61122 Red.prototype.mul = function mul (a, b) {
61123 this._verify2(a, b);
61124 return this.imod(a.mul(b));
61125 };
ebd8d4e8 61126
8b095871
IC
61127 Red.prototype.isqr = function isqr (a) {
61128 return this.imul(a, a.clone());
61129 };
61130
61131 Red.prototype.sqr = function sqr (a) {
61132 return this.mul(a, a);
61133 };
ebd8d4e8 61134
8b095871
IC
61135 Red.prototype.sqrt = function sqrt (a) {
61136 if (a.isZero()) return a.clone();
ebd8d4e8 61137
8b095871
IC
61138 var mod3 = this.m.andln(3);
61139 assert(mod3 % 2 === 1);
ebd8d4e8 61140
8b095871
IC
61141 // Fast case
61142 if (mod3 === 3) {
61143 var pow = this.m.add(new BN(1)).iushrn(2);
61144 return this.pow(a, pow);
61145 }
ebd8d4e8 61146
8b095871
IC
61147 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
61148 //
61149 // Find Q and S, that Q * 2 ^ S = (P - 1)
61150 var q = this.m.subn(1);
61151 var s = 0;
61152 while (!q.isZero() && q.andln(1) === 0) {
61153 s++;
61154 q.iushrn(1);
61155 }
61156 assert(!q.isZero());
ebd8d4e8 61157
8b095871
IC
61158 var one = new BN(1).toRed(this);
61159 var nOne = one.redNeg();
ebd8d4e8 61160
8b095871
IC
61161 // Find quadratic non-residue
61162 // NOTE: Max is such because of generalized Riemann hypothesis.
61163 var lpow = this.m.subn(1).iushrn(1);
61164 var z = this.m.bitLength();
61165 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 61166
8b095871
IC
61167 while (this.pow(z, lpow).cmp(nOne) !== 0) {
61168 z.redIAdd(nOne);
61169 }
ebd8d4e8 61170
8b095871
IC
61171 var c = this.pow(z, q);
61172 var r = this.pow(a, q.addn(1).iushrn(1));
61173 var t = this.pow(a, q);
61174 var m = s;
61175 while (t.cmp(one) !== 0) {
61176 var tmp = t;
61177 for (var i = 0; tmp.cmp(one) !== 0; i++) {
61178 tmp = tmp.redSqr();
61179 }
61180 assert(i < m);
61181 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 61182
8b095871
IC
61183 r = r.redMul(b);
61184 c = b.redSqr();
61185 t = t.redMul(c);
61186 m = i;
61187 }
ebd8d4e8 61188
8b095871
IC
61189 return r;
61190 };
ebd8d4e8 61191
8b095871
IC
61192 Red.prototype.invm = function invm (a) {
61193 var inv = a._invmp(this.m);
61194 if (inv.negative !== 0) {
61195 inv.negative = 0;
61196 return this.imod(inv).redNeg();
61197 } else {
61198 return this.imod(inv);
61199 }
61200 };
ebd8d4e8 61201
8b095871
IC
61202 Red.prototype.pow = function pow (a, num) {
61203 if (num.isZero()) return new BN(1);
61204 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 61205
8b095871
IC
61206 var windowSize = 4;
61207 var wnd = new Array(1 << windowSize);
61208 wnd[0] = new BN(1).toRed(this);
61209 wnd[1] = a;
61210 for (var i = 2; i < wnd.length; i++) {
61211 wnd[i] = this.mul(wnd[i - 1], a);
61212 }
ebd8d4e8 61213
8b095871
IC
61214 var res = wnd[0];
61215 var current = 0;
61216 var currentLen = 0;
61217 var start = num.bitLength() % 26;
61218 if (start === 0) {
61219 start = 26;
61220 }
ebd8d4e8 61221
8b095871
IC
61222 for (i = num.length - 1; i >= 0; i--) {
61223 var word = num.words[i];
61224 for (var j = start - 1; j >= 0; j--) {
61225 var bit = (word >> j) & 1;
61226 if (res !== wnd[0]) {
61227 res = this.sqr(res);
61228 }
ebd8d4e8 61229
8b095871
IC
61230 if (bit === 0 && current === 0) {
61231 currentLen = 0;
61232 continue;
61233 }
ebd8d4e8 61234
8b095871
IC
61235 current <<= 1;
61236 current |= bit;
61237 currentLen++;
61238 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 61239
8b095871
IC
61240 res = this.mul(res, wnd[current]);
61241 currentLen = 0;
61242 current = 0;
61243 }
61244 start = 26;
61245 }
ebd8d4e8 61246
8b095871
IC
61247 return res;
61248 };
ebd8d4e8 61249
8b095871
IC
61250 Red.prototype.convertTo = function convertTo (num) {
61251 var r = num.umod(this.m);
ebd8d4e8 61252
8b095871
IC
61253 return r === num ? r.clone() : r;
61254 };
ebd8d4e8 61255
8b095871
IC
61256 Red.prototype.convertFrom = function convertFrom (num) {
61257 var res = num.clone();
61258 res.red = null;
61259 return res;
61260 };
ebd8d4e8 61261
8b095871
IC
61262 //
61263 // Montgomery method engine
61264 //
ebd8d4e8 61265
8b095871
IC
61266 BN.mont = function mont (num) {
61267 return new Mont(num);
61268 };
ebd8d4e8 61269
8b095871
IC
61270 function Mont (m) {
61271 Red.call(this, m);
ebd8d4e8 61272
8b095871
IC
61273 this.shift = this.m.bitLength();
61274 if (this.shift % 26 !== 0) {
61275 this.shift += 26 - (this.shift % 26);
61276 }
ebd8d4e8 61277
8b095871
IC
61278 this.r = new BN(1).iushln(this.shift);
61279 this.r2 = this.imod(this.r.sqr());
61280 this.rinv = this.r._invmp(this.m);
61281
61282 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
61283 this.minv = this.minv.umod(this.r);
61284 this.minv = this.r.sub(this.minv);
ebd8d4e8 61285 }
8b095871 61286 inherits(Mont, Red);
ebd8d4e8 61287
8b095871
IC
61288 Mont.prototype.convertTo = function convertTo (num) {
61289 return this.imod(num.ushln(this.shift));
61290 };
ab78acc6 61291
8b095871
IC
61292 Mont.prototype.convertFrom = function convertFrom (num) {
61293 var r = this.imod(num.mul(this.rinv));
61294 r.red = null;
61295 return r;
61296 };
ebd8d4e8 61297
8b095871
IC
61298 Mont.prototype.imul = function imul (a, b) {
61299 if (a.isZero() || b.isZero()) {
61300 a.words[0] = 0;
61301 a.length = 1;
61302 return a;
61303 }
ebd8d4e8 61304
8b095871
IC
61305 var t = a.imul(b);
61306 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
61307 var u = t.isub(c).iushrn(this.shift);
61308 var res = u;
ab78acc6 61309
8b095871
IC
61310 if (u.cmp(this.m) >= 0) {
61311 res = u.isub(this.m);
61312 } else if (u.cmpn(0) < 0) {
61313 res = u.iadd(this.m);
61314 }
ab78acc6 61315
8b095871
IC
61316 return res._forceRed(this);
61317 };
ab78acc6 61318
8b095871
IC
61319 Mont.prototype.mul = function mul (a, b) {
61320 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 61321
8b095871
IC
61322 var t = a.mul(b);
61323 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
61324 var u = t.isub(c).iushrn(this.shift);
61325 var res = u;
61326 if (u.cmp(this.m) >= 0) {
61327 res = u.isub(this.m);
61328 } else if (u.cmpn(0) < 0) {
61329 res = u.iadd(this.m);
61330 }
ab78acc6 61331
8b095871
IC
61332 return res._forceRed(this);
61333 };
ab78acc6 61334
8b095871
IC
61335 Mont.prototype.invm = function invm (a) {
61336 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
61337 var res = this.imod(a._invmp(this.m).mul(this.r2));
61338 return res._forceRed(this);
61339 };
61340})(typeof module === 'undefined' || module, this);
ab78acc6 61341
8b095871
IC
61342},{}],34:[function(require,module,exports){
61343var r;
ebd8d4e8 61344
8b095871
IC
61345module.exports = function rand(len) {
61346 if (!r)
61347 r = new Rand(null);
ebd8d4e8 61348
8b095871
IC
61349 return r.generate(len);
61350};
ab78acc6 61351
8b095871
IC
61352function Rand(rand) {
61353 this.rand = rand;
ab78acc6 61354}
8b095871 61355module.exports.Rand = Rand;
ab78acc6 61356
8b095871
IC
61357Rand.prototype.generate = function generate(len) {
61358 return this._rand(len);
61359};
ab78acc6 61360
8b095871
IC
61361if (typeof self === 'object') {
61362 if (self.crypto && self.crypto.getRandomValues) {
61363 // Modern browsers
61364 Rand.prototype._rand = function _rand(n) {
61365 var arr = new Uint8Array(n);
61366 self.crypto.getRandomValues(arr);
61367 return arr;
61368 };
61369 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
61370 // IE
61371 Rand.prototype._rand = function _rand(n) {
61372 var arr = new Uint8Array(n);
61373 self.msCrypto.getRandomValues(arr);
61374 return arr;
61375 };
61376 } else {
61377 // Old junk
61378 Rand.prototype._rand = function() {
61379 throw new Error('Not implemented yet');
61380 };
61381 }
61382} else {
61383 // Node.js or Web worker with no crypto support
61384 try {
61385 var crypto = require('crypto');
ab78acc6 61386
8b095871
IC
61387 Rand.prototype._rand = function _rand(n) {
61388 return crypto.randomBytes(n);
61389 };
61390 } catch (e) {
61391 // Emulate crypto API using randy
61392 Rand.prototype._rand = function _rand(n) {
61393 var res = new Uint8Array(n);
61394 for (var i = 0; i < res.length; i++)
61395 res[i] = this.rand.getByte();
61396 return res;
61397 };
61398 }
61399}
61400
61401},{"crypto":3}],35:[function(require,module,exports){
61402(function (Buffer){
61403var Transform = require('stream').Transform
61404var inherits = require('inherits')
61405var StringDecoder = require('string_decoder').StringDecoder
61406module.exports = CipherBase
61407inherits(CipherBase, Transform)
61408function CipherBase (hashMode) {
61409 Transform.call(this)
61410 this.hashMode = typeof hashMode === 'string'
61411 if (this.hashMode) {
61412 this[hashMode] = this._finalOrDigest
61413 } else {
61414 this.final = this._finalOrDigest
61415 }
61416 this._decoder = null
61417 this._encoding = null
61418}
61419CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
61420 if (typeof data === 'string') {
61421 data = new Buffer(data, inputEnc)
61422 }
61423 var outData = this._update(data)
61424 if (this.hashMode) {
61425 return this
61426 }
61427 if (outputEnc) {
61428 outData = this._toString(outData, outputEnc)
61429 }
61430 return outData
61431}
ab78acc6 61432
8b095871 61433CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 61434
8b095871
IC
61435CipherBase.prototype.getAuthTag = function () {
61436 throw new Error('trying to get auth tag in unsupported state')
61437}
ab78acc6 61438
8b095871
IC
61439CipherBase.prototype.setAuthTag = function () {
61440 throw new Error('trying to set auth tag in unsupported state')
61441}
ab78acc6 61442
8b095871
IC
61443CipherBase.prototype.setAAD = function () {
61444 throw new Error('trying to set aad in unsupported state')
61445}
ab78acc6 61446
8b095871
IC
61447CipherBase.prototype._transform = function (data, _, next) {
61448 var err
61449 try {
61450 if (this.hashMode) {
61451 this._update(data)
61452 } else {
61453 this.push(this._update(data))
61454 }
61455 } catch (e) {
61456 err = e
61457 } finally {
61458 next(err)
61459 }
61460}
61461CipherBase.prototype._flush = function (done) {
61462 var err
61463 try {
61464 this.push(this._final())
61465 } catch (e) {
61466 err = e
61467 } finally {
61468 done(err)
61469 }
61470}
61471CipherBase.prototype._finalOrDigest = function (outputEnc) {
61472 var outData = this._final() || new Buffer('')
61473 if (outputEnc) {
61474 outData = this._toString(outData, outputEnc, true)
61475 }
61476 return outData
61477}
ebd8d4e8 61478
8b095871
IC
61479CipherBase.prototype._toString = function (value, enc, fin) {
61480 if (!this._decoder) {
61481 this._decoder = new StringDecoder(enc)
61482 this._encoding = enc
61483 }
61484 if (this._encoding !== enc) {
61485 throw new Error('can\'t switch encodings')
61486 }
61487 var out = this._decoder.write(value)
61488 if (fin) {
61489 out += this._decoder.end()
ab78acc6 61490 }
8b095871
IC
61491 return out
61492}
ab78acc6 61493
8b095871
IC
61494}).call(this,require("buffer").Buffer)
61495},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
61496(function (Buffer){
61497'use strict';
61498var inherits = require('inherits')
61499var md5 = require('./md5')
61500var rmd160 = require('ripemd160')
61501var sha = require('sha.js')
ebd8d4e8 61502
8b095871 61503var Base = require('cipher-base')
ebd8d4e8 61504
8b095871
IC
61505function HashNoConstructor(hash) {
61506 Base.call(this, 'digest')
ebd8d4e8 61507
8b095871
IC
61508 this._hash = hash
61509 this.buffers = []
61510}
ebd8d4e8 61511
8b095871 61512inherits(HashNoConstructor, Base)
ebd8d4e8 61513
8b095871
IC
61514HashNoConstructor.prototype._update = function (data) {
61515 this.buffers.push(data)
61516}
ebd8d4e8 61517
8b095871
IC
61518HashNoConstructor.prototype._final = function () {
61519 var buf = Buffer.concat(this.buffers)
61520 var r = this._hash(buf)
61521 this.buffers = null
ebd8d4e8 61522
8b095871
IC
61523 return r
61524}
ab78acc6 61525
8b095871
IC
61526function Hash(hash) {
61527 Base.call(this, 'digest')
ab78acc6 61528
8b095871
IC
61529 this._hash = hash
61530}
ab78acc6 61531
8b095871 61532inherits(Hash, Base)
ab78acc6 61533
8b095871
IC
61534Hash.prototype._update = function (data) {
61535 this._hash.update(data)
61536}
ab78acc6 61537
8b095871
IC
61538Hash.prototype._final = function () {
61539 return this._hash.digest()
61540}
ab78acc6 61541
8b095871
IC
61542module.exports = function createHash (alg) {
61543 alg = alg.toLowerCase()
61544 if ('md5' === alg) return new HashNoConstructor(md5)
61545 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
61546
61547 return new Hash(sha(alg))
ab78acc6
IC
61548}
61549
8b095871
IC
61550}).call(this,require("buffer").Buffer)
61551},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
61552(function (Buffer){
61553'use strict';
61554var intSize = 4;
61555var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
61556var chrsz = 8;
ab78acc6 61557
8b095871
IC
61558function toArray(buf, bigEndian) {
61559 if ((buf.length % intSize) !== 0) {
61560 var len = buf.length + (intSize - (buf.length % intSize));
61561 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
61562 }
61563
8b095871
IC
61564 var arr = [];
61565 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
61566 for (var i = 0; i < buf.length; i += intSize) {
61567 arr.push(fn.call(buf, i));
61568 }
61569 return arr;
ab78acc6
IC
61570}
61571
8b095871
IC
61572function toBuffer(arr, size, bigEndian) {
61573 var buf = new Buffer(size);
61574 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
61575 for (var i = 0; i < arr.length; i++) {
61576 fn.call(buf, arr[i], i * 4, true);
61577 }
61578 return buf;
61579}
ab78acc6 61580
8b095871
IC
61581function hash(buf, fn, hashSize, bigEndian) {
61582 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
61583 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
61584 return toBuffer(arr, hashSize, bigEndian);
61585}
61586exports.hash = hash;
ab78acc6 61587}).call(this,require("buffer").Buffer)
8b095871 61588},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 61589'use strict';
8b095871
IC
61590/*
61591 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
61592 * Digest Algorithm, as defined in RFC 1321.
61593 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
61594 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
61595 * Distributed under the BSD License
61596 * See http://pajhome.org.uk/crypt/md5 for more info.
61597 */
ebd8d4e8 61598
8b095871 61599var helpers = require('./helpers');
ebd8d4e8 61600
8b095871
IC
61601/*
61602 * Calculate the MD5 of an array of little-endian words, and a bit length
61603 */
61604function core_md5(x, len)
61605{
61606 /* append padding */
61607 x[len >> 5] |= 0x80 << ((len) % 32);
61608 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 61609
8b095871
IC
61610 var a = 1732584193;
61611 var b = -271733879;
61612 var c = -1732584194;
61613 var d = 271733878;
ebd8d4e8 61614
8b095871
IC
61615 for(var i = 0; i < x.length; i += 16)
61616 {
61617 var olda = a;
61618 var oldb = b;
61619 var oldc = c;
61620 var oldd = d;
ebd8d4e8 61621
8b095871
IC
61622 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
61623 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
61624 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
61625 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
61626 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
61627 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
61628 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
61629 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
61630 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
61631 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
61632 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
61633 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
61634 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
61635 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
61636 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
61637 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 61638
8b095871
IC
61639 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
61640 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
61641 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
61642 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
61643 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
61644 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
61645 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
61646 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
61647 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
61648 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
61649 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
61650 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
61651 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
61652 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
61653 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
61654 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 61655
8b095871
IC
61656 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
61657 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
61658 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
61659 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
61660 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
61661 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
61662 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
61663 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
61664 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
61665 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
61666 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
61667 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
61668 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
61669 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
61670 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
61671 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 61672
8b095871
IC
61673 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
61674 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
61675 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
61676 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
61677 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
61678 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
61679 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
61680 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
61681 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
61682 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
61683 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
61684 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
61685 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
61686 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
61687 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
61688 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 61689
8b095871
IC
61690 a = safe_add(a, olda);
61691 b = safe_add(b, oldb);
61692 c = safe_add(c, oldc);
61693 d = safe_add(d, oldd);
ab78acc6 61694 }
8b095871 61695 return Array(a, b, c, d);
ebd8d4e8 61696
ab78acc6 61697}
ebd8d4e8 61698
8b095871
IC
61699/*
61700 * These functions implement the four basic operations the algorithm uses.
61701 */
61702function md5_cmn(q, a, b, x, s, t)
61703{
61704 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 61705}
8b095871
IC
61706function md5_ff(a, b, c, d, x, s, t)
61707{
61708 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 61709}
8b095871
IC
61710function md5_gg(a, b, c, d, x, s, t)
61711{
61712 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 61713}
8b095871
IC
61714function md5_hh(a, b, c, d, x, s, t)
61715{
61716 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
61717}
61718function md5_ii(a, b, c, d, x, s, t)
61719{
61720 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 61721}
ebd8d4e8 61722
8b095871
IC
61723/*
61724 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
61725 * to work around bugs in some JS interpreters.
61726 */
61727function safe_add(x, y)
61728{
61729 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
61730 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
61731 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 61732}
ebd8d4e8 61733
8b095871
IC
61734/*
61735 * Bitwise rotate a 32-bit number to the left.
61736 */
61737function bit_rol(num, cnt)
61738{
61739 return (num << cnt) | (num >>> (32 - cnt));
61740}
ebd8d4e8 61741
8b095871
IC
61742module.exports = function md5(buf) {
61743 return helpers.hash(buf, core_md5, 16);
61744};
61745},{"./helpers":37}],39:[function(require,module,exports){
61746'use strict';
ebd8d4e8 61747
8b095871 61748var elliptic = exports;
ebd8d4e8 61749
8b095871
IC
61750elliptic.version = require('../package.json').version;
61751elliptic.utils = require('./elliptic/utils');
61752elliptic.rand = require('brorand');
61753elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
61754elliptic.curve = require('./elliptic/curve');
61755elliptic.curves = require('./elliptic/curves');
ebd8d4e8 61756
8b095871
IC
61757// Protocols
61758elliptic.ec = require('./elliptic/ec');
61759elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 61760
8b095871
IC
61761},{"../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){
61762'use strict';
ebd8d4e8 61763
8b095871
IC
61764var BN = require('bn.js');
61765var elliptic = require('../../elliptic');
61766var utils = elliptic.utils;
61767var getNAF = utils.getNAF;
61768var getJSF = utils.getJSF;
61769var assert = utils.assert;
61770
61771function BaseCurve(type, conf) {
61772 this.type = type;
61773 this.p = new BN(conf.p, 16);
61774
61775 // Use Montgomery, when there is no fast reduction for the prime
61776 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
61777
61778 // Useful for many curves
61779 this.zero = new BN(0).toRed(this.red);
61780 this.one = new BN(1).toRed(this.red);
61781 this.two = new BN(2).toRed(this.red);
61782
61783 // Curve configuration, optional
61784 this.n = conf.n && new BN(conf.n, 16);
61785 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
61786
61787 // Temporary arrays
61788 this._wnafT1 = new Array(4);
61789 this._wnafT2 = new Array(4);
61790 this._wnafT3 = new Array(4);
61791 this._wnafT4 = new Array(4);
61792
61793 // Generalized Greg Maxwell's trick
61794 var adjustCount = this.n && this.p.div(this.n);
61795 if (!adjustCount || adjustCount.cmpn(100) > 0) {
61796 this.redN = null;
61797 } else {
61798 this._maxwellTrick = true;
61799 this.redN = this.n.toRed(this.red);
ebd8d4e8 61800 }
ebd8d4e8 61801}
8b095871 61802module.exports = BaseCurve;
ebd8d4e8 61803
8b095871
IC
61804BaseCurve.prototype.point = function point() {
61805 throw new Error('Not implemented');
61806};
ebd8d4e8 61807
8b095871
IC
61808BaseCurve.prototype.validate = function validate() {
61809 throw new Error('Not implemented');
61810};
ebd8d4e8 61811
8b095871
IC
61812BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
61813 assert(p.precomputed);
61814 var doubles = p._getDoubles();
ebd8d4e8 61815
8b095871
IC
61816 var naf = getNAF(k, 1);
61817 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
61818 I /= 3;
ebd8d4e8 61819
8b095871
IC
61820 // Translate into more windowed form
61821 var repr = [];
61822 for (var j = 0; j < naf.length; j += doubles.step) {
61823 var nafW = 0;
61824 for (var k = j + doubles.step - 1; k >= j; k--)
61825 nafW = (nafW << 1) + naf[k];
61826 repr.push(nafW);
61827 }
ebd8d4e8 61828
8b095871
IC
61829 var a = this.jpoint(null, null, null);
61830 var b = this.jpoint(null, null, null);
61831 for (var i = I; i > 0; i--) {
61832 for (var j = 0; j < repr.length; j++) {
61833 var nafW = repr[j];
61834 if (nafW === i)
61835 b = b.mixedAdd(doubles.points[j]);
61836 else if (nafW === -i)
61837 b = b.mixedAdd(doubles.points[j].neg());
61838 }
61839 a = a.add(b);
61840 }
61841 return a.toP();
61842};
ebd8d4e8 61843
8b095871
IC
61844BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
61845 var w = 4;
ebd8d4e8 61846
8b095871
IC
61847 // Precompute window
61848 var nafPoints = p._getNAFPoints(w);
61849 w = nafPoints.wnd;
61850 var wnd = nafPoints.points;
ebd8d4e8 61851
8b095871
IC
61852 // Get NAF form
61853 var naf = getNAF(k, w);
ebd8d4e8 61854
8b095871
IC
61855 // Add `this`*(N+1) for every w-NAF index
61856 var acc = this.jpoint(null, null, null);
61857 for (var i = naf.length - 1; i >= 0; i--) {
61858 // Count zeroes
61859 for (var k = 0; i >= 0 && naf[i] === 0; i--)
61860 k++;
61861 if (i >= 0)
61862 k++;
61863 acc = acc.dblp(k);
ebd8d4e8 61864
8b095871
IC
61865 if (i < 0)
61866 break;
61867 var z = naf[i];
61868 assert(z !== 0);
61869 if (p.type === 'affine') {
61870 // J +- P
61871 if (z > 0)
61872 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
61873 else
61874 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
61875 } else {
61876 // J +- J
61877 if (z > 0)
61878 acc = acc.add(wnd[(z - 1) >> 1]);
61879 else
61880 acc = acc.add(wnd[(-z - 1) >> 1].neg());
61881 }
ebd8d4e8 61882 }
8b095871
IC
61883 return p.type === 'affine' ? acc.toP() : acc;
61884};
ebd8d4e8 61885
8b095871
IC
61886BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
61887 points,
61888 coeffs,
61889 len,
61890 jacobianResult) {
61891 var wndWidth = this._wnafT1;
61892 var wnd = this._wnafT2;
61893 var naf = this._wnafT3;
61894
61895 // Fill all arrays
61896 var max = 0;
61897 for (var i = 0; i < len; i++) {
61898 var p = points[i];
61899 var nafPoints = p._getNAFPoints(defW);
61900 wndWidth[i] = nafPoints.wnd;
61901 wnd[i] = nafPoints.points;
61902 }
61903
61904 // Comb small window NAFs
61905 for (var i = len - 1; i >= 1; i -= 2) {
61906 var a = i - 1;
61907 var b = i;
61908 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
61909 naf[a] = getNAF(coeffs[a], wndWidth[a]);
61910 naf[b] = getNAF(coeffs[b], wndWidth[b]);
61911 max = Math.max(naf[a].length, max);
61912 max = Math.max(naf[b].length, max);
61913 continue;
61914 }
ebd8d4e8 61915
8b095871
IC
61916 var comb = [
61917 points[a], /* 1 */
61918 null, /* 3 */
61919 null, /* 5 */
61920 points[b] /* 7 */
61921 ];
61922
61923 // Try to avoid Projective points, if possible
61924 if (points[a].y.cmp(points[b].y) === 0) {
61925 comb[1] = points[a].add(points[b]);
61926 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
61927 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
61928 comb[1] = points[a].toJ().mixedAdd(points[b]);
61929 comb[2] = points[a].add(points[b].neg());
61930 } else {
61931 comb[1] = points[a].toJ().mixedAdd(points[b]);
61932 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
61933 }
ebd8d4e8 61934
8b095871
IC
61935 var index = [
61936 -3, /* -1 -1 */
61937 -1, /* -1 0 */
61938 -5, /* -1 1 */
61939 -7, /* 0 -1 */
61940 0, /* 0 0 */
61941 7, /* 0 1 */
61942 5, /* 1 -1 */
61943 1, /* 1 0 */
61944 3 /* 1 1 */
61945 ];
ebd8d4e8 61946
8b095871
IC
61947 var jsf = getJSF(coeffs[a], coeffs[b]);
61948 max = Math.max(jsf[0].length, max);
61949 naf[a] = new Array(max);
61950 naf[b] = new Array(max);
61951 for (var j = 0; j < max; j++) {
61952 var ja = jsf[0][j] | 0;
61953 var jb = jsf[1][j] | 0;
ebd8d4e8 61954
8b095871
IC
61955 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
61956 naf[b][j] = 0;
61957 wnd[a] = comb;
61958 }
61959 }
ebd8d4e8 61960
8b095871
IC
61961 var acc = this.jpoint(null, null, null);
61962 var tmp = this._wnafT4;
61963 for (var i = max; i >= 0; i--) {
61964 var k = 0;
ebd8d4e8 61965
8b095871
IC
61966 while (i >= 0) {
61967 var zero = true;
61968 for (var j = 0; j < len; j++) {
61969 tmp[j] = naf[j][i] | 0;
61970 if (tmp[j] !== 0)
61971 zero = false;
61972 }
61973 if (!zero)
61974 break;
61975 k++;
61976 i--;
61977 }
61978 if (i >= 0)
61979 k++;
61980 acc = acc.dblp(k);
61981 if (i < 0)
61982 break;
ebd8d4e8 61983
8b095871
IC
61984 for (var j = 0; j < len; j++) {
61985 var z = tmp[j];
61986 var p;
61987 if (z === 0)
61988 continue;
61989 else if (z > 0)
61990 p = wnd[j][(z - 1) >> 1];
61991 else if (z < 0)
61992 p = wnd[j][(-z - 1) >> 1].neg();
61993
61994 if (p.type === 'affine')
61995 acc = acc.mixedAdd(p);
61996 else
61997 acc = acc.add(p);
61998 }
61999 }
62000 // Zeroify references
62001 for (var i = 0; i < len; i++)
62002 wnd[i] = null;
ebd8d4e8 62003
8b095871
IC
62004 if (jacobianResult)
62005 return acc;
62006 else
62007 return acc.toP();
62008};
ebd8d4e8 62009
8b095871
IC
62010function BasePoint(curve, type) {
62011 this.curve = curve;
62012 this.type = type;
62013 this.precomputed = null;
62014}
62015BaseCurve.BasePoint = BasePoint;
ebd8d4e8 62016
8b095871
IC
62017BasePoint.prototype.eq = function eq(/*other*/) {
62018 throw new Error('Not implemented');
62019};
ebd8d4e8 62020
8b095871
IC
62021BasePoint.prototype.validate = function validate() {
62022 return this.curve.validate(this);
62023};
ebd8d4e8 62024
8b095871
IC
62025BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62026 bytes = utils.toArray(bytes, enc);
ebd8d4e8 62027
8b095871 62028 var len = this.p.byteLength();
ebd8d4e8 62029
8b095871
IC
62030 // uncompressed, hybrid-odd, hybrid-even
62031 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
62032 bytes.length - 1 === 2 * len) {
62033 if (bytes[0] === 0x06)
62034 assert(bytes[bytes.length - 1] % 2 === 0);
62035 else if (bytes[0] === 0x07)
62036 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 62037
8b095871
IC
62038 var res = this.point(bytes.slice(1, 1 + len),
62039 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 62040
8b095871
IC
62041 return res;
62042 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
62043 bytes.length - 1 === len) {
62044 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 62045 }
8b095871
IC
62046 throw new Error('Unknown point format');
62047};
ebd8d4e8 62048
8b095871
IC
62049BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
62050 return this.encode(enc, true);
62051};
62052
62053BasePoint.prototype._encode = function _encode(compact) {
62054 var len = this.curve.p.byteLength();
62055 var x = this.getX().toArray('be', len);
62056
62057 if (compact)
62058 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
62059
62060 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
62061};
62062
62063BasePoint.prototype.encode = function encode(enc, compact) {
62064 return utils.encode(this._encode(compact), enc);
62065};
62066
62067BasePoint.prototype.precompute = function precompute(power) {
62068 if (this.precomputed)
62069 return this;
62070
62071 var precomputed = {
62072 doubles: null,
62073 naf: null,
62074 beta: null
62075 };
62076 precomputed.naf = this._getNAFPoints(8);
62077 precomputed.doubles = this._getDoubles(4, power);
62078 precomputed.beta = this._getBeta();
62079 this.precomputed = precomputed;
62080
62081 return this;
62082};
62083
62084BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
62085 if (!this.precomputed)
62086 return false;
62087
62088 var doubles = this.precomputed.doubles;
62089 if (!doubles)
62090 return false;
62091
62092 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
62093};
62094
62095BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
62096 if (this.precomputed && this.precomputed.doubles)
62097 return this.precomputed.doubles;
62098
62099 var doubles = [ this ];
62100 var acc = this;
62101 for (var i = 0; i < power; i += step) {
62102 for (var j = 0; j < step; j++)
62103 acc = acc.dbl();
62104 doubles.push(acc);
ebd8d4e8 62105 }
8b095871
IC
62106 return {
62107 step: step,
62108 points: doubles
62109 };
62110};
ebd8d4e8 62111
8b095871
IC
62112BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
62113 if (this.precomputed && this.precomputed.naf)
62114 return this.precomputed.naf;
ebd8d4e8 62115
8b095871
IC
62116 var res = [ this ];
62117 var max = (1 << wnd) - 1;
62118 var dbl = max === 1 ? null : this.dbl();
62119 for (var i = 1; i < max; i++)
62120 res[i] = res[i - 1].add(dbl);
62121 return {
62122 wnd: wnd,
62123 points: res
62124 };
62125};
ebd8d4e8 62126
8b095871
IC
62127BasePoint.prototype._getBeta = function _getBeta() {
62128 return null;
62129};
ebd8d4e8 62130
8b095871
IC
62131BasePoint.prototype.dblp = function dblp(k) {
62132 var r = this;
62133 for (var i = 0; i < k; i++)
62134 r = r.dbl();
62135 return r;
62136};
ebd8d4e8 62137
8b095871
IC
62138},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
62139'use strict';
ebd8d4e8 62140
8b095871
IC
62141var curve = require('../curve');
62142var elliptic = require('../../elliptic');
62143var BN = require('bn.js');
62144var inherits = require('inherits');
62145var Base = curve.base;
ebd8d4e8 62146
8b095871 62147var assert = elliptic.utils.assert;
ebd8d4e8 62148
8b095871
IC
62149function EdwardsCurve(conf) {
62150 // NOTE: Important as we are creating point in Base.call()
62151 this.twisted = (conf.a | 0) !== 1;
62152 this.mOneA = this.twisted && (conf.a | 0) === -1;
62153 this.extended = this.mOneA;
62154
62155 Base.call(this, 'edwards', conf);
62156
62157 this.a = new BN(conf.a, 16).umod(this.red.m);
62158 this.a = this.a.toRed(this.red);
62159 this.c = new BN(conf.c, 16).toRed(this.red);
62160 this.c2 = this.c.redSqr();
62161 this.d = new BN(conf.d, 16).toRed(this.red);
62162 this.dd = this.d.redAdd(this.d);
62163
62164 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
62165 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 62166}
8b095871
IC
62167inherits(EdwardsCurve, Base);
62168module.exports = EdwardsCurve;
ebd8d4e8 62169
8b095871
IC
62170EdwardsCurve.prototype._mulA = function _mulA(num) {
62171 if (this.mOneA)
62172 return num.redNeg();
62173 else
62174 return this.a.redMul(num);
62175};
ebd8d4e8 62176
8b095871
IC
62177EdwardsCurve.prototype._mulC = function _mulC(num) {
62178 if (this.oneC)
62179 return num;
62180 else
62181 return this.c.redMul(num);
62182};
ebd8d4e8 62183
8b095871
IC
62184// Just for compatibility with Short curve
62185EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
62186 return this.point(x, y, z, t);
62187};
ebd8d4e8 62188
8b095871
IC
62189EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
62190 x = new BN(x, 16);
62191 if (!x.red)
62192 x = x.toRed(this.red);
ebd8d4e8 62193
8b095871
IC
62194 var x2 = x.redSqr();
62195 var rhs = this.c2.redSub(this.a.redMul(x2));
62196 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
62197
62198 var y2 = rhs.redMul(lhs.redInvm());
62199 var y = y2.redSqrt();
62200 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62201 throw new Error('invalid point');
62202
62203 var isOdd = y.fromRed().isOdd();
62204 if (odd && !isOdd || !odd && isOdd)
62205 y = y.redNeg();
62206
62207 return this.point(x, y);
62208};
62209
62210EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
62211 y = new BN(y, 16);
62212 if (!y.red)
62213 y = y.toRed(this.red);
62214
62215 // x^2 = (y^2 - 1) / (d y^2 + 1)
62216 var y2 = y.redSqr();
62217 var lhs = y2.redSub(this.one);
62218 var rhs = y2.redMul(this.d).redAdd(this.one);
62219 var x2 = lhs.redMul(rhs.redInvm());
62220
62221 if (x2.cmp(this.zero) === 0) {
62222 if (odd)
62223 throw new Error('invalid point');
62224 else
62225 return this.point(this.zero, y);
ebd8d4e8
IC
62226 }
62227
8b095871
IC
62228 var x = x2.redSqrt();
62229 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
62230 throw new Error('invalid point');
ebd8d4e8 62231
8b095871
IC
62232 if (x.isOdd() !== odd)
62233 x = x.redNeg();
ebd8d4e8 62234
8b095871
IC
62235 return this.point(x, y);
62236};
ebd8d4e8 62237
8b095871
IC
62238EdwardsCurve.prototype.validate = function validate(point) {
62239 if (point.isInfinity())
62240 return true;
ebd8d4e8 62241
8b095871
IC
62242 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
62243 point.normalize();
ebd8d4e8 62244
8b095871
IC
62245 var x2 = point.x.redSqr();
62246 var y2 = point.y.redSqr();
62247 var lhs = x2.redMul(this.a).redAdd(y2);
62248 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 62249
8b095871
IC
62250 return lhs.cmp(rhs) === 0;
62251};
ebd8d4e8 62252
8b095871
IC
62253function Point(curve, x, y, z, t) {
62254 Base.BasePoint.call(this, curve, 'projective');
62255 if (x === null && y === null && z === null) {
62256 this.x = this.curve.zero;
62257 this.y = this.curve.one;
62258 this.z = this.curve.one;
62259 this.t = this.curve.zero;
62260 this.zOne = true;
62261 } else {
62262 this.x = new BN(x, 16);
62263 this.y = new BN(y, 16);
62264 this.z = z ? new BN(z, 16) : this.curve.one;
62265 this.t = t && new BN(t, 16);
62266 if (!this.x.red)
62267 this.x = this.x.toRed(this.curve.red);
62268 if (!this.y.red)
62269 this.y = this.y.toRed(this.curve.red);
62270 if (!this.z.red)
62271 this.z = this.z.toRed(this.curve.red);
62272 if (this.t && !this.t.red)
62273 this.t = this.t.toRed(this.curve.red);
62274 this.zOne = this.z === this.curve.one;
62275
62276 // Use extended coordinates
62277 if (this.curve.extended && !this.t) {
62278 this.t = this.x.redMul(this.y);
62279 if (!this.zOne)
62280 this.t = this.t.redMul(this.z.redInvm());
62281 }
62282 }
62283}
62284inherits(Point, Base.BasePoint);
62285
62286EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62287 return Point.fromJSON(this, obj);
62288};
62289
62290EdwardsCurve.prototype.point = function point(x, y, z, t) {
62291 return new Point(this, x, y, z, t);
62292};
62293
62294Point.fromJSON = function fromJSON(curve, obj) {
62295 return new Point(curve, obj[0], obj[1], obj[2]);
62296};
62297
62298Point.prototype.inspect = function inspect() {
62299 if (this.isInfinity())
62300 return '<EC Point Infinity>';
62301 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62302 ' y: ' + this.y.fromRed().toString(16, 2) +
62303 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62304};
62305
62306Point.prototype.isInfinity = function isInfinity() {
62307 // XXX This code assumes that zero is always zero in red
62308 return this.x.cmpn(0) === 0 &&
62309 this.y.cmp(this.z) === 0;
62310};
62311
62312Point.prototype._extDbl = function _extDbl() {
62313 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62314 // #doubling-dbl-2008-hwcd
62315 // 4M + 4S
62316
62317 // A = X1^2
62318 var a = this.x.redSqr();
62319 // B = Y1^2
62320 var b = this.y.redSqr();
62321 // C = 2 * Z1^2
62322 var c = this.z.redSqr();
62323 c = c.redIAdd(c);
62324 // D = a * A
62325 var d = this.curve._mulA(a);
62326 // E = (X1 + Y1)^2 - A - B
62327 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
62328 // G = D + B
62329 var g = d.redAdd(b);
62330 // F = G - C
62331 var f = g.redSub(c);
62332 // H = D - B
62333 var h = d.redSub(b);
62334 // X3 = E * F
62335 var nx = e.redMul(f);
62336 // Y3 = G * H
62337 var ny = g.redMul(h);
62338 // T3 = E * H
62339 var nt = e.redMul(h);
62340 // Z3 = F * G
62341 var nz = f.redMul(g);
62342 return this.curve.point(nx, ny, nz, nt);
62343};
62344
62345Point.prototype._projDbl = function _projDbl() {
62346 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62347 // #doubling-dbl-2008-bbjlp
62348 // #doubling-dbl-2007-bl
62349 // and others
62350 // Generally 3M + 4S or 2M + 4S
62351
62352 // B = (X1 + Y1)^2
62353 var b = this.x.redAdd(this.y).redSqr();
62354 // C = X1^2
62355 var c = this.x.redSqr();
62356 // D = Y1^2
62357 var d = this.y.redSqr();
62358
62359 var nx;
62360 var ny;
62361 var nz;
62362 if (this.curve.twisted) {
62363 // E = a * C
62364 var e = this.curve._mulA(c);
62365 // F = E + D
62366 var f = e.redAdd(d);
62367 if (this.zOne) {
62368 // X3 = (B - C - D) * (F - 2)
62369 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
62370 // Y3 = F * (E - D)
62371 ny = f.redMul(e.redSub(d));
62372 // Z3 = F^2 - 2 * F
62373 nz = f.redSqr().redSub(f).redSub(f);
62374 } else {
62375 // H = Z1^2
62376 var h = this.z.redSqr();
62377 // J = F - 2 * H
62378 var j = f.redSub(h).redISub(h);
62379 // X3 = (B-C-D)*J
62380 nx = b.redSub(c).redISub(d).redMul(j);
62381 // Y3 = F * (E - D)
62382 ny = f.redMul(e.redSub(d));
62383 // Z3 = F * J
62384 nz = f.redMul(j);
62385 }
62386 } else {
62387 // E = C + D
62388 var e = c.redAdd(d);
62389 // H = (c * Z1)^2
62390 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
62391 // J = E - 2 * H
62392 var j = e.redSub(h).redSub(h);
62393 // X3 = c * (B - E) * J
62394 nx = this.curve._mulC(b.redISub(e)).redMul(j);
62395 // Y3 = c * E * (C - D)
62396 ny = this.curve._mulC(e).redMul(c.redISub(d));
62397 // Z3 = E * J
62398 nz = e.redMul(j);
62399 }
62400 return this.curve.point(nx, ny, nz);
62401};
62402
62403Point.prototype.dbl = function dbl() {
62404 if (this.isInfinity())
62405 return this;
62406
62407 // Double in extended coordinates
62408 if (this.curve.extended)
62409 return this._extDbl();
62410 else
62411 return this._projDbl();
62412};
62413
62414Point.prototype._extAdd = function _extAdd(p) {
62415 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62416 // #addition-add-2008-hwcd-3
62417 // 8M
62418
62419 // A = (Y1 - X1) * (Y2 - X2)
62420 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
62421 // B = (Y1 + X1) * (Y2 + X2)
62422 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
62423 // C = T1 * k * T2
62424 var c = this.t.redMul(this.curve.dd).redMul(p.t);
62425 // D = Z1 * 2 * Z2
62426 var d = this.z.redMul(p.z.redAdd(p.z));
62427 // E = B - A
62428 var e = b.redSub(a);
62429 // F = D - C
62430 var f = d.redSub(c);
62431 // G = D + C
62432 var g = d.redAdd(c);
62433 // H = B + A
62434 var h = b.redAdd(a);
62435 // X3 = E * F
62436 var nx = e.redMul(f);
62437 // Y3 = G * H
62438 var ny = g.redMul(h);
62439 // T3 = E * H
62440 var nt = e.redMul(h);
62441 // Z3 = F * G
62442 var nz = f.redMul(g);
62443 return this.curve.point(nx, ny, nz, nt);
62444};
62445
62446Point.prototype._projAdd = function _projAdd(p) {
62447 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62448 // #addition-add-2008-bbjlp
62449 // #addition-add-2007-bl
62450 // 10M + 1S
62451
62452 // A = Z1 * Z2
62453 var a = this.z.redMul(p.z);
62454 // B = A^2
62455 var b = a.redSqr();
62456 // C = X1 * X2
62457 var c = this.x.redMul(p.x);
62458 // D = Y1 * Y2
62459 var d = this.y.redMul(p.y);
62460 // E = d * C * D
62461 var e = this.curve.d.redMul(c).redMul(d);
62462 // F = B - E
62463 var f = b.redSub(e);
62464 // G = B + E
62465 var g = b.redAdd(e);
62466 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
62467 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
62468 var nx = a.redMul(f).redMul(tmp);
62469 var ny;
62470 var nz;
62471 if (this.curve.twisted) {
62472 // Y3 = A * G * (D - a * C)
62473 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
62474 // Z3 = F * G
62475 nz = f.redMul(g);
62476 } else {
62477 // Y3 = A * G * (D - C)
62478 ny = a.redMul(g).redMul(d.redSub(c));
62479 // Z3 = c * F * G
62480 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 62481 }
8b095871
IC
62482 return this.curve.point(nx, ny, nz);
62483};
ebd8d4e8 62484
8b095871
IC
62485Point.prototype.add = function add(p) {
62486 if (this.isInfinity())
62487 return p;
62488 if (p.isInfinity())
62489 return this;
ebd8d4e8 62490
8b095871
IC
62491 if (this.curve.extended)
62492 return this._extAdd(p);
62493 else
62494 return this._projAdd(p);
62495};
ebd8d4e8 62496
8b095871
IC
62497Point.prototype.mul = function mul(k) {
62498 if (this._hasDoubles(k))
62499 return this.curve._fixedNafMul(this, k);
62500 else
62501 return this.curve._wnafMul(this, k);
62502};
ebd8d4e8 62503
8b095871
IC
62504Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
62505 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
62506};
ebd8d4e8 62507
8b095871
IC
62508Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
62509 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
62510};
ebd8d4e8 62511
8b095871
IC
62512Point.prototype.normalize = function normalize() {
62513 if (this.zOne)
62514 return this;
62515
62516 // Normalize coordinates
62517 var zi = this.z.redInvm();
62518 this.x = this.x.redMul(zi);
62519 this.y = this.y.redMul(zi);
62520 if (this.t)
62521 this.t = this.t.redMul(zi);
62522 this.z = this.curve.one;
62523 this.zOne = true;
62524 return this;
62525};
62526
62527Point.prototype.neg = function neg() {
62528 return this.curve.point(this.x.redNeg(),
62529 this.y,
62530 this.z,
62531 this.t && this.t.redNeg());
62532};
62533
62534Point.prototype.getX = function getX() {
62535 this.normalize();
62536 return this.x.fromRed();
62537};
62538
62539Point.prototype.getY = function getY() {
62540 this.normalize();
62541 return this.y.fromRed();
62542};
62543
62544Point.prototype.eq = function eq(other) {
62545 return this === other ||
62546 this.getX().cmp(other.getX()) === 0 &&
62547 this.getY().cmp(other.getY()) === 0;
62548};
62549
62550Point.prototype.eqXToP = function eqXToP(x) {
62551 var rx = x.toRed(this.curve.red).redMul(this.z);
62552 if (this.x.cmp(rx) === 0)
62553 return true;
ebd8d4e8 62554
8b095871
IC
62555 var xc = x.clone();
62556 var t = this.curve.redN.redMul(this.z);
62557 for (;;) {
62558 xc.iadd(this.curve.n);
62559 if (xc.cmp(this.curve.p) >= 0)
62560 return false;
ebd8d4e8 62561
8b095871
IC
62562 rx.redIAdd(t);
62563 if (this.x.cmp(rx) === 0)
62564 return true;
ebd8d4e8 62565 }
8b095871
IC
62566 return false;
62567};
ebd8d4e8 62568
8b095871
IC
62569// Compatibility with BaseCurve
62570Point.prototype.toP = Point.prototype.normalize;
62571Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 62572
8b095871
IC
62573},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
62574'use strict';
ebd8d4e8 62575
8b095871 62576var curve = exports;
ebd8d4e8 62577
8b095871
IC
62578curve.base = require('./base');
62579curve.short = require('./short');
62580curve.mont = require('./mont');
62581curve.edwards = require('./edwards');
ebd8d4e8 62582
8b095871
IC
62583},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
62584'use strict';
ebd8d4e8 62585
8b095871
IC
62586var curve = require('../curve');
62587var BN = require('bn.js');
62588var inherits = require('inherits');
62589var Base = curve.base;
ebd8d4e8 62590
8b095871
IC
62591var elliptic = require('../../elliptic');
62592var utils = elliptic.utils;
ebd8d4e8 62593
8b095871
IC
62594function MontCurve(conf) {
62595 Base.call(this, 'mont', conf);
ebd8d4e8 62596
8b095871
IC
62597 this.a = new BN(conf.a, 16).toRed(this.red);
62598 this.b = new BN(conf.b, 16).toRed(this.red);
62599 this.i4 = new BN(4).toRed(this.red).redInvm();
62600 this.two = new BN(2).toRed(this.red);
62601 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 62602}
8b095871
IC
62603inherits(MontCurve, Base);
62604module.exports = MontCurve;
ebd8d4e8 62605
8b095871
IC
62606MontCurve.prototype.validate = function validate(point) {
62607 var x = point.normalize().x;
62608 var x2 = x.redSqr();
62609 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
62610 var y = rhs.redSqrt();
ebd8d4e8 62611
8b095871
IC
62612 return y.redSqr().cmp(rhs) === 0;
62613};
ebd8d4e8 62614
8b095871
IC
62615function Point(curve, x, z) {
62616 Base.BasePoint.call(this, curve, 'projective');
62617 if (x === null && z === null) {
62618 this.x = this.curve.one;
62619 this.z = this.curve.zero;
62620 } else {
62621 this.x = new BN(x, 16);
62622 this.z = new BN(z, 16);
62623 if (!this.x.red)
62624 this.x = this.x.toRed(this.curve.red);
62625 if (!this.z.red)
62626 this.z = this.z.toRed(this.curve.red);
62627 }
62628}
62629inherits(Point, Base.BasePoint);
ebd8d4e8 62630
8b095871
IC
62631MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62632 return this.point(utils.toArray(bytes, enc), 1);
62633};
ebd8d4e8 62634
8b095871
IC
62635MontCurve.prototype.point = function point(x, z) {
62636 return new Point(this, x, z);
62637};
ebd8d4e8 62638
8b095871
IC
62639MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62640 return Point.fromJSON(this, obj);
62641};
ebd8d4e8 62642
8b095871
IC
62643Point.prototype.precompute = function precompute() {
62644 // No-op
62645};
ebd8d4e8 62646
8b095871
IC
62647Point.prototype._encode = function _encode() {
62648 return this.getX().toArray('be', this.curve.p.byteLength());
62649};
ebd8d4e8 62650
8b095871
IC
62651Point.fromJSON = function fromJSON(curve, obj) {
62652 return new Point(curve, obj[0], obj[1] || curve.one);
62653};
ebd8d4e8 62654
8b095871
IC
62655Point.prototype.inspect = function inspect() {
62656 if (this.isInfinity())
62657 return '<EC Point Infinity>';
62658 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62659 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62660};
ebd8d4e8 62661
8b095871
IC
62662Point.prototype.isInfinity = function isInfinity() {
62663 // XXX This code assumes that zero is always zero in red
62664 return this.z.cmpn(0) === 0;
62665};
ebd8d4e8 62666
8b095871
IC
62667Point.prototype.dbl = function dbl() {
62668 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
62669 // 2M + 2S + 4A
62670
62671 // A = X1 + Z1
62672 var a = this.x.redAdd(this.z);
62673 // AA = A^2
62674 var aa = a.redSqr();
62675 // B = X1 - Z1
62676 var b = this.x.redSub(this.z);
62677 // BB = B^2
62678 var bb = b.redSqr();
62679 // C = AA - BB
62680 var c = aa.redSub(bb);
62681 // X3 = AA * BB
62682 var nx = aa.redMul(bb);
62683 // Z3 = C * (BB + A24 * C)
62684 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
62685 return this.curve.point(nx, nz);
62686};
ebd8d4e8 62687
8b095871
IC
62688Point.prototype.add = function add() {
62689 throw new Error('Not supported on Montgomery curve');
62690};
ebd8d4e8 62691
8b095871
IC
62692Point.prototype.diffAdd = function diffAdd(p, diff) {
62693 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
62694 // 4M + 2S + 6A
62695
62696 // A = X2 + Z2
62697 var a = this.x.redAdd(this.z);
62698 // B = X2 - Z2
62699 var b = this.x.redSub(this.z);
62700 // C = X3 + Z3
62701 var c = p.x.redAdd(p.z);
62702 // D = X3 - Z3
62703 var d = p.x.redSub(p.z);
62704 // DA = D * A
62705 var da = d.redMul(a);
62706 // CB = C * B
62707 var cb = c.redMul(b);
62708 // X5 = Z1 * (DA + CB)^2
62709 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
62710 // Z5 = X1 * (DA - CB)^2
62711 var nz = diff.x.redMul(da.redISub(cb).redSqr());
62712 return this.curve.point(nx, nz);
62713};
ebd8d4e8 62714
8b095871
IC
62715Point.prototype.mul = function mul(k) {
62716 var t = k.clone();
62717 var a = this; // (N / 2) * Q + Q
62718 var b = this.curve.point(null, null); // (N / 2) * Q
62719 var c = this; // Q
62720
62721 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
62722 bits.push(t.andln(1));
62723
62724 for (var i = bits.length - 1; i >= 0; i--) {
62725 if (bits[i] === 0) {
62726 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
62727 a = a.diffAdd(b, c);
62728 // N * Q = 2 * ((N / 2) * Q + Q))
62729 b = b.dbl();
62730 } else {
62731 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
62732 b = a.diffAdd(b, c);
62733 // N * Q + Q = 2 * ((N / 2) * Q + Q)
62734 a = a.dbl();
62735 }
ebd8d4e8 62736 }
8b095871
IC
62737 return b;
62738};
ebd8d4e8 62739
8b095871
IC
62740Point.prototype.mulAdd = function mulAdd() {
62741 throw new Error('Not supported on Montgomery curve');
62742};
ebd8d4e8 62743
8b095871
IC
62744Point.prototype.jumlAdd = function jumlAdd() {
62745 throw new Error('Not supported on Montgomery curve');
62746};
ebd8d4e8 62747
8b095871
IC
62748Point.prototype.eq = function eq(other) {
62749 return this.getX().cmp(other.getX()) === 0;
62750};
ebd8d4e8 62751
8b095871
IC
62752Point.prototype.normalize = function normalize() {
62753 this.x = this.x.redMul(this.z.redInvm());
62754 this.z = this.curve.one;
62755 return this;
62756};
ebd8d4e8 62757
8b095871
IC
62758Point.prototype.getX = function getX() {
62759 // Normalize coordinates
62760 this.normalize();
62761
62762 return this.x.fromRed();
62763};
62764
62765},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 62766'use strict';
ebd8d4e8 62767
8b095871
IC
62768var curve = require('../curve');
62769var elliptic = require('../../elliptic');
62770var BN = require('bn.js');
62771var inherits = require('inherits');
62772var Base = curve.base;
ab78acc6 62773
8b095871 62774var assert = elliptic.utils.assert;
ebd8d4e8 62775
8b095871
IC
62776function ShortCurve(conf) {
62777 Base.call(this, 'short', conf);
ebd8d4e8 62778
8b095871
IC
62779 this.a = new BN(conf.a, 16).toRed(this.red);
62780 this.b = new BN(conf.b, 16).toRed(this.red);
62781 this.tinv = this.two.redInvm();
ab78acc6 62782
8b095871
IC
62783 this.zeroA = this.a.fromRed().cmpn(0) === 0;
62784 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 62785
8b095871
IC
62786 // If the curve is endomorphic, precalculate beta and lambda
62787 this.endo = this._getEndomorphism(conf);
62788 this._endoWnafT1 = new Array(4);
62789 this._endoWnafT2 = new Array(4);
ebd8d4e8 62790}
8b095871
IC
62791inherits(ShortCurve, Base);
62792module.exports = ShortCurve;
ebd8d4e8 62793
8b095871
IC
62794ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
62795 // No efficient endomorphism
62796 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
62797 return;
ebd8d4e8 62798
8b095871
IC
62799 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
62800 var beta;
62801 var lambda;
62802 if (conf.beta) {
62803 beta = new BN(conf.beta, 16).toRed(this.red);
62804 } else {
62805 var betas = this._getEndoRoots(this.p);
62806 // Choose the smallest beta
62807 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
62808 beta = beta.toRed(this.red);
62809 }
62810 if (conf.lambda) {
62811 lambda = new BN(conf.lambda, 16);
62812 } else {
62813 // Choose the lambda that is matching selected beta
62814 var lambdas = this._getEndoRoots(this.n);
62815 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
62816 lambda = lambdas[0];
62817 } else {
62818 lambda = lambdas[1];
62819 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
62820 }
62821 }
ab78acc6 62822
8b095871
IC
62823 // Get basis vectors, used for balanced length-two representation
62824 var basis;
62825 if (conf.basis) {
62826 basis = conf.basis.map(function(vec) {
62827 return {
62828 a: new BN(vec.a, 16),
62829 b: new BN(vec.b, 16)
62830 };
62831 });
62832 } else {
62833 basis = this._getEndoBasis(lambda);
62834 }
ab78acc6 62835
8b095871
IC
62836 return {
62837 beta: beta,
62838 lambda: lambda,
62839 basis: basis
62840 };
62841};
ab78acc6 62842
8b095871
IC
62843ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
62844 // Find roots of for x^2 + x + 1 in F
62845 // Root = (-1 +- Sqrt(-3)) / 2
62846 //
62847 var red = num === this.p ? this.red : BN.mont(num);
62848 var tinv = new BN(2).toRed(red).redInvm();
62849 var ntinv = tinv.redNeg();
ab78acc6 62850
8b095871 62851 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 62852
8b095871
IC
62853 var l1 = ntinv.redAdd(s).fromRed();
62854 var l2 = ntinv.redSub(s).fromRed();
62855 return [ l1, l2 ];
62856};
ab78acc6 62857
8b095871
IC
62858ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
62859 // aprxSqrt >= sqrt(this.n)
62860 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
62861
62862 // 3.74
62863 // Run EGCD, until r(L + 1) < aprxSqrt
62864 var u = lambda;
62865 var v = this.n.clone();
62866 var x1 = new BN(1);
62867 var y1 = new BN(0);
62868 var x2 = new BN(0);
62869 var y2 = new BN(1);
62870
62871 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
62872 var a0;
62873 var b0;
62874 // First vector
62875 var a1;
62876 var b1;
62877 // Second vector
62878 var a2;
62879 var b2;
62880
62881 var prevR;
62882 var i = 0;
62883 var r;
62884 var x;
62885 while (u.cmpn(0) !== 0) {
62886 var q = v.div(u);
62887 r = v.sub(q.mul(u));
62888 x = x2.sub(q.mul(x1));
62889 var y = y2.sub(q.mul(y1));
62890
62891 if (!a1 && r.cmp(aprxSqrt) < 0) {
62892 a0 = prevR.neg();
62893 b0 = x1;
62894 a1 = r.neg();
62895 b1 = x;
62896 } else if (a1 && ++i === 2) {
62897 break;
ab78acc6 62898 }
8b095871 62899 prevR = r;
ab78acc6 62900
8b095871
IC
62901 v = u;
62902 u = r;
62903 x2 = x1;
62904 x1 = x;
62905 y2 = y1;
62906 y1 = y;
ebd8d4e8 62907 }
8b095871
IC
62908 a2 = r.neg();
62909 b2 = x;
ab78acc6 62910
8b095871
IC
62911 var len1 = a1.sqr().add(b1.sqr());
62912 var len2 = a2.sqr().add(b2.sqr());
62913 if (len2.cmp(len1) >= 0) {
62914 a2 = a0;
62915 b2 = b0;
62916 }
ebd8d4e8 62917
8b095871
IC
62918 // Normalize signs
62919 if (a1.negative) {
62920 a1 = a1.neg();
62921 b1 = b1.neg();
62922 }
62923 if (a2.negative) {
62924 a2 = a2.neg();
62925 b2 = b2.neg();
62926 }
ebd8d4e8 62927
8b095871
IC
62928 return [
62929 { a: a1, b: b1 },
62930 { a: a2, b: b2 }
62931 ];
62932};
ab78acc6 62933
8b095871
IC
62934ShortCurve.prototype._endoSplit = function _endoSplit(k) {
62935 var basis = this.endo.basis;
62936 var v1 = basis[0];
62937 var v2 = basis[1];
ab78acc6 62938
8b095871
IC
62939 var c1 = v2.b.mul(k).divRound(this.n);
62940 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 62941
8b095871
IC
62942 var p1 = c1.mul(v1.a);
62943 var p2 = c2.mul(v2.a);
62944 var q1 = c1.mul(v1.b);
62945 var q2 = c2.mul(v2.b);
ab78acc6 62946
8b095871
IC
62947 // Calculate answer
62948 var k1 = k.sub(p1).sub(p2);
62949 var k2 = q1.add(q2).neg();
62950 return { k1: k1, k2: k2 };
62951};
ab78acc6 62952
8b095871
IC
62953ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
62954 x = new BN(x, 16);
62955 if (!x.red)
62956 x = x.toRed(this.red);
ab78acc6 62957
8b095871
IC
62958 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
62959 var y = y2.redSqrt();
62960 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62961 throw new Error('invalid point');
ab78acc6 62962
8b095871
IC
62963 // XXX Is there any way to tell if the number is odd without converting it
62964 // to non-red form?
62965 var isOdd = y.fromRed().isOdd();
62966 if (odd && !isOdd || !odd && isOdd)
62967 y = y.redNeg();
ab78acc6 62968
8b095871
IC
62969 return this.point(x, y);
62970};
ab78acc6 62971
8b095871
IC
62972ShortCurve.prototype.validate = function validate(point) {
62973 if (point.inf)
62974 return true;
ab78acc6 62975
8b095871
IC
62976 var x = point.x;
62977 var y = point.y;
ab78acc6 62978
8b095871
IC
62979 var ax = this.a.redMul(x);
62980 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
62981 return y.redSqr().redISub(rhs).cmpn(0) === 0;
62982};
ab78acc6 62983
8b095871
IC
62984ShortCurve.prototype._endoWnafMulAdd =
62985 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
62986 var npoints = this._endoWnafT1;
62987 var ncoeffs = this._endoWnafT2;
62988 for (var i = 0; i < points.length; i++) {
62989 var split = this._endoSplit(coeffs[i]);
62990 var p = points[i];
62991 var beta = p._getBeta();
ab78acc6 62992
8b095871
IC
62993 if (split.k1.negative) {
62994 split.k1.ineg();
62995 p = p.neg(true);
62996 }
62997 if (split.k2.negative) {
62998 split.k2.ineg();
62999 beta = beta.neg(true);
ab78acc6 63000 }
ab78acc6 63001
8b095871
IC
63002 npoints[i * 2] = p;
63003 npoints[i * 2 + 1] = beta;
63004 ncoeffs[i * 2] = split.k1;
63005 ncoeffs[i * 2 + 1] = split.k2;
63006 }
63007 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 63008
8b095871
IC
63009 // Clean-up references to points and coefficients
63010 for (var j = 0; j < i * 2; j++) {
63011 npoints[j] = null;
63012 ncoeffs[j] = null;
63013 }
63014 return res;
63015};
63016
63017function Point(curve, x, y, isRed) {
63018 Base.BasePoint.call(this, curve, 'affine');
63019 if (x === null && y === null) {
63020 this.x = null;
63021 this.y = null;
63022 this.inf = true;
63023 } else {
63024 this.x = new BN(x, 16);
63025 this.y = new BN(y, 16);
63026 // Force redgomery representation when loading from JSON
63027 if (isRed) {
63028 this.x.forceRed(this.curve.red);
63029 this.y.forceRed(this.curve.red);
ab78acc6 63030 }
8b095871
IC
63031 if (!this.x.red)
63032 this.x = this.x.toRed(this.curve.red);
63033 if (!this.y.red)
63034 this.y = this.y.toRed(this.curve.red);
63035 this.inf = false;
63036 }
63037}
63038inherits(Point, Base.BasePoint);
ab78acc6 63039
8b095871
IC
63040ShortCurve.prototype.point = function point(x, y, isRed) {
63041 return new Point(this, x, y, isRed);
63042};
ab78acc6 63043
8b095871
IC
63044ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
63045 return Point.fromJSON(this, obj, red);
63046};
ab78acc6 63047
8b095871
IC
63048Point.prototype._getBeta = function _getBeta() {
63049 if (!this.curve.endo)
63050 return;
ab78acc6 63051
8b095871
IC
63052 var pre = this.precomputed;
63053 if (pre && pre.beta)
63054 return pre.beta;
ab78acc6 63055
8b095871
IC
63056 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
63057 if (pre) {
63058 var curve = this.curve;
63059 var endoMul = function(p) {
63060 return curve.point(p.x.redMul(curve.endo.beta), p.y);
63061 };
63062 pre.beta = beta;
63063 beta.precomputed = {
63064 beta: null,
63065 naf: pre.naf && {
63066 wnd: pre.naf.wnd,
63067 points: pre.naf.points.map(endoMul)
63068 },
63069 doubles: pre.doubles && {
63070 step: pre.doubles.step,
63071 points: pre.doubles.points.map(endoMul)
63072 }
ab78acc6 63073 };
ab78acc6 63074 }
8b095871 63075 return beta;
ab78acc6
IC
63076};
63077
8b095871
IC
63078Point.prototype.toJSON = function toJSON() {
63079 if (!this.precomputed)
63080 return [ this.x, this.y ];
ab78acc6 63081
8b095871
IC
63082 return [ this.x, this.y, this.precomputed && {
63083 doubles: this.precomputed.doubles && {
63084 step: this.precomputed.doubles.step,
63085 points: this.precomputed.doubles.points.slice(1)
63086 },
63087 naf: this.precomputed.naf && {
63088 wnd: this.precomputed.naf.wnd,
63089 points: this.precomputed.naf.points.slice(1)
63090 }
63091 } ];
63092};
ab78acc6 63093
8b095871
IC
63094Point.fromJSON = function fromJSON(curve, obj, red) {
63095 if (typeof obj === 'string')
63096 obj = JSON.parse(obj);
63097 var res = curve.point(obj[0], obj[1], red);
63098 if (!obj[2])
63099 return res;
ab78acc6 63100
8b095871
IC
63101 function obj2point(obj) {
63102 return curve.point(obj[0], obj[1], red);
63103 }
63104
63105 var pre = obj[2];
63106 res.precomputed = {
63107 beta: null,
63108 doubles: pre.doubles && {
63109 step: pre.doubles.step,
63110 points: [ res ].concat(pre.doubles.points.map(obj2point))
63111 },
63112 naf: pre.naf && {
63113 wnd: pre.naf.wnd,
63114 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 63115 }
8b095871
IC
63116 };
63117 return res;
63118};
ab78acc6 63119
8b095871
IC
63120Point.prototype.inspect = function inspect() {
63121 if (this.isInfinity())
63122 return '<EC Point Infinity>';
63123 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63124 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
63125};
ab78acc6 63126
8b095871
IC
63127Point.prototype.isInfinity = function isInfinity() {
63128 return this.inf;
63129};
ebd8d4e8 63130
8b095871
IC
63131Point.prototype.add = function add(p) {
63132 // O + P = P
63133 if (this.inf)
63134 return p;
ab78acc6 63135
8b095871
IC
63136 // P + O = P
63137 if (p.inf)
63138 return this;
ab78acc6 63139
8b095871
IC
63140 // P + P = 2P
63141 if (this.eq(p))
63142 return this.dbl();
ab78acc6 63143
8b095871
IC
63144 // P + (-P) = O
63145 if (this.neg().eq(p))
63146 return this.curve.point(null, null);
ab78acc6 63147
8b095871
IC
63148 // P + Q = O
63149 if (this.x.cmp(p.x) === 0)
63150 return this.curve.point(null, null);
ebd8d4e8 63151
8b095871
IC
63152 var c = this.y.redSub(p.y);
63153 if (c.cmpn(0) !== 0)
63154 c = c.redMul(this.x.redSub(p.x).redInvm());
63155 var nx = c.redSqr().redISub(this.x).redISub(p.x);
63156 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63157 return this.curve.point(nx, ny);
63158};
ab78acc6 63159
8b095871
IC
63160Point.prototype.dbl = function dbl() {
63161 if (this.inf)
63162 return this;
ebd8d4e8 63163
8b095871
IC
63164 // 2P = O
63165 var ys1 = this.y.redAdd(this.y);
63166 if (ys1.cmpn(0) === 0)
63167 return this.curve.point(null, null);
ebd8d4e8 63168
8b095871 63169 var a = this.curve.a;
ebd8d4e8 63170
8b095871
IC
63171 var x2 = this.x.redSqr();
63172 var dyinv = ys1.redInvm();
63173 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 63174
8b095871
IC
63175 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
63176 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63177 return this.curve.point(nx, ny);
63178};
ebd8d4e8 63179
8b095871
IC
63180Point.prototype.getX = function getX() {
63181 return this.x.fromRed();
63182};
ab78acc6 63183
8b095871
IC
63184Point.prototype.getY = function getY() {
63185 return this.y.fromRed();
63186};
ebd8d4e8 63187
8b095871
IC
63188Point.prototype.mul = function mul(k) {
63189 k = new BN(k, 16);
ebd8d4e8 63190
8b095871
IC
63191 if (this._hasDoubles(k))
63192 return this.curve._fixedNafMul(this, k);
63193 else if (this.curve.endo)
63194 return this.curve._endoWnafMulAdd([ this ], [ k ]);
63195 else
63196 return this.curve._wnafMul(this, k);
63197};
ebd8d4e8 63198
8b095871
IC
63199Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
63200 var points = [ this, p2 ];
63201 var coeffs = [ k1, k2 ];
63202 if (this.curve.endo)
63203 return this.curve._endoWnafMulAdd(points, coeffs);
63204 else
63205 return this.curve._wnafMulAdd(1, points, coeffs, 2);
63206};
ebd8d4e8 63207
8b095871
IC
63208Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
63209 var points = [ this, p2 ];
63210 var coeffs = [ k1, k2 ];
63211 if (this.curve.endo)
63212 return this.curve._endoWnafMulAdd(points, coeffs, true);
63213 else
63214 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
63215};
ebd8d4e8 63216
8b095871
IC
63217Point.prototype.eq = function eq(p) {
63218 return this === p ||
63219 this.inf === p.inf &&
63220 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
63221};
ebd8d4e8 63222
8b095871
IC
63223Point.prototype.neg = function neg(_precompute) {
63224 if (this.inf)
63225 return this;
ebd8d4e8 63226
8b095871
IC
63227 var res = this.curve.point(this.x, this.y.redNeg());
63228 if (_precompute && this.precomputed) {
63229 var pre = this.precomputed;
63230 var negate = function(p) {
63231 return p.neg();
63232 };
63233 res.precomputed = {
63234 naf: pre.naf && {
63235 wnd: pre.naf.wnd,
63236 points: pre.naf.points.map(negate)
63237 },
63238 doubles: pre.doubles && {
63239 step: pre.doubles.step,
63240 points: pre.doubles.points.map(negate)
63241 }
63242 };
63243 }
63244 return res;
63245};
ebd8d4e8 63246
8b095871
IC
63247Point.prototype.toJ = function toJ() {
63248 if (this.inf)
63249 return this.curve.jpoint(null, null, null);
ebd8d4e8 63250
8b095871
IC
63251 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
63252 return res;
63253};
ebd8d4e8 63254
8b095871
IC
63255function JPoint(curve, x, y, z) {
63256 Base.BasePoint.call(this, curve, 'jacobian');
63257 if (x === null && y === null && z === null) {
63258 this.x = this.curve.one;
63259 this.y = this.curve.one;
63260 this.z = new BN(0);
63261 } else {
63262 this.x = new BN(x, 16);
63263 this.y = new BN(y, 16);
63264 this.z = new BN(z, 16);
63265 }
63266 if (!this.x.red)
63267 this.x = this.x.toRed(this.curve.red);
63268 if (!this.y.red)
63269 this.y = this.y.toRed(this.curve.red);
63270 if (!this.z.red)
63271 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 63272
8b095871 63273 this.zOne = this.z === this.curve.one;
ab78acc6 63274}
8b095871 63275inherits(JPoint, Base.BasePoint);
ab78acc6 63276
8b095871
IC
63277ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
63278 return new JPoint(this, x, y, z);
63279};
ab78acc6 63280
8b095871
IC
63281JPoint.prototype.toP = function toP() {
63282 if (this.isInfinity())
63283 return this.curve.point(null, null);
ab78acc6 63284
8b095871
IC
63285 var zinv = this.z.redInvm();
63286 var zinv2 = zinv.redSqr();
63287 var ax = this.x.redMul(zinv2);
63288 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 63289
8b095871
IC
63290 return this.curve.point(ax, ay);
63291};
ab78acc6 63292
8b095871
IC
63293JPoint.prototype.neg = function neg() {
63294 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
63295};
ab78acc6 63296
8b095871
IC
63297JPoint.prototype.add = function add(p) {
63298 // O + P = P
63299 if (this.isInfinity())
63300 return p;
ab78acc6 63301
8b095871
IC
63302 // P + O = P
63303 if (p.isInfinity())
63304 return this;
ab78acc6 63305
8b095871
IC
63306 // 12M + 4S + 7A
63307 var pz2 = p.z.redSqr();
63308 var z2 = this.z.redSqr();
63309 var u1 = this.x.redMul(pz2);
63310 var u2 = p.x.redMul(z2);
63311 var s1 = this.y.redMul(pz2.redMul(p.z));
63312 var s2 = p.y.redMul(z2.redMul(this.z));
63313
63314 var h = u1.redSub(u2);
63315 var r = s1.redSub(s2);
63316 if (h.cmpn(0) === 0) {
63317 if (r.cmpn(0) !== 0)
63318 return this.curve.jpoint(null, null, null);
63319 else
63320 return this.dbl();
63321 }
ab78acc6 63322
8b095871
IC
63323 var h2 = h.redSqr();
63324 var h3 = h2.redMul(h);
63325 var v = u1.redMul(h2);
ab78acc6 63326
8b095871
IC
63327 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63328 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63329 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 63330
8b095871
IC
63331 return this.curve.jpoint(nx, ny, nz);
63332};
ab78acc6 63333
8b095871
IC
63334JPoint.prototype.mixedAdd = function mixedAdd(p) {
63335 // O + P = P
63336 if (this.isInfinity())
63337 return p.toJ();
ab78acc6 63338
8b095871
IC
63339 // P + O = P
63340 if (p.isInfinity())
63341 return this;
ab78acc6 63342
8b095871
IC
63343 // 8M + 3S + 7A
63344 var z2 = this.z.redSqr();
63345 var u1 = this.x;
63346 var u2 = p.x.redMul(z2);
63347 var s1 = this.y;
63348 var s2 = p.y.redMul(z2).redMul(this.z);
63349
63350 var h = u1.redSub(u2);
63351 var r = s1.redSub(s2);
63352 if (h.cmpn(0) === 0) {
63353 if (r.cmpn(0) !== 0)
63354 return this.curve.jpoint(null, null, null);
63355 else
63356 return this.dbl();
ab78acc6
IC
63357 }
63358
8b095871
IC
63359 var h2 = h.redSqr();
63360 var h3 = h2.redMul(h);
63361 var v = u1.redMul(h2);
ab78acc6 63362
8b095871
IC
63363 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63364 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63365 var nz = this.z.redMul(h);
ab78acc6 63366
8b095871
IC
63367 return this.curve.jpoint(nx, ny, nz);
63368};
ab78acc6 63369
8b095871
IC
63370JPoint.prototype.dblp = function dblp(pow) {
63371 if (pow === 0)
63372 return this;
63373 if (this.isInfinity())
63374 return this;
63375 if (!pow)
63376 return this.dbl();
63377
63378 if (this.curve.zeroA || this.curve.threeA) {
63379 var r = this;
63380 for (var i = 0; i < pow; i++)
63381 r = r.dbl();
63382 return r;
63383 }
63384
63385 // 1M + 2S + 1A + N * (4S + 5M + 8A)
63386 // N = 1 => 6M + 6S + 9A
63387 var a = this.curve.a;
63388 var tinv = this.curve.tinv;
63389
63390 var jx = this.x;
63391 var jy = this.y;
63392 var jz = this.z;
63393 var jz4 = jz.redSqr().redSqr();
63394
63395 // Reuse results
63396 var jyd = jy.redAdd(jy);
63397 for (var i = 0; i < pow; i++) {
63398 var jx2 = jx.redSqr();
63399 var jyd2 = jyd.redSqr();
63400 var jyd4 = jyd2.redSqr();
63401 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63402
63403 var t1 = jx.redMul(jyd2);
63404 var nx = c.redSqr().redISub(t1.redAdd(t1));
63405 var t2 = t1.redISub(nx);
63406 var dny = c.redMul(t2);
63407 dny = dny.redIAdd(dny).redISub(jyd4);
63408 var nz = jyd.redMul(jz);
63409 if (i + 1 < pow)
63410 jz4 = jz4.redMul(jyd4);
63411
63412 jx = nx;
63413 jz = nz;
63414 jyd = dny;
63415 }
63416
63417 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
63418};
ab78acc6 63419
8b095871
IC
63420JPoint.prototype.dbl = function dbl() {
63421 if (this.isInfinity())
63422 return this;
ab78acc6 63423
8b095871
IC
63424 if (this.curve.zeroA)
63425 return this._zeroDbl();
63426 else if (this.curve.threeA)
63427 return this._threeDbl();
63428 else
63429 return this._dbl();
63430};
ab78acc6 63431
8b095871
IC
63432JPoint.prototype._zeroDbl = function _zeroDbl() {
63433 var nx;
63434 var ny;
63435 var nz;
63436 // Z = 1
63437 if (this.zOne) {
63438 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
63439 // #doubling-mdbl-2007-bl
63440 // 1M + 5S + 14A
63441
63442 // XX = X1^2
63443 var xx = this.x.redSqr();
63444 // YY = Y1^2
63445 var yy = this.y.redSqr();
63446 // YYYY = YY^2
63447 var yyyy = yy.redSqr();
63448 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
63449 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63450 s = s.redIAdd(s);
63451 // M = 3 * XX + a; a = 0
63452 var m = xx.redAdd(xx).redIAdd(xx);
63453 // T = M ^ 2 - 2*S
63454 var t = m.redSqr().redISub(s).redISub(s);
63455
63456 // 8 * YYYY
63457 var yyyy8 = yyyy.redIAdd(yyyy);
63458 yyyy8 = yyyy8.redIAdd(yyyy8);
63459 yyyy8 = yyyy8.redIAdd(yyyy8);
63460
63461 // X3 = T
63462 nx = t;
63463 // Y3 = M * (S - T) - 8 * YYYY
63464 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
63465 // Z3 = 2*Y1
63466 nz = this.y.redAdd(this.y);
63467 } else {
63468 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
63469 // #doubling-dbl-2009-l
63470 // 2M + 5S + 13A
63471
63472 // A = X1^2
63473 var a = this.x.redSqr();
63474 // B = Y1^2
63475 var b = this.y.redSqr();
63476 // C = B^2
63477 var c = b.redSqr();
63478 // D = 2 * ((X1 + B)^2 - A - C)
63479 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
63480 d = d.redIAdd(d);
63481 // E = 3 * A
63482 var e = a.redAdd(a).redIAdd(a);
63483 // F = E^2
63484 var f = e.redSqr();
63485
63486 // 8 * C
63487 var c8 = c.redIAdd(c);
63488 c8 = c8.redIAdd(c8);
63489 c8 = c8.redIAdd(c8);
63490
63491 // X3 = F - 2 * D
63492 nx = f.redISub(d).redISub(d);
63493 // Y3 = E * (D - X3) - 8 * C
63494 ny = e.redMul(d.redISub(nx)).redISub(c8);
63495 // Z3 = 2 * Y1 * Z1
63496 nz = this.y.redMul(this.z);
63497 nz = nz.redIAdd(nz);
63498 }
63499
63500 return this.curve.jpoint(nx, ny, nz);
63501};
ab78acc6 63502
8b095871
IC
63503JPoint.prototype._threeDbl = function _threeDbl() {
63504 var nx;
63505 var ny;
63506 var nz;
63507 // Z = 1
63508 if (this.zOne) {
63509 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
63510 // #doubling-mdbl-2007-bl
63511 // 1M + 5S + 15A
63512
63513 // XX = X1^2
63514 var xx = this.x.redSqr();
63515 // YY = Y1^2
63516 var yy = this.y.redSqr();
63517 // YYYY = YY^2
63518 var yyyy = yy.redSqr();
63519 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
63520 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63521 s = s.redIAdd(s);
63522 // M = 3 * XX + a
63523 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
63524 // T = M^2 - 2 * S
63525 var t = m.redSqr().redISub(s).redISub(s);
63526 // X3 = T
63527 nx = t;
63528 // Y3 = M * (S - T) - 8 * YYYY
63529 var yyyy8 = yyyy.redIAdd(yyyy);
63530 yyyy8 = yyyy8.redIAdd(yyyy8);
63531 yyyy8 = yyyy8.redIAdd(yyyy8);
63532 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
63533 // Z3 = 2 * Y1
63534 nz = this.y.redAdd(this.y);
63535 } else {
63536 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
63537 // 3M + 5S
63538
63539 // delta = Z1^2
63540 var delta = this.z.redSqr();
63541 // gamma = Y1^2
63542 var gamma = this.y.redSqr();
63543 // beta = X1 * gamma
63544 var beta = this.x.redMul(gamma);
63545 // alpha = 3 * (X1 - delta) * (X1 + delta)
63546 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
63547 alpha = alpha.redAdd(alpha).redIAdd(alpha);
63548 // X3 = alpha^2 - 8 * beta
63549 var beta4 = beta.redIAdd(beta);
63550 beta4 = beta4.redIAdd(beta4);
63551 var beta8 = beta4.redAdd(beta4);
63552 nx = alpha.redSqr().redISub(beta8);
63553 // Z3 = (Y1 + Z1)^2 - gamma - delta
63554 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
63555 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
63556 var ggamma8 = gamma.redSqr();
63557 ggamma8 = ggamma8.redIAdd(ggamma8);
63558 ggamma8 = ggamma8.redIAdd(ggamma8);
63559 ggamma8 = ggamma8.redIAdd(ggamma8);
63560 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
63561 }
63562
63563 return this.curve.jpoint(nx, ny, nz);
63564};
ab78acc6 63565
8b095871
IC
63566JPoint.prototype._dbl = function _dbl() {
63567 var a = this.curve.a;
ab78acc6 63568
8b095871
IC
63569 // 4M + 6S + 10A
63570 var jx = this.x;
63571 var jy = this.y;
63572 var jz = this.z;
63573 var jz4 = jz.redSqr().redSqr();
ab78acc6 63574
8b095871
IC
63575 var jx2 = jx.redSqr();
63576 var jy2 = jy.redSqr();
ebd8d4e8 63577
8b095871 63578 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 63579
8b095871
IC
63580 var jxd4 = jx.redAdd(jx);
63581 jxd4 = jxd4.redIAdd(jxd4);
63582 var t1 = jxd4.redMul(jy2);
63583 var nx = c.redSqr().redISub(t1.redAdd(t1));
63584 var t2 = t1.redISub(nx);
ebd8d4e8 63585
8b095871
IC
63586 var jyd8 = jy2.redSqr();
63587 jyd8 = jyd8.redIAdd(jyd8);
63588 jyd8 = jyd8.redIAdd(jyd8);
63589 jyd8 = jyd8.redIAdd(jyd8);
63590 var ny = c.redMul(t2).redISub(jyd8);
63591 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 63592
8b095871
IC
63593 return this.curve.jpoint(nx, ny, nz);
63594};
ebd8d4e8 63595
8b095871
IC
63596JPoint.prototype.trpl = function trpl() {
63597 if (!this.curve.zeroA)
63598 return this.dbl().add(this);
63599
63600 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
63601 // 5M + 10S + ...
63602
63603 // XX = X1^2
63604 var xx = this.x.redSqr();
63605 // YY = Y1^2
63606 var yy = this.y.redSqr();
63607 // ZZ = Z1^2
63608 var zz = this.z.redSqr();
63609 // YYYY = YY^2
63610 var yyyy = yy.redSqr();
63611 // M = 3 * XX + a * ZZ2; a = 0
63612 var m = xx.redAdd(xx).redIAdd(xx);
63613 // MM = M^2
63614 var mm = m.redSqr();
63615 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
63616 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63617 e = e.redIAdd(e);
63618 e = e.redAdd(e).redIAdd(e);
63619 e = e.redISub(mm);
63620 // EE = E^2
63621 var ee = e.redSqr();
63622 // T = 16*YYYY
63623 var t = yyyy.redIAdd(yyyy);
63624 t = t.redIAdd(t);
63625 t = t.redIAdd(t);
63626 t = t.redIAdd(t);
63627 // U = (M + E)^2 - MM - EE - T
63628 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
63629 // X3 = 4 * (X1 * EE - 4 * YY * U)
63630 var yyu4 = yy.redMul(u);
63631 yyu4 = yyu4.redIAdd(yyu4);
63632 yyu4 = yyu4.redIAdd(yyu4);
63633 var nx = this.x.redMul(ee).redISub(yyu4);
63634 nx = nx.redIAdd(nx);
63635 nx = nx.redIAdd(nx);
63636 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
63637 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
63638 ny = ny.redIAdd(ny);
63639 ny = ny.redIAdd(ny);
63640 ny = ny.redIAdd(ny);
63641 // Z3 = (Z1 + E)^2 - ZZ - EE
63642 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
63643
63644 return this.curve.jpoint(nx, ny, nz);
63645};
ebd8d4e8 63646
8b095871
IC
63647JPoint.prototype.mul = function mul(k, kbase) {
63648 k = new BN(k, kbase);
ebd8d4e8 63649
8b095871
IC
63650 return this.curve._wnafMul(this, k);
63651};
ebd8d4e8 63652
8b095871
IC
63653JPoint.prototype.eq = function eq(p) {
63654 if (p.type === 'affine')
63655 return this.eq(p.toJ());
ebd8d4e8 63656
8b095871
IC
63657 if (this === p)
63658 return true;
ebd8d4e8 63659
8b095871
IC
63660 // x1 * z2^2 == x2 * z1^2
63661 var z2 = this.z.redSqr();
63662 var pz2 = p.z.redSqr();
63663 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
63664 return false;
ebd8d4e8 63665
8b095871
IC
63666 // y1 * z2^3 == y2 * z1^3
63667 var z3 = z2.redMul(this.z);
63668 var pz3 = pz2.redMul(p.z);
63669 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
63670};
ab78acc6 63671
8b095871
IC
63672JPoint.prototype.eqXToP = function eqXToP(x) {
63673 var zs = this.z.redSqr();
63674 var rx = x.toRed(this.curve.red).redMul(zs);
63675 if (this.x.cmp(rx) === 0)
63676 return true;
ebd8d4e8 63677
8b095871
IC
63678 var xc = x.clone();
63679 var t = this.curve.redN.redMul(zs);
63680 for (;;) {
63681 xc.iadd(this.curve.n);
63682 if (xc.cmp(this.curve.p) >= 0)
63683 return false;
ebd8d4e8 63684
8b095871
IC
63685 rx.redIAdd(t);
63686 if (this.x.cmp(rx) === 0)
63687 return true;
63688 }
63689 return false;
63690};
ebd8d4e8 63691
8b095871
IC
63692JPoint.prototype.inspect = function inspect() {
63693 if (this.isInfinity())
63694 return '<EC JPoint Infinity>';
63695 return '<EC JPoint x: ' + this.x.toString(16, 2) +
63696 ' y: ' + this.y.toString(16, 2) +
63697 ' z: ' + this.z.toString(16, 2) + '>';
63698};
ebd8d4e8 63699
8b095871
IC
63700JPoint.prototype.isInfinity = function isInfinity() {
63701 // XXX This code assumes that zero is always zero in red
63702 return this.z.cmpn(0) === 0;
63703};
ebd8d4e8 63704
8b095871
IC
63705},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
63706'use strict';
ebd8d4e8 63707
8b095871 63708var curves = exports;
ebd8d4e8 63709
8b095871
IC
63710var hash = require('hash.js');
63711var elliptic = require('../elliptic');
ebd8d4e8 63712
8b095871 63713var assert = elliptic.utils.assert;
ebd8d4e8 63714
8b095871
IC
63715function PresetCurve(options) {
63716 if (options.type === 'short')
63717 this.curve = new elliptic.curve.short(options);
63718 else if (options.type === 'edwards')
63719 this.curve = new elliptic.curve.edwards(options);
63720 else
63721 this.curve = new elliptic.curve.mont(options);
63722 this.g = this.curve.g;
63723 this.n = this.curve.n;
63724 this.hash = options.hash;
63725
63726 assert(this.g.validate(), 'Invalid curve');
63727 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
63728}
63729curves.PresetCurve = PresetCurve;
63730
63731function defineCurve(name, options) {
63732 Object.defineProperty(curves, name, {
63733 configurable: true,
63734 enumerable: true,
63735 get: function() {
63736 var curve = new PresetCurve(options);
63737 Object.defineProperty(curves, name, {
63738 configurable: true,
63739 enumerable: true,
63740 value: curve
63741 });
63742 return curve;
63743 }
63744 });
ebd8d4e8
IC
63745}
63746
8b095871
IC
63747defineCurve('p192', {
63748 type: 'short',
63749 prime: 'p192',
63750 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
63751 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
63752 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
63753 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
63754 hash: hash.sha256,
63755 gRed: false,
63756 g: [
63757 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
63758 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
63759 ]
63760});
ebd8d4e8 63761
8b095871
IC
63762defineCurve('p224', {
63763 type: 'short',
63764 prime: 'p224',
63765 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
63766 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
63767 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
63768 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
63769 hash: hash.sha256,
63770 gRed: false,
63771 g: [
63772 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
63773 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
63774 ]
63775});
ebd8d4e8 63776
8b095871
IC
63777defineCurve('p256', {
63778 type: 'short',
63779 prime: null,
63780 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
63781 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
63782 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
63783 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
63784 hash: hash.sha256,
63785 gRed: false,
63786 g: [
63787 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
63788 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
63789 ]
63790});
ebd8d4e8 63791
8b095871
IC
63792defineCurve('p384', {
63793 type: 'short',
63794 prime: null,
63795 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63796 'fffffffe ffffffff 00000000 00000000 ffffffff',
63797 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63798 'fffffffe ffffffff 00000000 00000000 fffffffc',
63799 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
63800 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
63801 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
63802 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
63803 hash: hash.sha384,
63804 gRed: false,
63805 g: [
63806 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
63807 '5502f25d bf55296c 3a545e38 72760ab7',
63808 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
63809 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
63810 ]
63811});
ebd8d4e8 63812
8b095871
IC
63813defineCurve('p521', {
63814 type: 'short',
63815 prime: null,
63816 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63817 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63818 'ffffffff ffffffff ffffffff ffffffff ffffffff',
63819 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63820 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63821 'ffffffff ffffffff ffffffff ffffffff fffffffc',
63822 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
63823 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
63824 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
63825 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63826 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
63827 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
63828 hash: hash.sha512,
63829 gRed: false,
63830 g: [
63831 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
63832 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
63833 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
63834 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
63835 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
63836 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
63837 ]
63838});
ebd8d4e8 63839
8b095871
IC
63840defineCurve('curve25519', {
63841 type: 'mont',
63842 prime: 'p25519',
63843 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
63844 a: '76d06',
63845 b: '1',
63846 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
63847 hash: hash.sha256,
63848 gRed: false,
63849 g: [
63850 '9'
63851 ]
63852});
ebd8d4e8 63853
8b095871
IC
63854defineCurve('ed25519', {
63855 type: 'edwards',
63856 prime: 'p25519',
63857 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
63858 a: '-1',
63859 c: '1',
63860 // -121665 * (121666^(-1)) (mod P)
63861 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
63862 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
63863 hash: hash.sha256,
63864 gRed: false,
63865 g: [
63866 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
63867
63868 // 4/5
63869 '6666666666666666666666666666666666666666666666666666666666666658'
63870 ]
63871});
ebd8d4e8 63872
8b095871
IC
63873var pre;
63874try {
63875 pre = require('./precomputed/secp256k1');
63876} catch (e) {
63877 pre = undefined;
63878}
63879
63880defineCurve('secp256k1', {
63881 type: 'short',
63882 prime: 'k256',
63883 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
63884 a: '0',
63885 b: '7',
63886 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
63887 h: '1',
63888 hash: hash.sha256,
63889
63890 // Precomputed endomorphism
63891 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
63892 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
63893 basis: [
63894 {
63895 a: '3086d221a7d46bcde86c90e49284eb15',
63896 b: '-e4437ed6010e88286f547fa90abfe4c3'
63897 },
63898 {
63899 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
63900 b: '3086d221a7d46bcde86c90e49284eb15'
63901 }
63902 ],
ebd8d4e8 63903
8b095871
IC
63904 gRed: false,
63905 g: [
63906 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
63907 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
63908 pre
63909 ]
63910});
ebd8d4e8 63911
8b095871
IC
63912},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
63913'use strict';
ebd8d4e8 63914
8b095871
IC
63915var BN = require('bn.js');
63916var elliptic = require('../../elliptic');
63917var utils = elliptic.utils;
63918var assert = utils.assert;
ebd8d4e8 63919
8b095871
IC
63920var KeyPair = require('./key');
63921var Signature = require('./signature');
ebd8d4e8 63922
8b095871
IC
63923function EC(options) {
63924 if (!(this instanceof EC))
63925 return new EC(options);
ebd8d4e8 63926
8b095871
IC
63927 // Shortcut `elliptic.ec(curve-name)`
63928 if (typeof options === 'string') {
63929 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
63930
63931 options = elliptic.curves[options];
ebd8d4e8
IC
63932 }
63933
8b095871
IC
63934 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
63935 if (options instanceof elliptic.curves.PresetCurve)
63936 options = { curve: options };
ebd8d4e8 63937
8b095871
IC
63938 this.curve = options.curve.curve;
63939 this.n = this.curve.n;
63940 this.nh = this.n.ushrn(1);
63941 this.g = this.curve.g;
ebd8d4e8 63942
8b095871
IC
63943 // Point on curve
63944 this.g = options.curve.g;
63945 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 63946
8b095871
IC
63947 // Hash for function for DRBG
63948 this.hash = options.hash || options.curve.hash;
ebd8d4e8 63949}
8b095871 63950module.exports = EC;
ebd8d4e8 63951
8b095871
IC
63952EC.prototype.keyPair = function keyPair(options) {
63953 return new KeyPair(this, options);
63954};
63955
63956EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
63957 return KeyPair.fromPrivate(this, priv, enc);
63958};
63959
63960EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
63961 return KeyPair.fromPublic(this, pub, enc);
63962};
63963
63964EC.prototype.genKeyPair = function genKeyPair(options) {
63965 if (!options)
63966 options = {};
63967
63968 // Instantiate Hmac_DRBG
63969 var drbg = new elliptic.hmacDRBG({
63970 hash: this.hash,
63971 pers: options.pers,
63972 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
63973 nonce: this.n.toArray()
63974 });
ebd8d4e8 63975
8b095871
IC
63976 var bytes = this.n.byteLength();
63977 var ns2 = this.n.sub(new BN(2));
63978 do {
63979 var priv = new BN(drbg.generate(bytes));
63980 if (priv.cmp(ns2) > 0)
63981 continue;
ebd8d4e8 63982
8b095871
IC
63983 priv.iaddn(1);
63984 return this.keyFromPrivate(priv);
63985 } while (true);
63986};
ebd8d4e8 63987
8b095871
IC
63988EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
63989 var delta = msg.byteLength() * 8 - this.n.bitLength();
63990 if (delta > 0)
63991 msg = msg.ushrn(delta);
63992 if (!truncOnly && msg.cmp(this.n) >= 0)
63993 return msg.sub(this.n);
63994 else
63995 return msg;
63996};
ebd8d4e8 63997
8b095871
IC
63998EC.prototype.sign = function sign(msg, key, enc, options) {
63999 if (typeof enc === 'object') {
64000 options = enc;
64001 enc = null;
ebd8d4e8 64002 }
8b095871
IC
64003 if (!options)
64004 options = {};
ebd8d4e8 64005
8b095871
IC
64006 key = this.keyFromPrivate(key, enc);
64007 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 64008
8b095871
IC
64009 // Zero-extend key to provide enough entropy
64010 var bytes = this.n.byteLength();
64011 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 64012
8b095871
IC
64013 // Zero-extend nonce to have the same byte size as N
64014 var nonce = msg.toArray('be', bytes);
ab78acc6 64015
8b095871
IC
64016 // Instantiate Hmac_DRBG
64017 var drbg = new elliptic.hmacDRBG({
64018 hash: this.hash,
64019 entropy: bkey,
64020 nonce: nonce,
64021 pers: options.pers,
64022 persEnc: options.persEnc
64023 });
ab78acc6 64024
8b095871
IC
64025 // Number of bytes to generate
64026 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 64027
8b095871
IC
64028 for (var iter = 0; true; iter++) {
64029 var k = options.k ?
64030 options.k(iter) :
64031 new BN(drbg.generate(this.n.byteLength()));
64032 k = this._truncateToN(k, true);
64033 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
64034 continue;
ebd8d4e8 64035
8b095871
IC
64036 var kp = this.g.mul(k);
64037 if (kp.isInfinity())
64038 continue;
ebd8d4e8 64039
8b095871
IC
64040 var kpX = kp.getX();
64041 var r = kpX.umod(this.n);
64042 if (r.cmpn(0) === 0)
64043 continue;
ebd8d4e8 64044
8b095871
IC
64045 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
64046 s = s.umod(this.n);
64047 if (s.cmpn(0) === 0)
64048 continue;
ebd8d4e8 64049
8b095871
IC
64050 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
64051 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 64052
8b095871
IC
64053 // Use complement of `s`, if it is > `n / 2`
64054 if (options.canonical && s.cmp(this.nh) > 0) {
64055 s = this.n.sub(s);
64056 recoveryParam ^= 1;
64057 }
ebd8d4e8 64058
8b095871
IC
64059 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
64060 }
64061};
ebd8d4e8 64062
8b095871
IC
64063EC.prototype.verify = function verify(msg, signature, key, enc) {
64064 msg = this._truncateToN(new BN(msg, 16));
64065 key = this.keyFromPublic(key, enc);
64066 signature = new Signature(signature, 'hex');
ebd8d4e8 64067
8b095871
IC
64068 // Perform primitive values validation
64069 var r = signature.r;
64070 var s = signature.s;
64071 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
64072 return false;
64073 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
64074 return false;
ebd8d4e8 64075
8b095871
IC
64076 // Validate signature
64077 var sinv = s.invm(this.n);
64078 var u1 = sinv.mul(msg).umod(this.n);
64079 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 64080
8b095871
IC
64081 if (!this.curve._maxwellTrick) {
64082 var p = this.g.mulAdd(u1, key.getPublic(), u2);
64083 if (p.isInfinity())
64084 return false;
ebd8d4e8 64085
8b095871
IC
64086 return p.getX().umod(this.n).cmp(r) === 0;
64087 }
ab78acc6 64088
8b095871
IC
64089 // NOTE: Greg Maxwell's trick, inspired by:
64090 // https://git.io/vad3K
ebd8d4e8 64091
8b095871
IC
64092 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
64093 if (p.isInfinity())
64094 return false;
ab78acc6 64095
8b095871
IC
64096 // Compare `p.x` of Jacobian point with `r`,
64097 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
64098 // inverse of `p.z^2`
64099 return p.eqXToP(r);
64100};
ab78acc6 64101
8b095871
IC
64102EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
64103 assert((3 & j) === j, 'The recovery param is more than two bits');
64104 signature = new Signature(signature, enc);
ab78acc6 64105
8b095871
IC
64106 var n = this.n;
64107 var e = new BN(msg);
64108 var r = signature.r;
64109 var s = signature.s;
ab78acc6 64110
8b095871
IC
64111 // A set LSB signifies that the y-coordinate is odd
64112 var isYOdd = j & 1;
64113 var isSecondKey = j >> 1;
64114 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
64115 throw new Error('Unable to find sencond key candinate');
64116
64117 // 1.1. Let x = r + jn.
64118 if (isSecondKey)
64119 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
64120 else
64121 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 64122
8b095871
IC
64123 var rInv = signature.r.invm(n);
64124 var s1 = n.sub(e).mul(rInv).umod(n);
64125 var s2 = s.mul(rInv).umod(n);
ab78acc6 64126
8b095871
IC
64127 // 1.6.1 Compute Q = r^-1 (sR - eG)
64128 // Q = r^-1 (sR + -eG)
64129 return this.g.mulAdd(s1, r, s2);
64130};
ab78acc6 64131
8b095871
IC
64132EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
64133 signature = new Signature(signature, enc);
64134 if (signature.recoveryParam !== null)
64135 return signature.recoveryParam;
ab78acc6 64136
8b095871
IC
64137 for (var i = 0; i < 4; i++) {
64138 var Qprime;
64139 try {
64140 Qprime = this.recoverPubKey(e, signature, i);
64141 } catch (e) {
64142 continue;
ab78acc6 64143 }
ab78acc6 64144
8b095871
IC
64145 if (Qprime.eq(Q))
64146 return i;
64147 }
64148 throw new Error('Unable to find valid recovery factor');
64149};
ebd8d4e8 64150
8b095871
IC
64151},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
64152'use strict';
ebd8d4e8 64153
8b095871
IC
64154var BN = require('bn.js');
64155var elliptic = require('../../elliptic');
64156var utils = elliptic.utils;
64157var assert = utils.assert;
ebd8d4e8 64158
8b095871
IC
64159function KeyPair(ec, options) {
64160 this.ec = ec;
64161 this.priv = null;
64162 this.pub = null;
ebd8d4e8 64163
8b095871
IC
64164 // KeyPair(ec, { priv: ..., pub: ... })
64165 if (options.priv)
64166 this._importPrivate(options.priv, options.privEnc);
64167 if (options.pub)
64168 this._importPublic(options.pub, options.pubEnc);
64169}
64170module.exports = KeyPair;
ebd8d4e8 64171
8b095871
IC
64172KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
64173 if (pub instanceof KeyPair)
64174 return pub;
ebd8d4e8 64175
8b095871
IC
64176 return new KeyPair(ec, {
64177 pub: pub,
64178 pubEnc: enc
64179 });
64180};
ebd8d4e8 64181
8b095871
IC
64182KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
64183 if (priv instanceof KeyPair)
64184 return priv;
ebd8d4e8 64185
8b095871
IC
64186 return new KeyPair(ec, {
64187 priv: priv,
64188 privEnc: enc
64189 });
64190};
ebd8d4e8 64191
8b095871
IC
64192KeyPair.prototype.validate = function validate() {
64193 var pub = this.getPublic();
ebd8d4e8 64194
8b095871
IC
64195 if (pub.isInfinity())
64196 return { result: false, reason: 'Invalid public key' };
64197 if (!pub.validate())
64198 return { result: false, reason: 'Public key is not a point' };
64199 if (!pub.mul(this.ec.curve.n).isInfinity())
64200 return { result: false, reason: 'Public key * N != O' };
ab78acc6 64201
8b095871
IC
64202 return { result: true, reason: null };
64203};
ebd8d4e8 64204
8b095871
IC
64205KeyPair.prototype.getPublic = function getPublic(compact, enc) {
64206 // compact is optional argument
64207 if (typeof compact === 'string') {
64208 enc = compact;
64209 compact = null;
ebd8d4e8
IC
64210 }
64211
8b095871
IC
64212 if (!this.pub)
64213 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 64214
8b095871
IC
64215 if (!enc)
64216 return this.pub;
ebd8d4e8 64217
8b095871
IC
64218 return this.pub.encode(enc, compact);
64219};
ebd8d4e8 64220
8b095871
IC
64221KeyPair.prototype.getPrivate = function getPrivate(enc) {
64222 if (enc === 'hex')
64223 return this.priv.toString(16, 2);
64224 else
64225 return this.priv;
64226};
ab78acc6 64227
8b095871
IC
64228KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
64229 this.priv = new BN(key, enc || 16);
ab78acc6 64230
8b095871
IC
64231 // Ensure that the priv won't be bigger than n, otherwise we may fail
64232 // in fixed multiplication method
64233 this.priv = this.priv.umod(this.ec.curve.n);
64234};
ab78acc6 64235
8b095871
IC
64236KeyPair.prototype._importPublic = function _importPublic(key, enc) {
64237 if (key.x || key.y) {
64238 // Montgomery points only have an `x` coordinate.
64239 // Weierstrass/Edwards points on the other hand have both `x` and
64240 // `y` coordinates.
64241 if (this.ec.curve.type === 'mont') {
64242 assert(key.x, 'Need x coordinate');
64243 } else if (this.ec.curve.type === 'short' ||
64244 this.ec.curve.type === 'edwards') {
64245 assert(key.x && key.y, 'Need both x and y coordinate');
64246 }
64247 this.pub = this.ec.curve.point(key.x, key.y);
64248 return;
64249 }
64250 this.pub = this.ec.curve.decodePoint(key, enc);
64251};
ebd8d4e8 64252
8b095871
IC
64253// ECDH
64254KeyPair.prototype.derive = function derive(pub) {
64255 return pub.mul(this.priv).getX();
64256};
ebd8d4e8 64257
8b095871
IC
64258// ECDSA
64259KeyPair.prototype.sign = function sign(msg, enc, options) {
64260 return this.ec.sign(msg, this, enc, options);
64261};
ebd8d4e8 64262
8b095871
IC
64263KeyPair.prototype.verify = function verify(msg, signature) {
64264 return this.ec.verify(msg, signature, this);
64265};
ebd8d4e8 64266
8b095871
IC
64267KeyPair.prototype.inspect = function inspect() {
64268 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
64269 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
64270};
ebd8d4e8 64271
8b095871
IC
64272},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
64273'use strict';
ebd8d4e8 64274
8b095871 64275var BN = require('bn.js');
ebd8d4e8 64276
8b095871
IC
64277var elliptic = require('../../elliptic');
64278var utils = elliptic.utils;
64279var assert = utils.assert;
ebd8d4e8 64280
8b095871
IC
64281function Signature(options, enc) {
64282 if (options instanceof Signature)
64283 return options;
ebd8d4e8 64284
8b095871
IC
64285 if (this._importDER(options, enc))
64286 return;
ebd8d4e8 64287
8b095871
IC
64288 assert(options.r && options.s, 'Signature without r or s');
64289 this.r = new BN(options.r, 16);
64290 this.s = new BN(options.s, 16);
64291 if (options.recoveryParam === undefined)
64292 this.recoveryParam = null;
64293 else
64294 this.recoveryParam = options.recoveryParam;
64295}
64296module.exports = Signature;
64297
64298function Position() {
64299 this.place = 0;
64300}
64301
64302function getLength(buf, p) {
64303 var initial = buf[p.place++];
64304 if (!(initial & 0x80)) {
64305 return initial;
64306 }
64307 var octetLen = initial & 0xf;
64308 var val = 0;
64309 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
64310 val <<= 8;
64311 val |= buf[off];
64312 }
64313 p.place = off;
64314 return val;
64315}
64316
64317function rmPadding(buf) {
64318 var i = 0;
64319 var len = buf.length - 1;
64320 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
64321 i++;
64322 }
64323 if (i === 0) {
64324 return buf;
64325 }
64326 return buf.slice(i);
64327}
ebd8d4e8 64328
8b095871
IC
64329Signature.prototype._importDER = function _importDER(data, enc) {
64330 data = utils.toArray(data, enc);
64331 var p = new Position();
64332 if (data[p.place++] !== 0x30) {
64333 return false;
64334 }
64335 var len = getLength(data, p);
64336 if ((len + p.place) !== data.length) {
64337 return false;
64338 }
64339 if (data[p.place++] !== 0x02) {
64340 return false;
64341 }
64342 var rlen = getLength(data, p);
64343 var r = data.slice(p.place, rlen + p.place);
64344 p.place += rlen;
64345 if (data[p.place++] !== 0x02) {
64346 return false;
64347 }
64348 var slen = getLength(data, p);
64349 if (data.length !== slen + p.place) {
64350 return false;
64351 }
64352 var s = data.slice(p.place, slen + p.place);
64353 if (r[0] === 0 && (r[1] & 0x80)) {
64354 r = r.slice(1);
64355 }
64356 if (s[0] === 0 && (s[1] & 0x80)) {
64357 s = s.slice(1);
64358 }
ab78acc6 64359
8b095871
IC
64360 this.r = new BN(r);
64361 this.s = new BN(s);
64362 this.recoveryParam = null;
ebd8d4e8 64363
8b095871
IC
64364 return true;
64365};
ab78acc6 64366
8b095871
IC
64367function constructLength(arr, len) {
64368 if (len < 0x80) {
64369 arr.push(len);
64370 return;
64371 }
64372 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
64373 arr.push(octets | 0x80);
64374 while (--octets) {
64375 arr.push((len >>> (octets << 3)) & 0xff);
64376 }
64377 arr.push(len);
64378}
64379
64380Signature.prototype.toDER = function toDER(enc) {
64381 var r = this.r.toArray();
64382 var s = this.s.toArray();
64383
64384 // Pad values
64385 if (r[0] & 0x80)
64386 r = [ 0 ].concat(r);
64387 // Pad values
64388 if (s[0] & 0x80)
64389 s = [ 0 ].concat(s);
64390
64391 r = rmPadding(r);
64392 s = rmPadding(s);
64393
64394 while (!s[0] && !(s[1] & 0x80)) {
64395 s = s.slice(1);
64396 }
64397 var arr = [ 0x02 ];
64398 constructLength(arr, r.length);
64399 arr = arr.concat(r);
64400 arr.push(0x02);
64401 constructLength(arr, s.length);
64402 var backHalf = arr.concat(s);
64403 var res = [ 0x30 ];
64404 constructLength(res, backHalf.length);
64405 res = res.concat(backHalf);
64406 return utils.encode(res, enc);
64407};
ab78acc6 64408
8b095871
IC
64409},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
64410'use strict';
ebd8d4e8 64411
8b095871
IC
64412var hash = require('hash.js');
64413var elliptic = require('../../elliptic');
64414var utils = elliptic.utils;
64415var assert = utils.assert;
64416var parseBytes = utils.parseBytes;
64417var KeyPair = require('./key');
64418var Signature = require('./signature');
ab78acc6 64419
8b095871
IC
64420function EDDSA(curve) {
64421 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 64422
8b095871
IC
64423 if (!(this instanceof EDDSA))
64424 return new EDDSA(curve);
ab78acc6 64425
8b095871
IC
64426 var curve = elliptic.curves[curve].curve;
64427 this.curve = curve;
64428 this.g = curve.g;
64429 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 64430
8b095871
IC
64431 this.pointClass = curve.point().constructor;
64432 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
64433 this.hash = hash.sha512;
64434}
ebd8d4e8 64435
8b095871 64436module.exports = EDDSA;
ebd8d4e8 64437
8b095871
IC
64438/**
64439* @param {Array|String} message - message bytes
64440* @param {Array|String|KeyPair} secret - secret bytes or a keypair
64441* @returns {Signature} - signature
64442*/
64443EDDSA.prototype.sign = function sign(message, secret) {
64444 message = parseBytes(message);
64445 var key = this.keyFromSecret(secret);
64446 var r = this.hashInt(key.messagePrefix(), message);
64447 var R = this.g.mul(r);
64448 var Rencoded = this.encodePoint(R);
64449 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
64450 .mul(key.priv());
64451 var S = r.add(s_).umod(this.curve.n);
64452 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
64453};
ebd8d4e8 64454
8b095871
IC
64455/**
64456* @param {Array} message - message bytes
64457* @param {Array|String|Signature} sig - sig bytes
64458* @param {Array|String|Point|KeyPair} pub - public key
64459* @returns {Boolean} - true if public key matches sig of message
64460*/
64461EDDSA.prototype.verify = function verify(message, sig, pub) {
64462 message = parseBytes(message);
64463 sig = this.makeSignature(sig);
64464 var key = this.keyFromPublic(pub);
64465 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
64466 var SG = this.g.mul(sig.S());
64467 var RplusAh = sig.R().add(key.pub().mul(h));
64468 return RplusAh.eq(SG);
64469};
ebd8d4e8 64470
8b095871
IC
64471EDDSA.prototype.hashInt = function hashInt() {
64472 var hash = this.hash();
64473 for (var i = 0; i < arguments.length; i++)
64474 hash.update(arguments[i]);
64475 return utils.intFromLE(hash.digest()).umod(this.curve.n);
64476};
ebd8d4e8 64477
8b095871
IC
64478EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
64479 return KeyPair.fromPublic(this, pub);
64480};
ebd8d4e8 64481
8b095871
IC
64482EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
64483 return KeyPair.fromSecret(this, secret);
64484};
64485
64486EDDSA.prototype.makeSignature = function makeSignature(sig) {
64487 if (sig instanceof Signature)
64488 return sig;
64489 return new Signature(this, sig);
64490};
ebd8d4e8
IC
64491
64492/**
8b095871
IC
64493* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
64494*
64495* EDDSA defines methods for encoding and decoding points and integers. These are
64496* helper convenience methods, that pass along to utility functions implied
64497* parameters.
64498*
64499*/
64500EDDSA.prototype.encodePoint = function encodePoint(point) {
64501 var enc = point.getY().toArray('le', this.encodingLength);
64502 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
64503 return enc;
64504};
ebd8d4e8 64505
8b095871
IC
64506EDDSA.prototype.decodePoint = function decodePoint(bytes) {
64507 bytes = utils.parseBytes(bytes);
ebd8d4e8 64508
8b095871
IC
64509 var lastIx = bytes.length - 1;
64510 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
64511 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 64512
8b095871
IC
64513 var y = utils.intFromLE(normed);
64514 return this.curve.pointFromY(y, xIsOdd);
64515};
ebd8d4e8 64516
8b095871
IC
64517EDDSA.prototype.encodeInt = function encodeInt(num) {
64518 return num.toArray('le', this.encodingLength);
64519};
ebd8d4e8 64520
8b095871
IC
64521EDDSA.prototype.decodeInt = function decodeInt(bytes) {
64522 return utils.intFromLE(bytes);
64523};
ebd8d4e8 64524
8b095871
IC
64525EDDSA.prototype.isPoint = function isPoint(val) {
64526 return val instanceof this.pointClass;
64527};
ebd8d4e8 64528
8b095871
IC
64529},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
64530'use strict';
ebd8d4e8 64531
8b095871
IC
64532var elliptic = require('../../elliptic');
64533var utils = elliptic.utils;
64534var assert = utils.assert;
64535var parseBytes = utils.parseBytes;
64536var cachedProperty = utils.cachedProperty;
ebd8d4e8 64537
8b095871
IC
64538/**
64539* @param {EDDSA} eddsa - instance
64540* @param {Object} params - public/private key parameters
64541*
64542* @param {Array<Byte>} [params.secret] - secret seed bytes
64543* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
64544* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
64545*
64546*/
64547function KeyPair(eddsa, params) {
64548 this.eddsa = eddsa;
64549 this._secret = parseBytes(params.secret);
64550 if (eddsa.isPoint(params.pub))
64551 this._pub = params.pub;
64552 else
64553 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
64554}
64555
8b095871
IC
64556KeyPair.fromPublic = function fromPublic(eddsa, pub) {
64557 if (pub instanceof KeyPair)
64558 return pub;
64559 return new KeyPair(eddsa, { pub: pub });
64560};
ebd8d4e8 64561
8b095871
IC
64562KeyPair.fromSecret = function fromSecret(eddsa, secret) {
64563 if (secret instanceof KeyPair)
64564 return secret;
64565 return new KeyPair(eddsa, { secret: secret });
64566};
ebd8d4e8 64567
8b095871
IC
64568KeyPair.prototype.secret = function secret() {
64569 return this._secret;
64570};
ebd8d4e8 64571
8b095871
IC
64572cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
64573 return this.eddsa.encodePoint(this.pub());
64574});
ebd8d4e8 64575
8b095871
IC
64576cachedProperty(KeyPair, 'pub', function pub() {
64577 if (this._pubBytes)
64578 return this.eddsa.decodePoint(this._pubBytes);
64579 return this.eddsa.g.mul(this.priv());
64580});
ebd8d4e8 64581
8b095871
IC
64582cachedProperty(KeyPair, 'privBytes', function privBytes() {
64583 var eddsa = this.eddsa;
64584 var hash = this.hash();
64585 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 64586
8b095871
IC
64587 var a = hash.slice(0, eddsa.encodingLength);
64588 a[0] &= 248;
64589 a[lastIx] &= 127;
64590 a[lastIx] |= 64;
ebd8d4e8 64591
8b095871
IC
64592 return a;
64593});
ebd8d4e8 64594
8b095871
IC
64595cachedProperty(KeyPair, 'priv', function priv() {
64596 return this.eddsa.decodeInt(this.privBytes());
64597});
ebd8d4e8 64598
8b095871
IC
64599cachedProperty(KeyPair, 'hash', function hash() {
64600 return this.eddsa.hash().update(this.secret()).digest();
64601});
ebd8d4e8 64602
8b095871
IC
64603cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
64604 return this.hash().slice(this.eddsa.encodingLength);
64605});
ebd8d4e8 64606
8b095871
IC
64607KeyPair.prototype.sign = function sign(message) {
64608 assert(this._secret, 'KeyPair can only verify');
64609 return this.eddsa.sign(message, this);
64610};
ebd8d4e8 64611
8b095871
IC
64612KeyPair.prototype.verify = function verify(message, sig) {
64613 return this.eddsa.verify(message, sig, this);
64614};
ebd8d4e8 64615
8b095871
IC
64616KeyPair.prototype.getSecret = function getSecret(enc) {
64617 assert(this._secret, 'KeyPair is public only');
64618 return utils.encode(this.secret(), enc);
64619};
ebd8d4e8 64620
8b095871
IC
64621KeyPair.prototype.getPublic = function getPublic(enc) {
64622 return utils.encode(this.pubBytes(), enc);
64623};
ebd8d4e8 64624
8b095871 64625module.exports = KeyPair;
ebd8d4e8 64626
8b095871
IC
64627},{"../../elliptic":39}],51:[function(require,module,exports){
64628'use strict';
ebd8d4e8 64629
8b095871
IC
64630var BN = require('bn.js');
64631var elliptic = require('../../elliptic');
64632var utils = elliptic.utils;
64633var assert = utils.assert;
64634var cachedProperty = utils.cachedProperty;
64635var parseBytes = utils.parseBytes;
ebd8d4e8 64636
8b095871
IC
64637/**
64638* @param {EDDSA} eddsa - eddsa instance
64639* @param {Array<Bytes>|Object} sig -
64640* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
64641* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
64642* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
64643* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
64644*/
64645function Signature(eddsa, sig) {
64646 this.eddsa = eddsa;
ebd8d4e8 64647
8b095871
IC
64648 if (typeof sig !== 'object')
64649 sig = parseBytes(sig);
ebd8d4e8 64650
8b095871
IC
64651 if (Array.isArray(sig)) {
64652 sig = {
64653 R: sig.slice(0, eddsa.encodingLength),
64654 S: sig.slice(eddsa.encodingLength)
64655 };
ab78acc6 64656 }
ebd8d4e8 64657
8b095871 64658 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 64659
8b095871
IC
64660 if (eddsa.isPoint(sig.R))
64661 this._R = sig.R;
64662 if (sig.S instanceof BN)
64663 this._S = sig.S;
64664
64665 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
64666 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
64667}
64668
8b095871
IC
64669cachedProperty(Signature, 'S', function S() {
64670 return this.eddsa.decodeInt(this.Sencoded());
64671});
ab78acc6 64672
8b095871
IC
64673cachedProperty(Signature, 'R', function R() {
64674 return this.eddsa.decodePoint(this.Rencoded());
64675});
ebd8d4e8 64676
8b095871
IC
64677cachedProperty(Signature, 'Rencoded', function Rencoded() {
64678 return this.eddsa.encodePoint(this.R());
64679});
ebd8d4e8 64680
8b095871
IC
64681cachedProperty(Signature, 'Sencoded', function Sencoded() {
64682 return this.eddsa.encodeInt(this.S());
64683});
ebd8d4e8 64684
8b095871
IC
64685Signature.prototype.toBytes = function toBytes() {
64686 return this.Rencoded().concat(this.Sencoded());
64687};
ebd8d4e8 64688
8b095871
IC
64689Signature.prototype.toHex = function toHex() {
64690 return utils.encode(this.toBytes(), 'hex').toUpperCase();
64691};
ebd8d4e8 64692
8b095871 64693module.exports = Signature;
ebd8d4e8 64694
8b095871
IC
64695},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
64696'use strict';
ebd8d4e8 64697
8b095871
IC
64698var hash = require('hash.js');
64699var elliptic = require('../elliptic');
64700var utils = elliptic.utils;
64701var assert = utils.assert;
ebd8d4e8 64702
8b095871
IC
64703function HmacDRBG(options) {
64704 if (!(this instanceof HmacDRBG))
64705 return new HmacDRBG(options);
64706 this.hash = options.hash;
64707 this.predResist = !!options.predResist;
ab78acc6 64708
8b095871
IC
64709 this.outLen = this.hash.outSize;
64710 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 64711
8b095871
IC
64712 this.reseed = null;
64713 this.reseedInterval = null;
64714 this.K = null;
64715 this.V = null;
ebd8d4e8 64716
8b095871
IC
64717 var entropy = utils.toArray(options.entropy, options.entropyEnc);
64718 var nonce = utils.toArray(options.nonce, options.nonceEnc);
64719 var pers = utils.toArray(options.pers, options.persEnc);
64720 assert(entropy.length >= (this.minEntropy / 8),
64721 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
64722 this._init(entropy, nonce, pers);
ebd8d4e8 64723}
8b095871 64724module.exports = HmacDRBG;
ebd8d4e8 64725
8b095871
IC
64726HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
64727 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 64728
8b095871
IC
64729 this.K = new Array(this.outLen / 8);
64730 this.V = new Array(this.outLen / 8);
64731 for (var i = 0; i < this.V.length; i++) {
64732 this.K[i] = 0x00;
64733 this.V[i] = 0x01;
64734 }
ebd8d4e8 64735
8b095871
IC
64736 this._update(seed);
64737 this.reseed = 1;
64738 this.reseedInterval = 0x1000000000000; // 2^48
64739};
ebd8d4e8 64740
8b095871
IC
64741HmacDRBG.prototype._hmac = function hmac() {
64742 return new hash.hmac(this.hash, this.K);
64743};
ebd8d4e8 64744
8b095871
IC
64745HmacDRBG.prototype._update = function update(seed) {
64746 var kmac = this._hmac()
64747 .update(this.V)
64748 .update([ 0x00 ]);
64749 if (seed)
64750 kmac = kmac.update(seed);
64751 this.K = kmac.digest();
64752 this.V = this._hmac().update(this.V).digest();
64753 if (!seed)
64754 return;
64755
64756 this.K = this._hmac()
64757 .update(this.V)
64758 .update([ 0x01 ])
64759 .update(seed)
64760 .digest();
64761 this.V = this._hmac().update(this.V).digest();
64762};
64763
64764HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
64765 // Optional entropy enc
64766 if (typeof entropyEnc !== 'string') {
64767 addEnc = add;
64768 add = entropyEnc;
64769 entropyEnc = null;
ebd8d4e8 64770 }
ebd8d4e8 64771
8b095871
IC
64772 entropy = utils.toBuffer(entropy, entropyEnc);
64773 add = utils.toBuffer(add, addEnc);
ebd8d4e8 64774
8b095871
IC
64775 assert(entropy.length >= (this.minEntropy / 8),
64776 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 64777
8b095871
IC
64778 this._update(entropy.concat(add || []));
64779 this.reseed = 1;
64780};
ebd8d4e8 64781
8b095871
IC
64782HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
64783 if (this.reseed > this.reseedInterval)
64784 throw new Error('Reseed is required');
ebd8d4e8 64785
8b095871
IC
64786 // Optional encoding
64787 if (typeof enc !== 'string') {
64788 addEnc = add;
64789 add = enc;
64790 enc = null;
64791 }
ebd8d4e8 64792
8b095871
IC
64793 // Optional additional data
64794 if (add) {
64795 add = utils.toArray(add, addEnc);
64796 this._update(add);
ebd8d4e8
IC
64797 }
64798
8b095871
IC
64799 var temp = [];
64800 while (temp.length < len) {
64801 this.V = this._hmac().update(this.V).digest();
64802 temp = temp.concat(this.V);
ebd8d4e8
IC
64803 }
64804
8b095871
IC
64805 var res = temp.slice(0, len);
64806 this._update(add);
64807 this.reseed++;
64808 return utils.encode(res, enc);
64809};
ebd8d4e8 64810
8b095871
IC
64811},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
64812module.exports = {
64813 doubles: {
64814 step: 4,
64815 points: [
64816 [
64817 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
64818 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
64819 ],
64820 [
64821 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
64822 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
64823 ],
64824 [
64825 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
64826 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
64827 ],
64828 [
64829 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
64830 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
64831 ],
64832 [
64833 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
64834 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
64835 ],
64836 [
64837 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
64838 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
64839 ],
64840 [
64841 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
64842 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
64843 ],
64844 [
64845 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
64846 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
64847 ],
64848 [
64849 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
64850 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
64851 ],
64852 [
64853 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
64854 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
64855 ],
64856 [
64857 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
64858 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
64859 ],
64860 [
64861 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
64862 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
64863 ],
64864 [
64865 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
64866 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
64867 ],
64868 [
64869 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
64870 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
64871 ],
64872 [
64873 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
64874 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
64875 ],
64876 [
64877 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
64878 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
64879 ],
64880 [
64881 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
64882 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
64883 ],
64884 [
64885 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
64886 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
64887 ],
64888 [
64889 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
64890 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
64891 ],
64892 [
64893 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
64894 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
64895 ],
64896 [
64897 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
64898 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
64899 ],
64900 [
64901 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
64902 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
64903 ],
64904 [
64905 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
64906 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
64907 ],
64908 [
64909 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
64910 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
64911 ],
64912 [
64913 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
64914 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
64915 ],
64916 [
64917 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
64918 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
64919 ],
64920 [
64921 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
64922 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
64923 ],
64924 [
64925 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
64926 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
64927 ],
64928 [
64929 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
64930 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
64931 ],
64932 [
64933 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
64934 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
64935 ],
64936 [
64937 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
64938 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
64939 ],
64940 [
64941 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
64942 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
64943 ],
64944 [
64945 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
64946 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
64947 ],
64948 [
64949 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
64950 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
64951 ],
64952 [
64953 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
64954 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
64955 ],
64956 [
64957 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
64958 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
64959 ],
64960 [
64961 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
64962 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
64963 ],
64964 [
64965 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
64966 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
64967 ],
64968 [
64969 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
64970 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
64971 ],
64972 [
64973 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
64974 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
64975 ],
64976 [
64977 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
64978 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
64979 ],
64980 [
64981 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
64982 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
64983 ],
64984 [
64985 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
64986 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
64987 ],
64988 [
64989 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
64990 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
64991 ],
64992 [
64993 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
64994 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
64995 ],
64996 [
64997 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
64998 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
64999 ],
65000 [
65001 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
65002 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
65003 ],
65004 [
65005 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
65006 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
65007 ],
65008 [
65009 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
65010 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
65011 ],
65012 [
65013 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
65014 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
65015 ],
65016 [
65017 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
65018 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
65019 ],
65020 [
65021 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
65022 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
65023 ],
65024 [
65025 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
65026 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
65027 ],
65028 [
65029 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
65030 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
65031 ],
65032 [
65033 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
65034 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
65035 ],
65036 [
65037 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
65038 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
65039 ],
65040 [
65041 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
65042 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
65043 ],
65044 [
65045 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
65046 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
65047 ],
65048 [
65049 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
65050 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
65051 ],
65052 [
65053 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
65054 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
65055 ],
65056 [
65057 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
65058 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
65059 ],
65060 [
65061 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
65062 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
65063 ],
65064 [
65065 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
65066 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
65067 ],
65068 [
65069 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
65070 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
65071 ],
65072 [
65073 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
65074 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
65075 ]
65076 ]
65077 },
65078 naf: {
65079 wnd: 7,
65080 points: [
65081 [
65082 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
65083 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
65084 ],
65085 [
65086 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
65087 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
65088 ],
65089 [
65090 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
65091 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
65092 ],
65093 [
65094 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
65095 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
65096 ],
65097 [
65098 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
65099 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
65100 ],
65101 [
65102 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
65103 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
65104 ],
65105 [
65106 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
65107 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
65108 ],
65109 [
65110 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
65111 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
65112 ],
65113 [
65114 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
65115 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
65116 ],
65117 [
65118 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
65119 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
65120 ],
65121 [
65122 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
65123 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
65124 ],
65125 [
65126 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
65127 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
65128 ],
65129 [
65130 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
65131 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
65132 ],
65133 [
65134 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
65135 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
65136 ],
65137 [
65138 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
65139 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
65140 ],
65141 [
65142 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
65143 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
65144 ],
65145 [
65146 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
65147 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
65148 ],
65149 [
65150 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
65151 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
65152 ],
65153 [
65154 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
65155 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
65156 ],
65157 [
65158 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
65159 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
65160 ],
65161 [
65162 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
65163 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
65164 ],
65165 [
65166 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
65167 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
65168 ],
65169 [
65170 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
65171 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
65172 ],
65173 [
65174 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
65175 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
65176 ],
65177 [
65178 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
65179 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
65180 ],
65181 [
65182 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
65183 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
65184 ],
65185 [
65186 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
65187 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
65188 ],
65189 [
65190 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
65191 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
65192 ],
65193 [
65194 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
65195 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
65196 ],
65197 [
65198 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
65199 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
65200 ],
65201 [
65202 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
65203 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
65204 ],
65205 [
65206 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
65207 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
65208 ],
65209 [
65210 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
65211 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
65212 ],
65213 [
65214 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
65215 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
65216 ],
65217 [
65218 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
65219 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
65220 ],
65221 [
65222 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
65223 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
65224 ],
65225 [
65226 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
65227 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
65228 ],
65229 [
65230 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
65231 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
65232 ],
65233 [
65234 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
65235 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
65236 ],
65237 [
65238 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
65239 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
65240 ],
65241 [
65242 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
65243 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
65244 ],
65245 [
65246 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
65247 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
65248 ],
65249 [
65250 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
65251 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
65252 ],
65253 [
65254 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
65255 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
65256 ],
65257 [
65258 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
65259 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
65260 ],
65261 [
65262 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
65263 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
65264 ],
65265 [
65266 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
65267 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
65268 ],
65269 [
65270 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
65271 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
65272 ],
65273 [
65274 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
65275 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
65276 ],
65277 [
65278 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
65279 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
65280 ],
65281 [
65282 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
65283 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
65284 ],
65285 [
65286 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
65287 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
65288 ],
65289 [
65290 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
65291 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
65292 ],
65293 [
65294 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
65295 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
65296 ],
65297 [
65298 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
65299 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
65300 ],
65301 [
65302 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
65303 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
65304 ],
65305 [
65306 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
65307 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
65308 ],
65309 [
65310 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
65311 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
65312 ],
65313 [
65314 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
65315 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
65316 ],
65317 [
65318 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
65319 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
65320 ],
65321 [
65322 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
65323 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
65324 ],
65325 [
65326 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
65327 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
65328 ],
65329 [
65330 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
65331 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
65332 ],
65333 [
65334 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
65335 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
65336 ],
65337 [
65338 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
65339 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
65340 ],
65341 [
65342 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
65343 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
65344 ],
65345 [
65346 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
65347 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
65348 ],
65349 [
65350 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
65351 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
65352 ],
65353 [
65354 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
65355 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
65356 ],
65357 [
65358 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
65359 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
65360 ],
65361 [
65362 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
65363 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
65364 ],
65365 [
65366 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
65367 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
65368 ],
65369 [
65370 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
65371 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
65372 ],
65373 [
65374 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
65375 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
65376 ],
65377 [
65378 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
65379 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
65380 ],
65381 [
65382 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
65383 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
65384 ],
65385 [
65386 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
65387 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
65388 ],
65389 [
65390 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
65391 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
65392 ],
65393 [
65394 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
65395 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
65396 ],
65397 [
65398 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
65399 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
65400 ],
65401 [
65402 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
65403 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
65404 ],
65405 [
65406 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
65407 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
65408 ],
65409 [
65410 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
65411 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
65412 ],
65413 [
65414 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
65415 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
65416 ],
65417 [
65418 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
65419 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
65420 ],
65421 [
65422 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
65423 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
65424 ],
65425 [
65426 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
65427 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
65428 ],
65429 [
65430 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
65431 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
65432 ],
65433 [
65434 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
65435 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
65436 ],
65437 [
65438 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
65439 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
65440 ],
65441 [
65442 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
65443 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
65444 ],
65445 [
65446 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
65447 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
65448 ],
65449 [
65450 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
65451 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
65452 ],
65453 [
65454 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
65455 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
65456 ],
65457 [
65458 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
65459 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
65460 ],
65461 [
65462 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
65463 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
65464 ],
65465 [
65466 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
65467 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
65468 ],
65469 [
65470 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
65471 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
65472 ],
65473 [
65474 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
65475 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
65476 ],
65477 [
65478 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
65479 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
65480 ],
65481 [
65482 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
65483 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
65484 ],
65485 [
65486 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
65487 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
65488 ],
65489 [
65490 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
65491 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
65492 ],
65493 [
65494 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
65495 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
65496 ],
65497 [
65498 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
65499 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
65500 ],
65501 [
65502 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
65503 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
65504 ],
65505 [
65506 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
65507 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
65508 ],
65509 [
65510 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
65511 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
65512 ],
65513 [
65514 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
65515 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
65516 ],
65517 [
65518 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
65519 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
65520 ],
65521 [
65522 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
65523 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
65524 ],
65525 [
65526 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
65527 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
65528 ],
65529 [
65530 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
65531 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
65532 ],
65533 [
65534 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
65535 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
65536 ],
65537 [
65538 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
65539 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
65540 ],
65541 [
65542 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
65543 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
65544 ],
65545 [
65546 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
65547 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
65548 ],
65549 [
65550 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
65551 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
65552 ],
65553 [
65554 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
65555 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
65556 ],
65557 [
65558 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
65559 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
65560 ],
65561 [
65562 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
65563 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
65564 ],
65565 [
65566 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
65567 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
65568 ],
65569 [
65570 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
65571 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
65572 ],
65573 [
65574 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
65575 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
65576 ],
65577 [
65578 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
65579 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
65580 ],
65581 [
65582 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
65583 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
65584 ],
65585 [
65586 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
65587 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
65588 ]
65589 ]
65590 }
65591};
ebd8d4e8 65592
8b095871
IC
65593},{}],54:[function(require,module,exports){
65594'use strict';
ebd8d4e8 65595
8b095871
IC
65596var utils = exports;
65597var BN = require('bn.js');
ebd8d4e8 65598
8b095871
IC
65599utils.assert = function assert(val, msg) {
65600 if (!val)
65601 throw new Error(msg || 'Assertion failed');
65602};
ebd8d4e8 65603
8b095871
IC
65604function toArray(msg, enc) {
65605 if (Array.isArray(msg))
65606 return msg.slice();
65607 if (!msg)
65608 return [];
65609 var res = [];
65610 if (typeof msg !== 'string') {
65611 for (var i = 0; i < msg.length; i++)
65612 res[i] = msg[i] | 0;
65613 return res;
65614 }
65615 if (!enc) {
65616 for (var i = 0; i < msg.length; i++) {
65617 var c = msg.charCodeAt(i);
65618 var hi = c >> 8;
65619 var lo = c & 0xff;
65620 if (hi)
65621 res.push(hi, lo);
65622 else
65623 res.push(lo);
65624 }
65625 } else if (enc === 'hex') {
65626 msg = msg.replace(/[^a-z0-9]+/ig, '');
65627 if (msg.length % 2 !== 0)
65628 msg = '0' + msg;
65629 for (var i = 0; i < msg.length; i += 2)
65630 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 65631 }
8b095871 65632 return res;
ebd8d4e8 65633}
8b095871 65634utils.toArray = toArray;
ebd8d4e8 65635
8b095871
IC
65636function zero2(word) {
65637 if (word.length === 1)
65638 return '0' + word;
65639 else
65640 return word;
65641}
65642utils.zero2 = zero2;
ab78acc6 65643
8b095871
IC
65644function toHex(msg) {
65645 var res = '';
65646 for (var i = 0; i < msg.length; i++)
65647 res += zero2(msg[i].toString(16));
65648 return res;
65649}
65650utils.toHex = toHex;
ebd8d4e8 65651
8b095871
IC
65652utils.encode = function encode(arr, enc) {
65653 if (enc === 'hex')
65654 return toHex(arr);
65655 else
65656 return arr;
65657};
ebd8d4e8 65658
8b095871
IC
65659// Represent num in a w-NAF form
65660function getNAF(num, w) {
65661 var naf = [];
65662 var ws = 1 << (w + 1);
65663 var k = num.clone();
65664 while (k.cmpn(1) >= 0) {
65665 var z;
65666 if (k.isOdd()) {
65667 var mod = k.andln(ws - 1);
65668 if (mod > (ws >> 1) - 1)
65669 z = (ws >> 1) - mod;
65670 else
65671 z = mod;
65672 k.isubn(z);
65673 } else {
65674 z = 0;
65675 }
65676 naf.push(z);
65677
65678 // Optimization, shift by word if possible
65679 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
65680 for (var i = 1; i < shift; i++)
65681 naf.push(0);
65682 k.iushrn(shift);
65683 }
65684
65685 return naf;
65686}
65687utils.getNAF = getNAF;
65688
65689// Represent k1, k2 in a Joint Sparse Form
65690function getJSF(k1, k2) {
65691 var jsf = [
65692 [],
65693 []
65694 ];
65695
65696 k1 = k1.clone();
65697 k2 = k2.clone();
65698 var d1 = 0;
65699 var d2 = 0;
65700 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
65701
65702 // First phase
65703 var m14 = (k1.andln(3) + d1) & 3;
65704 var m24 = (k2.andln(3) + d2) & 3;
65705 if (m14 === 3)
65706 m14 = -1;
65707 if (m24 === 3)
65708 m24 = -1;
65709 var u1;
65710 if ((m14 & 1) === 0) {
65711 u1 = 0;
65712 } else {
65713 var m8 = (k1.andln(7) + d1) & 7;
65714 if ((m8 === 3 || m8 === 5) && m24 === 2)
65715 u1 = -m14;
65716 else
65717 u1 = m14;
65718 }
65719 jsf[0].push(u1);
ebd8d4e8 65720
8b095871
IC
65721 var u2;
65722 if ((m24 & 1) === 0) {
65723 u2 = 0;
65724 } else {
65725 var m8 = (k2.andln(7) + d2) & 7;
65726 if ((m8 === 3 || m8 === 5) && m14 === 2)
65727 u2 = -m24;
65728 else
65729 u2 = m24;
65730 }
65731 jsf[1].push(u2);
ebd8d4e8 65732
8b095871
IC
65733 // Second phase
65734 if (2 * d1 === u1 + 1)
65735 d1 = 1 - d1;
65736 if (2 * d2 === u2 + 1)
65737 d2 = 1 - d2;
65738 k1.iushrn(1);
65739 k2.iushrn(1);
65740 }
ebd8d4e8 65741
8b095871
IC
65742 return jsf;
65743}
65744utils.getJSF = getJSF;
ab78acc6 65745
8b095871
IC
65746function cachedProperty(obj, name, computer) {
65747 var key = '_' + name;
65748 obj.prototype[name] = function cachedProperty() {
65749 return this[key] !== undefined ? this[key] :
65750 this[key] = computer.call(this);
65751 };
65752}
65753utils.cachedProperty = cachedProperty;
ebd8d4e8 65754
8b095871
IC
65755function parseBytes(bytes) {
65756 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
65757 bytes;
65758}
65759utils.parseBytes = parseBytes;
ebd8d4e8 65760
8b095871
IC
65761function intFromLE(bytes) {
65762 return new BN(bytes, 'hex', 'le');
65763}
65764utils.intFromLE = intFromLE;
ebd8d4e8 65765
8b095871
IC
65766
65767},{"bn.js":33}],55:[function(require,module,exports){
65768module.exports={
65769 "_args": [
65770 [
65771 {
65772 "raw": "elliptic@^6.2.3",
65773 "scope": null,
65774 "escapedName": "elliptic",
65775 "name": "elliptic",
65776 "rawSpec": "^6.2.3",
65777 "spec": ">=6.2.3 <7.0.0",
65778 "type": "range"
65779 },
65780 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
65781 ]
65782 ],
65783 "_from": "elliptic@>=6.2.3 <7.0.0",
65784 "_id": "elliptic@6.3.3",
65785 "_inCache": true,
65786 "_location": "/elliptic",
65787 "_nodeVersion": "7.0.0",
65788 "_npmOperationalInternal": {
65789 "host": "packages-18-east.internal.npmjs.com",
65790 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
65791 },
65792 "_npmUser": {
65793 "name": "indutny",
65794 "email": "fedor@indutny.com"
65795 },
65796 "_npmVersion": "3.10.8",
65797 "_phantomChildren": {},
65798 "_requested": {
65799 "raw": "elliptic@^6.2.3",
65800 "scope": null,
65801 "escapedName": "elliptic",
65802 "name": "elliptic",
65803 "rawSpec": "^6.2.3",
65804 "spec": ">=6.2.3 <7.0.0",
65805 "type": "range"
65806 },
65807 "_requiredBy": [
65808 "/browserify-sign",
65809 "/create-ecdh",
65810 "/secp256k1"
65811 ],
65812 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
65813 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
65814 "_shrinkwrap": null,
65815 "_spec": "elliptic@^6.2.3",
65816 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
65817 "author": {
65818 "name": "Fedor Indutny",
65819 "email": "fedor@indutny.com"
65820 },
65821 "bugs": {
65822 "url": "https://github.com/indutny/elliptic/issues"
65823 },
65824 "dependencies": {
65825 "bn.js": "^4.4.0",
65826 "brorand": "^1.0.1",
65827 "hash.js": "^1.0.0",
65828 "inherits": "^2.0.1"
65829 },
65830 "description": "EC cryptography",
65831 "devDependencies": {
65832 "brfs": "^1.4.3",
65833 "coveralls": "^2.11.3",
65834 "grunt": "^0.4.5",
65835 "grunt-browserify": "^5.0.0",
65836 "grunt-cli": "^1.2.0",
65837 "grunt-contrib-connect": "^1.0.0",
65838 "grunt-contrib-copy": "^1.0.0",
65839 "grunt-contrib-uglify": "^1.0.1",
65840 "grunt-mocha-istanbul": "^3.0.1",
65841 "grunt-saucelabs": "^8.6.2",
65842 "istanbul": "^0.4.2",
65843 "jscs": "^2.9.0",
65844 "jshint": "^2.6.0",
65845 "mocha": "^2.1.0"
65846 },
65847 "directories": {},
65848 "dist": {
65849 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
65850 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
65851 },
65852 "files": [
65853 "lib"
65854 ],
65855 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
65856 "homepage": "https://github.com/indutny/elliptic",
65857 "keywords": [
65858 "EC",
65859 "Elliptic",
65860 "curve",
65861 "Cryptography"
65862 ],
65863 "license": "MIT",
65864 "main": "lib/elliptic.js",
65865 "maintainers": [
65866 {
65867 "name": "indutny",
65868 "email": "fedor@indutny.com"
65869 }
65870 ],
65871 "name": "elliptic",
65872 "optionalDependencies": {},
65873 "readme": "ERROR: No README data found!",
65874 "repository": {
65875 "type": "git",
65876 "url": "git+ssh://git@github.com/indutny/elliptic.git"
65877 },
65878 "scripts": {
65879 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
65880 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
65881 "lint": "npm run jscs && npm run jshint",
65882 "test": "npm run lint && npm run unit",
65883 "unit": "istanbul test _mocha --reporter=spec test/index.js",
65884 "version": "grunt dist && git add dist/"
65885 },
65886 "version": "6.3.3"
ebd8d4e8
IC
65887}
65888
8b095871
IC
65889},{}],56:[function(require,module,exports){
65890(function (Buffer){
65891'use strict';
ab78acc6 65892
8b095871
IC
65893var isHexPrefixed = require('is-hex-prefixed');
65894var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 65895
8b095871
IC
65896/**
65897 * Pads a `String` to have an even length
65898 * @param {String} value
65899 * @return {String} output
65900 */
65901function padToEven(value) {
65902 var a = value; // eslint-disable-line
65903
65904 if (typeof a !== 'string') {
65905 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
65906 }
65907
65908 if (a.length % 2) {
65909 a = '0' + a;
65910 }
65911
65912 return a;
ebd8d4e8
IC
65913}
65914
8b095871
IC
65915/**
65916 * Converts a `Number` into a hex `String`
65917 * @param {Number} i
65918 * @return {String}
65919 */
65920function intToHex(i) {
65921 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 65922
8b095871
IC
65923 return '0x' + padToEven(hex);
65924}
ab78acc6 65925
8b095871
IC
65926/**
65927 * Converts an `Number` to a `Buffer`
65928 * @param {Number} i
65929 * @return {Buffer}
65930 */
65931function intToBuffer(i) {
65932 var hex = intToHex(i);
ab78acc6 65933
8b095871
IC
65934 return new Buffer(hex.slice(2), 'hex');
65935}
ebd8d4e8 65936
8b095871
IC
65937/**
65938 * Get the binary size of a string
65939 * @param {String} str
65940 * @return {Number}
65941 */
65942function getBinarySize(str) {
65943 if (typeof str !== 'string') {
65944 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
65945 }
ebd8d4e8 65946
8b095871
IC
65947 return Buffer.byteLength(str, 'utf8');
65948}
65949
65950/**
65951 * Returns TRUE if the first specified array contains all elements
65952 * from the second one. FALSE otherwise.
65953 *
65954 * @param {array} superset
65955 * @param {array} subset
65956 *
65957 * @returns {boolean}
65958 */
65959function arrayContainsArray(superset, subset, some) {
65960 if (Array.isArray(superset) !== true) {
65961 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
65962 }
65963 if (Array.isArray(subset) !== true) {
65964 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
65965 }
65966
8b095871
IC
65967 return subset[Boolean(some) && 'some' || 'every'](function (value) {
65968 return superset.indexOf(value) >= 0;
65969 });
ebd8d4e8
IC
65970}
65971
8b095871
IC
65972/**
65973 * Should be called to get utf8 from it's hex representation
65974 *
65975 * @method toUtf8
65976 * @param {String} string in hex
65977 * @returns {String} ascii string representation of hex value
65978 */
65979function toUtf8(hex) {
65980 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 65981
8b095871
IC
65982 return bufferValue.toString('utf8');
65983}
ab78acc6 65984
8b095871
IC
65985/**
65986 * Should be called to get ascii from it's hex representation
65987 *
65988 * @method toAscii
65989 * @param {String} string in hex
65990 * @returns {String} ascii string representation of hex value
65991 */
65992function toAscii(hex) {
65993 var str = ''; // eslint-disable-line
65994 var i = 0,
65995 l = hex.length; // eslint-disable-line
ebd8d4e8 65996
8b095871
IC
65997 if (hex.substring(0, 2) === '0x') {
65998 i = 2;
65999 }
ebd8d4e8 66000
8b095871
IC
66001 for (; i < l; i += 2) {
66002 var code = parseInt(hex.substr(i, 2), 16);
66003 str += String.fromCharCode(code);
ebd8d4e8 66004 }
8b095871
IC
66005
66006 return str;
ebd8d4e8
IC
66007}
66008
8b095871
IC
66009/**
66010 * Should be called to get hex representation (prefixed by 0x) of utf8 string
66011 *
66012 * @method fromUtf8
66013 * @param {String} string
66014 * @param {Number} optional padding
66015 * @returns {String} hex representation of input string
66016 */
66017function fromUtf8(stringValue) {
66018 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 66019
8b095871
IC
66020 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
66021}
ab78acc6 66022
8b095871
IC
66023/**
66024 * Should be called to get hex representation (prefixed by 0x) of ascii string
66025 *
66026 * @method fromAscii
66027 * @param {String} string
66028 * @param {Number} optional padding
66029 * @returns {String} hex representation of input string
66030 */
66031function fromAscii(stringValue) {
66032 var hex = ''; // eslint-disable-line
66033 for (var i = 0; i < stringValue.length; i++) {
66034 // eslint-disable-line
66035 var code = stringValue.charCodeAt(i);
66036 var n = code.toString(16);
66037 hex += n.length < 2 ? '0' + n : n;
66038 }
ab78acc6 66039
8b095871
IC
66040 return '0x' + hex;
66041}
ebd8d4e8 66042
8b095871
IC
66043/**
66044 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
66045 *
66046 * @method getKeys get specific key from inner object array of objects
66047 * @param {String} params
66048 * @param {String} key
66049 * @param {Boolean} allowEmpty
66050 * @returns {Array} output just a simple array of output keys
66051 */
66052function getKeys(params, key, allowEmpty) {
66053 if (!Array.isArray(params)) {
66054 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
66055 }
66056 if (typeof key !== 'string') {
66057 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
66058 }
ebd8d4e8 66059
8b095871 66060 var result = []; // eslint-disable-line
ebd8d4e8 66061
8b095871
IC
66062 for (var i = 0; i < params.length; i++) {
66063 // eslint-disable-line
66064 var value = params[i][key]; // eslint-disable-line
66065 if (allowEmpty && !value) {
66066 value = '';
66067 } else if (typeof value !== 'string') {
66068 throw new Error('invalid abi');
66069 }
66070 result.push(value);
66071 }
ebd8d4e8 66072
8b095871 66073 return result;
ebd8d4e8
IC
66074}
66075
8b095871
IC
66076/**
66077 * Is the string a hex string.
66078 *
66079 * @method check if string is hex string of specific length
66080 * @param {String} value
66081 * @param {Number} length
66082 * @returns {Boolean} output the string is a hex string
66083 */
66084function isHexString(value, length) {
66085 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
66086 return false;
ab78acc6
IC
66087 }
66088
8b095871
IC
66089 if (length && value.length !== 2 + 2 * length) {
66090 return false;
66091 }
ebd8d4e8 66092
8b095871
IC
66093 return true;
66094}
ab78acc6 66095
8b095871
IC
66096module.exports = {
66097 arrayContainsArray: arrayContainsArray,
66098 intToBuffer: intToBuffer,
66099 getBinarySize: getBinarySize,
66100 isHexPrefixed: isHexPrefixed,
66101 stripHexPrefix: stripHexPrefix,
66102 padToEven: padToEven,
66103 intToHex: intToHex,
66104 fromAscii: fromAscii,
66105 fromUtf8: fromUtf8,
66106 toAscii: toAscii,
66107 toUtf8: toUtf8,
66108 getKeys: getKeys,
66109 isHexString: isHexString
66110};
66111}).call(this,require("buffer").Buffer)
66112},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
66113var hash = exports;
66114
66115hash.utils = require('./hash/utils');
66116hash.common = require('./hash/common');
66117hash.sha = require('./hash/sha');
66118hash.ripemd = require('./hash/ripemd');
66119hash.hmac = require('./hash/hmac');
66120
66121// Proxy hash functions to the main object
66122hash.sha1 = hash.sha.sha1;
66123hash.sha256 = hash.sha.sha256;
66124hash.sha224 = hash.sha.sha224;
66125hash.sha384 = hash.sha.sha384;
66126hash.sha512 = hash.sha.sha512;
66127hash.ripemd160 = hash.ripemd.ripemd160;
66128
66129},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
66130var hash = require('../hash');
66131var utils = hash.utils;
66132var assert = utils.assert;
66133
66134function BlockHash() {
66135 this.pending = null;
66136 this.pendingTotal = 0;
66137 this.blockSize = this.constructor.blockSize;
66138 this.outSize = this.constructor.outSize;
66139 this.hmacStrength = this.constructor.hmacStrength;
66140 this.padLength = this.constructor.padLength / 8;
66141 this.endian = 'big';
66142
66143 this._delta8 = this.blockSize / 8;
66144 this._delta32 = this.blockSize / 32;
66145}
66146exports.BlockHash = BlockHash;
66147
66148BlockHash.prototype.update = function update(msg, enc) {
66149 // Convert message to array, pad it, and join into 32bit blocks
66150 msg = utils.toArray(msg, enc);
66151 if (!this.pending)
66152 this.pending = msg;
66153 else
66154 this.pending = this.pending.concat(msg);
66155 this.pendingTotal += msg.length;
ab78acc6 66156
8b095871
IC
66157 // Enough data, try updating
66158 if (this.pending.length >= this._delta8) {
66159 msg = this.pending;
ebd8d4e8 66160
8b095871
IC
66161 // Process pending data in blocks
66162 var r = msg.length % this._delta8;
66163 this.pending = msg.slice(msg.length - r, msg.length);
66164 if (this.pending.length === 0)
66165 this.pending = null;
ebd8d4e8 66166
8b095871
IC
66167 msg = utils.join32(msg, 0, msg.length - r, this.endian);
66168 for (var i = 0; i < msg.length; i += this._delta32)
66169 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
66170 }
66171
8b095871
IC
66172 return this;
66173};
ebd8d4e8 66174
8b095871
IC
66175BlockHash.prototype.digest = function digest(enc) {
66176 this.update(this._pad());
66177 assert(this.pending === null);
ebd8d4e8 66178
8b095871
IC
66179 return this._digest(enc);
66180};
ebd8d4e8 66181
8b095871
IC
66182BlockHash.prototype._pad = function pad() {
66183 var len = this.pendingTotal;
66184 var bytes = this._delta8;
66185 var k = bytes - ((len + this.padLength) % bytes);
66186 var res = new Array(k + this.padLength);
66187 res[0] = 0x80;
66188 for (var i = 1; i < k; i++)
66189 res[i] = 0;
66190
66191 // Append length
66192 len <<= 3;
66193 if (this.endian === 'big') {
66194 for (var t = 8; t < this.padLength; t++)
66195 res[i++] = 0;
66196
66197 res[i++] = 0;
66198 res[i++] = 0;
66199 res[i++] = 0;
66200 res[i++] = 0;
66201 res[i++] = (len >>> 24) & 0xff;
66202 res[i++] = (len >>> 16) & 0xff;
66203 res[i++] = (len >>> 8) & 0xff;
66204 res[i++] = len & 0xff;
ebd8d4e8 66205 } else {
8b095871
IC
66206 res[i++] = len & 0xff;
66207 res[i++] = (len >>> 8) & 0xff;
66208 res[i++] = (len >>> 16) & 0xff;
66209 res[i++] = (len >>> 24) & 0xff;
66210 res[i++] = 0;
66211 res[i++] = 0;
66212 res[i++] = 0;
66213 res[i++] = 0;
ebd8d4e8 66214
8b095871
IC
66215 for (var t = 8; t < this.padLength; t++)
66216 res[i++] = 0;
ebd8d4e8
IC
66217 }
66218
8b095871
IC
66219 return res;
66220};
ebd8d4e8 66221
8b095871
IC
66222},{"../hash":57}],59:[function(require,module,exports){
66223var hmac = exports;
ebd8d4e8 66224
8b095871
IC
66225var hash = require('../hash');
66226var utils = hash.utils;
66227var assert = utils.assert;
ebd8d4e8 66228
8b095871
IC
66229function Hmac(hash, key, enc) {
66230 if (!(this instanceof Hmac))
66231 return new Hmac(hash, key, enc);
66232 this.Hash = hash;
66233 this.blockSize = hash.blockSize / 8;
66234 this.outSize = hash.outSize / 8;
66235 this.inner = null;
66236 this.outer = null;
ebd8d4e8 66237
8b095871 66238 this._init(utils.toArray(key, enc));
ebd8d4e8 66239}
8b095871 66240module.exports = Hmac;
ebd8d4e8 66241
8b095871
IC
66242Hmac.prototype._init = function init(key) {
66243 // Shorten key, if needed
66244 if (key.length > this.blockSize)
66245 key = new this.Hash().update(key).digest();
66246 assert(key.length <= this.blockSize);
ebd8d4e8 66247
8b095871
IC
66248 // Add padding to key
66249 for (var i = key.length; i < this.blockSize; i++)
66250 key.push(0);
ab78acc6 66251
8b095871
IC
66252 for (var i = 0; i < key.length; i++)
66253 key[i] ^= 0x36;
66254 this.inner = new this.Hash().update(key);
ab78acc6 66255
8b095871
IC
66256 // 0x36 ^ 0x5c = 0x6a
66257 for (var i = 0; i < key.length; i++)
66258 key[i] ^= 0x6a;
66259 this.outer = new this.Hash().update(key);
66260};
ebd8d4e8 66261
8b095871
IC
66262Hmac.prototype.update = function update(msg, enc) {
66263 this.inner.update(msg, enc);
66264 return this;
66265};
ab78acc6 66266
8b095871
IC
66267Hmac.prototype.digest = function digest(enc) {
66268 this.outer.update(this.inner.digest());
66269 return this.outer.digest(enc);
66270};
ab78acc6 66271
8b095871
IC
66272},{"../hash":57}],60:[function(require,module,exports){
66273var hash = require('../hash');
66274var utils = hash.utils;
66275
66276var rotl32 = utils.rotl32;
66277var sum32 = utils.sum32;
66278var sum32_3 = utils.sum32_3;
66279var sum32_4 = utils.sum32_4;
66280var BlockHash = hash.common.BlockHash;
66281
66282function RIPEMD160() {
66283 if (!(this instanceof RIPEMD160))
66284 return new RIPEMD160();
66285
66286 BlockHash.call(this);
66287
66288 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
66289 this.endian = 'little';
66290}
66291utils.inherits(RIPEMD160, BlockHash);
66292exports.ripemd160 = RIPEMD160;
66293
66294RIPEMD160.blockSize = 512;
66295RIPEMD160.outSize = 160;
66296RIPEMD160.hmacStrength = 192;
66297RIPEMD160.padLength = 64;
66298
66299RIPEMD160.prototype._update = function update(msg, start) {
66300 var A = this.h[0];
66301 var B = this.h[1];
66302 var C = this.h[2];
66303 var D = this.h[3];
66304 var E = this.h[4];
66305 var Ah = A;
66306 var Bh = B;
66307 var Ch = C;
66308 var Dh = D;
66309 var Eh = E;
66310 for (var j = 0; j < 80; j++) {
66311 var T = sum32(
66312 rotl32(
66313 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
66314 s[j]),
66315 E);
66316 A = E;
66317 E = D;
66318 D = rotl32(C, 10);
66319 C = B;
66320 B = T;
66321 T = sum32(
66322 rotl32(
66323 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
66324 sh[j]),
66325 Eh);
66326 Ah = Eh;
66327 Eh = Dh;
66328 Dh = rotl32(Ch, 10);
66329 Ch = Bh;
66330 Bh = T;
66331 }
66332 T = sum32_3(this.h[1], C, Dh);
66333 this.h[1] = sum32_3(this.h[2], D, Eh);
66334 this.h[2] = sum32_3(this.h[3], E, Ah);
66335 this.h[3] = sum32_3(this.h[4], A, Bh);
66336 this.h[4] = sum32_3(this.h[0], B, Ch);
66337 this.h[0] = T;
66338};
ebd8d4e8 66339
8b095871
IC
66340RIPEMD160.prototype._digest = function digest(enc) {
66341 if (enc === 'hex')
66342 return utils.toHex32(this.h, 'little');
66343 else
66344 return utils.split32(this.h, 'little');
66345};
ebd8d4e8 66346
8b095871
IC
66347function f(j, x, y, z) {
66348 if (j <= 15)
66349 return x ^ y ^ z;
66350 else if (j <= 31)
66351 return (x & y) | ((~x) & z);
66352 else if (j <= 47)
66353 return (x | (~y)) ^ z;
66354 else if (j <= 63)
66355 return (x & z) | (y & (~z));
66356 else
66357 return x ^ (y | (~z));
66358}
66359
66360function K(j) {
66361 if (j <= 15)
66362 return 0x00000000;
66363 else if (j <= 31)
66364 return 0x5a827999;
66365 else if (j <= 47)
66366 return 0x6ed9eba1;
66367 else if (j <= 63)
66368 return 0x8f1bbcdc;
66369 else
66370 return 0xa953fd4e;
66371}
66372
66373function Kh(j) {
66374 if (j <= 15)
66375 return 0x50a28be6;
66376 else if (j <= 31)
66377 return 0x5c4dd124;
66378 else if (j <= 47)
66379 return 0x6d703ef3;
66380 else if (j <= 63)
66381 return 0x7a6d76e9;
66382 else
66383 return 0x00000000;
66384}
ebd8d4e8 66385
8b095871
IC
66386var r = [
66387 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
66388 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
66389 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
66390 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
66391 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
66392];
ebd8d4e8 66393
8b095871
IC
66394var rh = [
66395 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
66396 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
66397 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
66398 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
66399 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
66400];
ebd8d4e8 66401
8b095871
IC
66402var s = [
66403 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
66404 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
66405 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
66406 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
66407 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
66408];
ebd8d4e8 66409
8b095871
IC
66410var sh = [
66411 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
66412 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
66413 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
66414 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
66415 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
66416];
ebd8d4e8 66417
8b095871
IC
66418},{"../hash":57}],61:[function(require,module,exports){
66419var hash = require('../hash');
66420var utils = hash.utils;
66421var assert = utils.assert;
66422
66423var rotr32 = utils.rotr32;
66424var rotl32 = utils.rotl32;
66425var sum32 = utils.sum32;
66426var sum32_4 = utils.sum32_4;
66427var sum32_5 = utils.sum32_5;
66428var rotr64_hi = utils.rotr64_hi;
66429var rotr64_lo = utils.rotr64_lo;
66430var shr64_hi = utils.shr64_hi;
66431var shr64_lo = utils.shr64_lo;
66432var sum64 = utils.sum64;
66433var sum64_hi = utils.sum64_hi;
66434var sum64_lo = utils.sum64_lo;
66435var sum64_4_hi = utils.sum64_4_hi;
66436var sum64_4_lo = utils.sum64_4_lo;
66437var sum64_5_hi = utils.sum64_5_hi;
66438var sum64_5_lo = utils.sum64_5_lo;
66439var BlockHash = hash.common.BlockHash;
66440
66441var sha256_K = [
66442 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
66443 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
66444 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
66445 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
66446 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
66447 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
66448 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
66449 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
66450 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
66451 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
66452 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
66453 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
66454 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
66455 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
66456 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
66457 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
66458];
ebd8d4e8 66459
8b095871
IC
66460var sha512_K = [
66461 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
66462 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
66463 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
66464 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
66465 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
66466 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
66467 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
66468 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
66469 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
66470 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
66471 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
66472 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
66473 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
66474 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
66475 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
66476 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
66477 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
66478 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
66479 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
66480 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
66481 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
66482 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
66483 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
66484 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
66485 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
66486 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
66487 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
66488 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
66489 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
66490 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
66491 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
66492 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
66493 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
66494 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
66495 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
66496 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
66497 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
66498 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
66499 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
66500 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
66501];
ebd8d4e8 66502
8b095871
IC
66503var sha1_K = [
66504 0x5A827999, 0x6ED9EBA1,
66505 0x8F1BBCDC, 0xCA62C1D6
66506];
ebd8d4e8 66507
8b095871
IC
66508function SHA256() {
66509 if (!(this instanceof SHA256))
66510 return new SHA256();
66511
66512 BlockHash.call(this);
66513 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
66514 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
66515 this.k = sha256_K;
66516 this.W = new Array(64);
66517}
66518utils.inherits(SHA256, BlockHash);
66519exports.sha256 = SHA256;
66520
66521SHA256.blockSize = 512;
66522SHA256.outSize = 256;
66523SHA256.hmacStrength = 192;
66524SHA256.padLength = 64;
66525
66526SHA256.prototype._update = function _update(msg, start) {
66527 var W = this.W;
66528
66529 for (var i = 0; i < 16; i++)
66530 W[i] = msg[start + i];
66531 for (; i < W.length; i++)
66532 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
66533
66534 var a = this.h[0];
66535 var b = this.h[1];
66536 var c = this.h[2];
66537 var d = this.h[3];
66538 var e = this.h[4];
66539 var f = this.h[5];
66540 var g = this.h[6];
66541 var h = this.h[7];
66542
66543 assert(this.k.length === W.length);
66544 for (var i = 0; i < W.length; i++) {
66545 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
66546 var T2 = sum32(s0_256(a), maj32(a, b, c));
66547 h = g;
66548 g = f;
66549 f = e;
66550 e = sum32(d, T1);
66551 d = c;
66552 c = b;
66553 b = a;
66554 a = sum32(T1, T2);
66555 }
66556
66557 this.h[0] = sum32(this.h[0], a);
66558 this.h[1] = sum32(this.h[1], b);
66559 this.h[2] = sum32(this.h[2], c);
66560 this.h[3] = sum32(this.h[3], d);
66561 this.h[4] = sum32(this.h[4], e);
66562 this.h[5] = sum32(this.h[5], f);
66563 this.h[6] = sum32(this.h[6], g);
66564 this.h[7] = sum32(this.h[7], h);
66565};
ebd8d4e8 66566
8b095871
IC
66567SHA256.prototype._digest = function digest(enc) {
66568 if (enc === 'hex')
66569 return utils.toHex32(this.h, 'big');
66570 else
66571 return utils.split32(this.h, 'big');
66572};
ebd8d4e8 66573
8b095871
IC
66574function SHA224() {
66575 if (!(this instanceof SHA224))
66576 return new SHA224();
ebd8d4e8 66577
8b095871
IC
66578 SHA256.call(this);
66579 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
66580 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
66581}
66582utils.inherits(SHA224, SHA256);
66583exports.sha224 = SHA224;
ebd8d4e8 66584
8b095871
IC
66585SHA224.blockSize = 512;
66586SHA224.outSize = 224;
66587SHA224.hmacStrength = 192;
66588SHA224.padLength = 64;
ebd8d4e8 66589
8b095871
IC
66590SHA224.prototype._digest = function digest(enc) {
66591 // Just truncate output
66592 if (enc === 'hex')
66593 return utils.toHex32(this.h.slice(0, 7), 'big');
66594 else
66595 return utils.split32(this.h.slice(0, 7), 'big');
66596};
66597
66598function SHA512() {
66599 if (!(this instanceof SHA512))
66600 return new SHA512();
66601
66602 BlockHash.call(this);
66603 this.h = [ 0x6a09e667, 0xf3bcc908,
66604 0xbb67ae85, 0x84caa73b,
66605 0x3c6ef372, 0xfe94f82b,
66606 0xa54ff53a, 0x5f1d36f1,
66607 0x510e527f, 0xade682d1,
66608 0x9b05688c, 0x2b3e6c1f,
66609 0x1f83d9ab, 0xfb41bd6b,
66610 0x5be0cd19, 0x137e2179 ];
66611 this.k = sha512_K;
66612 this.W = new Array(160);
66613}
66614utils.inherits(SHA512, BlockHash);
66615exports.sha512 = SHA512;
66616
66617SHA512.blockSize = 1024;
66618SHA512.outSize = 512;
66619SHA512.hmacStrength = 192;
66620SHA512.padLength = 128;
66621
66622SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
66623 var W = this.W;
66624
66625 // 32 x 32bit words
66626 for (var i = 0; i < 32; i++)
66627 W[i] = msg[start + i];
66628 for (; i < W.length; i += 2) {
66629 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
66630 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
66631 var c1_hi = W[i - 14]; // i - 7
66632 var c1_lo = W[i - 13];
66633 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
66634 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
66635 var c3_hi = W[i - 32]; // i - 16
66636 var c3_lo = W[i - 31];
66637
66638 W[i] = sum64_4_hi(c0_hi, c0_lo,
66639 c1_hi, c1_lo,
66640 c2_hi, c2_lo,
66641 c3_hi, c3_lo);
66642 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
66643 c1_hi, c1_lo,
66644 c2_hi, c2_lo,
66645 c3_hi, c3_lo);
ebd8d4e8 66646 }
8b095871
IC
66647};
66648
66649SHA512.prototype._update = function _update(msg, start) {
66650 this._prepareBlock(msg, start);
66651
66652 var W = this.W;
66653
66654 var ah = this.h[0];
66655 var al = this.h[1];
66656 var bh = this.h[2];
66657 var bl = this.h[3];
66658 var ch = this.h[4];
66659 var cl = this.h[5];
66660 var dh = this.h[6];
66661 var dl = this.h[7];
66662 var eh = this.h[8];
66663 var el = this.h[9];
66664 var fh = this.h[10];
66665 var fl = this.h[11];
66666 var gh = this.h[12];
66667 var gl = this.h[13];
66668 var hh = this.h[14];
66669 var hl = this.h[15];
66670
66671 assert(this.k.length === W.length);
66672 for (var i = 0; i < W.length; i += 2) {
66673 var c0_hi = hh;
66674 var c0_lo = hl;
66675 var c1_hi = s1_512_hi(eh, el);
66676 var c1_lo = s1_512_lo(eh, el);
66677 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
66678 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
66679 var c3_hi = this.k[i];
66680 var c3_lo = this.k[i + 1];
66681 var c4_hi = W[i];
66682 var c4_lo = W[i + 1];
66683
66684 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
66685 c1_hi, c1_lo,
66686 c2_hi, c2_lo,
66687 c3_hi, c3_lo,
66688 c4_hi, c4_lo);
66689 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
66690 c1_hi, c1_lo,
66691 c2_hi, c2_lo,
66692 c3_hi, c3_lo,
66693 c4_hi, c4_lo);
66694
66695 var c0_hi = s0_512_hi(ah, al);
66696 var c0_lo = s0_512_lo(ah, al);
66697 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
66698 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
66699
66700 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
66701 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
66702
66703 hh = gh;
66704 hl = gl;
66705
66706 gh = fh;
66707 gl = fl;
66708
66709 fh = eh;
66710 fl = el;
66711
66712 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
66713 el = sum64_lo(dl, dl, T1_hi, T1_lo);
66714
66715 dh = ch;
66716 dl = cl;
66717
66718 ch = bh;
66719 cl = bl;
66720
66721 bh = ah;
66722 bl = al;
66723
66724 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
66725 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
66726 }
66727
66728 sum64(this.h, 0, ah, al);
66729 sum64(this.h, 2, bh, bl);
66730 sum64(this.h, 4, ch, cl);
66731 sum64(this.h, 6, dh, dl);
66732 sum64(this.h, 8, eh, el);
66733 sum64(this.h, 10, fh, fl);
66734 sum64(this.h, 12, gh, gl);
66735 sum64(this.h, 14, hh, hl);
66736};
66737
66738SHA512.prototype._digest = function digest(enc) {
66739 if (enc === 'hex')
66740 return utils.toHex32(this.h, 'big');
66741 else
66742 return utils.split32(this.h, 'big');
66743};
66744
66745function SHA384() {
66746 if (!(this instanceof SHA384))
66747 return new SHA384();
66748
66749 SHA512.call(this);
66750 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
66751 0x629a292a, 0x367cd507,
66752 0x9159015a, 0x3070dd17,
66753 0x152fecd8, 0xf70e5939,
66754 0x67332667, 0xffc00b31,
66755 0x8eb44a87, 0x68581511,
66756 0xdb0c2e0d, 0x64f98fa7,
66757 0x47b5481d, 0xbefa4fa4 ];
66758}
66759utils.inherits(SHA384, SHA512);
66760exports.sha384 = SHA384;
66761
66762SHA384.blockSize = 1024;
66763SHA384.outSize = 384;
66764SHA384.hmacStrength = 192;
66765SHA384.padLength = 128;
66766
66767SHA384.prototype._digest = function digest(enc) {
66768 if (enc === 'hex')
66769 return utils.toHex32(this.h.slice(0, 12), 'big');
66770 else
66771 return utils.split32(this.h.slice(0, 12), 'big');
66772};
ebd8d4e8 66773
8b095871
IC
66774function SHA1() {
66775 if (!(this instanceof SHA1))
66776 return new SHA1();
ebd8d4e8 66777
8b095871
IC
66778 BlockHash.call(this);
66779 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
66780 0x10325476, 0xc3d2e1f0 ];
66781 this.W = new Array(80);
66782}
ebd8d4e8 66783
8b095871
IC
66784utils.inherits(SHA1, BlockHash);
66785exports.sha1 = SHA1;
ebd8d4e8 66786
8b095871
IC
66787SHA1.blockSize = 512;
66788SHA1.outSize = 160;
66789SHA1.hmacStrength = 80;
66790SHA1.padLength = 64;
ebd8d4e8 66791
8b095871
IC
66792SHA1.prototype._update = function _update(msg, start) {
66793 var W = this.W;
ebd8d4e8 66794
8b095871
IC
66795 for (var i = 0; i < 16; i++)
66796 W[i] = msg[start + i];
ebd8d4e8 66797
8b095871
IC
66798 for(; i < W.length; i++)
66799 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 66800
8b095871
IC
66801 var a = this.h[0];
66802 var b = this.h[1];
66803 var c = this.h[2];
66804 var d = this.h[3];
66805 var e = this.h[4];
ebd8d4e8 66806
8b095871
IC
66807 for (var i = 0; i < W.length; i++) {
66808 var s = ~~(i / 20);
66809 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
66810 e = d;
66811 d = c;
66812 c = rotl32(b, 30);
66813 b = a;
66814 a = t;
ebd8d4e8
IC
66815 }
66816
8b095871
IC
66817 this.h[0] = sum32(this.h[0], a);
66818 this.h[1] = sum32(this.h[1], b);
66819 this.h[2] = sum32(this.h[2], c);
66820 this.h[3] = sum32(this.h[3], d);
66821 this.h[4] = sum32(this.h[4], e);
66822};
ebd8d4e8 66823
8b095871
IC
66824SHA1.prototype._digest = function digest(enc) {
66825 if (enc === 'hex')
66826 return utils.toHex32(this.h, 'big');
66827 else
66828 return utils.split32(this.h, 'big');
66829};
66830
66831function ch32(x, y, z) {
66832 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
66833}
66834
8b095871
IC
66835function maj32(x, y, z) {
66836 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
66837}
66838
8b095871
IC
66839function p32(x, y, z) {
66840 return x ^ y ^ z;
66841}
ebd8d4e8 66842
8b095871
IC
66843function s0_256(x) {
66844 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
66845}
ebd8d4e8 66846
8b095871
IC
66847function s1_256(x) {
66848 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
66849}
66850
8b095871
IC
66851function g0_256(x) {
66852 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
66853}
ab78acc6 66854
8b095871
IC
66855function g1_256(x) {
66856 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
66857}
ab78acc6 66858
8b095871
IC
66859function ft_1(s, x, y, z) {
66860 if (s === 0)
66861 return ch32(x, y, z);
66862 if (s === 1 || s === 3)
66863 return p32(x, y, z);
66864 if (s === 2)
66865 return maj32(x, y, z);
66866}
ebd8d4e8 66867
8b095871
IC
66868function ch64_hi(xh, xl, yh, yl, zh, zl) {
66869 var r = (xh & yh) ^ ((~xh) & zh);
66870 if (r < 0)
66871 r += 0x100000000;
66872 return r;
66873}
ebd8d4e8 66874
8b095871
IC
66875function ch64_lo(xh, xl, yh, yl, zh, zl) {
66876 var r = (xl & yl) ^ ((~xl) & zl);
66877 if (r < 0)
66878 r += 0x100000000;
66879 return r;
ebd8d4e8
IC
66880}
66881
8b095871
IC
66882function maj64_hi(xh, xl, yh, yl, zh, zl) {
66883 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
66884 if (r < 0)
66885 r += 0x100000000;
66886 return r;
66887}
ebd8d4e8 66888
8b095871
IC
66889function maj64_lo(xh, xl, yh, yl, zh, zl) {
66890 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
66891 if (r < 0)
66892 r += 0x100000000;
66893 return r;
66894}
ebd8d4e8 66895
8b095871
IC
66896function s0_512_hi(xh, xl) {
66897 var c0_hi = rotr64_hi(xh, xl, 28);
66898 var c1_hi = rotr64_hi(xl, xh, 2); // 34
66899 var c2_hi = rotr64_hi(xl, xh, 7); // 39
66900
66901 var r = c0_hi ^ c1_hi ^ c2_hi;
66902 if (r < 0)
66903 r += 0x100000000;
66904 return r;
ebd8d4e8
IC
66905}
66906
8b095871
IC
66907function s0_512_lo(xh, xl) {
66908 var c0_lo = rotr64_lo(xh, xl, 28);
66909 var c1_lo = rotr64_lo(xl, xh, 2); // 34
66910 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 66911
8b095871
IC
66912 var r = c0_lo ^ c1_lo ^ c2_lo;
66913 if (r < 0)
66914 r += 0x100000000;
66915 return r;
66916}
ebd8d4e8 66917
8b095871
IC
66918function s1_512_hi(xh, xl) {
66919 var c0_hi = rotr64_hi(xh, xl, 14);
66920 var c1_hi = rotr64_hi(xh, xl, 18);
66921 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 66922
8b095871
IC
66923 var r = c0_hi ^ c1_hi ^ c2_hi;
66924 if (r < 0)
66925 r += 0x100000000;
66926 return r;
ebd8d4e8
IC
66927}
66928
8b095871
IC
66929function s1_512_lo(xh, xl) {
66930 var c0_lo = rotr64_lo(xh, xl, 14);
66931 var c1_lo = rotr64_lo(xh, xl, 18);
66932 var c2_lo = rotr64_lo(xl, xh, 9); // 41
66933
66934 var r = c0_lo ^ c1_lo ^ c2_lo;
66935 if (r < 0)
66936 r += 0x100000000;
66937 return r;
ebd8d4e8
IC
66938}
66939
8b095871
IC
66940function g0_512_hi(xh, xl) {
66941 var c0_hi = rotr64_hi(xh, xl, 1);
66942 var c1_hi = rotr64_hi(xh, xl, 8);
66943 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 66944
8b095871
IC
66945 var r = c0_hi ^ c1_hi ^ c2_hi;
66946 if (r < 0)
66947 r += 0x100000000;
66948 return r;
66949}
66950
66951function g0_512_lo(xh, xl) {
66952 var c0_lo = rotr64_lo(xh, xl, 1);
66953 var c1_lo = rotr64_lo(xh, xl, 8);
66954 var c2_lo = shr64_lo(xh, xl, 7);
66955
66956 var r = c0_lo ^ c1_lo ^ c2_lo;
66957 if (r < 0)
66958 r += 0x100000000;
66959 return r;
66960}
66961
66962function g1_512_hi(xh, xl) {
66963 var c0_hi = rotr64_hi(xh, xl, 19);
66964 var c1_hi = rotr64_hi(xl, xh, 29); // 61
66965 var c2_hi = shr64_hi(xh, xl, 6);
66966
66967 var r = c0_hi ^ c1_hi ^ c2_hi;
66968 if (r < 0)
66969 r += 0x100000000;
66970 return r;
66971}
66972
66973function g1_512_lo(xh, xl) {
66974 var c0_lo = rotr64_lo(xh, xl, 19);
66975 var c1_lo = rotr64_lo(xl, xh, 29); // 61
66976 var c2_lo = shr64_lo(xh, xl, 6);
66977
66978 var r = c0_lo ^ c1_lo ^ c2_lo;
66979 if (r < 0)
66980 r += 0x100000000;
66981 return r;
66982}
66983
66984},{"../hash":57}],62:[function(require,module,exports){
66985var utils = exports;
66986var inherits = require('inherits');
66987
66988function toArray(msg, enc) {
66989 if (Array.isArray(msg))
66990 return msg.slice();
66991 if (!msg)
66992 return [];
66993 var res = [];
66994 if (typeof msg === 'string') {
66995 if (!enc) {
66996 for (var i = 0; i < msg.length; i++) {
66997 var c = msg.charCodeAt(i);
66998 var hi = c >> 8;
66999 var lo = c & 0xff;
67000 if (hi)
67001 res.push(hi, lo);
67002 else
67003 res.push(lo);
67004 }
67005 } else if (enc === 'hex') {
67006 msg = msg.replace(/[^a-z0-9]+/ig, '');
67007 if (msg.length % 2 !== 0)
67008 msg = '0' + msg;
67009 for (var i = 0; i < msg.length; i += 2)
67010 res.push(parseInt(msg[i] + msg[i + 1], 16));
67011 }
67012 } else {
67013 for (var i = 0; i < msg.length; i++)
67014 res[i] = msg[i] | 0;
ebd8d4e8 67015 }
8b095871 67016 return res;
ebd8d4e8 67017}
8b095871 67018utils.toArray = toArray;
ebd8d4e8 67019
8b095871
IC
67020function toHex(msg) {
67021 var res = '';
67022 for (var i = 0; i < msg.length; i++)
67023 res += zero2(msg[i].toString(16));
67024 return res;
67025}
67026utils.toHex = toHex;
ebd8d4e8 67027
8b095871
IC
67028function htonl(w) {
67029 var res = (w >>> 24) |
67030 ((w >>> 8) & 0xff00) |
67031 ((w << 8) & 0xff0000) |
67032 ((w & 0xff) << 24);
67033 return res >>> 0;
67034}
67035utils.htonl = htonl;
ebd8d4e8 67036
8b095871
IC
67037function toHex32(msg, endian) {
67038 var res = '';
67039 for (var i = 0; i < msg.length; i++) {
67040 var w = msg[i];
67041 if (endian === 'little')
67042 w = htonl(w);
67043 res += zero8(w.toString(16));
67044 }
67045 return res;
67046}
67047utils.toHex32 = toHex32;
ebd8d4e8 67048
8b095871
IC
67049function zero2(word) {
67050 if (word.length === 1)
67051 return '0' + word;
67052 else
67053 return word;
67054}
67055utils.zero2 = zero2;
67056
67057function zero8(word) {
67058 if (word.length === 7)
67059 return '0' + word;
67060 else if (word.length === 6)
67061 return '00' + word;
67062 else if (word.length === 5)
67063 return '000' + word;
67064 else if (word.length === 4)
67065 return '0000' + word;
67066 else if (word.length === 3)
67067 return '00000' + word;
67068 else if (word.length === 2)
67069 return '000000' + word;
67070 else if (word.length === 1)
67071 return '0000000' + word;
67072 else
67073 return word;
67074}
67075utils.zero8 = zero8;
67076
67077function join32(msg, start, end, endian) {
67078 var len = end - start;
67079 assert(len % 4 === 0);
67080 var res = new Array(len / 4);
67081 for (var i = 0, k = start; i < res.length; i++, k += 4) {
67082 var w;
67083 if (endian === 'big')
67084 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
67085 else
67086 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
67087 res[i] = w >>> 0;
67088 }
67089 return res;
67090}
67091utils.join32 = join32;
67092
67093function split32(msg, endian) {
67094 var res = new Array(msg.length * 4);
67095 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
67096 var m = msg[i];
67097 if (endian === 'big') {
67098 res[k] = m >>> 24;
67099 res[k + 1] = (m >>> 16) & 0xff;
67100 res[k + 2] = (m >>> 8) & 0xff;
67101 res[k + 3] = m & 0xff;
67102 } else {
67103 res[k + 3] = m >>> 24;
67104 res[k + 2] = (m >>> 16) & 0xff;
67105 res[k + 1] = (m >>> 8) & 0xff;
67106 res[k] = m & 0xff;
67107 }
ebd8d4e8 67108 }
8b095871 67109 return res;
ebd8d4e8 67110}
8b095871 67111utils.split32 = split32;
ebd8d4e8 67112
8b095871
IC
67113function rotr32(w, b) {
67114 return (w >>> b) | (w << (32 - b));
67115}
67116utils.rotr32 = rotr32;
ebd8d4e8 67117
8b095871
IC
67118function rotl32(w, b) {
67119 return (w << b) | (w >>> (32 - b));
67120}
67121utils.rotl32 = rotl32;
ebd8d4e8 67122
8b095871
IC
67123function sum32(a, b) {
67124 return (a + b) >>> 0;
67125}
67126utils.sum32 = sum32;
ebd8d4e8 67127
8b095871
IC
67128function sum32_3(a, b, c) {
67129 return (a + b + c) >>> 0;
67130}
67131utils.sum32_3 = sum32_3;
ebd8d4e8 67132
8b095871
IC
67133function sum32_4(a, b, c, d) {
67134 return (a + b + c + d) >>> 0;
67135}
67136utils.sum32_4 = sum32_4;
ebd8d4e8 67137
8b095871
IC
67138function sum32_5(a, b, c, d, e) {
67139 return (a + b + c + d + e) >>> 0;
67140}
67141utils.sum32_5 = sum32_5;
ebd8d4e8 67142
8b095871
IC
67143function assert(cond, msg) {
67144 if (!cond)
67145 throw new Error(msg || 'Assertion failed');
67146}
67147utils.assert = assert;
ab78acc6 67148
8b095871 67149utils.inherits = inherits;
ab78acc6 67150
8b095871
IC
67151function sum64(buf, pos, ah, al) {
67152 var bh = buf[pos];
67153 var bl = buf[pos + 1];
ab78acc6 67154
8b095871
IC
67155 var lo = (al + bl) >>> 0;
67156 var hi = (lo < al ? 1 : 0) + ah + bh;
67157 buf[pos] = hi >>> 0;
67158 buf[pos + 1] = lo;
67159}
67160exports.sum64 = sum64;
ebd8d4e8 67161
8b095871
IC
67162function sum64_hi(ah, al, bh, bl) {
67163 var lo = (al + bl) >>> 0;
67164 var hi = (lo < al ? 1 : 0) + ah + bh;
67165 return hi >>> 0;
67166};
67167exports.sum64_hi = sum64_hi;
ebd8d4e8 67168
8b095871
IC
67169function sum64_lo(ah, al, bh, bl) {
67170 var lo = al + bl;
67171 return lo >>> 0;
67172};
67173exports.sum64_lo = sum64_lo;
67174
67175function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
67176 var carry = 0;
67177 var lo = al;
67178 lo = (lo + bl) >>> 0;
67179 carry += lo < al ? 1 : 0;
67180 lo = (lo + cl) >>> 0;
67181 carry += lo < cl ? 1 : 0;
67182 lo = (lo + dl) >>> 0;
67183 carry += lo < dl ? 1 : 0;
67184
67185 var hi = ah + bh + ch + dh + carry;
67186 return hi >>> 0;
67187};
67188exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 67189
8b095871
IC
67190function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
67191 var lo = al + bl + cl + dl;
67192 return lo >>> 0;
67193};
67194exports.sum64_4_lo = sum64_4_lo;
67195
67196function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67197 var carry = 0;
67198 var lo = al;
67199 lo = (lo + bl) >>> 0;
67200 carry += lo < al ? 1 : 0;
67201 lo = (lo + cl) >>> 0;
67202 carry += lo < cl ? 1 : 0;
67203 lo = (lo + dl) >>> 0;
67204 carry += lo < dl ? 1 : 0;
67205 lo = (lo + el) >>> 0;
67206 carry += lo < el ? 1 : 0;
67207
67208 var hi = ah + bh + ch + dh + eh + carry;
67209 return hi >>> 0;
67210};
67211exports.sum64_5_hi = sum64_5_hi;
67212
67213function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67214 var lo = al + bl + cl + dl + el;
67215
67216 return lo >>> 0;
67217};
67218exports.sum64_5_lo = sum64_5_lo;
67219
67220function rotr64_hi(ah, al, num) {
67221 var r = (al << (32 - num)) | (ah >>> num);
67222 return r >>> 0;
67223};
67224exports.rotr64_hi = rotr64_hi;
67225
67226function rotr64_lo(ah, al, num) {
67227 var r = (ah << (32 - num)) | (al >>> num);
67228 return r >>> 0;
67229};
67230exports.rotr64_lo = rotr64_lo;
67231
67232function shr64_hi(ah, al, num) {
67233 return ah >>> num;
67234};
67235exports.shr64_hi = shr64_hi;
67236
67237function shr64_lo(ah, al, num) {
67238 var r = (ah << (32 - num)) | (al >>> num);
67239 return r >>> 0;
67240};
67241exports.shr64_lo = shr64_lo;
67242
67243},{"inherits":63}],63:[function(require,module,exports){
67244arguments[4][9][0].apply(exports,arguments)
67245},{"dup":9}],64:[function(require,module,exports){
67246/**
67247 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
67248 * @param {String} str the string input value
67249 * @return {Boolean} a boolean if it is or is not hex prefixed
67250 * @throws if the str input is not a string
67251 */
67252module.exports = function isHexPrefixed(str) {
67253 if (typeof str !== 'string') {
67254 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
67255 }
67256
67257 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
67258}
67259
8b095871
IC
67260},{}],65:[function(require,module,exports){
67261'use strict'
67262module.exports = require('./lib/api')(require('./lib/keccak'))
67263
67264},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
67265'use strict'
67266var createKeccak = require('./keccak')
67267var createShake = require('./shake')
67268
67269module.exports = function (KeccakState) {
67270 var Keccak = createKeccak(KeccakState)
67271 var Shake = createShake(KeccakState)
67272
67273 return function (algorithm, options) {
67274 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
67275 switch (hash) {
67276 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
67277 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
67278 case 'keccak384': return new Keccak(832, 768, null, 384, options)
67279 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
67280
67281 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
67282 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
67283 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
67284 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
67285
67286 case 'shake128': return new Shake(1344, 256, 0x1f, options)
67287 case 'shake256': return new Shake(1088, 512, 0x1f, options)
67288
67289 default: throw new Error('Invald algorithm: ' + algorithm)
67290 }
67291 }
67292}
67293
67294},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 67295(function (Buffer){
8b095871
IC
67296'use strict'
67297var Transform = require('stream').Transform
67298var inherits = require('inherits')
67299
67300module.exports = function (KeccakState) {
67301 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
67302 Transform.call(this, options)
67303
67304 this._rate = rate
67305 this._capacity = capacity
67306 this._delimitedSuffix = delimitedSuffix
67307 this._hashBitLength = hashBitLength
67308 this._options = options
67309
67310 this._state = new KeccakState()
67311 this._state.initialize(rate, capacity)
67312 this._finalized = false
67313 }
67314
67315 inherits(Keccak, Transform)
67316
67317 Keccak.prototype._transform = function (chunk, encoding, callback) {
67318 var error = null
67319 try {
67320 this.update(chunk, encoding)
67321 } catch (err) {
67322 error = err
67323 }
67324
67325 callback(error)
67326 }
67327
67328 Keccak.prototype._flush = function (callback) {
67329 var error = null
67330 try {
67331 this.push(this.digest())
67332 } catch (err) {
67333 error = err
67334 }
67335
67336 callback(error)
67337 }
67338
67339 Keccak.prototype.update = function (data, encoding) {
67340 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
67341 if (this._finalized) throw new Error('Digest already called')
67342 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
67343
67344 this._state.absorb(data)
67345
67346 return this
67347 }
67348
67349 Keccak.prototype.digest = function (encoding) {
67350 if (this._finalized) throw new Error('Digest already called')
67351 this._finalized = true
67352
67353 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
67354 var digest = this._state.squeeze(this._hashBitLength / 8)
67355 if (encoding !== undefined) digest = digest.toString(encoding)
67356
67357 this._resetState()
67358
67359 return digest
67360 }
67361
67362 // remove result from memory
67363 Keccak.prototype._resetState = function () {
67364 this._state.initialize(this._rate, this._capacity)
67365 return this
67366 }
67367
67368 // because sometimes we need hash right now and little later
67369 Keccak.prototype._clone = function () {
67370 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
67371 this._state.copy(clone._state)
67372 clone._finalized = this._finalized
67373
67374 return clone
67375 }
67376
67377 return Keccak
67378}
67379
67380}).call(this,require("buffer").Buffer)
67381},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
67382(function (Buffer){
67383'use strict'
67384var Transform = require('stream').Transform
67385var inherits = require('inherits')
67386
67387module.exports = function (KeccakState) {
67388 function Shake (rate, capacity, delimitedSuffix, options) {
67389 Transform.call(this, options)
67390
67391 this._rate = rate
67392 this._capacity = capacity
67393 this._delimitedSuffix = delimitedSuffix
67394 this._options = options
67395
67396 this._state = new KeccakState()
67397 this._state.initialize(rate, capacity)
67398 this._finalized = false
67399 }
67400
67401 inherits(Shake, Transform)
67402
67403 Shake.prototype._transform = function (chunk, encoding, callback) {
67404 var error = null
67405 try {
67406 this.update(chunk, encoding)
67407 } catch (err) {
67408 error = err
67409 }
ebd8d4e8 67410
8b095871
IC
67411 callback(error)
67412 }
ebd8d4e8 67413
8b095871 67414 Shake.prototype._flush = function () {}
ebd8d4e8 67415
8b095871
IC
67416 Shake.prototype._read = function (size) {
67417 this.push(this.squeeze(size))
67418 }
ebd8d4e8 67419
8b095871
IC
67420 Shake.prototype.update = function (data, encoding) {
67421 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
67422 if (this._finalized) throw new Error('Squeeze already called')
67423 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
67424
67425 this._state.absorb(data)
67426
67427 return this
67428 }
67429
67430 Shake.prototype.squeeze = function (dataByteLength, encoding) {
67431 if (!this._finalized) {
67432 this._finalized = true
67433 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 67434 }
ebd8d4e8 67435
8b095871
IC
67436 var data = this._state.squeeze(dataByteLength)
67437 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 67438
8b095871
IC
67439 return data
67440 }
ebd8d4e8 67441
8b095871
IC
67442 Shake.prototype._resetState = function () {
67443 this._state.initialize(this._rate, this._capacity)
67444 return this
67445 }
ebd8d4e8 67446
8b095871
IC
67447 Shake.prototype._clone = function () {
67448 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
67449 this._state.copy(clone._state)
67450 clone._finalized = this._finalized
ab78acc6 67451
8b095871
IC
67452 return clone
67453 }
ebd8d4e8 67454
8b095871
IC
67455 return Shake
67456}
ab78acc6 67457
8b095871
IC
67458}).call(this,require("buffer").Buffer)
67459},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
67460'use strict'
67461var 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]
67462
67463exports.p1600 = function (s) {
67464 for (var round = 0; round < 24; ++round) {
67465 // theta
67466 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
67467 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
67468 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
67469 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
67470 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
67471 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
67472 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
67473 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
67474 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
67475 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
67476
67477 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
67478 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
67479 var t1slo0 = s[0] ^ lo
67480 var t1shi0 = s[1] ^ hi
67481 var t1slo5 = s[10] ^ lo
67482 var t1shi5 = s[11] ^ hi
67483 var t1slo10 = s[20] ^ lo
67484 var t1shi10 = s[21] ^ hi
67485 var t1slo15 = s[30] ^ lo
67486 var t1shi15 = s[31] ^ hi
67487 var t1slo20 = s[40] ^ lo
67488 var t1shi20 = s[41] ^ hi
67489 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
67490 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
67491 var t1slo1 = s[2] ^ lo
67492 var t1shi1 = s[3] ^ hi
67493 var t1slo6 = s[12] ^ lo
67494 var t1shi6 = s[13] ^ hi
67495 var t1slo11 = s[22] ^ lo
67496 var t1shi11 = s[23] ^ hi
67497 var t1slo16 = s[32] ^ lo
67498 var t1shi16 = s[33] ^ hi
67499 var t1slo21 = s[42] ^ lo
67500 var t1shi21 = s[43] ^ hi
67501 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
67502 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
67503 var t1slo2 = s[4] ^ lo
67504 var t1shi2 = s[5] ^ hi
67505 var t1slo7 = s[14] ^ lo
67506 var t1shi7 = s[15] ^ hi
67507 var t1slo12 = s[24] ^ lo
67508 var t1shi12 = s[25] ^ hi
67509 var t1slo17 = s[34] ^ lo
67510 var t1shi17 = s[35] ^ hi
67511 var t1slo22 = s[44] ^ lo
67512 var t1shi22 = s[45] ^ hi
67513 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
67514 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
67515 var t1slo3 = s[6] ^ lo
67516 var t1shi3 = s[7] ^ hi
67517 var t1slo8 = s[16] ^ lo
67518 var t1shi8 = s[17] ^ hi
67519 var t1slo13 = s[26] ^ lo
67520 var t1shi13 = s[27] ^ hi
67521 var t1slo18 = s[36] ^ lo
67522 var t1shi18 = s[37] ^ hi
67523 var t1slo23 = s[46] ^ lo
67524 var t1shi23 = s[47] ^ hi
67525 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
67526 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
67527 var t1slo4 = s[8] ^ lo
67528 var t1shi4 = s[9] ^ hi
67529 var t1slo9 = s[18] ^ lo
67530 var t1shi9 = s[19] ^ hi
67531 var t1slo14 = s[28] ^ lo
67532 var t1shi14 = s[29] ^ hi
67533 var t1slo19 = s[38] ^ lo
67534 var t1shi19 = s[39] ^ hi
67535 var t1slo24 = s[48] ^ lo
67536 var t1shi24 = s[49] ^ hi
67537
67538 // rho & pi
67539 var t2slo0 = t1slo0
67540 var t2shi0 = t1shi0
67541 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
67542 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
67543 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
67544 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
67545 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
67546 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
67547 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
67548 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
67549 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
67550 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
67551 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
67552 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
67553 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
67554 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
67555 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
67556 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
67557 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
67558 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
67559 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
67560 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
67561 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
67562 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
67563 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
67564 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
67565 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
67566 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
67567 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
67568 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
67569 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
67570 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
67571 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
67572 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
67573 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
67574 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
67575 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
67576 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
67577 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
67578 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
67579 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
67580 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
67581 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
67582 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
67583 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
67584 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
67585 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
67586 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
67587 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
67588 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
67589
67590 // chi
67591 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
67592 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
67593 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
67594 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
67595 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
67596 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
67597 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
67598 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
67599 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
67600 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
67601 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
67602 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
67603 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
67604 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
67605 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
67606 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
67607 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
67608 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
67609 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
67610 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
67611 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
67612 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
67613 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
67614 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
67615 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
67616 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
67617 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
67618 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
67619 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
67620 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
67621 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
67622 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
67623 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
67624 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
67625 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
67626 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
67627 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
67628 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
67629 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
67630 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
67631 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
67632 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
67633 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
67634 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
67635 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
67636 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
67637 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
67638 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
67639 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
67640 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
67641
67642 // iota
67643 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
67644 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
67645 }
67646}
67647
67648},{}],70:[function(require,module,exports){
67649(function (Buffer){
67650'use strict'
67651var keccakState = require('./keccak-state-unroll')
ebd8d4e8 67652
8b095871
IC
67653function Keccak () {
67654 // much faster than `new Array(50)`
67655 this.state = [
67656 0, 0, 0, 0, 0,
67657 0, 0, 0, 0, 0,
67658 0, 0, 0, 0, 0,
67659 0, 0, 0, 0, 0,
67660 0, 0, 0, 0, 0
67661 ]
ebd8d4e8 67662
8b095871
IC
67663 this.blockSize = null
67664 this.count = 0
67665 this.squeezing = false
67666}
ebd8d4e8 67667
8b095871
IC
67668Keccak.prototype.initialize = function (rate, capacity) {
67669 for (var i = 0; i < 50; ++i) this.state[i] = 0
67670 this.blockSize = rate / 8
67671 this.count = 0
67672 this.squeezing = false
67673}
67674
67675Keccak.prototype.absorb = function (data) {
67676 for (var i = 0; i < data.length; ++i) {
67677 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
67678 this.count += 1
67679 if (this.count === this.blockSize) {
67680 keccakState.p1600(this.state)
67681 this.count = 0
ebd8d4e8
IC
67682 }
67683 }
8b095871 67684}
ebd8d4e8 67685
8b095871
IC
67686Keccak.prototype.absorbLastFewBits = function (bits) {
67687 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
67688 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
67689 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
67690 keccakState.p1600(this.state)
67691 this.count = 0
67692 this.squeezing = true
ebd8d4e8
IC
67693}
67694
8b095871
IC
67695Keccak.prototype.squeeze = function (length) {
67696 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 67697
8b095871
IC
67698 var output = Buffer.allocUnsafe(length)
67699 for (var i = 0; i < length; ++i) {
67700 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
67701 this.count += 1
67702 if (this.count === this.blockSize) {
67703 keccakState.p1600(this.state)
67704 this.count = 0
ebd8d4e8 67705 }
8b095871 67706 }
ebd8d4e8 67707
8b095871
IC
67708 return output
67709}
ebd8d4e8 67710
8b095871
IC
67711Keccak.prototype.copy = function (dest) {
67712 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
67713 dest.blockSize = this.blockSize
67714 dest.count = this.count
67715 dest.squeezing = this.squeezing
67716}
ebd8d4e8 67717
8b095871 67718module.exports = Keccak
ebd8d4e8 67719
8b095871
IC
67720}).call(this,require("buffer").Buffer)
67721},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
67722(function (Buffer){
67723/*
67724CryptoJS v3.1.2
67725code.google.com/p/crypto-js
67726(c) 2009-2013 by Jeff Mott. All rights reserved.
67727code.google.com/p/crypto-js/wiki/License
67728*/
67729/** @preserve
67730(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 67731
8b095871 67732Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 67733
8b095871
IC
67734 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
67735 - 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.
67736
67737THIS 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.
67738*/
67739
67740// constants table
67741var zl = [
67742 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67743 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67744 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67745 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67746 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67747]
67748
67749var zr = [
67750 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67751 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67752 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67753 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67754 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67755]
67756
67757var sl = [
67758 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67759 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67760 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67761 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67762 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67763]
67764
67765var sr = [
67766 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67767 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67768 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67769 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67770 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67771]
67772
67773var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
67774var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
67775
67776function bytesToWords (bytes) {
67777 var words = []
67778 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
67779 words[b >>> 5] |= bytes[i] << (24 - b % 32)
67780 }
67781 return words
ebd8d4e8
IC
67782}
67783
8b095871
IC
67784function wordsToBytes (words) {
67785 var bytes = []
67786 for (var b = 0; b < words.length * 32; b += 8) {
67787 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
67788 }
67789 return bytes
ebd8d4e8
IC
67790}
67791
8b095871
IC
67792function processBlock (H, M, offset) {
67793 // swap endian
67794 for (var i = 0; i < 16; i++) {
67795 var offset_i = offset + i
67796 var M_offset_i = M[offset_i]
ebd8d4e8 67797
8b095871
IC
67798 // Swap
67799 M[offset_i] = (
67800 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
67801 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
67802 )
67803 }
ebd8d4e8 67804
8b095871
IC
67805 // Working variables
67806 var al, bl, cl, dl, el
67807 var ar, br, cr, dr, er
67808
67809 ar = al = H[0]
67810 br = bl = H[1]
67811 cr = cl = H[2]
67812 dr = dl = H[3]
67813 er = el = H[4]
67814
67815 // computation
67816 var t
67817 for (i = 0; i < 80; i += 1) {
67818 t = (al + M[offset + zl[i]]) | 0
67819 if (i < 16) {
67820 t += f1(bl, cl, dl) + hl[0]
67821 } else if (i < 32) {
67822 t += f2(bl, cl, dl) + hl[1]
67823 } else if (i < 48) {
67824 t += f3(bl, cl, dl) + hl[2]
67825 } else if (i < 64) {
67826 t += f4(bl, cl, dl) + hl[3]
67827 } else {// if (i<80) {
67828 t += f5(bl, cl, dl) + hl[4]
67829 }
67830 t = t | 0
67831 t = rotl(t, sl[i])
67832 t = (t + el) | 0
67833 al = el
67834 el = dl
67835 dl = rotl(cl, 10)
67836 cl = bl
67837 bl = t
67838
67839 t = (ar + M[offset + zr[i]]) | 0
67840 if (i < 16) {
67841 t += f5(br, cr, dr) + hr[0]
67842 } else if (i < 32) {
67843 t += f4(br, cr, dr) + hr[1]
67844 } else if (i < 48) {
67845 t += f3(br, cr, dr) + hr[2]
67846 } else if (i < 64) {
67847 t += f2(br, cr, dr) + hr[3]
67848 } else {// if (i<80) {
67849 t += f1(br, cr, dr) + hr[4]
67850 }
67851
67852 t = t | 0
67853 t = rotl(t, sr[i])
67854 t = (t + er) | 0
67855 ar = er
67856 er = dr
67857 dr = rotl(cr, 10)
67858 cr = br
67859 br = t
67860 }
67861
67862 // intermediate hash value
67863 t = (H[1] + cl + dr) | 0
67864 H[1] = (H[2] + dl + er) | 0
67865 H[2] = (H[3] + el + ar) | 0
67866 H[3] = (H[4] + al + br) | 0
67867 H[4] = (H[0] + bl + cr) | 0
67868 H[0] = t
ebd8d4e8
IC
67869}
67870
8b095871
IC
67871function f1 (x, y, z) {
67872 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
67873}
67874
8b095871
IC
67875function f2 (x, y, z) {
67876 return (((x) & (y)) | ((~x) & (z)))
67877}
ebd8d4e8 67878
8b095871
IC
67879function f3 (x, y, z) {
67880 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
67881}
67882
8b095871
IC
67883function f4 (x, y, z) {
67884 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
67885}
67886
8b095871
IC
67887function f5 (x, y, z) {
67888 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
67889}
67890
8b095871
IC
67891function rotl (x, n) {
67892 return (x << n) | (x >>> (32 - n))
67893}
ebd8d4e8 67894
8b095871
IC
67895function ripemd160 (message) {
67896 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 67897
8b095871
IC
67898 if (typeof message === 'string') {
67899 message = new Buffer(message, 'utf8')
67900 }
ebd8d4e8 67901
8b095871 67902 var m = bytesToWords(message)
ebd8d4e8 67903
8b095871
IC
67904 var nBitsLeft = message.length * 8
67905 var nBitsTotal = message.length * 8
ebd8d4e8 67906
8b095871
IC
67907 // Add padding
67908 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
67909 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
67910 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
67911 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
67912 )
ebd8d4e8 67913
8b095871
IC
67914 for (var i = 0; i < m.length; i += 16) {
67915 processBlock(H, m, i)
ebd8d4e8
IC
67916 }
67917
8b095871
IC
67918 // swap endian
67919 for (i = 0; i < 5; i++) {
67920 // shortcut
67921 var H_i = H[i]
ebd8d4e8 67922
8b095871
IC
67923 // Swap
67924 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
67925 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
67926 }
67927
8b095871
IC
67928 var digestbytes = wordsToBytes(H)
67929 return new Buffer(digestbytes)
ebd8d4e8
IC
67930}
67931
8b095871 67932module.exports = ripemd160
ebd8d4e8 67933
8b095871
IC
67934}).call(this,require("buffer").Buffer)
67935},{"buffer":5}],72:[function(require,module,exports){
67936(function (Buffer){
67937const assert = require('assert')
67938/**
67939 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
67940 * This function takes in a data, convert it to buffer if not, and a length for recursion
67941 *
67942 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
67943 * @returns {Buffer} - returns buffer of encoded data
67944 **/
67945exports.encode = function (input) {
67946 if (input instanceof Array) {
67947 var output = []
67948 for (var i = 0; i < input.length; i++) {
67949 output.push(exports.encode(input[i]))
67950 }
67951 var buf = Buffer.concat(output)
67952 return Buffer.concat([encodeLength(buf.length, 192), buf])
67953 } else {
67954 input = toBuffer(input)
67955 if (input.length === 1 && input[0] < 128) {
67956 return input
67957 } else {
67958 return Buffer.concat([encodeLength(input.length, 128), input])
67959 }
67960 }
ebd8d4e8
IC
67961}
67962
8b095871
IC
67963function safeParseInt (v, base) {
67964 if (v.slice(0, 2) === '00') {
67965 throw (new Error('invalid RLP: extra zeros'))
67966 }
ebd8d4e8 67967
8b095871 67968 return parseInt(v, base)
ebd8d4e8
IC
67969}
67970
8b095871
IC
67971function encodeLength (len, offset) {
67972 if (len < 56) {
67973 return new Buffer([len + offset])
67974 } else {
67975 var hexLength = intToHex(len)
67976 var lLength = hexLength.length / 2
67977 var firstByte = intToHex(offset + 55 + lLength)
67978 return new Buffer(firstByte + hexLength, 'hex')
67979 }
67980}
ebd8d4e8 67981
8b095871
IC
67982/**
67983 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
67984 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
67985 * @returns {Array} - returns decode Array of Buffers containg the original message
67986 **/
67987exports.decode = function (input, stream) {
67988 if (!input || input.length === 0) {
67989 return new Buffer([])
67990 }
ebd8d4e8 67991
8b095871
IC
67992 input = toBuffer(input)
67993 var decoded = _decode(input)
ab78acc6 67994
8b095871
IC
67995 if (stream) {
67996 return decoded
67997 }
ebd8d4e8 67998
8b095871
IC
67999 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
68000 return decoded.data
ebd8d4e8
IC
68001}
68002
8b095871
IC
68003exports.getLength = function (input) {
68004 if (!input || input.length === 0) {
68005 return new Buffer([])
ab78acc6
IC
68006 }
68007
8b095871
IC
68008 input = toBuffer(input)
68009 var firstByte = input[0]
68010 if (firstByte <= 0x7f) {
68011 return input.length
68012 } else if (firstByte <= 0xb7) {
68013 return firstByte - 0x7f
68014 } else if (firstByte <= 0xbf) {
68015 return firstByte - 0xb6
68016 } else if (firstByte <= 0xf7) {
68017 // a list between 0-55 bytes long
68018 return firstByte - 0xbf
68019 } else {
68020 // a list over 55 bytes long
68021 var llength = firstByte - 0xf6
68022 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68023 return llength + length
68024 }
ebd8d4e8
IC
68025}
68026
8b095871
IC
68027function _decode (input) {
68028 var length, llength, data, innerRemainder, d
68029 var decoded = []
68030 var firstByte = input[0]
ebd8d4e8 68031
8b095871
IC
68032 if (firstByte <= 0x7f) {
68033 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
68034 return {
68035 data: input.slice(0, 1),
68036 remainder: input.slice(1)
68037 }
68038 } else if (firstByte <= 0xb7) {
68039 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
68040 // The range of the first byte is [0x80, 0xb7]
68041 length = firstByte - 0x7f
ebd8d4e8 68042
8b095871
IC
68043 // set 0x80 null to 0
68044 if (firstByte === 0x80) {
68045 data = new Buffer([])
68046 } else {
68047 data = input.slice(1, length)
68048 }
ebd8d4e8 68049
8b095871
IC
68050 if (length === 2 && data[0] < 0x80) {
68051 throw new Error('invalid rlp encoding: byte must be less 0x80')
68052 }
ebd8d4e8 68053
8b095871
IC
68054 return {
68055 data: data,
68056 remainder: input.slice(length)
68057 }
68058 } else if (firstByte <= 0xbf) {
68059 llength = firstByte - 0xb6
68060 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68061 data = input.slice(llength, length + llength)
68062 if (data.length < length) {
68063 throw (new Error('invalid RLP'))
68064 }
ebd8d4e8 68065
8b095871
IC
68066 return {
68067 data: data,
68068 remainder: input.slice(length + llength)
68069 }
68070 } else if (firstByte <= 0xf7) {
68071 // a list between 0-55 bytes long
68072 length = firstByte - 0xbf
68073 innerRemainder = input.slice(1, length)
68074 while (innerRemainder.length) {
68075 d = _decode(innerRemainder)
68076 decoded.push(d.data)
68077 innerRemainder = d.remainder
68078 }
ebd8d4e8 68079
8b095871
IC
68080 return {
68081 data: decoded,
68082 remainder: input.slice(length)
68083 }
68084 } else {
68085 // a list over 55 bytes long
68086 llength = firstByte - 0xf6
68087 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68088 var totalLength = llength + length
68089 if (totalLength > input.length) {
68090 throw new Error('invalid rlp: total length is larger than the data')
68091 }
ab78acc6 68092
8b095871
IC
68093 innerRemainder = input.slice(llength, totalLength)
68094 if (innerRemainder.length === 0) {
68095 throw new Error('invalid rlp, List has a invalid length')
68096 }
ab78acc6 68097
8b095871
IC
68098 while (innerRemainder.length) {
68099 d = _decode(innerRemainder)
68100 decoded.push(d.data)
68101 innerRemainder = d.remainder
68102 }
68103 return {
68104 data: decoded,
68105 remainder: input.slice(totalLength)
68106 }
ab78acc6 68107 }
8b095871 68108}
ab78acc6 68109
8b095871
IC
68110function isHexPrefixed (str) {
68111 return str.slice(0, 2) === '0x'
ab78acc6
IC
68112}
68113
8b095871
IC
68114// Removes 0x from a given String
68115function stripHexPrefix (str) {
68116 if (typeof str !== 'string') {
68117 return str
68118 }
68119 return isHexPrefixed(str) ? str.slice(2) : str
68120}
ab78acc6 68121
8b095871
IC
68122function intToHex (i) {
68123 var hex = i.toString(16)
68124 if (hex.length % 2) {
68125 hex = '0' + hex
ab78acc6
IC
68126 }
68127
8b095871 68128 return hex
ebd8d4e8
IC
68129}
68130
8b095871
IC
68131function padToEven (a) {
68132 if (a.length % 2) a = '0' + a
68133 return a
ebd8d4e8
IC
68134}
68135
8b095871
IC
68136function intToBuffer (i) {
68137 var hex = intToHex(i)
68138 return new Buffer(hex, 'hex')
ebd8d4e8
IC
68139}
68140
8b095871
IC
68141function toBuffer (v) {
68142 if (!Buffer.isBuffer(v)) {
68143 if (typeof v === 'string') {
68144 if (isHexPrefixed(v)) {
68145 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
68146 } else {
68147 v = new Buffer(v)
68148 }
68149 } else if (typeof v === 'number') {
68150 if (!v) {
68151 v = new Buffer([])
68152 } else {
68153 v = intToBuffer(v)
68154 }
68155 } else if (v === null || v === undefined) {
68156 v = new Buffer([])
68157 } else if (v.toArray) {
68158 // converts a BN to a Buffer
68159 v = new Buffer(v.toArray())
68160 } else {
68161 throw new Error('invalid type')
68162 }
68163 }
68164 return v
ebd8d4e8
IC
68165}
68166
8b095871
IC
68167}).call(this,require("buffer").Buffer)
68168},{"assert":1,"buffer":5}],73:[function(require,module,exports){
68169'use strict'
68170module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 68171
8b095871
IC
68172},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
68173(function (Buffer){
68174'use strict'
68175var toString = Object.prototype.toString
ebd8d4e8 68176
8b095871
IC
68177// TypeError
68178exports.isArray = function (value, message) {
68179 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
68180}
68181
8b095871
IC
68182exports.isBoolean = function (value, message) {
68183 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
68184}
ebd8d4e8 68185
8b095871
IC
68186exports.isBuffer = function (value, message) {
68187 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
68188}
68189
8b095871
IC
68190exports.isFunction = function (value, message) {
68191 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
68192}
68193
8b095871
IC
68194exports.isNumber = function (value, message) {
68195 if (toString.call(value) !== '[object Number]') throw TypeError(message)
68196}
ab78acc6 68197
8b095871
IC
68198exports.isObject = function (value, message) {
68199 if (toString.call(value) !== '[object Object]') throw TypeError(message)
68200}
ebd8d4e8 68201
8b095871
IC
68202// RangeError
68203exports.isBufferLength = function (buffer, length, message) {
68204 if (buffer.length !== length) throw RangeError(message)
68205}
ebd8d4e8 68206
8b095871
IC
68207exports.isBufferLength2 = function (buffer, length1, length2, message) {
68208 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
68209}
68210
8b095871
IC
68211exports.isLengthGTZero = function (value, message) {
68212 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
68213}
68214
8b095871
IC
68215exports.isNumberInInterval = function (number, x, y, message) {
68216 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
68217}
68218
8b095871
IC
68219}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
68220},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 68221(function (Buffer){
8b095871
IC
68222'use strict'
68223var bip66 = require('bip66')
68224
68225var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
68226 // begin
68227 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
68228 // private key
68229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68231 // middle
68232 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
68233 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68234 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68235 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
68236 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
68237 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
68238 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68239 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
68240 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
68241 // public key
68242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68244 0x00
68245])
68246
68247var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
68248 // begin
68249 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
68250 // private key
68251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68253 // middle
68254 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
68255 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68256 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68257 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
68258 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
68259 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
68260 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
68261 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
68262 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68263 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
68264 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
68265 // public key
68266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68270 0x00
68271])
68272
68273var ZERO_BUFFER_32 = new Buffer([
68274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
68276])
68277
68278exports.privateKeyExport = function (privateKey, publicKey, compressed) {
68279 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
68280 privateKey.copy(result, compressed ? 8 : 9)
68281 publicKey.copy(result, compressed ? 181 : 214)
68282 return result
68283}
68284
68285exports.privateKeyImport = function (privateKey) {
68286 var length = privateKey.length
68287
68288 // sequence header
68289 var index = 0
68290 if (length < index + 1 || privateKey[index] !== 0x30) return
68291 index += 1
68292
68293 // sequence length constructor
68294 if (length < index + 1 || !(privateKey[index] & 0x80)) return
68295
68296 var lenb = privateKey[index] & 0x7f
68297 index += 1
68298 if (lenb < 1 || lenb > 2) return
68299 if (length < index + lenb) return
68300
68301 // sequence length
68302 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
68303 index += lenb
68304 if (length < index + len) return
68305
68306 // sequence element 0: version number (=1)
68307 if (length < index + 3 ||
68308 privateKey[index] !== 0x02 ||
68309 privateKey[index + 1] !== 0x01 ||
68310 privateKey[index + 2] !== 0x01) {
68311 return
68312 }
68313 index += 3
ab78acc6 68314
8b095871
IC
68315 // sequence element 1: octet string, up to 32 bytes
68316 if (length < index + 2 ||
68317 privateKey[index] !== 0x04 ||
68318 privateKey[index + 1] > 0x20 ||
68319 length < index + 2 + privateKey[index + 1]) {
68320 return
68321 }
ab78acc6 68322
8b095871 68323 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 68324}
ebd8d4e8 68325
8b095871
IC
68326exports.signatureExport = function (sigObj) {
68327 var r = Buffer.concat([new Buffer([0]), sigObj.r])
68328 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 68329
8b095871
IC
68330 var s = Buffer.concat([new Buffer([0]), sigObj.s])
68331 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 68332
8b095871
IC
68333 return bip66.encode(r.slice(posR), s.slice(posS))
68334}
ab78acc6 68335
8b095871
IC
68336exports.signatureImport = function (sig) {
68337 var r = new Buffer(ZERO_BUFFER_32)
68338 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 68339
8b095871
IC
68340 try {
68341 var sigObj = bip66.decode(sig)
68342 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
68343 if (sigObj.r.length > 32) throw new Error('R length is too long')
68344 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
68345 if (sigObj.s.length > 32) throw new Error('S length is too long')
68346 } catch (err) {
68347 return
ab78acc6
IC
68348 }
68349
8b095871
IC
68350 sigObj.r.copy(r, 32 - sigObj.r.length)
68351 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 68352
8b095871
IC
68353 return { r: r, s: s }
68354}
ab78acc6 68355
8b095871
IC
68356exports.signatureImportLax = function (sig) {
68357 var r = new Buffer(ZERO_BUFFER_32)
68358 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 68359
8b095871
IC
68360 var length = sig.length
68361 var index = 0
ab78acc6 68362
8b095871
IC
68363 // sequence tag byte
68364 if (sig[index++] !== 0x30) return
68365
68366 // sequence length byte
68367 var lenbyte = sig[index++]
68368 if (lenbyte & 0x80) {
68369 index += lenbyte - 0x80
68370 if (index > length) return
ab78acc6
IC
68371 }
68372
8b095871
IC
68373 // sequence tag byte for r
68374 if (sig[index++] !== 0x02) return
68375
68376 // length for r
68377 var rlen = sig[index++]
68378 if (rlen & 0x80) {
68379 lenbyte = rlen - 0x80
68380 if (index + lenbyte > length) return
68381 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
68382 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 68383 }
8b095871
IC
68384 if (rlen > length - index) return
68385 var rindex = index
68386 index += rlen
ab78acc6 68387
8b095871
IC
68388 // sequence tag byte for s
68389 if (sig[index++] !== 0x02) return
ab78acc6 68390
8b095871
IC
68391 // length for s
68392 var slen = sig[index++]
68393 if (slen & 0x80) {
68394 lenbyte = slen - 0x80
68395 if (index + lenbyte > length) return
68396 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
68397 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 68398 }
8b095871
IC
68399 if (slen > length - index) return
68400 var sindex = index
68401 index += slen
ab78acc6 68402
8b095871
IC
68403 // ignore leading zeros in r
68404 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
68405 // copy r value
68406 if (rlen > 32) return
68407 var rvalue = sig.slice(rindex, rindex + rlen)
68408 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 68409
8b095871
IC
68410 // ignore leading zeros in s
68411 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
68412 // copy s value
68413 if (slen > 32) return
68414 var svalue = sig.slice(sindex, sindex + slen)
68415 svalue.copy(s, 32 - svalue.length)
68416
68417 return { r: r, s: s }
ab78acc6
IC
68418}
68419
8b095871
IC
68420}).call(this,require("buffer").Buffer)
68421},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
68422(function (Buffer){
68423'use strict'
68424var createHash = require('create-hash')
68425var BN = require('bn.js')
68426var EC = require('elliptic').ec
68427
68428var messages = require('../messages.json')
68429
68430var ec = new EC('secp256k1')
68431var ecparams = ec.curve
68432
68433function loadCompressedPublicKey (first, xBuffer) {
68434 var x = new BN(xBuffer)
68435
68436 // overflow
68437 if (x.cmp(ecparams.p) >= 0) return null
68438 x = x.toRed(ecparams.red)
68439
68440 // compute corresponding Y
68441 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
68442 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
68443
68444 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
68445}
68446
8b095871
IC
68447function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
68448 var x = new BN(xBuffer)
68449 var y = new BN(yBuffer)
ebd8d4e8 68450
8b095871
IC
68451 // overflow
68452 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 68453
8b095871
IC
68454 x = x.toRed(ecparams.red)
68455 y = y.toRed(ecparams.red)
ebd8d4e8 68456
8b095871
IC
68457 // is odd flag
68458 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 68459
8b095871
IC
68460 // x*x*x + b = y*y
68461 var x3 = x.redSqr().redIMul(x)
68462 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 68463
8b095871 68464 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
68465}
68466
8b095871
IC
68467function loadPublicKey (publicKey) {
68468 var first = publicKey[0]
68469 switch (first) {
68470 case 0x02:
68471 case 0x03:
68472 if (publicKey.length !== 33) return null
68473 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
68474 case 0x04:
68475 case 0x06:
68476 case 0x07:
68477 if (publicKey.length !== 65) return null
68478 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
68479 default:
68480 return null
ebd8d4e8 68481 }
8b095871 68482}
ebd8d4e8 68483
8b095871
IC
68484exports.privateKeyVerify = function (privateKey) {
68485 var bn = new BN(privateKey)
68486 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
68487}
ebd8d4e8 68488
8b095871
IC
68489exports.privateKeyExport = function (privateKey, compressed) {
68490 var d = new BN(privateKey)
68491 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 68492
8b095871 68493 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
68494}
68495
8b095871
IC
68496exports.privateKeyTweakAdd = function (privateKey, tweak) {
68497 var bn = new BN(tweak)
68498 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 68499
8b095871
IC
68500 bn.iadd(new BN(privateKey))
68501 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
68502 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 68503
8b095871
IC
68504 return bn.toArrayLike(Buffer, 'be', 32)
68505}
68506
68507exports.privateKeyTweakMul = function (privateKey, tweak) {
68508 var bn = new BN(tweak)
68509 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
68510
68511 bn.imul(new BN(privateKey))
68512 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
68513
68514 return bn.toArrayLike(Buffer, 'be', 32)
68515}
68516
68517exports.publicKeyCreate = function (privateKey, compressed) {
68518 var d = new BN(privateKey)
68519 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
68520
68521 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
68522}
68523
68524exports.publicKeyConvert = function (publicKey, compressed) {
68525 var pair = loadPublicKey(publicKey)
68526 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 68527
8b095871 68528 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
68529}
68530
8b095871
IC
68531exports.publicKeyVerify = function (publicKey) {
68532 return loadPublicKey(publicKey) !== null
68533}
ab78acc6 68534
8b095871
IC
68535exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
68536 var pair = loadPublicKey(publicKey)
68537 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 68538
8b095871
IC
68539 tweak = new BN(tweak)
68540 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 68541
8b095871
IC
68542 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
68543}
ab78acc6 68544
8b095871
IC
68545exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
68546 var pair = loadPublicKey(publicKey)
68547 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 68548
8b095871
IC
68549 tweak = new BN(tweak)
68550 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 68551
8b095871
IC
68552 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
68553}
ab78acc6 68554
8b095871
IC
68555exports.publicKeyCombine = function (publicKeys, compressed) {
68556 var pairs = new Array(publicKeys.length)
68557 for (var i = 0; i < publicKeys.length; ++i) {
68558 pairs[i] = loadPublicKey(publicKeys[i])
68559 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
68560 }
68561
8b095871
IC
68562 var point = pairs[0].pub
68563 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
68564 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 68565
8b095871
IC
68566 return new Buffer(point.encode(true, compressed))
68567}
ab78acc6 68568
8b095871
IC
68569exports.signatureNormalize = function (signature) {
68570 var r = new BN(signature.slice(0, 32))
68571 var s = new BN(signature.slice(32, 64))
68572 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68573
68574 var result = new Buffer(signature)
68575 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
68576
68577 return result
ab78acc6
IC
68578}
68579
8b095871
IC
68580exports.signatureExport = function (signature) {
68581 var r = signature.slice(0, 32)
68582 var s = signature.slice(32, 64)
68583 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68584
68585 return { r: r, s: s }
ab78acc6
IC
68586}
68587
8b095871
IC
68588exports.signatureImport = function (sigObj) {
68589 var r = new BN(sigObj.r)
68590 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
68591
68592 var s = new BN(sigObj.s)
68593 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
68594
68595 return Buffer.concat([
68596 r.toArrayLike(Buffer, 'be', 32),
68597 s.toArrayLike(Buffer, 'be', 32)
68598 ])
ab78acc6
IC
68599}
68600
8b095871
IC
68601exports.sign = function (message, privateKey, noncefn, data) {
68602 if (typeof noncefn === 'function') {
68603 var getNonce = noncefn
68604 noncefn = function (counter) {
68605 var nonce = getNonce(message, privateKey, null, data, counter)
68606 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 68607
8b095871
IC
68608 return new BN(nonce)
68609 }
ab78acc6 68610 }
ebd8d4e8 68611
8b095871
IC
68612 var d = new BN(privateKey)
68613 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 68614
8b095871
IC
68615 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
68616 return {
68617 signature: Buffer.concat([
68618 result.r.toArrayLike(Buffer, 'be', 32),
68619 result.s.toArrayLike(Buffer, 'be', 32)
68620 ]),
68621 recovery: result.recoveryParam
ebd8d4e8 68622 }
8b095871 68623}
ab78acc6 68624
8b095871
IC
68625exports.verify = function (message, signature, publicKey) {
68626 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 68627
8b095871
IC
68628 var sigr = new BN(sigObj.r)
68629 var sigs = new BN(sigObj.s)
68630 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68631 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 68632
8b095871
IC
68633 var pair = loadPublicKey(publicKey)
68634 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 68635
8b095871
IC
68636 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
68637}
ebd8d4e8 68638
8b095871
IC
68639exports.recover = function (message, signature, recovery, compressed) {
68640 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 68641
8b095871
IC
68642 var sigr = new BN(sigObj.r)
68643 var sigs = new BN(sigObj.s)
68644 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 68645
8b095871
IC
68646 try {
68647 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 68648
8b095871
IC
68649 var point = ec.recoverPubKey(message, sigObj, recovery)
68650 return new Buffer(point.encode(true, compressed))
68651 } catch (err) {
68652 throw new Error(messages.ECDSA_RECOVER_FAIL)
68653 }
ebd8d4e8
IC
68654}
68655
8b095871
IC
68656exports.ecdh = function (publicKey, privateKey) {
68657 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
68658 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
68659}
68660
8b095871
IC
68661exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
68662 var pair = loadPublicKey(publicKey)
68663 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 68664
8b095871
IC
68665 var scalar = new BN(privateKey)
68666 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
68667
68668 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
68669}
68670
8b095871
IC
68671}).call(this,require("buffer").Buffer)
68672},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
68673'use strict'
68674var assert = require('./assert')
68675var der = require('./der')
68676var messages = require('./messages.json')
ab78acc6 68677
8b095871
IC
68678function initCompressedValue (value, defaultValue) {
68679 if (value === undefined) return defaultValue
ab78acc6 68680
8b095871
IC
68681 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
68682 return value
ab78acc6
IC
68683}
68684
8b095871
IC
68685module.exports = function (secp256k1) {
68686 return {
68687 privateKeyVerify: function (privateKey) {
68688 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68689 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
68690 },
ab78acc6 68691
8b095871
IC
68692 privateKeyExport: function (privateKey, compressed) {
68693 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68694 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68695
8b095871
IC
68696 compressed = initCompressedValue(compressed, true)
68697 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 68698
8b095871
IC
68699 return der.privateKeyExport(privateKey, publicKey, compressed)
68700 },
ab78acc6 68701
8b095871
IC
68702 privateKeyImport: function (privateKey) {
68703 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 68704
8b095871
IC
68705 privateKey = der.privateKeyImport(privateKey)
68706 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 68707
8b095871
IC
68708 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
68709 },
ab78acc6 68710
8b095871
IC
68711 privateKeyTweakAdd: function (privateKey, tweak) {
68712 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68713 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68714
8b095871
IC
68715 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68716 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 68717
8b095871
IC
68718 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
68719 },
ab78acc6 68720
8b095871
IC
68721 privateKeyTweakMul: function (privateKey, tweak) {
68722 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68723 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68724
8b095871
IC
68725 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68726 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 68727
8b095871
IC
68728 return secp256k1.privateKeyTweakMul(privateKey, tweak)
68729 },
ab78acc6 68730
8b095871
IC
68731 publicKeyCreate: function (privateKey, compressed) {
68732 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68733 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68734
8b095871 68735 compressed = initCompressedValue(compressed, true)
ab78acc6 68736
8b095871
IC
68737 return secp256k1.publicKeyCreate(privateKey, compressed)
68738 },
ab78acc6 68739
8b095871
IC
68740 publicKeyConvert: function (publicKey, compressed) {
68741 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68742 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 68743
8b095871
IC
68744 compressed = initCompressedValue(compressed, true)
68745
68746 return secp256k1.publicKeyConvert(publicKey, compressed)
68747 },
68748
68749 publicKeyVerify: function (publicKey) {
68750 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68751 return secp256k1.publicKeyVerify(publicKey)
68752 },
68753
68754 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
68755 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68756 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68757
68758 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68759 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68760
68761 compressed = initCompressedValue(compressed, true)
68762
68763 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
68764 },
68765
68766 publicKeyTweakMul: function (publicKey, tweak, compressed) {
68767 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68768 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68769
68770 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68771 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68772
68773 compressed = initCompressedValue(compressed, true)
68774
68775 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
68776 },
68777
68778 publicKeyCombine: function (publicKeys, compressed) {
68779 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
68780 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
68781 for (var i = 0; i < publicKeys.length; ++i) {
68782 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
68783 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
68784 }
68785
8b095871 68786 compressed = initCompressedValue(compressed, true)
ab78acc6 68787
8b095871
IC
68788 return secp256k1.publicKeyCombine(publicKeys, compressed)
68789 },
ab78acc6 68790
8b095871
IC
68791 signatureNormalize: function (signature) {
68792 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68793 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 68794
8b095871
IC
68795 return secp256k1.signatureNormalize(signature)
68796 },
ab78acc6 68797
8b095871
IC
68798 signatureExport: function (signature) {
68799 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68800 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68801
68802 var sigObj = secp256k1.signatureExport(signature)
68803 return der.signatureExport(sigObj)
68804 },
68805
68806 signatureImport: function (sig) {
68807 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68808 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68809
68810 var sigObj = der.signatureImport(sig)
68811 if (sigObj) return secp256k1.signatureImport(sigObj)
68812
68813 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
68814 },
68815
68816 signatureImportLax: function (sig) {
68817 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68818 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68819
68820 var sigObj = der.signatureImportLax(sig)
68821 if (sigObj) return secp256k1.signatureImport(sigObj)
68822
68823 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
68824 },
68825
68826 sign: function (message, privateKey, options) {
68827 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68828 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
68829
68830 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68831 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68832
68833 var data = null
68834 var noncefn = null
68835 if (options !== undefined) {
68836 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
68837
68838 if (options.data !== undefined) {
68839 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
68840 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
68841 data = options.data
68842 }
68843
68844 if (options.noncefn !== undefined) {
68845 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
68846 noncefn = options.noncefn
68847 }
ab78acc6
IC
68848 }
68849
8b095871
IC
68850 return secp256k1.sign(message, privateKey, noncefn, data)
68851 },
ab78acc6 68852
8b095871
IC
68853 verify: function (message, signature, publicKey) {
68854 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68855 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 68856
8b095871
IC
68857 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68858 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 68859
8b095871
IC
68860 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68861 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68862
68863 return secp256k1.verify(message, signature, publicKey)
68864 },
ab78acc6 68865
8b095871
IC
68866 recover: function (message, signature, recovery, compressed) {
68867 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68868 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 68869
8b095871
IC
68870 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68871 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 68872
8b095871
IC
68873 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
68874 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 68875
8b095871 68876 compressed = initCompressedValue(compressed, true)
ab78acc6 68877
8b095871
IC
68878 return secp256k1.recover(message, signature, recovery, compressed)
68879 },
ab78acc6 68880
8b095871
IC
68881 ecdh: function (publicKey, privateKey) {
68882 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68883 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 68884
8b095871
IC
68885 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68886 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68887
8b095871
IC
68888 return secp256k1.ecdh(publicKey, privateKey)
68889 },
ab78acc6 68890
8b095871
IC
68891 ecdhUnsafe: function (publicKey, privateKey, compressed) {
68892 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68893 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 68894
8b095871
IC
68895 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68896 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 68897
8b095871 68898 compressed = initCompressedValue(compressed, true)
ab78acc6 68899
8b095871
IC
68900 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
68901 }
68902 }
68903}
ab78acc6 68904
8b095871
IC
68905},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
68906module.exports={
68907 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
68908 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
68909 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
68910 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
68911 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
68912 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
68913 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
68914 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
68915 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
68916 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
68917 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
68918 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
68919 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
68920 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
68921 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
68922 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
68923 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
68924 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
68925 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
68926 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
68927 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
68928 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
68929 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
68930 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
68931 "MSG32_TYPE_INVALID": "message should be a Buffer",
68932 "MSG32_LENGTH_INVALID": "message length is invalid",
68933 "OPTIONS_TYPE_INVALID": "options should be an Object",
68934 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
68935 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
68936 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
68937 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
68938 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
68939 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
68940 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
68941}
68942
68943},{}],79:[function(require,module,exports){
68944(function (Buffer){
68945// prototype class for hash functions
68946function Hash (blockSize, finalSize) {
68947 this._block = new Buffer(blockSize)
68948 this._finalSize = finalSize
68949 this._blockSize = blockSize
68950 this._len = 0
68951 this._s = 0
68952}
68953
68954Hash.prototype.update = function (data, enc) {
68955 if (typeof data === 'string') {
68956 enc = enc || 'utf8'
68957 data = new Buffer(data, enc)
ab78acc6
IC
68958 }
68959
8b095871
IC
68960 var l = this._len += data.length
68961 var s = this._s || 0
68962 var f = 0
68963 var buffer = this._block
ab78acc6 68964
8b095871
IC
68965 while (s < l) {
68966 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
68967 var ch = (t - f)
ab78acc6 68968
8b095871
IC
68969 for (var i = 0; i < ch; i++) {
68970 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
68971 }
68972
8b095871
IC
68973 s += ch
68974 f += ch
ab78acc6 68975
8b095871
IC
68976 if ((s % this._blockSize) === 0) {
68977 this._update(buffer)
68978 }
ab78acc6 68979 }
8b095871 68980 this._s = s
ab78acc6 68981
8b095871
IC
68982 return this
68983}
ab78acc6 68984
8b095871
IC
68985Hash.prototype.digest = function (enc) {
68986 // Suppose the length of the message M, in bits, is l
68987 var l = this._len * 8
ab78acc6 68988
8b095871
IC
68989 // Append the bit 1 to the end of the message
68990 this._block[this._len % this._blockSize] = 0x80
ab78acc6 68991
8b095871
IC
68992 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
68993 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 68994
8b095871
IC
68995 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
68996 this._update(this._block)
68997 this._block.fill(0)
68998 }
ab78acc6 68999
8b095871
IC
69000 // to this append the block which is equal to the number l written in binary
69001 // TODO: handle case where l is > Math.pow(2, 29)
69002 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 69003
8b095871 69004 var hash = this._update(this._block) || this._hash()
ebd8d4e8 69005
8b095871 69006 return enc ? hash.toString(enc) : hash
ab78acc6 69007}
ebd8d4e8 69008
8b095871
IC
69009Hash.prototype._update = function () {
69010 throw new Error('_update must be implemented by subclass')
ab78acc6 69011}
8b095871
IC
69012
69013module.exports = Hash
69014
69015}).call(this,require("buffer").Buffer)
69016},{"buffer":5}],80:[function(require,module,exports){
69017var exports = module.exports = function SHA (algorithm) {
69018 algorithm = algorithm.toLowerCase()
69019
69020 var Algorithm = exports[algorithm]
69021 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
69022
69023 return new Algorithm()
ab78acc6 69024}
ebd8d4e8 69025
8b095871
IC
69026exports.sha = require('./sha')
69027exports.sha1 = require('./sha1')
69028exports.sha224 = require('./sha224')
69029exports.sha256 = require('./sha256')
69030exports.sha384 = require('./sha384')
69031exports.sha512 = require('./sha512')
69032
69033},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
69034(function (Buffer){
69035/*
69036 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
69037 * in FIPS PUB 180-1
69038 * This source code is derived from sha1.js of the same repository.
69039 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
69040 * operation was added.
69041 */
69042
69043var inherits = require('inherits')
69044var Hash = require('./hash')
69045
69046var K = [
69047 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
69048]
69049
69050var W = new Array(80)
69051
69052function Sha () {
69053 this.init()
69054 this._w = W
69055
69056 Hash.call(this, 64, 56)
ab78acc6 69057}
ebd8d4e8 69058
8b095871 69059inherits(Sha, Hash)
ebd8d4e8 69060
8b095871
IC
69061Sha.prototype.init = function () {
69062 this._a = 0x67452301
69063 this._b = 0xefcdab89
69064 this._c = 0x98badcfe
69065 this._d = 0x10325476
69066 this._e = 0xc3d2e1f0
ebd8d4e8 69067
8b095871
IC
69068 return this
69069}
ebd8d4e8 69070
8b095871
IC
69071function rotl5 (num) {
69072 return (num << 5) | (num >>> 27)
69073}
ebd8d4e8 69074
8b095871
IC
69075function rotl30 (num) {
69076 return (num << 30) | (num >>> 2)
69077}
ebd8d4e8 69078
8b095871
IC
69079function ft (s, b, c, d) {
69080 if (s === 0) return (b & c) | ((~b) & d)
69081 if (s === 2) return (b & c) | (b & d) | (c & d)
69082 return b ^ c ^ d
69083}
ebd8d4e8 69084
8b095871
IC
69085Sha.prototype._update = function (M) {
69086 var W = this._w
ebd8d4e8 69087
8b095871
IC
69088 var a = this._a | 0
69089 var b = this._b | 0
69090 var c = this._c | 0
69091 var d = this._d | 0
69092 var e = this._e | 0
ebd8d4e8 69093
8b095871
IC
69094 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69095 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 69096
8b095871
IC
69097 for (var j = 0; j < 80; ++j) {
69098 var s = ~~(j / 20)
69099 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 69100
8b095871
IC
69101 e = d
69102 d = c
69103 c = rotl30(b)
69104 b = a
69105 a = t
69106 }
69107
69108 this._a = (a + this._a) | 0
69109 this._b = (b + this._b) | 0
69110 this._c = (c + this._c) | 0
69111 this._d = (d + this._d) | 0
69112 this._e = (e + this._e) | 0
69113}
69114
69115Sha.prototype._hash = function () {
69116 var H = new Buffer(20)
ab78acc6 69117
8b095871
IC
69118 H.writeInt32BE(this._a | 0, 0)
69119 H.writeInt32BE(this._b | 0, 4)
69120 H.writeInt32BE(this._c | 0, 8)
69121 H.writeInt32BE(this._d | 0, 12)
69122 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 69123
8b095871 69124 return H
ebd8d4e8
IC
69125}
69126
8b095871 69127module.exports = Sha
ebd8d4e8 69128
8b095871
IC
69129}).call(this,require("buffer").Buffer)
69130},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
69131(function (Buffer){
69132/*
69133 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
69134 * in FIPS PUB 180-1
69135 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
69136 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69137 * Distributed under the BSD License
69138 * See http://pajhome.org.uk/crypt/md5 for details.
69139 */
ebd8d4e8 69140
8b095871
IC
69141var inherits = require('inherits')
69142var Hash = require('./hash')
ebd8d4e8 69143
8b095871
IC
69144var K = [
69145 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
69146]
ebd8d4e8 69147
8b095871 69148var W = new Array(80)
ab78acc6 69149
8b095871
IC
69150function Sha1 () {
69151 this.init()
69152 this._w = W
ebd8d4e8 69153
8b095871
IC
69154 Hash.call(this, 64, 56)
69155}
ebd8d4e8 69156
8b095871 69157inherits(Sha1, Hash)
ebd8d4e8 69158
8b095871
IC
69159Sha1.prototype.init = function () {
69160 this._a = 0x67452301
69161 this._b = 0xefcdab89
69162 this._c = 0x98badcfe
69163 this._d = 0x10325476
69164 this._e = 0xc3d2e1f0
ebd8d4e8 69165
8b095871
IC
69166 return this
69167}
ebd8d4e8 69168
8b095871
IC
69169function rotl1 (num) {
69170 return (num << 1) | (num >>> 31)
69171}
ebd8d4e8 69172
8b095871
IC
69173function rotl5 (num) {
69174 return (num << 5) | (num >>> 27)
69175}
ebd8d4e8 69176
8b095871
IC
69177function rotl30 (num) {
69178 return (num << 30) | (num >>> 2)
69179}
ebd8d4e8 69180
8b095871
IC
69181function ft (s, b, c, d) {
69182 if (s === 0) return (b & c) | ((~b) & d)
69183 if (s === 2) return (b & c) | (b & d) | (c & d)
69184 return b ^ c ^ d
69185}
ebd8d4e8 69186
8b095871
IC
69187Sha1.prototype._update = function (M) {
69188 var W = this._w
ebd8d4e8 69189
8b095871
IC
69190 var a = this._a | 0
69191 var b = this._b | 0
69192 var c = this._c | 0
69193 var d = this._d | 0
69194 var e = this._e | 0
ebd8d4e8 69195
8b095871
IC
69196 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69197 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
69198
69199 for (var j = 0; j < 80; ++j) {
69200 var s = ~~(j / 20)
69201 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
69202
69203 e = d
69204 d = c
69205 c = rotl30(b)
69206 b = a
69207 a = t
ab78acc6
IC
69208 }
69209
8b095871
IC
69210 this._a = (a + this._a) | 0
69211 this._b = (b + this._b) | 0
69212 this._c = (c + this._c) | 0
69213 this._d = (d + this._d) | 0
69214 this._e = (e + this._e) | 0
69215}
ab78acc6 69216
8b095871
IC
69217Sha1.prototype._hash = function () {
69218 var H = new Buffer(20)
ab78acc6 69219
8b095871
IC
69220 H.writeInt32BE(this._a | 0, 0)
69221 H.writeInt32BE(this._b | 0, 4)
69222 H.writeInt32BE(this._c | 0, 8)
69223 H.writeInt32BE(this._d | 0, 12)
69224 H.writeInt32BE(this._e | 0, 16)
ab78acc6 69225
8b095871
IC
69226 return H
69227}
ab78acc6 69228
8b095871 69229module.exports = Sha1
ab78acc6 69230
8b095871
IC
69231}).call(this,require("buffer").Buffer)
69232},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
69233(function (Buffer){
69234/**
69235 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
69236 * in FIPS 180-2
69237 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
69238 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69239 *
69240 */
ab78acc6 69241
8b095871
IC
69242var inherits = require('inherits')
69243var Sha256 = require('./sha256')
69244var Hash = require('./hash')
ab78acc6 69245
8b095871 69246var W = new Array(64)
ab78acc6 69247
8b095871
IC
69248function Sha224 () {
69249 this.init()
ab78acc6 69250
8b095871 69251 this._w = W // new Array(64)
ebd8d4e8 69252
8b095871
IC
69253 Hash.call(this, 64, 56)
69254}
ebd8d4e8 69255
8b095871 69256inherits(Sha224, Sha256)
ebd8d4e8 69257
8b095871
IC
69258Sha224.prototype.init = function () {
69259 this._a = 0xc1059ed8
69260 this._b = 0x367cd507
69261 this._c = 0x3070dd17
69262 this._d = 0xf70e5939
69263 this._e = 0xffc00b31
69264 this._f = 0x68581511
69265 this._g = 0x64f98fa7
69266 this._h = 0xbefa4fa4
ebd8d4e8 69267
8b095871
IC
69268 return this
69269}
ab78acc6 69270
8b095871
IC
69271Sha224.prototype._hash = function () {
69272 var H = new Buffer(28)
ebd8d4e8 69273
8b095871
IC
69274 H.writeInt32BE(this._a, 0)
69275 H.writeInt32BE(this._b, 4)
69276 H.writeInt32BE(this._c, 8)
69277 H.writeInt32BE(this._d, 12)
69278 H.writeInt32BE(this._e, 16)
69279 H.writeInt32BE(this._f, 20)
69280 H.writeInt32BE(this._g, 24)
ab78acc6 69281
8b095871
IC
69282 return H
69283}
ebd8d4e8 69284
8b095871 69285module.exports = Sha224
ebd8d4e8 69286
8b095871
IC
69287}).call(this,require("buffer").Buffer)
69288},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
69289(function (Buffer){
69290/**
69291 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
69292 * in FIPS 180-2
69293 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
69294 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69295 *
69296 */
ebd8d4e8 69297
8b095871
IC
69298var inherits = require('inherits')
69299var Hash = require('./hash')
ab78acc6 69300
8b095871
IC
69301var K = [
69302 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
69303 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
69304 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
69305 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
69306 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
69307 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
69308 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
69309 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
69310 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
69311 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
69312 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
69313 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
69314 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
69315 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
69316 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
69317 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
69318]
ebd8d4e8 69319
8b095871 69320var W = new Array(64)
ebd8d4e8 69321
8b095871
IC
69322function Sha256 () {
69323 this.init()
ebd8d4e8 69324
8b095871 69325 this._w = W // new Array(64)
ebd8d4e8 69326
8b095871 69327 Hash.call(this, 64, 56)
ab78acc6 69328}
ebd8d4e8 69329
8b095871 69330inherits(Sha256, Hash)
ebd8d4e8 69331
8b095871
IC
69332Sha256.prototype.init = function () {
69333 this._a = 0x6a09e667
69334 this._b = 0xbb67ae85
69335 this._c = 0x3c6ef372
69336 this._d = 0xa54ff53a
69337 this._e = 0x510e527f
69338 this._f = 0x9b05688c
69339 this._g = 0x1f83d9ab
69340 this._h = 0x5be0cd19
ebd8d4e8 69341
8b095871
IC
69342 return this
69343}
ebd8d4e8 69344
8b095871
IC
69345function ch (x, y, z) {
69346 return z ^ (x & (y ^ z))
69347}
ebd8d4e8 69348
8b095871
IC
69349function maj (x, y, z) {
69350 return (x & y) | (z & (x | y))
69351}
ebd8d4e8 69352
8b095871
IC
69353function sigma0 (x) {
69354 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
69355}
ebd8d4e8 69356
8b095871
IC
69357function sigma1 (x) {
69358 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
69359}
ebd8d4e8 69360
8b095871
IC
69361function gamma0 (x) {
69362 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
69363}
ebd8d4e8 69364
8b095871
IC
69365function gamma1 (x) {
69366 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
69367}
ab78acc6 69368
8b095871
IC
69369Sha256.prototype._update = function (M) {
69370 var W = this._w
ebd8d4e8 69371
8b095871
IC
69372 var a = this._a | 0
69373 var b = this._b | 0
69374 var c = this._c | 0
69375 var d = this._d | 0
69376 var e = this._e | 0
69377 var f = this._f | 0
69378 var g = this._g | 0
69379 var h = this._h | 0
ab78acc6 69380
8b095871
IC
69381 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69382 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 69383
8b095871
IC
69384 for (var j = 0; j < 64; ++j) {
69385 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
69386 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 69387
8b095871
IC
69388 h = g
69389 g = f
69390 f = e
69391 e = (d + T1) | 0
69392 d = c
69393 c = b
69394 b = a
69395 a = (T1 + T2) | 0
ebd8d4e8
IC
69396 }
69397
8b095871
IC
69398 this._a = (a + this._a) | 0
69399 this._b = (b + this._b) | 0
69400 this._c = (c + this._c) | 0
69401 this._d = (d + this._d) | 0
69402 this._e = (e + this._e) | 0
69403 this._f = (f + this._f) | 0
69404 this._g = (g + this._g) | 0
69405 this._h = (h + this._h) | 0
ab78acc6 69406}
ebd8d4e8 69407
8b095871
IC
69408Sha256.prototype._hash = function () {
69409 var H = new Buffer(32)
ebd8d4e8 69410
8b095871
IC
69411 H.writeInt32BE(this._a, 0)
69412 H.writeInt32BE(this._b, 4)
69413 H.writeInt32BE(this._c, 8)
69414 H.writeInt32BE(this._d, 12)
69415 H.writeInt32BE(this._e, 16)
69416 H.writeInt32BE(this._f, 20)
69417 H.writeInt32BE(this._g, 24)
69418 H.writeInt32BE(this._h, 28)
69419
69420 return H
ab78acc6 69421}
ebd8d4e8 69422
8b095871 69423module.exports = Sha256
ebd8d4e8 69424
8b095871
IC
69425}).call(this,require("buffer").Buffer)
69426},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
69427(function (Buffer){
69428var inherits = require('inherits')
69429var SHA512 = require('./sha512')
69430var Hash = require('./hash')
ebd8d4e8 69431
8b095871 69432var W = new Array(160)
ebd8d4e8 69433
8b095871
IC
69434function Sha384 () {
69435 this.init()
69436 this._w = W
ab78acc6 69437
8b095871
IC
69438 Hash.call(this, 128, 112)
69439}
ab78acc6 69440
8b095871 69441inherits(Sha384, SHA512)
ebd8d4e8 69442
8b095871
IC
69443Sha384.prototype.init = function () {
69444 this._ah = 0xcbbb9d5d
69445 this._bh = 0x629a292a
69446 this._ch = 0x9159015a
69447 this._dh = 0x152fecd8
69448 this._eh = 0x67332667
69449 this._fh = 0x8eb44a87
69450 this._gh = 0xdb0c2e0d
69451 this._hh = 0x47b5481d
69452
69453 this._al = 0xc1059ed8
69454 this._bl = 0x367cd507
69455 this._cl = 0x3070dd17
69456 this._dl = 0xf70e5939
69457 this._el = 0xffc00b31
69458 this._fl = 0x68581511
69459 this._gl = 0x64f98fa7
69460 this._hl = 0xbefa4fa4
ebd8d4e8 69461
8b095871
IC
69462 return this
69463}
ebd8d4e8 69464
8b095871
IC
69465Sha384.prototype._hash = function () {
69466 var H = new Buffer(48)
ebd8d4e8 69467
8b095871
IC
69468 function writeInt64BE (h, l, offset) {
69469 H.writeInt32BE(h, offset)
69470 H.writeInt32BE(l, offset + 4)
69471 }
ebd8d4e8 69472
8b095871
IC
69473 writeInt64BE(this._ah, this._al, 0)
69474 writeInt64BE(this._bh, this._bl, 8)
69475 writeInt64BE(this._ch, this._cl, 16)
69476 writeInt64BE(this._dh, this._dl, 24)
69477 writeInt64BE(this._eh, this._el, 32)
69478 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 69479
8b095871 69480 return H
ab78acc6 69481}
ebd8d4e8 69482
8b095871
IC
69483module.exports = Sha384
69484
69485}).call(this,require("buffer").Buffer)
69486},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
69487(function (Buffer){
69488var inherits = require('inherits')
69489var Hash = require('./hash')
69490
69491var K = [
69492 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
69493 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
69494 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
69495 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
69496 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
69497 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
69498 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
69499 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
69500 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
69501 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
69502 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
69503 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
69504 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
69505 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
69506 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
69507 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
69508 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
69509 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
69510 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
69511 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
69512 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
69513 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
69514 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
69515 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
69516 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
69517 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
69518 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
69519 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
69520 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
69521 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
69522 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
69523 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
69524 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
69525 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
69526 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
69527 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
69528 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
69529 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
69530 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
69531 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
69532]
69533
69534var W = new Array(160)
ebd8d4e8 69535
8b095871
IC
69536function Sha512 () {
69537 this.init()
69538 this._w = W
ebd8d4e8 69539
8b095871 69540 Hash.call(this, 128, 112)
ab78acc6 69541}
ebd8d4e8 69542
8b095871 69543inherits(Sha512, Hash)
ebd8d4e8 69544
8b095871
IC
69545Sha512.prototype.init = function () {
69546 this._ah = 0x6a09e667
69547 this._bh = 0xbb67ae85
69548 this._ch = 0x3c6ef372
69549 this._dh = 0xa54ff53a
69550 this._eh = 0x510e527f
69551 this._fh = 0x9b05688c
69552 this._gh = 0x1f83d9ab
69553 this._hh = 0x5be0cd19
69554
69555 this._al = 0xf3bcc908
69556 this._bl = 0x84caa73b
69557 this._cl = 0xfe94f82b
69558 this._dl = 0x5f1d36f1
69559 this._el = 0xade682d1
69560 this._fl = 0x2b3e6c1f
69561 this._gl = 0xfb41bd6b
69562 this._hl = 0x137e2179
ebd8d4e8 69563
8b095871 69564 return this
ab78acc6 69565}
ebd8d4e8 69566
8b095871
IC
69567function Ch (x, y, z) {
69568 return z ^ (x & (y ^ z))
69569}
ebd8d4e8 69570
8b095871
IC
69571function maj (x, y, z) {
69572 return (x & y) | (z & (x | y))
ab78acc6 69573}
ebd8d4e8 69574
8b095871
IC
69575function sigma0 (x, xl) {
69576 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
69577}
ebd8d4e8 69578
8b095871
IC
69579function sigma1 (x, xl) {
69580 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
69581}
ab78acc6 69582
8b095871
IC
69583function Gamma0 (x, xl) {
69584 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 69585}
ebd8d4e8 69586
8b095871
IC
69587function Gamma0l (x, xl) {
69588 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
69589}
ebd8d4e8 69590
8b095871
IC
69591function Gamma1 (x, xl) {
69592 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
69593}
69594
8b095871
IC
69595function Gamma1l (x, xl) {
69596 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
69597}
69598
8b095871
IC
69599function getCarry (a, b) {
69600 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
69601}
69602
8b095871
IC
69603Sha512.prototype._update = function (M) {
69604 var W = this._w
ebd8d4e8 69605
8b095871
IC
69606 var ah = this._ah | 0
69607 var bh = this._bh | 0
69608 var ch = this._ch | 0
69609 var dh = this._dh | 0
69610 var eh = this._eh | 0
69611 var fh = this._fh | 0
69612 var gh = this._gh | 0
69613 var hh = this._hh | 0
ebd8d4e8 69614
8b095871
IC
69615 var al = this._al | 0
69616 var bl = this._bl | 0
69617 var cl = this._cl | 0
69618 var dl = this._dl | 0
69619 var el = this._el | 0
69620 var fl = this._fl | 0
69621 var gl = this._gl | 0
69622 var hl = this._hl | 0
ebd8d4e8 69623
8b095871
IC
69624 for (var i = 0; i < 32; i += 2) {
69625 W[i] = M.readInt32BE(i * 4)
69626 W[i + 1] = M.readInt32BE(i * 4 + 4)
69627 }
69628 for (; i < 160; i += 2) {
69629 var xh = W[i - 15 * 2]
69630 var xl = W[i - 15 * 2 + 1]
69631 var gamma0 = Gamma0(xh, xl)
69632 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 69633
8b095871
IC
69634 xh = W[i - 2 * 2]
69635 xl = W[i - 2 * 2 + 1]
69636 var gamma1 = Gamma1(xh, xl)
69637 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 69638
8b095871
IC
69639 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
69640 var Wi7h = W[i - 7 * 2]
69641 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 69642
8b095871
IC
69643 var Wi16h = W[i - 16 * 2]
69644 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 69645
8b095871
IC
69646 var Wil = (gamma0l + Wi7l) | 0
69647 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
69648 Wil = (Wil + gamma1l) | 0
69649 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
69650 Wil = (Wil + Wi16l) | 0
69651 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 69652
8b095871
IC
69653 W[i] = Wih
69654 W[i + 1] = Wil
69655 }
ebd8d4e8 69656
8b095871
IC
69657 for (var j = 0; j < 160; j += 2) {
69658 Wih = W[j]
69659 Wil = W[j + 1]
ebd8d4e8 69660
8b095871
IC
69661 var majh = maj(ah, bh, ch)
69662 var majl = maj(al, bl, cl)
ebd8d4e8 69663
8b095871
IC
69664 var sigma0h = sigma0(ah, al)
69665 var sigma0l = sigma0(al, ah)
69666 var sigma1h = sigma1(eh, el)
69667 var sigma1l = sigma1(el, eh)
ab78acc6 69668
8b095871
IC
69669 // t1 = h + sigma1 + ch + K[j] + W[j]
69670 var Kih = K[j]
69671 var Kil = K[j + 1]
ab78acc6 69672
8b095871
IC
69673 var chh = Ch(eh, fh, gh)
69674 var chl = Ch(el, fl, gl)
ebd8d4e8 69675
8b095871
IC
69676 var t1l = (hl + sigma1l) | 0
69677 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
69678 t1l = (t1l + chl) | 0
69679 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
69680 t1l = (t1l + Kil) | 0
69681 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
69682 t1l = (t1l + Wil) | 0
69683 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 69684
8b095871
IC
69685 // t2 = sigma0 + maj
69686 var t2l = (sigma0l + majl) | 0
69687 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 69688
8b095871
IC
69689 hh = gh
69690 hl = gl
69691 gh = fh
69692 gl = fl
69693 fh = eh
69694 fl = el
69695 el = (dl + t1l) | 0
69696 eh = (dh + t1h + getCarry(el, dl)) | 0
69697 dh = ch
69698 dl = cl
69699 ch = bh
69700 cl = bl
69701 bh = ah
69702 bl = al
69703 al = (t1l + t2l) | 0
69704 ah = (t1h + t2h + getCarry(al, t1l)) | 0
69705 }
ab78acc6 69706
8b095871
IC
69707 this._al = (this._al + al) | 0
69708 this._bl = (this._bl + bl) | 0
69709 this._cl = (this._cl + cl) | 0
69710 this._dl = (this._dl + dl) | 0
69711 this._el = (this._el + el) | 0
69712 this._fl = (this._fl + fl) | 0
69713 this._gl = (this._gl + gl) | 0
69714 this._hl = (this._hl + hl) | 0
ab78acc6 69715
8b095871
IC
69716 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
69717 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
69718 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
69719 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
69720 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
69721 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
69722 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
69723 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
69724}
69725
8b095871
IC
69726Sha512.prototype._hash = function () {
69727 var H = new Buffer(64)
ab78acc6 69728
8b095871
IC
69729 function writeInt64BE (h, l, offset) {
69730 H.writeInt32BE(h, offset)
69731 H.writeInt32BE(l, offset + 4)
69732 }
ab78acc6 69733
8b095871
IC
69734 writeInt64BE(this._ah, this._al, 0)
69735 writeInt64BE(this._bh, this._bl, 8)
69736 writeInt64BE(this._ch, this._cl, 16)
69737 writeInt64BE(this._dh, this._dl, 24)
69738 writeInt64BE(this._eh, this._el, 32)
69739 writeInt64BE(this._fh, this._fl, 40)
69740 writeInt64BE(this._gh, this._gl, 48)
69741 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 69742
8b095871 69743 return H
ebd8d4e8
IC
69744}
69745
8b095871 69746module.exports = Sha512
ebd8d4e8 69747
ab78acc6 69748}).call(this,require("buffer").Buffer)
8b095871
IC
69749},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
69750var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 69751
8b095871
IC
69752/**
69753 * Removes '0x' from a given `String` is present
69754 * @param {String} str the string value
69755 * @return {String|Optional} a string by pass if necessary
69756 */
69757module.exports = function stripHexPrefix(str) {
69758 if (typeof str !== 'string') {
69759 return str;
69760 }
07ac4350 69761
8b095871
IC
69762 return isHexPrefixed(str) ? str.slice(2) : str;
69763}
07ac4350 69764
8b095871
IC
69765},{"is-hex-prefixed":64}]},{},[31])(31)
69766});</script>
8a1f452d 69767 <script>function convertRippleAdrr(address) {
69768 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
69769 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
69770 )
69771 }
69772
69773function convertRipplePriv(priv) {
920eb591 69774 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 69775}
69776
69777</script>
ab78acc6 69778 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
69779
69780//// base.js
69781
69782/** @fileOverview Javascript cryptography implementation.
69783 *
69784 * Crush to remove comments, shorten variable names and
69785 * generally reduce transmission size.
69786 *
69787 * @author Emily Stark
69788 * @author Mike Hamburg
69789 * @author Dan Boneh
69790 */
69791
69792"use strict";
69793/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
69794/*global document, window, escape, unescape, module, require, Uint32Array */
69795
69796/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
69797var sjcl = {
69798 /** @namespace Symmetric ciphers. */
69799 cipher: {},
69800
69801 /** @namespace Hash functions. Right now only SHA256 is implemented. */
69802 hash: {},
69803
69804 /** @namespace Key exchange functions. Right now only SRP is implemented. */
69805 keyexchange: {},
69806
69807 /** @namespace Block cipher modes of operation. */
69808 mode: {},
69809
69810 /** @namespace Miscellaneous. HMAC and PBKDF2. */
69811 misc: {},
69812
69813 /**
69814 * @namespace Bit array encoders and decoders.
69815 *
69816 * @description
69817 * The members of this namespace are functions which translate between
69818 * SJCL's bitArrays and other objects (usually strings). Because it
69819 * isn't always clear which direction is encoding and which is decoding,
69820 * the method names are "fromBits" and "toBits".
69821 */
69822 codec: {},
69823
69824 /** @namespace Exceptions. */
69825 exception: {
69826 /** @constructor Ciphertext is corrupt. */
69827 corrupt: function(message) {
69828 this.toString = function() { return "CORRUPT: "+this.message; };
69829 this.message = message;
69830 },
69831
69832 /** @constructor Invalid parameter. */
69833 invalid: function(message) {
69834 this.toString = function() { return "INVALID: "+this.message; };
69835 this.message = message;
69836 },
69837
69838 /** @constructor Bug or missing feature in SJCL. @constructor */
69839 bug: function(message) {
69840 this.toString = function() { return "BUG: "+this.message; };
69841 this.message = message;
69842 },
69843
69844 /** @constructor Something isn't ready. */
69845 notReady: function(message) {
69846 this.toString = function() { return "NOT READY: "+this.message; };
69847 this.message = message;
ebd8d4e8 69848 }
80c4dd2a
IC
69849 }
69850};
69851
69852if(typeof module !== 'undefined' && module.exports){
69853 module.exports = sjcl;
69854}
69855if (typeof define === "function") {
69856 define([], function () {
69857 return sjcl;
69858 });
69859}
69860
69861
69862//// bitArray.js
69863
69864/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
69865 *
69866 * @author Emily Stark
69867 * @author Mike Hamburg
69868 * @author Dan Boneh
69869 */
69870
69871/** @namespace Arrays of bits, encoded as arrays of Numbers.
69872 *
69873 * @description
69874 * <p>
69875 * These objects are the currency accepted by SJCL's crypto functions.
69876 * </p>
69877 *
69878 * <p>
69879 * Most of our crypto primitives operate on arrays of 4-byte words internally,
69880 * but many of them can take arguments that are not a multiple of 4 bytes.
69881 * This library encodes arrays of bits (whose size need not be a multiple of 8
69882 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
69883 * array of words, 32 bits at a time. Since the words are double-precision
69884 * floating point numbers, they fit some extra data. We use this (in a private,
69885 * possibly-changing manner) to encode the number of bits actually present
69886 * in the last word of the array.
69887 * </p>
69888 *
69889 * <p>
69890 * Because bitwise ops clear this out-of-band data, these arrays can be passed
69891 * to ciphers like AES which want arrays of words.
69892 * </p>
69893 */
69894sjcl.bitArray = {
69895 /**
69896 * Array slices in units of bits.
69897 * @param {bitArray} a The array to slice.
69898 * @param {Number} bstart The offset to the start of the slice, in bits.
69899 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
69900 * slice until the end of the array.
69901 * @return {bitArray} The requested slice.
69902 */
69903 bitSlice: function (a, bstart, bend) {
69904 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
69905 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
69906 },
69907
69908 /**
69909 * Extract a number packed into a bit array.
69910 * @param {bitArray} a The array to slice.
69911 * @param {Number} bstart The offset to the start of the slice, in bits.
69912 * @param {Number} length The length of the number to extract.
69913 * @return {Number} The requested slice.
69914 */
69915 extract: function(a, bstart, blength) {
69916 // FIXME: this Math.floor is not necessary at all, but for some reason
69917 // seems to suppress a bug in the Chromium JIT.
69918 var x, sh = Math.floor((-bstart-blength) & 31);
69919 if ((bstart + blength - 1 ^ bstart) & -32) {
69920 // it crosses a boundary
69921 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
69922 } else {
69923 // within a single word
69924 x = a[bstart/32|0] >>> sh;
ebd8d4e8 69925 }
80c4dd2a
IC
69926 return x & ((1<<blength) - 1);
69927 },
69928
69929 /**
69930 * Concatenate two bit arrays.
69931 * @param {bitArray} a1 The first array.
69932 * @param {bitArray} a2 The second array.
69933 * @return {bitArray} The concatenation of a1 and a2.
69934 */
69935 concat: function (a1, a2) {
69936 if (a1.length === 0 || a2.length === 0) {
69937 return a1.concat(a2);
69938 }
69939
69940 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
69941 if (shift === 32) {
69942 return a1.concat(a2);
69943 } else {
69944 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 69945 }
80c4dd2a
IC
69946 },
69947
69948 /**
69949 * Find the length of an array of bits.
69950 * @param {bitArray} a The array.
69951 * @return {Number} The length of a, in bits.
69952 */
69953 bitLength: function (a) {
69954 var l = a.length, x;
69955 if (l === 0) { return 0; }
69956 x = a[l - 1];
69957 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
69958 },
69959
69960 /**
69961 * Truncate an array.
69962 * @param {bitArray} a The array.
69963 * @param {Number} len The length to truncate to, in bits.
69964 * @return {bitArray} A new array, truncated to len bits.
69965 */
69966 clamp: function (a, len) {
69967 if (a.length * 32 < len) { return a; }
69968 a = a.slice(0, Math.ceil(len / 32));
69969 var l = a.length;
69970 len = len & 31;
69971 if (l > 0 && len) {
69972 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
69973 }
69974 return a;
69975 },
69976
69977 /**
69978 * Make a partial word for a bit array.
69979 * @param {Number} len The number of bits in the word.
69980 * @param {Number} x The bits.
69981 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
69982 * @return {Number} The partial word.
69983 */
69984 partial: function (len, x, _end) {
69985 if (len === 32) { return x; }
69986 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
69987 },
69988
69989 /**
69990 * Get the number of bits used by a partial word.
69991 * @param {Number} x The partial word.
69992 * @return {Number} The number of bits used by the partial word.
69993 */
69994 getPartial: function (x) {
69995 return Math.round(x/0x10000000000) || 32;
69996 },
69997
69998 /**
69999 * Compare two arrays for equality in a predictable amount of time.
70000 * @param {bitArray} a The first array.
70001 * @param {bitArray} b The second array.
70002 * @return {boolean} true if a == b; false otherwise.
70003 */
70004 equal: function (a, b) {
70005 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
70006 return false;
ebd8d4e8 70007 }
80c4dd2a
IC
70008 var x = 0, i;
70009 for (i=0; i<a.length; i++) {
70010 x |= a[i]^b[i];
ebd8d4e8 70011 }
80c4dd2a
IC
70012 return (x === 0);
70013 },
70014
70015 /** Shift an array right.
70016 * @param {bitArray} a The array to shift.
70017 * @param {Number} shift The number of bits to shift.
70018 * @param {Number} [carry=0] A byte to carry in
70019 * @param {bitArray} [out=[]] An array to prepend to the output.
70020 * @private
70021 */
70022 _shiftRight: function (a, shift, carry, out) {
70023 var i, last2=0, shift2;
70024 if (out === undefined) { out = []; }
70025
70026 for (; shift >= 32; shift -= 32) {
70027 out.push(carry);
70028 carry = 0;
70029 }
70030 if (shift === 0) {
70031 return out.concat(a);
70032 }
70033
70034 for (i=0; i<a.length; i++) {
70035 out.push(carry | a[i]>>>shift);
70036 carry = a[i] << (32-shift);
70037 }
70038 last2 = a.length ? a[a.length-1] : 0;
70039 shift2 = sjcl.bitArray.getPartial(last2);
70040 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
70041 return out;
70042 },
70043
70044 /** xor a block of 4 words together.
70045 * @private
70046 */
70047 _xor4: function(x,y) {
70048 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
70049 },
70050
70051 /** byteswap a word array inplace.
70052 * (does not handle partial words)
70053 * @param {sjcl.bitArray} a word array
70054 * @return {sjcl.bitArray} byteswapped array
70055 */
70056 byteswapM: function(a) {
70057 var i, v, m = 0xff00;
70058 for (i = 0; i < a.length; ++i) {
70059 v = a[i];
70060 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 70061 }
80c4dd2a
IC
70062 return a;
70063 }
70064};
70065
70066
70067//// codecString.js
70068
70069/** @fileOverview Bit array codec implementations.
70070 *
70071 * @author Emily Stark
70072 * @author Mike Hamburg
70073 * @author Dan Boneh
70074 */
70075
70076/** @namespace UTF-8 strings */
70077sjcl.codec.utf8String = {
70078 /** Convert from a bitArray to a UTF-8 string. */
70079 fromBits: function (arr) {
70080 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
70081 for (i=0; i<bl/8; i++) {
70082 if ((i&3) === 0) {
70083 tmp = arr[i/4];
70084 }
70085 out += String.fromCharCode(tmp >>> 24);
70086 tmp <<= 8;
ebd8d4e8 70087 }
80c4dd2a
IC
70088 return decodeURIComponent(escape(out));
70089 },
70090
70091 /** Convert from a UTF-8 string to a bitArray. */
70092 toBits: function (str) {
70093 str = unescape(encodeURIComponent(str));
70094 var out = [], i, tmp=0;
70095 for (i=0; i<str.length; i++) {
70096 tmp = tmp << 8 | str.charCodeAt(i);
70097 if ((i&3) === 3) {
70098 out.push(tmp);
70099 tmp = 0;
70100 }
ebd8d4e8 70101 }
80c4dd2a
IC
70102 if (i&3) {
70103 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 70104 }
80c4dd2a
IC
70105 return out;
70106 }
70107};
70108
70109
70110//// codecHex.js
70111
70112/** @fileOverview Bit array codec implementations.
70113 *
70114 * @author Emily Stark
70115 * @author Mike Hamburg
70116 * @author Dan Boneh
70117 */
70118
70119/** @namespace Hexadecimal */
70120sjcl.codec.hex = {
70121 /** Convert from a bitArray to a hex string. */
70122 fromBits: function (arr) {
70123 var out = "", i;
70124 for (i=0; i<arr.length; i++) {
70125 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 70126 }
80c4dd2a
IC
70127 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
70128 },
70129 /** Convert from a hex string to a bitArray. */
70130 toBits: function (str) {
70131 var i, out=[], len;
70132 str = str.replace(/\s|0x/g, "");
70133 len = str.length;
70134 str = str + "00000000";
70135 for (i=0; i<str.length; i+=8) {
70136 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 70137 }
80c4dd2a
IC
70138 return sjcl.bitArray.clamp(out, len*4);
70139 }
70140};
70141
70142
70143//// sha512.js
70144
70145/** @fileOverview Javascript SHA-512 implementation.
70146 *
70147 * This implementation was written for CryptoJS by Jeff Mott and adapted for
70148 * SJCL by Stefan Thomas.
70149 *
70150 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
70151 * Released with New BSD License
70152 *
70153 * @author Emily Stark
70154 * @author Mike Hamburg
70155 * @author Dan Boneh
70156 * @author Jeff Mott
70157 * @author Stefan Thomas
70158 */
70159
70160/**
70161 * Context for a SHA-512 operation in progress.
70162 * @constructor
70163 * @class Secure Hash Algorithm, 512 bits.
70164 */
70165sjcl.hash.sha512 = function (hash) {
70166 if (!this._key[0]) { this._precompute(); }
70167 if (hash) {
70168 this._h = hash._h.slice(0);
70169 this._buffer = hash._buffer.slice(0);
70170 this._length = hash._length;
70171 } else {
70172 this.reset();
70173 }
70174};
70175
70176/**
70177 * Hash a string or an array of words.
70178 * @static
70179 * @param {bitArray|String} data the data to hash.
70180 * @return {bitArray} The hash value, an array of 16 big-endian words.
70181 */
70182sjcl.hash.sha512.hash = function (data) {
70183 return (new sjcl.hash.sha512()).update(data).finalize();
70184};
70185
70186sjcl.hash.sha512.prototype = {
70187 /**
70188 * The hash's block size, in bits.
70189 * @constant
70190 */
70191 blockSize: 1024,
70192
70193 /**
70194 * Reset the hash state.
70195 * @return this
70196 */
70197 reset:function () {
70198 this._h = this._init.slice(0);
70199 this._buffer = [];
70200 this._length = 0;
70201 return this;
70202 },
70203
70204 /**
70205 * Input several words to the hash.
70206 * @param {bitArray|String} data the data to hash.
70207 * @return this
70208 */
70209 update: function (data) {
70210 if (typeof data === "string") {
70211 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 70212 }
80c4dd2a
IC
70213 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
70214 ol = this._length,
70215 nl = this._length = ol + sjcl.bitArray.bitLength(data);
70216 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
70217 this._block(b.splice(0,32));
ebd8d4e8 70218 }
80c4dd2a
IC
70219 return this;
70220 },
70221
70222 /**
70223 * Complete hashing and output the hash value.
70224 * @return {bitArray} The hash value, an array of 16 big-endian words.
70225 */
70226 finalize:function () {
70227 var i, b = this._buffer, h = this._h;
70228
70229 // Round out and push the buffer
70230 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
70231
70232 // Round out the buffer to a multiple of 32 words, less the 4 length words.
70233 for (i = b.length + 4; i & 31; i++) {
70234 b.push(0);
ebd8d4e8 70235 }
80c4dd2a
IC
70236
70237 // append the length
70238 b.push(0);
70239 b.push(0);
70240 b.push(Math.floor(this._length / 0x100000000));
70241 b.push(this._length | 0);
70242
70243 while (b.length) {
70244 this._block(b.splice(0,32));
ebd8d4e8 70245 }
80c4dd2a
IC
70246
70247 this.reset();
70248 return h;
70249 },
70250
70251 /**
70252 * The SHA-512 initialization vector, to be precomputed.
70253 * @private
70254 */
70255 _init:[],
70256
70257 /**
70258 * Least significant 24 bits of SHA512 initialization values.
70259 *
70260 * Javascript only has 53 bits of precision, so we compute the 40 most
70261 * significant bits and add the remaining 24 bits as constants.
70262 *
70263 * @private
70264 */
70265 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
70266
70267 /*
70268 _init:
70269 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
70270 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
70271 */
70272
70273 /**
70274 * The SHA-512 hash key, to be precomputed.
70275 * @private
70276 */
70277 _key:[],
70278
70279 /**
70280 * Least significant 24 bits of SHA512 key values.
70281 * @private
70282 */
70283 _keyr:
70284 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
70285 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
70286 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
70287 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
70288 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
70289 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
70290 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
70291 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
70292 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
70293 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
70294
70295 /*
70296 _key:
70297 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
70298 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
70299 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
70300 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
70301 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
70302 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
70303 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
70304 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
70305 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
70306 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
70307 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
70308 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
70309 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
70310 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
70311 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
70312 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
70313 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
70314 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
70315 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
70316 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
70317 */
70318
70319 /**
70320 * Function to precompute _init and _key.
70321 * @private
70322 */
70323 _precompute: function () {
70324 // XXX: This code is for precomputing the SHA256 constants, change for
70325 // SHA512 and re-enable.
70326 var i = 0, prime = 2, factor;
70327
70328 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
70329 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
70330
70331 outer: for (; i<80; prime++) {
70332 for (factor=2; factor*factor <= prime; factor++) {
70333 if (prime % factor === 0) {
70334 // not a prime
70335 continue outer;
ebd8d4e8 70336 }
80c4dd2a
IC
70337 }
70338
70339 if (i<8) {
70340 this._init[i*2] = frac(Math.pow(prime, 1/2));
70341 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
70342 }
70343 this._key[i*2] = frac(Math.pow(prime, 1/3));
70344 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
70345 i++;
ebd8d4e8 70346 }
80c4dd2a
IC
70347 },
70348
70349 /**
70350 * Perform one cycle of SHA-512.
70351 * @param {bitArray} words one block of words.
70352 * @private
70353 */
70354 _block:function (words) {
70355 var i, wrh, wrl,
70356 w = words.slice(0),
70357 h = this._h,
70358 k = this._key,
70359 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
70360 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
70361 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
70362 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
70363
70364 // Working variables
70365 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
70366 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
70367 eh = h4h, el = h4l, fh = h5h, fl = h5l,
70368 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
70369
70370 for (i=0; i<80; i++) {
70371 // load up the input word for this round
70372 if (i<16) {
70373 wrh = w[i * 2];
70374 wrl = w[i * 2 + 1];
70375 } else {
70376 // Gamma0
70377 var gamma0xh = w[(i-15) * 2];
70378 var gamma0xl = w[(i-15) * 2 + 1];
70379 var gamma0h =
70380 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
70381 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
70382 (gamma0xh >>> 7);
70383 var gamma0l =
70384 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
70385 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
70386 ((gamma0xh << 25) | (gamma0xl >>> 7));
70387
70388 // Gamma1
70389 var gamma1xh = w[(i-2) * 2];
70390 var gamma1xl = w[(i-2) * 2 + 1];
70391 var gamma1h =
70392 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
70393 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
70394 (gamma1xh >>> 6);
70395 var gamma1l =
70396 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
70397 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
70398 ((gamma1xh << 26) | (gamma1xl >>> 6));
70399
70400 // Shortcuts
70401 var wr7h = w[(i-7) * 2];
70402 var wr7l = w[(i-7) * 2 + 1];
70403
70404 var wr16h = w[(i-16) * 2];
70405 var wr16l = w[(i-16) * 2 + 1];
70406
70407 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
70408 wrl = gamma0l + wr7l;
70409 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
70410 wrl += gamma1l;
70411 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
70412 wrl += wr16l;
70413 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
70414 }
70415
70416 w[i*2] = wrh |= 0;
70417 w[i*2 + 1] = wrl |= 0;
70418
70419 // Ch
70420 var chh = (eh & fh) ^ (~eh & gh);
70421 var chl = (el & fl) ^ (~el & gl);
70422
70423 // Maj
70424 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
70425 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
70426
70427 // Sigma0
70428 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
70429 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
70430
70431 // Sigma1
70432 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
70433 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
70434
70435 // K(round)
70436 var krh = k[i*2];
70437 var krl = k[i*2+1];
70438
70439 // t1 = h + sigma1 + ch + K(round) + W(round)
70440 var t1l = hl + sigma1l;
70441 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
70442 t1l += chl;
70443 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
70444 t1l += krl;
70445 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
70446 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
70447 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
70448
70449 // t2 = sigma0 + maj
70450 var t2l = sigma0l + majl;
70451 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
70452
70453 // Update working variables
70454 hh = gh;
70455 hl = gl;
70456 gh = fh;
70457 gl = fl;
70458 fh = eh;
70459 fl = el;
70460 el = (dl + t1l) | 0;
70461 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
70462 dh = ch;
70463 dl = cl;
70464 ch = bh;
70465 cl = bl;
70466 bh = ah;
70467 bl = al;
70468 al = (t1l + t2l) | 0;
70469 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
70470 }
70471
70472 // Intermediate hash
70473 h0l = h[1] = (h0l + al) | 0;
70474 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
70475 h1l = h[3] = (h1l + bl) | 0;
70476 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
70477 h2l = h[5] = (h2l + cl) | 0;
70478 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
70479 h3l = h[7] = (h3l + dl) | 0;
70480 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
70481 h4l = h[9] = (h4l + el) | 0;
70482 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
70483 h5l = h[11] = (h5l + fl) | 0;
70484 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
70485 h6l = h[13] = (h6l + gl) | 0;
70486 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
70487 h7l = h[15] = (h7l + hl) | 0;
70488 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
70489 }
70490};
70491
70492
70493//// hmac.js
70494
70495/** @fileOverview HMAC implementation.
70496 *
70497 * @author Emily Stark
70498 * @author Mike Hamburg
70499 * @author Dan Boneh
70500 */
70501
70502/** HMAC with the specified hash function.
70503 * @constructor
70504 * @param {bitArray} key the key for HMAC.
70505 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
70506 */
70507sjcl.misc.hmac = function (key, Hash) {
70508 this._hash = Hash = Hash || sjcl.hash.sha256;
70509 var exKey = [[],[]], i,
70510 bs = Hash.prototype.blockSize / 32;
70511 this._baseHash = [new Hash(), new Hash()];
70512
70513 if (key.length > bs) {
70514 key = Hash.hash(key);
70515 }
70516
70517 for (i=0; i<bs; i++) {
70518 exKey[0][i] = key[i]^0x36363636;
70519 exKey[1][i] = key[i]^0x5C5C5C5C;
70520 }
70521
70522 this._baseHash[0].update(exKey[0]);
70523 this._baseHash[1].update(exKey[1]);
70524 this._resultHash = new Hash(this._baseHash[0]);
70525};
70526
70527/** HMAC with the specified hash function. Also called encrypt since it's a prf.
70528 * @param {bitArray|String} data The data to mac.
70529 */
70530sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
70531 if (!this._updated) {
70532 this.update(data);
70533 return this.digest(data);
70534 } else {
70535 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
70536 }
70537};
70538
70539sjcl.misc.hmac.prototype.reset = function () {
70540 this._resultHash = new this._hash(this._baseHash[0]);
70541 this._updated = false;
70542};
70543
70544sjcl.misc.hmac.prototype.update = function (data) {
70545 this._updated = true;
70546 this._resultHash.update(data);
70547};
70548
70549sjcl.misc.hmac.prototype.digest = function () {
70550 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
70551
70552 this.reset();
70553
70554 return result;
70555};
70556
70557
70558//// pbkdf2.js
70559
70560
70561/** @fileOverview Password-based key-derivation function, version 2.0.
70562 *
70563 * @author Emily Stark
70564 * @author Mike Hamburg
70565 * @author Dan Boneh
70566 */
70567
70568/** Password-Based Key-Derivation Function, version 2.0.
70569 *
70570 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
70571 *
70572 * This is the method specified by RSA's PKCS #5 standard.
70573 *
70574 * @param {bitArray|String} password The password.
70575 * @param {bitArray|String} salt The salt. Should have lots of entropy.
70576 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
70577 * @param {Number} [length] The length of the derived key. Defaults to the
70578 output size of the hash function.
70579 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
70580 * @return {bitArray} the derived key.
70581 */
70582sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
70583 count = count || 1000;
70584
70585 if (length < 0 || count < 0) {
70586 throw sjcl.exception.invalid("invalid params to pbkdf2");
70587 }
70588
70589 if (typeof password === "string") {
70590 password = sjcl.codec.utf8String.toBits(password);
70591 }
70592
70593 if (typeof salt === "string") {
70594 salt = sjcl.codec.utf8String.toBits(salt);
70595 }
70596
70597 Prff = Prff || sjcl.misc.hmac;
70598
70599 var prf = new Prff(password),
70600 u, ui, i, j, k, out = [], b = sjcl.bitArray;
70601
70602 for (k = 1; 32 * out.length < (length || 1); k++) {
70603 u = ui = prf.encrypt(b.concat(salt,[k]));
70604
70605 for (i=1; i<count; i++) {
70606 ui = prf.encrypt(ui);
70607 for (j=0; j<ui.length; j++) {
70608 u[j] ^= ui[j];
70609 }
ebd8d4e8 70610 }
80c4dd2a
IC
70611
70612 out = out.concat(u);
70613 }
70614
70615 if (length) { out = b.clamp(out, length); }
70616
70617 return out;
70618};
70619
70620
70621//// sha256.js
70622
70623/** @fileOverview Javascript SHA-256 implementation.
70624 *
70625 * An older version of this implementation is available in the public
70626 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
70627 * Stanford University 2008-2010 and BSD-licensed for liability
70628 * reasons.
70629 *
70630 * Special thanks to Aldo Cortesi for pointing out several bugs in
70631 * this code.
70632 *
70633 * @author Emily Stark
70634 * @author Mike Hamburg
70635 * @author Dan Boneh
70636 */
70637
70638/**
70639 * Context for a SHA-256 operation in progress.
70640 * @constructor
70641 * @class Secure Hash Algorithm, 256 bits.
70642 */
70643sjcl.hash.sha256 = function (hash) {
70644 if (!this._key[0]) { this._precompute(); }
70645 if (hash) {
70646 this._h = hash._h.slice(0);
70647 this._buffer = hash._buffer.slice(0);
70648 this._length = hash._length;
70649 } else {
70650 this.reset();
70651 }
70652};
70653
70654/**
70655 * Hash a string or an array of words.
70656 * @static
70657 * @param {bitArray|String} data the data to hash.
70658 * @return {bitArray} The hash value, an array of 16 big-endian words.
70659 */
70660sjcl.hash.sha256.hash = function (data) {
70661 return (new sjcl.hash.sha256()).update(data).finalize();
70662};
70663
70664sjcl.hash.sha256.prototype = {
70665 /**
70666 * The hash's block size, in bits.
70667 * @constant
70668 */
70669 blockSize: 512,
70670
70671 /**
70672 * Reset the hash state.
70673 * @return this
70674 */
70675 reset:function () {
70676 this._h = this._init.slice(0);
70677 this._buffer = [];
70678 this._length = 0;
70679 return this;
70680 },
70681
70682 /**
70683 * Input several words to the hash.
70684 * @param {bitArray|String} data the data to hash.
70685 * @return this
70686 */
70687 update: function (data) {
70688 if (typeof data === "string") {
70689 data = sjcl.codec.utf8String.toBits(data);
70690 }
70691 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
70692 ol = this._length,
70693 nl = this._length = ol + sjcl.bitArray.bitLength(data);
70694 for (i = 512+ol & -512; i <= nl; i+= 512) {
70695 this._block(b.splice(0,16));
ebd8d4e8 70696 }
3af2954a 70697 return this;
80c4dd2a
IC
70698 },
70699
70700 /**
70701 * Complete hashing and output the hash value.
70702 * @return {bitArray} The hash value, an array of 8 big-endian words.
70703 */
70704 finalize:function () {
70705 var i, b = this._buffer, h = this._h;
70706
70707 // Round out and push the buffer
70708 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
70709
70710 // Round out the buffer to a multiple of 16 words, less the 2 length words.
70711 for (i = b.length + 2; i & 15; i++) {
70712 b.push(0);
70713 }
70714
70715 // append the length
70716 b.push(Math.floor(this._length / 0x100000000));
70717 b.push(this._length | 0);
70718
70719 while (b.length) {
70720 this._block(b.splice(0,16));
70721 }
70722
70723 this.reset();
70724 return h;
70725 },
70726
70727 /**
70728 * The SHA-256 initialization vector, to be precomputed.
70729 * @private
70730 */
70731 _init:[],
70732 /*
70733 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
70734 */
70735
70736 /**
70737 * The SHA-256 hash key, to be precomputed.
70738 * @private
70739 */
70740 _key:[],
70741 /*
70742 _key:
70743 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
70744 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
70745 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
70746 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
70747 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
70748 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
70749 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
70750 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
70751 */
70752
70753
70754 /**
70755 * Function to precompute _init and _key.
70756 * @private
70757 */
70758 _precompute: function () {
70759 var i = 0, prime = 2, factor;
70760
70761 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
70762
70763 outer: for (; i<64; prime++) {
70764 for (factor=2; factor*factor <= prime; factor++) {
70765 if (prime % factor === 0) {
70766 // not a prime
70767 continue outer;
ebd8d4e8 70768 }
80c4dd2a
IC
70769 }
70770
70771 if (i<8) {
70772 this._init[i] = frac(Math.pow(prime, 1/2));
70773 }
70774 this._key[i] = frac(Math.pow(prime, 1/3));
70775 i++;
ebd8d4e8 70776 }
80c4dd2a
IC
70777 },
70778
70779 /**
70780 * Perform one cycle of SHA-256.
70781 * @param {bitArray} words one block of words.
70782 * @private
70783 */
70784 _block:function (words) {
70785 var i, tmp, a, b,
70786 w = words.slice(0),
70787 h = this._h,
70788 k = this._key,
70789 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
70790 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
70791
70792 /* Rationale for placement of |0 :
70793 * If a value can overflow is original 32 bits by a factor of more than a few
70794 * million (2^23 ish), there is a possibility that it might overflow the
70795 * 53-bit mantissa and lose precision.
70796 *
70797 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
70798 * propagates around the loop, and on the hash state h[]. I don't believe
70799 * that the clamps on h4 and on h0 are strictly necessary, but it's close
70800 * (for h4 anyway), and better safe than sorry.
70801 *
70802 * The clamps on h[] are necessary for the output to be correct even in the
70803 * common case and for short inputs.
70804 */
70805 for (i=0; i<64; i++) {
70806 // load up the input word for this round
70807 if (i<16) {
70808 tmp = w[i];
70809 } else {
70810 a = w[(i+1 ) & 15];
70811 b = w[(i+14) & 15];
70812 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
70813 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
70814 w[i&15] + w[(i+9) & 15]) | 0;
70815 }
70816
70817 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
70818
70819 // shift register
70820 h7 = h6; h6 = h5; h5 = h4;
70821 h4 = h3 + tmp | 0;
70822 h3 = h2; h2 = h1; h1 = h0;
70823
70824 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
70825 }
70826
70827 h[0] = h[0]+h0 | 0;
70828 h[1] = h[1]+h1 | 0;
70829 h[2] = h[2]+h2 | 0;
70830 h[3] = h[3]+h3 | 0;
70831 h[4] = h[4]+h4 | 0;
70832 h[5] = h[5]+h5 | 0;
70833 h[6] = h[6]+h6 | 0;
70834 h[7] = h[7]+h7 | 0;
70835 }
70836};
dc55c6b0 70837</script>
ab78acc6 70838 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 70839WORDLISTS["english"] = [
ebd8d4e8
IC
70840"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
70841"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
70842"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
70843"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
70844"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
70845"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
70846"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
70847"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
70848"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
70849"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
70850"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
70851"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
70852"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
70853"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
70854"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
70855"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
70856"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
70857"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
70858"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
70859"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
70860"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
70861"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
70862"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
70863"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
70864"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
70865"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
70866"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
70867"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
70868"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
70869"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
70870"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
70871"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
70872"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
70873"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
70874"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
70875"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
70876"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
70877"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
70878"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
70879"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
70880"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
70881"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
70882"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
70883"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
70884"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
70885"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
70886"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
70887"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
70888"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
70889"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
70890"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
70891"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
70892"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
70893"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
70894"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
70895"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
70896"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
70897"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
70898"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
70899"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
70900"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
70901"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
70902"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
70903"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
70904"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
70905"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
70906"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
70907"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
70908"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
70909"film","filter","final","find","fine","finger","finish","fire","firm","first",
70910"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
70911"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
70912"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
70913"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
70914"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
70915"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
70916"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
70917"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
70918"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
70919"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
70920"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
70921"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
70922"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
70923"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
70924"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
70925"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
70926"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
70927"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
70928"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
70929"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
70930"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
70931"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
70932"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
70933"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
70934"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
70935"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
70936"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
70937"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
70938"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
70939"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
70940"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
70941"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
70942"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
70943"liar","liberty","library","license","life","lift","light","like","limb","limit",
70944"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
70945"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
70946"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
70947"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
70948"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
70949"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
70950"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
70951"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
70952"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
70953"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
70954"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
70955"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
70956"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
70957"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
70958"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
70959"network","neutral","never","news","next","nice","night","noble","noise","nominee",
70960"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
70961"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
70962"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
70963"oil","okay","old","olive","olympic","omit","once","one","onion","online",
70964"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
70965"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
70966"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
70967"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
70968"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
70969"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
70970"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
70971"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
70972"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
70973"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
70974"pole","police","pond","pony","pool","popular","portion","position","possible","post",
70975"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
70976"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
70977"prize","problem","process","produce","profit","program","project","promote","proof","property",
70978"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
70979"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
70980"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
70981"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
70982"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
70983"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
70984"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
70985"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
70986"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
70987"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
70988"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
70989"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
70990"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
70991"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
70992"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
70993"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
70994"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
70995"scrub","sea","search","season","seat","second","secret","section","security","seed",
70996"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
70997"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
70998"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
70999"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
71000"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
71001"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
71002"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
71003"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
71004"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
71005"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
71006"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
71007"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
71008"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
71009"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
71010"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
71011"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
71012"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
71013"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
71014"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
71015"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
71016"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
71017"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
71018"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
71019"thank","that","theme","then","theory","there","they","thing","this","thought",
71020"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
71021"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
71022"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
71023"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
71024"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
71025"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
71026"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
71027"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
71028"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
71029"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
71030"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
71031"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
71032"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
71033"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
71034"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
71035"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
71036"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
71037"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
71038"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
71039"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
71040"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
71041"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
71042"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
71043"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
71044"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
71045</script>
71046 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71047WORDLISTS["japanese"] = [
71048"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
71049"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
71050"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
71051"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
71052"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
71053"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
71054"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
71055"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
71056"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
71057"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
71058"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
71059"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
71060"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
71061"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
71062"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
71063"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
71064"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
71065"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
71066"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
71067"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
71068"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
71069"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
71070"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
71071"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
71072"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
71073"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
71074"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
71075"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
71076"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
71077"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
71078"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
71079"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
71080"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
71081"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
71082"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
71083"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
71084"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
71085"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
71086"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
71087"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
71088"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
71089"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
71090"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
71091"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
71092"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
71093"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
71094"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
71095"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
71096"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
71097"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
71098"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
71099"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
71100"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
71101"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
71102"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
71103"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
71104"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
71105"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
71106"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
71107"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
71108"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
71109"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
71110"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
71111"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
71112"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
71113"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
71114"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
71115"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
71116"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
71117"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
71118"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
71119"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
71120"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
71121"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
71122"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
71123"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
71124"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
71125"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
71126"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
71127"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
71128"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
71129"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
71130"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
71131"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
71132"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
71133"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
71134"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
71135"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
71136"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
71137"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
71138"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
71139"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
71140"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
71141"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
71142"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
71143"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
71144"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
71145"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
71146"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
71147"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
71148"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
71149"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
71150"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
71151"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
71152"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
71153"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
71154"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
71155"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
71156"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
71157"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
71158"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
71159"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
71160"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
71161"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
71162"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
71163"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
71164"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
71165"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
71166"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
71167"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
71168"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
71169"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
71170"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
71171"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
71172"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
71173"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
71174"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
71175"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
71176"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
71177"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
71178"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
71179"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
71180"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
71181"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
71182"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
71183"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
71184"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
71185"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
71186"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
71187"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
71188"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
71189"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
71190"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
71191"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
71192"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
71193"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
71194"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
71195"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
71196"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
71197"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
71198"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
71199"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
71200"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
71201"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
71202"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
71203"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
71204"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
71205"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
71206"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
71207"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
71208"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
71209"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
71210"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
71211"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
71212"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
71213"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
71214"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
71215"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
71216"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
71217"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
71218"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
71219"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
71220"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
71221"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
71222"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
71223"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
71224"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
71225"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
71226"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
71227"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
71228"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
71229"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
71230"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
71231"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
71232"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
71233"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
71234"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
71235"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
71236"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
71237"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
71238"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
71239"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
71240"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
71241"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
71242"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
71243"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
71244"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
71245"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
71246"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
71247"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
71248"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
71249"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
71250"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
71251"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
71252"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
71253</script>
71254 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71255WORDLISTS["spanish"] = [
71256"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
71257"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
71258"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
71259"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
71260"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
71261"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
71262"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
71263"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
71264"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
71265"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
71266"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
71267"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
71268"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
71269"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
71270"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
71271"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
71272"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
71273"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
71274"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
71275"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
71276"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
71277"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
71278"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
71279"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
71280"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
71281"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
71282"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
71283"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
71284"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
71285"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
71286"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
71287"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
71288"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
71289"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
71290"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
71291"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
71292"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
71293"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
71294"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
71295"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
71296"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
71297"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
71298"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
71299"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
71300"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
71301"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
71302"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
71303"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
71304"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
71305"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
71306"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
71307"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
71308"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
71309"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
71310"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
71311"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
71312"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
71313"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
71314"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
71315"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
71316"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
71317"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
71318"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
71319"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
71320"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
71321"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
71322"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
71323"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
71324"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
71325"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
71326"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
71327"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
71328"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
71329"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
71330"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
71331"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
71332"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
71333"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
71334"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
71335"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
71336"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
71337"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
71338"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
71339"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
71340"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
71341"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
71342"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
71343"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
71344"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
71345"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
71346"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
71347"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
71348"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
71349"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
71350"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
71351"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
71352"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
71353"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
71354"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
71355"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
71356"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
71357"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
71358"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
71359"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
71360"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
71361"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
71362"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
71363"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
71364"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
71365"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
71366"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
71367"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
71368"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
71369"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
71370"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
71371"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
71372"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
71373"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
71374"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
71375"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
71376"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
71377"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
71378"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
71379"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
71380"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
71381"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
71382"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
71383"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
71384"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
71385"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
71386"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
71387"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
71388"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
71389"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
71390"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
71391"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
71392"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
71393"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
71394"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
71395"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
71396"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
71397"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
71398"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
71399"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
71400"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
71401"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
71402"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
71403"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
71404"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
71405"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
71406"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
71407"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
71408"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
71409"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
71410"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
71411"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
71412"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
71413"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
71414"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
71415"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
71416"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
71417"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
71418"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
71419"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
71420"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
71421"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
71422"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
71423"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
71424"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
71425"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
71426"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
71427"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
71428"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
71429"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
71430"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
71431"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
71432"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
71433"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
71434"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
71435"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
71436"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
71437"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
71438"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
71439"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
71440"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
71441"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
71442"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
71443"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
71444"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
71445"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
71446"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
71447"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
71448"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
71449"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
71450"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
71451"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
71452"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
71453"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
71454"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
71455"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
71456"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
71457"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
71458"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
71459"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
71460"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
71461</script>
71462 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71463WORDLISTS["chinese_simplified"] = [
71464"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
71465"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
71466"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
71467"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
71468"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
71469"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
71470"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
71471"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
71472"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
71473"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
71474"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
71475"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
71476"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
71477"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
71478"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
71479"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
71480"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
71481"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
71482"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
71483"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
71484"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
71485"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
71486"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
71487"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
71488"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
71489"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
71490"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
71491"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
71492"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
71493"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
71494"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
71495"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
71496"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
71497"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
71498"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
71499"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
71500"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
71501"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
71502"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
71503"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
71504"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
71505"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
71506"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
71507"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
71508"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
71509"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
71510"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
71511"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
71512"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
71513"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
71514"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
71515"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
71516"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
71517"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
71518"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
71519"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
71520"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
71521"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
71522"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
71523"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
71524"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
71525"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
71526"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
71527"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
71528"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
71529"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
71530"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
71531"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
71532"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
71533"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
71534"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
71535"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
71536"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
71537"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
71538"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
71539"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
71540"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
71541"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
71542"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
71543"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
71544"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
71545"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
71546"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
71547"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
71548"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
71549"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
71550"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
71551"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
71552"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
71553"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
71554"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
71555"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
71556"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
71557"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
71558"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
71559"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
71560"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
71561"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
71562"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
71563"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
71564"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
71565"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
71566"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
71567"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
71568"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
71569"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
71570"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
71571"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
71572"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
71573"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
71574"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
71575"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
71576"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
71577"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
71578"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
71579"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
71580"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
71581"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
71582"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
71583"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
71584"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
71585"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
71586"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
71587"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
71588"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
71589"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
71590"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
71591"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
71592"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
71593"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
71594"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
71595"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
71596"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
71597"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
71598"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
71599"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
71600"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
71601"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
71602"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
71603"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
71604"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
71605"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
71606"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
71607"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
71608"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
71609"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
71610"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
71611"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
71612"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
71613"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
71614"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
71615"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
71616"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
71617"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
71618"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
71619"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
71620"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
71621"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
71622"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
71623"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
71624"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
71625"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
71626"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
71627"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
71628"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
71629"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
71630"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
71631"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
71632"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
71633"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
71634"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
71635"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
71636"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
71637"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
71638"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
71639"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
71640"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
71641"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
71642"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
71643"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
71644"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
71645"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
71646"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
71647"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
71648"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
71649"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
71650"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
71651"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
71652"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
71653"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
71654"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
71655"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
71656"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
71657"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
71658"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
71659"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
71660"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
71661"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
71662"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
71663"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
71664"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
71665"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
71666"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
71667"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
71668"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
71669</script>
71670 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71671WORDLISTS["chinese_traditional"] = [
71672"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
71673"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
71674"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
71675"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
71676"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
71677"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
71678"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
71679"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
71680"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
71681"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
71682"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
71683"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
71684"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
71685"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
71686"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
71687"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
71688"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
71689"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
71690"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
71691"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
71692"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
71693"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
71694"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
71695"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
71696"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
71697"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
71698"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
71699"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
71700"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
71701"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
71702"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
71703"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
71704"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
71705"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
71706"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
71707"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
71708"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
71709"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
71710"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
71711"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
71712"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
71713"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
71714"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
71715"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
71716"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
71717"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
71718"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
71719"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
71720"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
71721"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
71722"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
71723"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
71724"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
71725"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
71726"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
71727"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
71728"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
71729"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
71730"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
71731"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
71732"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
71733"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
71734"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
71735"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
71736"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
71737"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
71738"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
71739"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
71740"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
71741"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
71742"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
71743"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
71744"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
71745"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
71746"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
71747"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
71748"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
71749"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
71750"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
71751"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
71752"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
71753"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
71754"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
71755"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
71756"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
71757"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
71758"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
71759"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
71760"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
71761"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
71762"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
71763"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
71764"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
71765"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
71766"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
71767"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
71768"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
71769"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
71770"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
71771"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
71772"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
71773"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
71774"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
71775"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
71776"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
71777"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
71778"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
71779"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
71780"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
71781"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
71782"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
71783"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
71784"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
71785"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
71786"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
71787"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
71788"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
71789"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
71790"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
71791"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
71792"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
71793"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
71794"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
71795"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
71796"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
71797"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
71798"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
71799"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
71800"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
71801"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
71802"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
71803"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
71804"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
71805"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
71806"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
71807"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
71808"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
71809"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
71810"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
71811"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
71812"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
71813"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
71814"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
71815"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
71816"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
71817"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
71818"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
71819"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
71820"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
71821"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
71822"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
71823"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
71824"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
71825"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
71826"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
71827"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
71828"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
71829"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
71830"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
71831"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
71832"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
71833"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
71834"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
71835"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
71836"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
71837"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
71838"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
71839"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
71840"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
71841"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
71842"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
71843"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
71844"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
71845"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
71846"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
71847"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
71848"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
71849"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
71850"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
71851"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
71852"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
71853"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
71854"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
71855"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
71856"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
71857"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
71858"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
71859"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
71860"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
71861"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
71862"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
71863"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
71864"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
71865"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
71866"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
71867"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
71868"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
71869"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
71870"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
71871"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
71872"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
71873"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
71874"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
71875"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
71876"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
71877</script>
71878 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71879WORDLISTS["french"] = [
71880"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
71881"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
71882"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
71883"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
71884"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
71885"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
71886"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
71887"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
71888"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
71889"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
71890"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
71891"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
71892"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
71893"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
71894"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
71895"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
71896"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
71897"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
71898"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
71899"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
71900"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
71901"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
71902"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
71903"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
71904"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
71905"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
71906"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
71907"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
71908"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
71909"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
71910"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
71911"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
71912"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
71913"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
71914"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
71915"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
71916"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
71917"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
71918"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
71919"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
71920"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
71921"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
71922"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
71923"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
71924"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
71925"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
71926"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
71927"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
71928"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
71929"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
71930"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
71931"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
71932"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
71933"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
71934"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
71935"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
71936"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
71937"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
71938"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
71939"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
71940"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
71941"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
71942"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
71943"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
71944"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
71945"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
71946"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
71947"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
71948"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
71949"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
71950"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
71951"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
71952"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
71953"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
71954"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
71955"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
71956"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
71957"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
71958"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
71959"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
71960"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
71961"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
71962"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
71963"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
71964"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
71965"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
71966"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
71967"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
71968"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
71969"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
71970"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
71971"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
71972"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
71973"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
71974"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
71975"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
71976"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
71977"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
71978"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
71979"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
71980"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
71981"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
71982"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
71983"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
71984"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
71985"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
71986"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
71987"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
71988"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
71989"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
71990"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
71991"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
71992"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
71993"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
71994"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
71995"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
71996"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
71997"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
71998"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
71999"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
72000"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
72001"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
72002"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
72003"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
72004"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
72005"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
72006"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
72007"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
72008"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
72009"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
72010"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
72011"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
72012"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
72013"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
72014"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
72015"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
72016"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
72017"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
72018"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
72019"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
72020"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
72021"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
72022"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
72023"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
72024"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
72025"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
72026"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
72027"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
72028"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
72029"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
72030"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
72031"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
72032"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
72033"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
72034"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
72035"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
72036"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
72037"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
72038"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
72039"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
72040"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
72041"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
72042"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
72043"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
72044"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
72045"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
72046"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
72047"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
72048"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
72049"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
72050"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
72051"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
72052"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
72053"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
72054"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
72055"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
72056"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
72057"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
72058"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
72059"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
72060"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
72061"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
72062"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
72063"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
72064"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
72065"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
72066"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
72067"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
72068"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
72069"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
72070"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
72071"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
72072"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
72073"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
72074"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
72075"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
72076"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
72077"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
72078"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
72079"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
72080"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
72081"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
72082"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
72083"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
72084"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
72085</script>
72086 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
72087WORDLISTS["italian"] = [
72088"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
72089"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
72090"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
72091"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
72092"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
72093"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
72094"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
72095"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
72096"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
72097"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
72098"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
72099"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
72100"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
72101"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
72102"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
72103"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
72104"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
72105"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
72106"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
72107"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
72108"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
72109"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
72110"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
72111"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
72112"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
72113"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
72114"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
72115"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
72116"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
72117"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
72118"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
72119"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
72120"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
72121"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
72122"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
72123"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
72124"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
72125"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
72126"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
72127"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
72128"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
72129"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
72130"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
72131"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
72132"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
72133"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
72134"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
72135"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
72136"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
72137"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
72138"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
72139"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
72140"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
72141"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
72142"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
72143"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
72144"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
72145"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
72146"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
72147"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
72148"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
72149"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
72150"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
72151"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
72152"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
72153"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
72154"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
72155"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
72156"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
72157"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
72158"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
72159"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
72160"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
72161"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
72162"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
72163"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
72164"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
72165"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
72166"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
72167"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
72168"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
72169"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
72170"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
72171"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
72172"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
72173"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
72174"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
72175"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
72176"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
72177"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
72178"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
72179"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
72180"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
72181"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
72182"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
72183"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
72184"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
72185"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
72186"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
72187"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
72188"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
72189"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
72190"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
72191"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
72192"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
72193"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
72194"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
72195"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
72196"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
72197"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
72198"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
72199"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
72200"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
72201"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
72202"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
72203"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
72204"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
72205"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
72206"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
72207"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
72208"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
72209"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
72210"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
72211"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
72212"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
72213"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
72214"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
72215"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
72216"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
72217"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
72218"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
72219"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
72220"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
72221"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
72222"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
72223"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
72224"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
72225"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
72226"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
72227"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
72228"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
72229"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
72230"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
72231"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
72232"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
72233"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
72234"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
72235"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
72236"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
72237"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
72238"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
72239"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
72240"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
72241"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
72242"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
72243"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
72244"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
72245"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
72246"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
72247"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
72248"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
72249"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
72250"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
72251"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
72252"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
72253"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
72254"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
72255"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
72256"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
72257"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
72258"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
72259"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
72260"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
72261"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
72262"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
72263"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
72264"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
72265"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
72266"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
72267"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
72268"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
72269"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
72270"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
72271"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
72272"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
72273"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
72274"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
72275"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
72276"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
72277"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
72278"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
72279"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
72280"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
72281"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
72282"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
72283"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
72284"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
72285"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
72286"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
72287"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
72288"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
72289"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
72290"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
72291"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
72292"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 72293</script>
ab78acc6 72294 <script>/*
3af2954a
IC
72295 * Copyright (c) 2013 Pavol Rusnak
72296 *
72297 * Permission is hereby granted, free of charge, to any person obtaining a copy of
72298 * this software and associated documentation files (the "Software"), to deal in
72299 * the Software without restriction, including without limitation the rights to
72300 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
72301 * of the Software, and to permit persons to whom the Software is furnished to do
72302 * so, subject to the following conditions:
72303 *
72304 * The above copyright notice and this permission notice shall be included in all
72305 * copies or substantial portions of the Software.
72306 *
72307 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
72308 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
72309 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
72310 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
72311 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
72312 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
72313 */
72314
72315/*
72316 * Javascript port from python by Ian Coleman
72317 *
80c4dd2a
IC
72318 * Requires code from sjcl
72319 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
72320 */
72321
72322var Mnemonic = function(language) {
72323
72324 var PBKDF2_ROUNDS = 2048;
72325 var RADIX = 2048;
72326
72327 var self = this;
72328 var wordlist = [];
72329
80c4dd2a
IC
72330 var hmacSHA512 = function(key) {
72331 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
72332 this.encrypt = function() {
72333 return hasher.encrypt.apply(hasher, arguments);
72334 };
72335 };
72336
3af2954a
IC
72337 function init() {
72338 wordlist = WORDLISTS[language];
72339 if (wordlist.length != RADIX) {
72340 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
72341 throw err;
72342 }
72343 }
72344
72345 self.generate = function(strength) {
72346 strength = strength || 128;
72347 var r = strength % 32;
72348 if (r > 0) {
72349 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
72350 }
72351 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
72352 if (!hasStrongCrypto) {
72353 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
72354 }
72355 var buffer = new Uint8Array(strength / 8);
72356 var data = crypto.getRandomValues(buffer);
72357 return self.toMnemonic(data);
72358 }
72359
80c4dd2a
IC
72360 self.toMnemonic = function(byteArray) {
72361 if (byteArray.length % 4 > 0) {
72362 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
72363 }
72364
72365 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
72366 var data = byteArrayToWordArray(byteArray);
72367 var hash = sjcl.hash.sha256.hash(data);
72368 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
72369
72370 // b is a binary string, eg '00111010101100...'
72371 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
72372 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
72373 //
72374 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
72375 // c = bin(int(h, 16))[2:].zfill(256)
72376 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
72377 var a = byteArrayToBinaryString(byteArray);
72378 var c = zfill(hexStringToBinaryString(h), 256);
72379 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
72380 // b = line1 + line2
72381 var b = a + d;
72382
72383 var result = [];
72384 var blen = b.length / 11;
72385 for (var i=0; i<blen; i++) {
72386 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
72387 result.push(wordlist[idx]);
72388 }
0515eeec 72389 return self.joinWords(result);
3af2954a
IC
72390 }
72391
72392 self.check = function(mnemonic) {
0515eeec 72393 var mnemonic = self.splitWords(mnemonic);
18abe53b 72394 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
72395 return false
72396 }
72397 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
72398 var idx = [];
72399 for (var i=0; i<mnemonic.length; i++) {
72400 var word = mnemonic[i];
72401 var wordIndex = wordlist.indexOf(word);
72402 if (wordIndex == -1) {
72403 return false;
72404 }
72405 var binaryIndex = zfill(wordIndex.toString(2), 11);
72406 idx.push(binaryIndex);
72407 }
72408 var b = idx.join('');
72409 var l = b.length;
72410 //d = b[:l / 33 * 32]
72411 //h = b[-l / 33:]
72412 var d = b.substring(0, l / 33 * 32);
72413 var h = b.substring(l - l / 33, l);
72414 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 72415 var nd = binaryStringToWordArray(d);
3af2954a 72416 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
72417 var ndHash = sjcl.hash.sha256.hash(nd);
72418 var ndHex = sjcl.codec.hex.fromBits(ndHash);
72419 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
72420 var nh = ndBstr.substring(0,l/33);
72421 return h == nh;
72422 }
72423
72424 self.toSeed = function(mnemonic, passphrase) {
72425 passphrase = passphrase || '';
599fb39e
IC
72426 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
72427 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
72428 passphrase = self.normalizeString(passphrase)
72429 passphrase = "mnemonic" + passphrase;
599fb39e 72430 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
72431 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
72432 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
72433 var hashHex = sjcl.codec.hex.fromBits(result);
72434 return hashHex;
3af2954a
IC
72435 }
72436
0515eeec
IC
72437 self.splitWords = function(mnemonic) {
72438 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
72439 }
72440
72441 self.joinWords = function(words) {
72442 // Set space correctly depending on the language
72443 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
72444 var space = " ";
72445 if (language == "japanese") {
72446 space = "\u3000"; // ideographic space
72447 }
72448 return words.join(space);
72449 }
72450
3af2954a
IC
72451 self.normalizeString = function(str) {
72452 if (typeof str.normalize == "function") {
72453 return str.normalize("NFKD");
72454 }
72455 else {
72456 // TODO decide how to handle this in the future.
72457 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
72458 return str;
72459 }
72460 }
72461
80c4dd2a
IC
72462 function byteArrayToWordArray(data) {
72463 var a = [];
72464 for (var i=0; i<data.length/4; i++) {
72465 v = 0;
72466 v += data[i*4 + 0] << 8 * 3;
72467 v += data[i*4 + 1] << 8 * 2;
72468 v += data[i*4 + 2] << 8 * 1;
72469 v += data[i*4 + 3] << 8 * 0;
72470 a.push(v);
72471 }
72472 return a;
72473 }
72474
3af2954a
IC
72475 function byteArrayToBinaryString(data) {
72476 var bin = "";
72477 for (var i=0; i<data.length; i++) {
72478 bin += zfill(data[i].toString(2), 8);
72479 }
72480 return bin;
72481 }
72482
80c4dd2a
IC
72483 function hexStringToBinaryString(hexString) {
72484 binaryString = "";
72485 for (var i=0; i<hexString.length; i++) {
72486 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
72487 }
72488 return binaryString;
72489 }
72490
72491 function binaryStringToWordArray(binary) {
72492 var aLen = binary.length / 32;
72493 var a = [];
72494 for (var i=0; i<aLen; i++) {
72495 var valueStr = binary.substring(0,32);
3af2954a 72496 var value = parseInt(valueStr, 2);
80c4dd2a
IC
72497 a.push(value);
72498 binary = binary.slice(32);
3af2954a 72499 }
80c4dd2a 72500 return a;
3af2954a
IC
72501 }
72502
72503 // Pad a numeric string on the left with zero digits until the given width
72504 // is reached.
72505 // Note this differs to the python implementation because it does not
72506 // handle numbers starting with a sign.
72507 function zfill(source, length) {
72508 source = source.toString();
72509 while (source.length < length) {
72510 source = '0' + source;
72511 }
72512 return source;
72513 }
72514
72515 init();
ebd8d4e8 72516
3af2954a 72517}
dc55c6b0 72518</script>
95f04905
IC
72519 <script>/*
72520 JavaScript BigInteger library version 0.9.1
72521 http://silentmatt.com/biginteger/
18abe53b 72522
95f04905
IC
72523 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
72524 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
72525 Licensed under the MIT license.
c6624d51 72526
95f04905
IC
72527 Support for arbitrary internal representation base was added by
72528 Vitaly Magerya.
72529*/
18abe53b 72530
95f04905
IC
72531/*
72532 File: biginteger.js
18abe53b 72533
95f04905 72534 Exports:
18abe53b 72535
95f04905
IC
72536 <BigInteger>
72537*/
72538(function(exports) {
72539"use strict";
72540/*
72541 Class: BigInteger
72542 An arbitrarily-large integer.
18abe53b 72543
95f04905
IC
72544 <BigInteger> objects should be considered immutable. None of the "built-in"
72545 methods modify *this* or their arguments. All properties should be
72546 considered private.
18abe53b 72547
95f04905
IC
72548 All the methods of <BigInteger> instances can be called "statically". The
72549 static versions are convenient if you don't already have a <BigInteger>
72550 object.
18abe53b 72551
95f04905 72552 As an example, these calls are equivalent.
18abe53b 72553
95f04905
IC
72554 > BigInteger(4).multiply(5); // returns BigInteger(20);
72555 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 72556
95f04905
IC
72557 > var a = 42;
72558 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
72559*/
c6624d51 72560
95f04905 72561var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
72562
72563/*
72564 Constructor: BigInteger()
72565 Convert a value to a <BigInteger>.
72566
72567 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
72568 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
72569 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
72570 without a radix argument.
72571
72572 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
72573 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
72574 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
72575 > var n3 = BigInteger(n2); // Return n2, unchanged
72576
72577 The constructor form only takes an array and a sign. *n* must be an
72578 array of numbers in little-endian order, where each digit is between 0
72579 and BigInteger.base. The second parameter sets the sign: -1 for
72580 negative, +1 for positive, or 0 for zero. The array is *not copied and
72581 may be modified*. If the array contains only zeros, the sign parameter
72582 is ignored and is forced to zero.
72583
72584 > new BigInteger([5], -1): create a new BigInteger with value -5
72585
72586 Parameters:
72587
72588 n - Value to convert to a <BigInteger>.
72589
72590 Returns:
72591
72592 A <BigInteger> value.
72593
72594 See Also:
72595
72596 <parse>, <BigInteger>
72597*/
72598function BigInteger(n, s, token) {
72599 if (token !== CONSTRUCT) {
72600 if (n instanceof BigInteger) {
72601 return n;
72602 }
72603 else if (typeof n === "undefined") {
72604 return ZERO;
72605 }
72606 return BigInteger.parse(n);
72607 }
72608
72609 n = n || []; // Provide the nullary constructor for subclasses.
72610 while (n.length && !n[n.length - 1]) {
72611 --n.length;
72612 }
72613 this._d = n;
72614 this._s = n.length ? (s || 1) : 0;
72615}
72616
72617BigInteger._construct = function(n, s) {
72618 return new BigInteger(n, s, CONSTRUCT);
72619};
72620
72621// Base-10 speedup hacks in parse, toString, exp10 and log functions
72622// require base to be a power of 10. 10^7 is the largest such power
72623// that won't cause a precision loss when digits are multiplied.
72624var BigInteger_base = 10000000;
72625var BigInteger_base_log10 = 7;
72626
72627BigInteger.base = BigInteger_base;
72628BigInteger.base_log10 = BigInteger_base_log10;
72629
72630var ZERO = new BigInteger([], 0, CONSTRUCT);
72631// Constant: ZERO
72632// <BigInteger> 0.
72633BigInteger.ZERO = ZERO;
72634
72635var ONE = new BigInteger([1], 1, CONSTRUCT);
72636// Constant: ONE
72637// <BigInteger> 1.
72638BigInteger.ONE = ONE;
72639
72640var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
72641// Constant: M_ONE
72642// <BigInteger> -1.
72643BigInteger.M_ONE = M_ONE;
72644
72645// Constant: _0
72646// Shortcut for <ZERO>.
72647BigInteger._0 = ZERO;
72648
72649// Constant: _1
72650// Shortcut for <ONE>.
72651BigInteger._1 = ONE;
72652
72653/*
72654 Constant: small
72655 Array of <BigIntegers> from 0 to 36.
72656
72657 These are used internally for parsing, but useful when you need a "small"
72658 <BigInteger>.
72659
72660 See Also:
72661
72662 <ZERO>, <ONE>, <_0>, <_1>
72663*/
72664BigInteger.small = [
72665 ZERO,
72666 ONE,
72667 /* Assuming BigInteger_base > 36 */
72668 new BigInteger( [2], 1, CONSTRUCT),
72669 new BigInteger( [3], 1, CONSTRUCT),
72670 new BigInteger( [4], 1, CONSTRUCT),
72671 new BigInteger( [5], 1, CONSTRUCT),
72672 new BigInteger( [6], 1, CONSTRUCT),
72673 new BigInteger( [7], 1, CONSTRUCT),
72674 new BigInteger( [8], 1, CONSTRUCT),
72675 new BigInteger( [9], 1, CONSTRUCT),
72676 new BigInteger([10], 1, CONSTRUCT),
72677 new BigInteger([11], 1, CONSTRUCT),
72678 new BigInteger([12], 1, CONSTRUCT),
72679 new BigInteger([13], 1, CONSTRUCT),
72680 new BigInteger([14], 1, CONSTRUCT),
72681 new BigInteger([15], 1, CONSTRUCT),
72682 new BigInteger([16], 1, CONSTRUCT),
72683 new BigInteger([17], 1, CONSTRUCT),
72684 new BigInteger([18], 1, CONSTRUCT),
72685 new BigInteger([19], 1, CONSTRUCT),
72686 new BigInteger([20], 1, CONSTRUCT),
72687 new BigInteger([21], 1, CONSTRUCT),
72688 new BigInteger([22], 1, CONSTRUCT),
72689 new BigInteger([23], 1, CONSTRUCT),
72690 new BigInteger([24], 1, CONSTRUCT),
72691 new BigInteger([25], 1, CONSTRUCT),
72692 new BigInteger([26], 1, CONSTRUCT),
72693 new BigInteger([27], 1, CONSTRUCT),
72694 new BigInteger([28], 1, CONSTRUCT),
72695 new BigInteger([29], 1, CONSTRUCT),
72696 new BigInteger([30], 1, CONSTRUCT),
72697 new BigInteger([31], 1, CONSTRUCT),
72698 new BigInteger([32], 1, CONSTRUCT),
72699 new BigInteger([33], 1, CONSTRUCT),
72700 new BigInteger([34], 1, CONSTRUCT),
72701 new BigInteger([35], 1, CONSTRUCT),
72702 new BigInteger([36], 1, CONSTRUCT)
72703];
72704
72705// Used for parsing/radix conversion
72706BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
72707
72708/*
72709 Method: toString
72710 Convert a <BigInteger> to a string.
72711
72712 When *base* is greater than 10, letters are upper case.
72713
72714 Parameters:
72715
72716 base - Optional base to represent the number in (default is base 10).
72717 Must be between 2 and 36 inclusive, or an Error will be thrown.
72718
72719 Returns:
72720
72721 The string representation of the <BigInteger>.
72722*/
72723BigInteger.prototype.toString = function(base) {
72724 base = +base || 10;
72725 if (base < 2 || base > 36) {
72726 throw new Error("illegal radix " + base + ".");
72727 }
72728 if (this._s === 0) {
72729 return "0";
72730 }
72731 if (base === 10) {
72732 var str = this._s < 0 ? "-" : "";
72733 str += this._d[this._d.length - 1].toString();
72734 for (var i = this._d.length - 2; i >= 0; i--) {
72735 var group = this._d[i].toString();
72736 while (group.length < BigInteger_base_log10) group = '0' + group;
72737 str += group;
72738 }
72739 return str;
72740 }
72741 else {
72742 var numerals = BigInteger.digits;
72743 base = BigInteger.small[base];
72744 var sign = this._s;
72745
72746 var n = this.abs();
72747 var digits = [];
72748 var digit;
72749
72750 while (n._s !== 0) {
72751 var divmod = n.divRem(base);
72752 n = divmod[0];
72753 digit = divmod[1];
72754 // TODO: This could be changed to unshift instead of reversing at the end.
72755 // Benchmark both to compare speeds.
72756 digits.push(numerals[digit.valueOf()]);
72757 }
72758 return (sign < 0 ? "-" : "") + digits.reverse().join("");
72759 }
72760};
72761
72762// Verify strings for parsing
72763BigInteger.radixRegex = [
72764 /^$/,
72765 /^$/,
72766 /^[01]*$/,
72767 /^[012]*$/,
72768 /^[0-3]*$/,
72769 /^[0-4]*$/,
72770 /^[0-5]*$/,
72771 /^[0-6]*$/,
72772 /^[0-7]*$/,
72773 /^[0-8]*$/,
72774 /^[0-9]*$/,
72775 /^[0-9aA]*$/,
72776 /^[0-9abAB]*$/,
72777 /^[0-9abcABC]*$/,
72778 /^[0-9a-dA-D]*$/,
72779 /^[0-9a-eA-E]*$/,
72780 /^[0-9a-fA-F]*$/,
72781 /^[0-9a-gA-G]*$/,
72782 /^[0-9a-hA-H]*$/,
72783 /^[0-9a-iA-I]*$/,
72784 /^[0-9a-jA-J]*$/,
72785 /^[0-9a-kA-K]*$/,
72786 /^[0-9a-lA-L]*$/,
72787 /^[0-9a-mA-M]*$/,
72788 /^[0-9a-nA-N]*$/,
72789 /^[0-9a-oA-O]*$/,
72790 /^[0-9a-pA-P]*$/,
72791 /^[0-9a-qA-Q]*$/,
72792 /^[0-9a-rA-R]*$/,
72793 /^[0-9a-sA-S]*$/,
72794 /^[0-9a-tA-T]*$/,
72795 /^[0-9a-uA-U]*$/,
72796 /^[0-9a-vA-V]*$/,
72797 /^[0-9a-wA-W]*$/,
72798 /^[0-9a-xA-X]*$/,
72799 /^[0-9a-yA-Y]*$/,
72800 /^[0-9a-zA-Z]*$/
72801];
72802
72803/*
72804 Function: parse
72805 Parse a string into a <BigInteger>.
72806
72807 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
72808 *base* is not provided, it will be guessed based on the leading characters
72809 of *s* as follows:
72810
72811 - "0x" or "0X": *base* = 16
72812 - "0c" or "0C": *base* = 8
72813 - "0b" or "0B": *base* = 2
72814 - else: *base* = 10
72815
72816 If no base is provided, or *base* is 10, the number can be in exponential
72817 form. For example, these are all valid:
72818
72819 > BigInteger.parse("1e9"); // Same as "1000000000"
72820 > BigInteger.parse("1.234*10^3"); // Same as 1234
72821 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
72822
72823 If any characters fall outside the range defined by the radix, an exception
72824 will be thrown.
72825
72826 Parameters:
72827
72828 s - The string to parse.
72829 base - Optional radix (default is to guess based on *s*).
72830
72831 Returns:
72832
72833 a <BigInteger> instance.
72834*/
72835BigInteger.parse = function(s, base) {
72836 // Expands a number in exponential form to decimal form.
72837 // expandExponential("-13.441*10^5") === "1344100";
72838 // expandExponential("1.12300e-1") === "0.112300";
72839 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
72840 function expandExponential(str) {
72841 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
72842
72843 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
72844 c = +c;
72845 var l = c < 0;
72846 var i = n.length + c;
72847 x = (l ? n : f).length;
72848 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
72849 var z = (new Array(c + 1)).join("0");
72850 var r = n + f;
72851 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
72852 });
72853 }
72854
72855 s = s.toString();
72856 if (typeof base === "undefined" || +base === 10) {
72857 s = expandExponential(s);
72858 }
72859
72860 var prefixRE;
72861 if (typeof base === "undefined") {
72862 prefixRE = '0[xcb]';
72863 }
72864 else if (base == 16) {
72865 prefixRE = '0x';
72866 }
72867 else if (base == 8) {
72868 prefixRE = '0c';
72869 }
72870 else if (base == 2) {
72871 prefixRE = '0b';
72872 }
72873 else {
72874 prefixRE = '';
72875 }
72876 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
72877 if (parts) {
72878 var sign = parts[1] || "+";
72879 var baseSection = parts[2] || "";
72880 var digits = parts[3] || "";
72881
72882 if (typeof base === "undefined") {
72883 // Guess base
72884 if (baseSection === "0x" || baseSection === "0X") { // Hex
72885 base = 16;
72886 }
72887 else if (baseSection === "0c" || baseSection === "0C") { // Octal
72888 base = 8;
72889 }
72890 else if (baseSection === "0b" || baseSection === "0B") { // Binary
72891 base = 2;
72892 }
72893 else {
72894 base = 10;
72895 }
72896 }
72897 else if (base < 2 || base > 36) {
72898 throw new Error("Illegal radix " + base + ".");
72899 }
72900
72901 base = +base;
72902
72903 // Check for digits outside the range
72904 if (!(BigInteger.radixRegex[base].test(digits))) {
72905 throw new Error("Bad digit for radix " + base);
72906 }
72907
72908 // Strip leading zeros, and convert to array
72909 digits = digits.replace(/^0+/, "").split("");
72910 if (digits.length === 0) {
72911 return ZERO;
72912 }
72913
72914 // Get the sign (we know it's not zero)
72915 sign = (sign === "-") ? -1 : 1;
72916
72917 // Optimize 10
72918 if (base == 10) {
72919 var d = [];
72920 while (digits.length >= BigInteger_base_log10) {
72921 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
72922 }
72923 d.push(parseInt(digits.join(''), 10));
72924 return new BigInteger(d, sign, CONSTRUCT);
72925 }
72926
72927 // Do the conversion
72928 var d = ZERO;
72929 base = BigInteger.small[base];
72930 var small = BigInteger.small;
72931 for (var i = 0; i < digits.length; i++) {
72932 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
72933 }
72934 return new BigInteger(d._d, sign, CONSTRUCT);
72935 }
72936 else {
72937 throw new Error("Invalid BigInteger format: " + s);
72938 }
72939};
72940
72941/*
72942 Function: add
72943 Add two <BigIntegers>.
72944
72945 Parameters:
72946
72947 n - The number to add to *this*. Will be converted to a <BigInteger>.
72948
72949 Returns:
72950
72951 The numbers added together.
72952
72953 See Also:
72954
72955 <subtract>, <multiply>, <quotient>, <next>
72956*/
72957BigInteger.prototype.add = function(n) {
72958 if (this._s === 0) {
72959 return BigInteger(n);
72960 }
72961
72962 n = BigInteger(n);
72963 if (n._s === 0) {
72964 return this;
72965 }
72966 if (this._s !== n._s) {
72967 n = n.negate();
72968 return this.subtract(n);
72969 }
72970
72971 var a = this._d;
72972 var b = n._d;
72973 var al = a.length;
72974 var bl = b.length;
72975 var sum = new Array(Math.max(al, bl) + 1);
72976 var size = Math.min(al, bl);
72977 var carry = 0;
72978 var digit;
72979
72980 for (var i = 0; i < size; i++) {
72981 digit = a[i] + b[i] + carry;
72982 sum[i] = digit % BigInteger_base;
72983 carry = (digit / BigInteger_base) | 0;
72984 }
72985 if (bl > al) {
72986 a = b;
72987 al = bl;
72988 }
72989 for (i = size; carry && i < al; i++) {
72990 digit = a[i] + carry;
72991 sum[i] = digit % BigInteger_base;
72992 carry = (digit / BigInteger_base) | 0;
72993 }
72994 if (carry) {
72995 sum[i] = carry;
72996 }
72997
72998 for ( ; i < al; i++) {
72999 sum[i] = a[i];
73000 }
73001
73002 return new BigInteger(sum, this._s, CONSTRUCT);
73003};
73004
73005/*
73006 Function: negate
73007 Get the additive inverse of a <BigInteger>.
73008
73009 Returns:
73010
73011 A <BigInteger> with the same magnatude, but with the opposite sign.
73012
73013 See Also:
73014
73015 <abs>
73016*/
73017BigInteger.prototype.negate = function() {
73018 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
73019};
73020
73021/*
73022 Function: abs
73023 Get the absolute value of a <BigInteger>.
73024
73025 Returns:
73026
73027 A <BigInteger> with the same magnatude, but always positive (or zero).
73028
73029 See Also:
73030
73031 <negate>
73032*/
73033BigInteger.prototype.abs = function() {
73034 return (this._s < 0) ? this.negate() : this;
73035};
73036
73037/*
73038 Function: subtract
73039 Subtract two <BigIntegers>.
73040
73041 Parameters:
73042
73043 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
73044
73045 Returns:
73046
73047 The *n* subtracted from *this*.
73048
73049 See Also:
73050
73051 <add>, <multiply>, <quotient>, <prev>
73052*/
73053BigInteger.prototype.subtract = function(n) {
73054 if (this._s === 0) {
73055 return BigInteger(n).negate();
73056 }
73057
73058 n = BigInteger(n);
73059 if (n._s === 0) {
73060 return this;
73061 }
73062 if (this._s !== n._s) {
73063 n = n.negate();
73064 return this.add(n);
73065 }
73066
73067 var m = this;
73068 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
73069 if (this._s < 0) {
73070 m = new BigInteger(n._d, 1, CONSTRUCT);
73071 n = new BigInteger(this._d, 1, CONSTRUCT);
73072 }
73073
73074 // Both are positive => a - b
73075 var sign = m.compareAbs(n);
73076 if (sign === 0) {
73077 return ZERO;
73078 }
73079 else if (sign < 0) {
73080 // swap m and n
73081 var t = n;
73082 n = m;
73083 m = t;
73084 }
73085
73086 // a > b
73087 var a = m._d;
73088 var b = n._d;
73089 var al = a.length;
73090 var bl = b.length;
73091 var diff = new Array(al); // al >= bl since a > b
73092 var borrow = 0;
73093 var i;
73094 var digit;
73095
73096 for (i = 0; i < bl; i++) {
73097 digit = a[i] - borrow - b[i];
73098 if (digit < 0) {
73099 digit += BigInteger_base;
73100 borrow = 1;
73101 }
73102 else {
73103 borrow = 0;
73104 }
73105 diff[i] = digit;
73106 }
73107 for (i = bl; i < al; i++) {
73108 digit = a[i] - borrow;
73109 if (digit < 0) {
73110 digit += BigInteger_base;
73111 }
73112 else {
73113 diff[i++] = digit;
73114 break;
73115 }
73116 diff[i] = digit;
73117 }
73118 for ( ; i < al; i++) {
73119 diff[i] = a[i];
73120 }
73121
73122 return new BigInteger(diff, sign, CONSTRUCT);
73123};
73124
73125(function() {
73126 function addOne(n, sign) {
73127 var a = n._d;
73128 var sum = a.slice();
73129 var carry = true;
73130 var i = 0;
73131
73132 while (true) {
73133 var digit = (a[i] || 0) + 1;
73134 sum[i] = digit % BigInteger_base;
73135 if (digit <= BigInteger_base - 1) {
73136 break;
73137 }
73138 ++i;
73139 }
73140
73141 return new BigInteger(sum, sign, CONSTRUCT);
73142 }
73143
73144 function subtractOne(n, sign) {
73145 var a = n._d;
73146 var sum = a.slice();
73147 var borrow = true;
73148 var i = 0;
73149
73150 while (true) {
73151 var digit = (a[i] || 0) - 1;
73152 if (digit < 0) {
73153 sum[i] = digit + BigInteger_base;
73154 }
73155 else {
73156 sum[i] = digit;
73157 break;
73158 }
73159 ++i;
73160 }
73161
73162 return new BigInteger(sum, sign, CONSTRUCT);
73163 }
73164
73165 /*
73166 Function: next
73167 Get the next <BigInteger> (add one).
73168
73169 Returns:
73170
73171 *this* + 1.
73172
73173 See Also:
73174
73175 <add>, <prev>
73176 */
73177 BigInteger.prototype.next = function() {
73178 switch (this._s) {
73179 case 0:
73180 return ONE;
73181 case -1:
73182 return subtractOne(this, -1);
73183 // case 1:
73184 default:
73185 return addOne(this, 1);
73186 }
73187 };
73188
73189 /*
73190 Function: prev
73191 Get the previous <BigInteger> (subtract one).
73192
73193 Returns:
73194
73195 *this* - 1.
73196
73197 See Also:
73198
73199 <next>, <subtract>
73200 */
73201 BigInteger.prototype.prev = function() {
73202 switch (this._s) {
73203 case 0:
73204 return M_ONE;
73205 case -1:
73206 return addOne(this, -1);
73207 // case 1:
73208 default:
73209 return subtractOne(this, 1);
73210 }
73211 };
73212})();
73213
73214/*
73215 Function: compareAbs
73216 Compare the absolute value of two <BigIntegers>.
73217
73218 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
73219
73220 Parameters:
73221
73222 n - The number to compare to *this*. Will be converted to a <BigInteger>.
73223
73224 Returns:
73225
73226 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
73227
73228 See Also:
73229
73230 <compare>, <abs>
73231*/
73232BigInteger.prototype.compareAbs = function(n) {
73233 if (this === n) {
73234 return 0;
73235 }
73236
73237 if (!(n instanceof BigInteger)) {
73238 if (!isFinite(n)) {
73239 return(isNaN(n) ? n : -1);
73240 }
73241 n = BigInteger(n);
73242 }
73243
73244 if (this._s === 0) {
73245 return (n._s !== 0) ? -1 : 0;
73246 }
73247 if (n._s === 0) {
73248 return 1;
73249 }
73250
73251 var l = this._d.length;
73252 var nl = n._d.length;
73253 if (l < nl) {
73254 return -1;
73255 }
73256 else if (l > nl) {
73257 return 1;
73258 }
73259
73260 var a = this._d;
73261 var b = n._d;
73262 for (var i = l-1; i >= 0; i--) {
73263 if (a[i] !== b[i]) {
73264 return a[i] < b[i] ? -1 : 1;
73265 }
73266 }
73267
73268 return 0;
73269};
73270
73271/*
73272 Function: compare
73273 Compare two <BigIntegers>.
73274
73275 Parameters:
73276
73277 n - The number to compare to *this*. Will be converted to a <BigInteger>.
73278
73279 Returns:
73280
73281 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
73282
73283 See Also:
73284
73285 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
73286*/
73287BigInteger.prototype.compare = function(n) {
73288 if (this === n) {
73289 return 0;
73290 }
73291
73292 n = BigInteger(n);
73293
73294 if (this._s === 0) {
73295 return -n._s;
73296 }
73297
73298 if (this._s === n._s) { // both positive or both negative
73299 var cmp = this.compareAbs(n);
73300 return cmp * this._s;
73301 }
73302 else {
73303 return this._s;
73304 }
73305};
73306
73307/*
73308 Function: isUnit
73309 Return true iff *this* is either 1 or -1.
73310
73311 Returns:
73312
73313 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
73314
73315 See Also:
73316
73317 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
73318 <BigInteger.ONE>, <BigInteger.M_ONE>
73319*/
73320BigInteger.prototype.isUnit = function() {
73321 return this === ONE ||
73322 this === M_ONE ||
73323 (this._d.length === 1 && this._d[0] === 1);
73324};
73325
73326/*
73327 Function: multiply
73328 Multiply two <BigIntegers>.
73329
73330 Parameters:
73331
73332 n - The number to multiply *this* by. Will be converted to a
73333 <BigInteger>.
73334
73335 Returns:
73336
73337 The numbers multiplied together.
73338
73339 See Also:
73340
73341 <add>, <subtract>, <quotient>, <square>
73342*/
73343BigInteger.prototype.multiply = function(n) {
73344 // TODO: Consider adding Karatsuba multiplication for large numbers
73345 if (this._s === 0) {
73346 return ZERO;
73347 }
73348
73349 n = BigInteger(n);
73350 if (n._s === 0) {
73351 return ZERO;
73352 }
73353 if (this.isUnit()) {
73354 if (this._s < 0) {
73355 return n.negate();
73356 }
73357 return n;
73358 }
73359 if (n.isUnit()) {
73360 if (n._s < 0) {
73361 return this.negate();
73362 }
73363 return this;
73364 }
73365 if (this === n) {
73366 return this.square();
73367 }
73368
73369 var r = (this._d.length >= n._d.length);
73370 var a = (r ? this : n)._d; // a will be longer than b
73371 var b = (r ? n : this)._d;
73372 var al = a.length;
73373 var bl = b.length;
73374
73375 var pl = al + bl;
73376 var partial = new Array(pl);
73377 var i;
73378 for (i = 0; i < pl; i++) {
73379 partial[i] = 0;
73380 }
73381
73382 for (i = 0; i < bl; i++) {
73383 var carry = 0;
73384 var bi = b[i];
73385 var jlimit = al + i;
73386 var digit;
73387 for (var j = i; j < jlimit; j++) {
73388 digit = partial[j] + bi * a[j - i] + carry;
73389 carry = (digit / BigInteger_base) | 0;
73390 partial[j] = (digit % BigInteger_base) | 0;
73391 }
73392 if (carry) {
73393 digit = partial[j] + carry;
73394 carry = (digit / BigInteger_base) | 0;
73395 partial[j] = digit % BigInteger_base;
73396 }
73397 }
73398 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
73399};
73400
73401// Multiply a BigInteger by a single-digit native number
73402// Assumes that this and n are >= 0
73403// This is not really intended to be used outside the library itself
73404BigInteger.prototype.multiplySingleDigit = function(n) {
73405 if (n === 0 || this._s === 0) {
73406 return ZERO;
73407 }
73408 if (n === 1) {
73409 return this;
73410 }
73411
73412 var digit;
73413 if (this._d.length === 1) {
73414 digit = this._d[0] * n;
73415 if (digit >= BigInteger_base) {
73416 return new BigInteger([(digit % BigInteger_base)|0,
73417 (digit / BigInteger_base)|0], 1, CONSTRUCT);
73418 }
73419 return new BigInteger([digit], 1, CONSTRUCT);
73420 }
73421
73422 if (n === 2) {
73423 return this.add(this);
73424 }
73425 if (this.isUnit()) {
73426 return new BigInteger([n], 1, CONSTRUCT);
73427 }
73428
73429 var a = this._d;
73430 var al = a.length;
73431
73432 var pl = al + 1;
73433 var partial = new Array(pl);
73434 for (var i = 0; i < pl; i++) {
73435 partial[i] = 0;
73436 }
73437
73438 var carry = 0;
73439 for (var j = 0; j < al; j++) {
73440 digit = n * a[j] + carry;
73441 carry = (digit / BigInteger_base) | 0;
73442 partial[j] = (digit % BigInteger_base) | 0;
73443 }
73444 if (carry) {
73445 partial[j] = carry;
73446 }
73447
73448 return new BigInteger(partial, 1, CONSTRUCT);
73449};
73450
73451/*
73452 Function: square
73453 Multiply a <BigInteger> by itself.
73454
73455 This is slightly faster than regular multiplication, since it removes the
73456 duplicated multiplcations.
73457
73458 Returns:
73459
73460 > this.multiply(this)
73461
73462 See Also:
73463 <multiply>
73464*/
73465BigInteger.prototype.square = function() {
73466 // Normally, squaring a 10-digit number would take 100 multiplications.
73467 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
73468 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
73469 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
73470
73471 if (this._s === 0) {
73472 return ZERO;
73473 }
73474 if (this.isUnit()) {
73475 return ONE;
73476 }
73477
73478 var digits = this._d;
73479 var length = digits.length;
73480 var imult1 = new Array(length + length + 1);
73481 var product, carry, k;
73482 var i;
73483
73484 // Calculate diagonal
73485 for (i = 0; i < length; i++) {
73486 k = i * 2;
73487 product = digits[i] * digits[i];
73488 carry = (product / BigInteger_base) | 0;
73489 imult1[k] = product % BigInteger_base;
73490 imult1[k + 1] = carry;
73491 }
73492
73493 // Calculate repeating part
73494 for (i = 0; i < length; i++) {
73495 carry = 0;
73496 k = i * 2 + 1;
73497 for (var j = i + 1; j < length; j++, k++) {
73498 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
73499 carry = (product / BigInteger_base) | 0;
73500 imult1[k] = product % BigInteger_base;
73501 }
73502 k = length + i;
73503 var digit = carry + imult1[k];
73504 carry = (digit / BigInteger_base) | 0;
73505 imult1[k] = digit % BigInteger_base;
73506 imult1[k + 1] += carry;
73507 }
73508
73509 return new BigInteger(imult1, 1, CONSTRUCT);
73510};
73511
73512/*
73513 Function: quotient
73514 Divide two <BigIntegers> and truncate towards zero.
73515
73516 <quotient> throws an exception if *n* is zero.
73517
73518 Parameters:
73519
73520 n - The number to divide *this* by. Will be converted to a <BigInteger>.
73521
73522 Returns:
73523
73524 The *this* / *n*, truncated to an integer.
73525
73526 See Also:
73527
73528 <add>, <subtract>, <multiply>, <divRem>, <remainder>
73529*/
73530BigInteger.prototype.quotient = function(n) {
73531 return this.divRem(n)[0];
73532};
73533
73534/*
73535 Function: divide
73536 Deprecated synonym for <quotient>.
73537*/
73538BigInteger.prototype.divide = BigInteger.prototype.quotient;
73539
73540/*
73541 Function: remainder
73542 Calculate the remainder of two <BigIntegers>.
73543
73544 <remainder> throws an exception if *n* is zero.
73545
73546 Parameters:
73547
73548 n - The remainder after *this* is divided *this* by *n*. Will be
73549 converted to a <BigInteger>.
73550
73551 Returns:
73552
73553 *this* % *n*.
73554
73555 See Also:
73556
73557 <divRem>, <quotient>
73558*/
73559BigInteger.prototype.remainder = function(n) {
73560 return this.divRem(n)[1];
73561};
73562
73563/*
73564 Function: divRem
73565 Calculate the integer quotient and remainder of two <BigIntegers>.
73566
73567 <divRem> throws an exception if *n* is zero.
73568
73569 Parameters:
73570
73571 n - The number to divide *this* by. Will be converted to a <BigInteger>.
73572
73573 Returns:
73574
73575 A two-element array containing the quotient and the remainder.
73576
73577 > a.divRem(b)
73578
73579 is exactly equivalent to
73580
73581 > [a.quotient(b), a.remainder(b)]
73582
73583 except it is faster, because they are calculated at the same time.
73584
73585 See Also:
73586
73587 <quotient>, <remainder>
73588*/
73589BigInteger.prototype.divRem = function(n) {
73590 n = BigInteger(n);
73591 if (n._s === 0) {
73592 throw new Error("Divide by zero");
73593 }
73594 if (this._s === 0) {
73595 return [ZERO, ZERO];
73596 }
73597 if (n._d.length === 1) {
73598 return this.divRemSmall(n._s * n._d[0]);
73599 }
73600
73601 // Test for easy cases -- |n1| <= |n2|
73602 switch (this.compareAbs(n)) {
73603 case 0: // n1 == n2
73604 return [this._s === n._s ? ONE : M_ONE, ZERO];
73605 case -1: // |n1| < |n2|
73606 return [ZERO, this];
73607 }
73608
73609 var sign = this._s * n._s;
73610 var a = n.abs();
73611 var b_digits = this._d;
73612 var b_index = b_digits.length;
73613 var digits = n._d.length;
73614 var quot = [];
73615 var guess;
73616
73617 var part = new BigInteger([], 0, CONSTRUCT);
73618
73619 while (b_index) {
73620 part._d.unshift(b_digits[--b_index]);
73621 part = new BigInteger(part._d, 1, CONSTRUCT);
73622
73623 if (part.compareAbs(n) < 0) {
73624 quot.push(0);
73625 continue;
73626 }
73627 if (part._s === 0) {
73628 guess = 0;
73629 }
73630 else {
73631 var xlen = part._d.length, ylen = a._d.length;
73632 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
73633 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
73634 if (part._d.length > a._d.length) {
73635 // The length of part._d can either match a._d length,
73636 // or exceed it by one.
73637 highx = (highx+1)*BigInteger_base;
73638 }
73639 guess = Math.ceil(highx/highy);
73640 }
73641 do {
73642 var check = a.multiplySingleDigit(guess);
73643 if (check.compareAbs(part) <= 0) {
73644 break;
73645 }
73646 guess--;
73647 } while (guess);
73648
73649 quot.push(guess);
73650 if (!guess) {
73651 continue;
73652 }
73653 var diff = part.subtract(check);
73654 part._d = diff._d.slice();
73655 }
73656
73657 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
73658 new BigInteger(part._d, this._s, CONSTRUCT)];
73659};
73660
73661// Throws an exception if n is outside of (-BigInteger.base, -1] or
73662// [1, BigInteger.base). It's not necessary to call this, since the
73663// other division functions will call it if they are able to.
73664BigInteger.prototype.divRemSmall = function(n) {
73665 var r;
73666 n = +n;
73667 if (n === 0) {
73668 throw new Error("Divide by zero");
73669 }
73670
73671 var n_s = n < 0 ? -1 : 1;
73672 var sign = this._s * n_s;
73673 n = Math.abs(n);
73674
73675 if (n < 1 || n >= BigInteger_base) {
73676 throw new Error("Argument out of range");
73677 }
73678
73679 if (this._s === 0) {
73680 return [ZERO, ZERO];
73681 }
73682
73683 if (n === 1 || n === -1) {
73684 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
73685 }
73686
73687 // 2 <= n < BigInteger_base
73688
73689 // divide a single digit by a single digit
73690 if (this._d.length === 1) {
73691 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
73692 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
73693 if (sign < 0) {
73694 q = q.negate();
73695 }
73696 if (this._s < 0) {
73697 r = r.negate();
73698 }
73699 return [q, r];
73700 }
73701
73702 var digits = this._d.slice();
73703 var quot = new Array(digits.length);
73704 var part = 0;
73705 var diff = 0;
73706 var i = 0;
73707 var guess;
73708
73709 while (digits.length) {
73710 part = part * BigInteger_base + digits[digits.length - 1];
73711 if (part < n) {
73712 quot[i++] = 0;
73713 digits.pop();
73714 diff = BigInteger_base * diff + part;
73715 continue;
73716 }
73717 if (part === 0) {
73718 guess = 0;
73719 }
73720 else {
73721 guess = (part / n) | 0;
73722 }
73723
73724 var check = n * guess;
73725 diff = part - check;
73726 quot[i++] = guess;
73727 if (!guess) {
73728 digits.pop();
73729 continue;
73730 }
73731
73732 digits.pop();
73733 part = diff;
73734 }
73735
73736 r = new BigInteger([diff], 1, CONSTRUCT);
73737 if (this._s < 0) {
73738 r = r.negate();
73739 }
73740 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
73741};
73742
73743/*
73744 Function: isEven
73745 Return true iff *this* is divisible by two.
73746
73747 Note that <BigInteger.ZERO> is even.
73748
73749 Returns:
73750
73751 true if *this* is even, false otherwise.
73752
73753 See Also:
73754
73755 <isOdd>
73756*/
73757BigInteger.prototype.isEven = function() {
73758 var digits = this._d;
73759 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
73760};
73761
73762/*
73763 Function: isOdd
73764 Return true iff *this* is not divisible by two.
73765
73766 Returns:
73767
73768 true if *this* is odd, false otherwise.
73769
73770 See Also:
73771
73772 <isEven>
73773*/
73774BigInteger.prototype.isOdd = function() {
73775 return !this.isEven();
73776};
73777
73778/*
73779 Function: sign
73780 Get the sign of a <BigInteger>.
73781
73782 Returns:
73783
73784 * -1 if *this* < 0
73785 * 0 if *this* == 0
73786 * +1 if *this* > 0
73787
73788 See Also:
73789
73790 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
73791*/
73792BigInteger.prototype.sign = function() {
73793 return this._s;
73794};
73795
73796/*
73797 Function: isPositive
73798 Return true iff *this* > 0.
73799
73800 Returns:
73801
73802 true if *this*.compare(<BigInteger.ZERO>) == 1.
73803
73804 See Also:
73805
73806 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
73807*/
73808BigInteger.prototype.isPositive = function() {
73809 return this._s > 0;
73810};
73811
73812/*
73813 Function: isNegative
73814 Return true iff *this* < 0.
73815
73816 Returns:
73817
73818 true if *this*.compare(<BigInteger.ZERO>) == -1.
73819
73820 See Also:
73821
73822 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
73823*/
73824BigInteger.prototype.isNegative = function() {
73825 return this._s < 0;
73826};
73827
73828/*
73829 Function: isZero
73830 Return true iff *this* == 0.
73831
73832 Returns:
73833
73834 true if *this*.compare(<BigInteger.ZERO>) == 0.
73835
73836 See Also:
73837
73838 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
73839*/
73840BigInteger.prototype.isZero = function() {
73841 return this._s === 0;
73842};
73843
73844/*
73845 Function: exp10
73846 Multiply a <BigInteger> by a power of 10.
73847
73848 This is equivalent to, but faster than
73849
73850 > if (n >= 0) {
73851 > return this.multiply(BigInteger("1e" + n));
73852 > }
73853 > else { // n <= 0
73854 > return this.quotient(BigInteger("1e" + -n));
73855 > }
73856
73857 Parameters:
73858
73859 n - The power of 10 to multiply *this* by. *n* is converted to a
73860 javascipt number and must be no greater than <BigInteger.MAX_EXP>
73861 (0x7FFFFFFF), or an exception will be thrown.
73862
73863 Returns:
73864
73865 *this* * (10 ** *n*), truncated to an integer if necessary.
73866
73867 See Also:
73868
73869 <pow>, <multiply>
73870*/
73871BigInteger.prototype.exp10 = function(n) {
73872 n = +n;
73873 if (n === 0) {
73874 return this;
73875 }
73876 if (Math.abs(n) > Number(MAX_EXP)) {
73877 throw new Error("exponent too large in BigInteger.exp10");
73878 }
73879 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
73880 if (this._s === 0) {
73881 return ZERO;
73882 }
73883 if (n > 0) {
73884 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
73885
73886 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
73887 k._d.unshift(0);
73888 }
73889 if (n == 0)
73890 return k;
73891 k._s = 1;
73892 k = k.multiplySingleDigit(Math.pow(10, n));
73893 return (this._s < 0 ? k.negate() : k);
73894 } else if (-n >= this._d.length*BigInteger_base_log10) {
73895 return ZERO;
73896 } else {
73897 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
73898
73899 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
73900 k._d.shift();
73901 }
73902 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
73903 }
73904};
73905
73906/*
73907 Function: pow
73908 Raise a <BigInteger> to a power.
73909
73910 In this implementation, 0**0 is 1.
73911
73912 Parameters:
73913
73914 n - The exponent to raise *this* by. *n* must be no greater than
73915 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
73916
73917 Returns:
73918
73919 *this* raised to the *nth* power.
73920
73921 See Also:
73922
73923 <modPow>
73924*/
73925BigInteger.prototype.pow = function(n) {
73926 if (this.isUnit()) {
73927 if (this._s > 0) {
73928 return this;
73929 }
73930 else {
73931 return BigInteger(n).isOdd() ? this : this.negate();
73932 }
73933 }
73934
73935 n = BigInteger(n);
73936 if (n._s === 0) {
73937 return ONE;
73938 }
73939 else if (n._s < 0) {
73940 if (this._s === 0) {
73941 throw new Error("Divide by zero");
73942 }
73943 else {
73944 return ZERO;
73945 }
73946 }
73947 if (this._s === 0) {
73948 return ZERO;
73949 }
73950 if (n.isUnit()) {
73951 return this;
73952 }
73953
73954 if (n.compareAbs(MAX_EXP) > 0) {
73955 throw new Error("exponent too large in BigInteger.pow");
73956 }
73957 var x = this;
73958 var aux = ONE;
73959 var two = BigInteger.small[2];
73960
73961 while (n.isPositive()) {
73962 if (n.isOdd()) {
73963 aux = aux.multiply(x);
73964 if (n.isUnit()) {
73965 return aux;
73966 }
73967 }
73968 x = x.square();
73969 n = n.quotient(two);
73970 }
73971
73972 return aux;
73973};
73974
73975/*
73976 Function: modPow
73977 Raise a <BigInteger> to a power (mod m).
73978
73979 Because it is reduced by a modulus, <modPow> is not limited by
73980 <BigInteger.MAX_EXP> like <pow>.
73981
73982 Parameters:
73983
73984 exponent - The exponent to raise *this* by. Must be positive.
73985 modulus - The modulus.
73986
73987 Returns:
73988
73989 *this* ^ *exponent* (mod *modulus*).
73990
73991 See Also:
73992
73993 <pow>, <mod>
73994*/
73995BigInteger.prototype.modPow = function(exponent, modulus) {
73996 var result = ONE;
73997 var base = this;
73998
73999 while (exponent.isPositive()) {
74000 if (exponent.isOdd()) {
74001 result = result.multiply(base).remainder(modulus);
74002 }
74003
74004 exponent = exponent.quotient(BigInteger.small[2]);
74005 if (exponent.isPositive()) {
74006 base = base.square().remainder(modulus);
74007 }
74008 }
74009
74010 return result;
74011};
74012
74013/*
74014 Function: log
74015 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
74016
74017 This is equivalent to
74018
74019 > Math.log(this.toJSValue())
74020
74021 but handles values outside of the native number range.
74022
74023 Returns:
74024
74025 log( *this* )
74026
74027 See Also:
74028
74029 <toJSValue>
74030*/
74031BigInteger.prototype.log = function() {
74032 switch (this._s) {
74033 case 0: return -Infinity;
74034 case -1: return NaN;
74035 default: // Fall through.
74036 }
74037
74038 var l = this._d.length;
74039
74040 if (l*BigInteger_base_log10 < 30) {
74041 return Math.log(this.valueOf());
74042 }
74043
74044 var N = Math.ceil(30/BigInteger_base_log10);
74045 var firstNdigits = this._d.slice(l - N);
74046 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
74047};
74048
74049/*
74050 Function: valueOf
74051 Convert a <BigInteger> to a native JavaScript integer.
74052
74053 This is called automatically by JavaScipt to convert a <BigInteger> to a
74054 native value.
74055
74056 Returns:
74057
74058 > parseInt(this.toString(), 10)
74059
74060 See Also:
74061
74062 <toString>, <toJSValue>
74063*/
74064BigInteger.prototype.valueOf = function() {
74065 return parseInt(this.toString(), 10);
74066};
74067
74068/*
74069 Function: toJSValue
74070 Convert a <BigInteger> to a native JavaScript integer.
74071
74072 This is the same as valueOf, but more explicitly named.
74073
74074 Returns:
74075
74076 > parseInt(this.toString(), 10)
74077
74078 See Also:
74079
74080 <toString>, <valueOf>
74081*/
74082BigInteger.prototype.toJSValue = function() {
74083 return parseInt(this.toString(), 10);
74084};
74085
74086var MAX_EXP = BigInteger(0x7FFFFFFF);
74087// Constant: MAX_EXP
74088// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
74089BigInteger.MAX_EXP = MAX_EXP;
74090
74091(function() {
74092 function makeUnary(fn) {
74093 return function(a) {
74094 return fn.call(BigInteger(a));
74095 };
74096 }
74097
74098 function makeBinary(fn) {
74099 return function(a, b) {
74100 return fn.call(BigInteger(a), BigInteger(b));
74101 };
74102 }
74103
74104 function makeTrinary(fn) {
74105 return function(a, b, c) {
74106 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
74107 };
74108 }
74109
74110 (function() {
74111 var i, fn;
74112 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
74113 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
74114 var trinary = ["modPow"];
74115
74116 for (i = 0; i < unary.length; i++) {
74117 fn = unary[i];
74118 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
74119 }
74120
74121 for (i = 0; i < binary.length; i++) {
74122 fn = binary[i];
74123 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
74124 }
74125
74126 for (i = 0; i < trinary.length; i++) {
74127 fn = trinary[i];
74128 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
74129 }
74130
74131 BigInteger.exp10 = function(x, n) {
74132 return BigInteger(x).exp10(n);
74133 };
74134 })();
74135})();
74136
74137exports.BigInteger = BigInteger;
74138})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
74139</script>
74140 <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){
74141var 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;
74142
74143},{}],2:[function(require,module,exports){
74144var 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;
74145
74146},{"./scoring":6}],3:[function(require,module,exports){
74147var 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(","),
74148english_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(","),
74149female_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(","),
74150us_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(","),
74151male_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;
74152
74153},{}],4:[function(require,module,exports){
74154var 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;
74155
74156},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
74157var 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;
74158
74159},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
74160var 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;
74161
74162},{"./adjacency_graphs":1}],7:[function(require,module,exports){
74163var 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;
74164
74165},{}]},{},[4])(4)
74166});
861750ae 74167
95f04905
IC
74168</script>
74169 <script>/*
74170 * Detects entropy from a string.
74171 *
74172 * Formats include:
74173 * binary [0-1]
74174 * base 6 [0-5]
74175 * dice 6 [1-6]
74176 * decimal [0-9]
74177 * hexadecimal [0-9A-F]
9e97eb76 74178 * card [A2-9TJQK][CDHS]
95f04905
IC
74179 *
74180 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
74181 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
74182 * entropy.
74183 */
74184
74185window.Entropy = new (function() {
74186
78b8d604
IC
74187 var TWO = new BigInteger(2);
74188
95f04905
IC
74189 // matchers returns an array of the matched events for each type of entropy.
74190 // eg
74191 // matchers.binary("010") returns ["0", "1", "0"]
74192 // matchers.binary("a10") returns ["1", "0"]
74193 // matchers.hex("a10") returns ["a", "1", "0"]
74194 var matchers = {
74195 binary: function(str) {
74196 return str.match(/[0-1]/gi) || [];
74197 },
74198 base6: function(str) {
74199 return str.match(/[0-5]/gi) || [];
74200 },
74201 dice: function(str) {
74202 return str.match(/[1-6]/gi) || []; // ie dice numbers
74203 },
74204 base10: function(str) {
74205 return str.match(/[0-9]/gi) || [];
74206 },
74207 hex: function(str) {
74208 return str.match(/[0-9A-F]/gi) || [];
74209 },
74210 card: function(str) {
74211 // Format is NumberSuit, eg
74212 // AH ace of hearts
74213 // 8C eight of clubs
74214 // TD ten of diamonds
74215 // JS jack of spades
74216 // QH queen of hearts
74217 // KC king of clubs
74218 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
74219 }
74220 }
74221
74222 // Convert array of cards from ["ac", "4d", "ks"]
74223 // to numbers between 0 and 51 [0, 16, 51]
74224 function convertCardsToInts(cards) {
74225 var ints = [];
74226 var values = "a23456789tjqk";
74227 var suits = "cdhs";
74228 for (var i=0; i<cards.length; i++) {
74229 var card = cards[i].toLowerCase();
74230 var value = card[0];
74231 var suit = card[1];
74232 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
74233 ints.push(asInt);
74234 }
74235 return ints;
74236 }
74237
74238 this.fromString = function(rawEntropyStr) {
74239 // Find type of entropy being used (binary, hex, dice etc)
74240 var base = getBase(rawEntropyStr);
74241 // Convert dice to base6 entropy (ie 1-6 to 0-5)
74242 // This is done by changing all 6s to 0s
74243 if (base.str == "dice") {
74244 var newParts = [];
74245 var newInts = [];
74246 for (var i=0; i<base.parts.length; i++) {
74247 var c = base.parts[i];
74248 if ("12345".indexOf(c) > -1) {
74249 newParts[i] = base.parts[i];
74250 newInts[i] = base.ints[i];
74251 }
74252 else {
74253 newParts[i] = "0";
74254 newInts[i] = 0;
74255 }
74256 }
74257 base.str = "base 6 (dice)";
74258 base.ints = newInts;
74259 base.parts = newParts;
74260 base.matcher = matchers.base6;
74261 }
74262 // Detect empty entropy
74263 if (base.parts.length == 0) {
74264 return {
74265 binaryStr: "",
74266 cleanStr: "",
74267 cleanHtml: "",
74268 base: base,
74269 };
74270 }
74271 // Convert base.ints to BigInteger.
74272 // Due to using unusual bases, eg cards of base52, this is not as simple as
74273 // using BigInteger.parse()
74274 var entropyInt = BigInteger.ZERO;
74275 for (var i=base.ints.length-1; i>=0; i--) {
74276 var thisInt = BigInteger.parse(base.ints[i]);
74277 var power = (base.ints.length - 1) - i;
74278 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
74279 entropyInt = entropyInt.add(additionalEntropy);
74280 }
74281 // Convert entropy to binary
74282 var entropyBin = entropyInt.toString(2);
74283 // If the first integer is small, it must be padded with zeros.
74284 // Otherwise the chance of the first bit being 1 is 100%, which is
74285 // obviously incorrect.
74286 // This is not perfect for non-2^n bases.
74287 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
74288 while (entropyBin.length < expectedBits) {
74289 entropyBin = "0" + entropyBin;
74290 }
94959756
IC
74291 // Calculate the number of bits per event
74292 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 74293 // Cards binary must be handled differently, since they're not replaced
9e97eb76 74294 if (base.asInt == 52) {
94959756
IC
74295 var cardEntropy = processCardEntropy(base.parts);
74296 entropyBin = cardEntropy.binaryStr;
74297 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 74298 }
95f04905
IC
74299 // Supply a 'filtered' entropy string for display purposes
74300 var entropyClean = base.parts.join("");
74301 var entropyHtml = base.parts.join("");
74302 if (base.asInt == 52) {
74303 entropyClean = base.parts.join(" ").toUpperCase();
74304 entropyClean = entropyClean.replace(/C/g, "\u2663");
74305 entropyClean = entropyClean.replace(/D/g, "\u2666");
74306 entropyClean = entropyClean.replace(/H/g, "\u2665");
74307 entropyClean = entropyClean.replace(/S/g, "\u2660");
74308 entropyHtml = base.parts.join(" ").toUpperCase();
74309 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
74310 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
74311 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
74312 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
74313 }
9e97eb76 74314 // Return the result
95f04905
IC
74315 var e = {
74316 binaryStr: entropyBin,
74317 cleanStr: entropyClean,
74318 cleanHtml: entropyHtml,
94959756 74319 bitsPerEvent: bitsPerEvent,
95f04905
IC
74320 base: base,
74321 }
74322 return e;
74323 }
74324
78b8d604
IC
74325 function getSortedDeck() {
74326 var s = [];
74327 var suits = "CDHS";
74328 var values = "A23456789TJQK";
74329 for (var i=0; i<suits.length; i++) {
74330 for (var j=0; j<values.length; j++) {
74331 s.push(values[j]+suits[i]);
74332 }
74333 }
74334 return s;
74335 }
74336
95f04905
IC
74337 function getBase(str) {
74338 // Need to get the lowest base for the supplied entropy.
74339 // This prevents interpreting, say, dice rolls as hexadecimal.
74340 var binaryMatches = matchers.binary(str);
74341 var hexMatches = matchers.hex(str);
74342 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
74343 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
74344 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
74345 return {
74346 ints: ints,
74347 parts: binaryMatches,
74348 matcher: matchers.binary,
74349 asInt: 2,
74350 str: "binary",
74351 }
74352 }
74353 var cardMatches = matchers.card(str);
74354 if (cardMatches.length >= hexMatches.length / 2) {
74355 var ints = convertCardsToInts(cardMatches);
74356 return {
74357 ints: ints,
74358 parts: cardMatches,
74359 matcher: matchers.card,
74360 asInt: 52,
74361 str: "card",
74362 }
74363 }
74364 var diceMatches = matchers.dice(str);
74365 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
74366 var ints = diceMatches.map(function(i) { return parseInt(i) });
74367 return {
74368 ints: ints,
74369 parts: diceMatches,
74370 matcher: matchers.dice,
74371 asInt: 6,
74372 str: "dice",
74373 }
74374 }
74375 var base6Matches = matchers.base6(str);
74376 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
74377 var ints = base6Matches.map(function(i) { return parseInt(i) });
74378 return {
74379 ints: ints,
74380 parts: base6Matches,
74381 matcher: matchers.base6,
74382 asInt: 6,
74383 str: "base 6",
74384 }
74385 }
74386 var base10Matches = matchers.base10(str);
74387 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
74388 var ints = base10Matches.map(function(i) { return parseInt(i) });
74389 return {
74390 ints: ints,
74391 parts: base10Matches,
74392 matcher: matchers.base10,
74393 asInt: 10,
74394 str: "base 10",
74395 }
74396 }
74397 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
74398 return {
74399 ints: ints,
74400 parts: hexMatches,
74401 matcher: matchers.hex,
74402 asInt: 16,
74403 str: "hexadecimal",
74404 }
74405 }
74406
ea87f1d3
IC
74407 // Assume cards are NOT replaced.
74408 // Additional entropy decreases as more cards are used. This means
74409 // total possible entropy is measured using n!, not base^n.
74410 // eg the second last card can be only one of two, not one of fifty two
74411 // so the added entropy for that card is only one bit at most
94959756 74412 function processCardEntropy(cards) {
ea87f1d3
IC
74413 // Track how many instances of each card have been used, and thus
74414 // how many decks are in use.
74415 var cardCounts = {};
74416 var numberOfDecks = 0;
74417 // Work out number of decks by max(duplicates)
74418 for (var i=0; i<cards.length; i++) {
74419 // Get the card that was drawn
74420 var cardLower = cards[i];
74421 var card = cardLower.toUpperCase();
74422 // Initialize the count for this card if needed
74423 if (!(card in cardCounts)) {
74424 cardCounts[card] = 0;
74425 }
74426 cardCounts[card] += 1;
74427 // See if this is max(duplicates)
74428 if (cardCounts[card] > numberOfDecks) {
74429 numberOfDecks = cardCounts[card];
74430 }
74431 }
74432 // Work out the total number of bits for this many decks
74433 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
74434 var gainedBits = 0;
74435 // Equivalent of Math.log2(factorial(52*numberOfDecks))
74436 // which becomes infinity for numberOfDecks > 4
74437 for (var i=1; i<=52*numberOfDecks; i++) {
74438 gainedBits = gainedBits + Math.log2(i);
74439 }
ea87f1d3
IC
74440 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
74441 var maxBits = gainedBits - lostBits;
74442 // Convert the drawn cards to a binary representation.
74443 // The exact technique for doing this is unclear.
74444 // See
74445 // http://crypto.stackexchange.com/a/41896
74446 // "I even doubt that this is well defined (only the average entropy
74447 // is, I believe)."
74448 // See
74449 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
74450 // "The binary representation can be the first log(permutations,2) bits
74451 // of the sha-2 hash of the normalized deck string."
74452 //
74453 // In this specific implementation, the first N bits of the hash of the
74454 // normalized cards string is being used. Uppercase, no spaces; eg
74455 // sha256("AH8DQSTC2H")
74456 var totalCards = numberOfDecks * 52;
74457 var percentUsed = cards.length / totalCards;
74458 // Calculate the average number of bits of entropy for the number of
74459 // cards drawn.
74460 var numberOfBits = Math.floor(maxBits * percentUsed);
74461 // Create a normalized string of the selected cards
74462 var normalizedCards = cards.join("").toUpperCase();
74463 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 74464 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
74465 // are used until the required number of bits is reached.
74466 var entropyBin = "";
74467 var iterations = 0;
74468 while (entropyBin.length < numberOfBits) {
434caecd 74469 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
74470 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
74471 for (var i=0; i<hashHex.length; i++) {
74472 var decimal = parseInt(hashHex[i], 16);
74473 var binary = decimal.toString(2);
74474 while (binary.length < 4) {
74475 binary = "0" + binary;
74476 }
74477 entropyBin = entropyBin + binary;
74478 }
74479 iterations = iterations + 1;
74480 }
74481 // Truncate to the appropriate number of bits.
74482 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
74483 // Get the number of bits per event
74484 bitsPerEvent = maxBits / totalCards;
74485 return {
74486 binaryStr: entropyBin,
74487 bitsPerEvent: bitsPerEvent,
74488 }
ea87f1d3
IC
74489 }
74490
95f04905
IC
74491 // Polyfill for Math.log2
74492 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
74493 Math.log2 = Math.log2 || function(x) {
74494 // The polyfill isn't good enough because of the poor accuracy of
74495 // Math.LOG2E
74496 // log2(8) gave 2.9999999999999996 which when floored causes issues.
74497 // So instead use the BigInteger library to get it right.
74498 return BigInteger.log(x) / BigInteger.log(2);
74499 };
74500
9e97eb76
IC
74501 // Depends on BigInteger
74502 function factorial(n) {
74503 if (n == 0) {
74504 return 1;
74505 }
74506 f = BigInteger.ONE;
74507 for (var i=1; i<=n; i++) {
74508 f = f.multiply(new BigInteger(i));
74509 }
74510 return f;
74511 }
74512
95f04905 74513})();
c6624d51
IC
74514</script>
74515 <script>(function() {
74516
74517 // mnemonics is populated as required by getLanguage
74518 var mnemonics = { "english": new Mnemonic("english") };
74519 var mnemonic = mnemonics["english"];
3725abb5 74520 var seed = null;
c6624d51
IC
74521 var bip32RootKey = null;
74522 var bip32ExtendedKey = null;
9987f0c1 74523 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
74524 var addressRowTemplate = $("#address-row-template");
74525
74526 var showIndex = true;
74527 var showAddress = true;
74528 var showPubKey = true;
74529 var showPrivKey = true;
52da415f 74530 var showQr = false;
cf6c2044 74531 var litecoinUseLtub = true;
c6624d51
IC
74532
74533 var entropyChangeTimeoutEvent = null;
74534 var phraseChangeTimeoutEvent = null;
74535 var rootKeyChangedTimeoutEvent = null;
74536
40892aba
IC
74537 var generationProcesses = [];
74538
c6624d51
IC
74539 var DOM = {};
74540 DOM.network = $(".network");
56530adc 74541 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
74542 DOM.phraseNetwork = $("#network-phrase");
74543 DOM.useEntropy = $(".use-entropy");
74544 DOM.entropyContainer = $(".entropy-container");
74545 DOM.entropy = $(".entropy");
2a6dd137
IC
74546 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
74547 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 74548 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
74549 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
74550 DOM.entropyBits = DOM.entropyContainer.find(".bits");
74551 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
74552 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
74553 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
26dd39fd 74554 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
2a6dd137 74555 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
9ff30bab 74556 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
c6624d51
IC
74557 DOM.phrase = $(".phrase");
74558 DOM.passphrase = $(".passphrase");
74559 DOM.generateContainer = $(".generate-container");
74560 DOM.generate = $(".generate");
74561 DOM.seed = $(".seed");
74562 DOM.rootKey = $(".root-key");
8d18f379
IC
74563 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
74564 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
74565 DOM.extendedPrivKey = $(".extended-priv-key");
74566 DOM.extendedPubKey = $(".extended-pub-key");
74567 DOM.bip32tab = $("#bip32-tab");
74568 DOM.bip44tab = $("#bip44-tab");
9987f0c1 74569 DOM.bip49tab = $("#bip49-tab");
cf6c2044 74570 DOM.bip141tab = $("#bip141-tab");
c6624d51
IC
74571 DOM.bip32panel = $("#bip32");
74572 DOM.bip44panel = $("#bip44");
9987f0c1 74573 DOM.bip49panel = $("#bip49");
c6624d51
IC
74574 DOM.bip32path = $("#bip32-path");
74575 DOM.bip44path = $("#bip44-path");
74576 DOM.bip44purpose = $("#bip44 .purpose");
74577 DOM.bip44coin = $("#bip44 .coin");
74578 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
74579 DOM.bip44accountXprv = $("#bip44 .account-xprv");
74580 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 74581 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
74582 DOM.bip49unavailable = $("#bip49 .unavailable");
74583 DOM.bip49available = $("#bip49 .available");
74584 DOM.bip49path = $("#bip49-path");
74585 DOM.bip49purpose = $("#bip49 .purpose");
74586 DOM.bip49coin = $("#bip49 .coin");
74587 DOM.bip49account = $("#bip49 .account");
74588 DOM.bip49accountXprv = $("#bip49 .account-xprv");
74589 DOM.bip49accountXpub = $("#bip49 .account-xpub");
74590 DOM.bip49change = $("#bip49 .change");
cf6c2044
IC
74591 DOM.bip141unavailable = $("#bip141 .unavailable");
74592 DOM.bip141available = $("#bip141 .available");
74593 DOM.bip141path = $("#bip141-path");
74594 DOM.bip141semantics = $(".bip141-semantics");
18abe53b 74595 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 74596 DOM.hardenedAddresses = $(".hardened-addresses");
0f6b34d6
IC
74597 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
74598 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
c6624d51
IC
74599 DOM.addresses = $(".addresses");
74600 DOM.rowsToAdd = $(".rows-to-add");
74601 DOM.more = $(".more");
924727ed 74602 DOM.moreRowsStartIndex = $(".more-rows-start-index");
c6624d51
IC
74603 DOM.feedback = $(".feedback");
74604 DOM.tab = $(".derivation-type a");
74605 DOM.indexToggle = $(".index-toggle");
74606 DOM.addressToggle = $(".address-toggle");
74607 DOM.publicKeyToggle = $(".public-key-toggle");
74608 DOM.privateKeyToggle = $(".private-key-toggle");
74609 DOM.languages = $(".languages a");
e00964cc 74610 DOM.qrContainer = $(".qr-container");
52da415f 74611 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
74612 DOM.qrImage = DOM.qrContainer.find(".qr-image");
74613 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
74614 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
74615
74616 function init() {
74617 // Events
74618 DOM.network.on("change", networkChanged);
56530adc 74619 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
74620 DOM.useEntropy.on("change", setEntropyVisibility);
74621 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 74622 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
74623 DOM.phrase.on("input", delayedPhraseChanged);
74624 DOM.passphrase.on("input", delayedPhraseChanged);
74625 DOM.generate.on("click", generateClicked);
74626 DOM.more.on("click", showMore);
74627 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 74628 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 74629 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
74630 DOM.bip44account.on("input", calcForDerivationPath);
74631 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
74632 DOM.bip49account.on("input", calcForDerivationPath);
74633 DOM.bip49change.on("input", calcForDerivationPath);
cf6c2044
IC
74634 DOM.bip141path.on("input", calcForDerivationPath);
74635 DOM.bip141semantics.on("change", tabChanged);
0f6b34d6 74636 DOM.tab.on("shown.bs.tab", tabChanged);
c6624d51
IC
74637 DOM.hardenedAddresses.on("change", calcForDerivationPath);
74638 DOM.indexToggle.on("click", toggleIndexes);
74639 DOM.addressToggle.on("click", toggleAddresses);
74640 DOM.publicKeyToggle.on("click", togglePublicKeys);
74641 DOM.privateKeyToggle.on("click", togglePrivateKeys);
74642 DOM.languages.on("click", languageChanged);
0f6b34d6 74643 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
e00964cc 74644 setQrEvents(DOM.showQrEls);
c6624d51
IC
74645 disableForms();
74646 hidePending();
74647 hideValidationError();
74648 populateNetworkSelect();
56530adc 74649 populateClientSelect();
c6624d51
IC
74650 }
74651
74652 // Event handlers
74653
74654 function networkChanged(e) {
9987f0c1
IC
74655 clearDerivedKeys();
74656 clearAddressesList();
8d18f379 74657 DOM.litecoinLtubContainer.addClass("hidden");
0f6b34d6 74658 DOM.useBitpayAddressesContainer.addClass("hidden");
c6624d51 74659 var networkIndex = e.target.value;
9987f0c1
IC
74660 var network = networks[networkIndex];
74661 network.onSelect();
cf6c2044
IC
74662 if (network.segwitAvailable) {
74663 adjustNetworkForSegwit();
74664 showSegwitAvailable();
9987f0c1
IC
74665 }
74666 else {
cf6c2044 74667 showSegwitUnavailable();
9987f0c1 74668 }
c6624d51
IC
74669 if (seed != null) {
74670 phraseChanged();
74671 }
74672 else {
74673 rootKeyChanged();
74674 }
74675 }
74676
56530adc
IC
74677 function bip32ClientChanged(e) {
74678 var clientIndex = DOM.bip32Client.val();
74679 if (clientIndex == "custom") {
74680 DOM.bip32path.prop("readonly", false);
74681 }
74682 else {
74683 DOM.bip32path.prop("readonly", true);
74684 clients[clientIndex].onSelect();
74685 if (seed != null) {
74686 phraseChanged();
74687 }
74688 else {
74689 rootKeyChanged();
74690 }
74691 }
74692 }
74693
c6624d51
IC
74694 function setEntropyVisibility() {
74695 if (isUsingOwnEntropy()) {
74696 DOM.entropyContainer.removeClass("hidden");
74697 DOM.generateContainer.addClass("hidden");
74698 DOM.phrase.prop("readonly", true);
74699 DOM.entropy.focus();
74700 entropyChanged();
74701 }
74702 else {
74703 DOM.entropyContainer.addClass("hidden");
74704 DOM.generateContainer.removeClass("hidden");
74705 DOM.phrase.prop("readonly", false);
18abe53b 74706 hidePending();
c6624d51
IC
74707 }
74708 }
74709
74710 function delayedPhraseChanged() {
74711 hideValidationError();
f128bd58
IC
74712 seed = null;
74713 bip32RootKey = null;
74714 bip32ExtendedKey = null;
74715 clearAddressesList();
c6624d51
IC
74716 showPending();
74717 if (phraseChangeTimeoutEvent != null) {
74718 clearTimeout(phraseChangeTimeoutEvent);
74719 }
74720 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
74721 }
74722
74723 function phraseChanged() {
74724 showPending();
c6624d51
IC
74725 setMnemonicLanguage();
74726 // Get the mnemonic phrase
74727 var phrase = DOM.phrase.val();
74728 var errorText = findPhraseErrors(phrase);
74729 if (errorText) {
74730 showValidationError(errorText);
74731 return;
74732 }
74733 // Calculate and display
74734 var passphrase = DOM.passphrase.val();
74735 calcBip32RootKeyFromSeed(phrase, passphrase);
74736 calcForDerivationPath();
26dd39fd
IC
74737 // Show the word indexes
74738 showWordIndexes();
c6624d51
IC
74739 }
74740
0f6b34d6
IC
74741 function tabChanged() {
74742 showPending();
cf6c2044 74743 adjustNetworkForSegwit();
0f6b34d6
IC
74744 var phrase = DOM.phrase.val();
74745 if (phrase != "") {
74746 // Calculate and display for mnemonic
74747 var errorText = findPhraseErrors(phrase);
74748 if (errorText) {
74749 showValidationError(errorText);
74750 return;
74751 }
74752 // Calculate and display
74753 var passphrase = DOM.passphrase.val();
74754 calcBip32RootKeyFromSeed(phrase, passphrase);
74755 }
74756 else {
74757 // Calculate and display for root key
74758 var rootKeyBase58 = DOM.rootKey.val();
74759 var errorText = validateRootKey(rootKeyBase58);
74760 if (errorText) {
74761 showValidationError(errorText);
74762 return;
74763 }
74764 // Calculate and display
74765 calcBip32RootKeyFromBase58(rootKeyBase58);
74766 }
74767 calcForDerivationPath();
74768 }
74769
c6624d51
IC
74770 function delayedEntropyChanged() {
74771 hideValidationError();
74772 showPending();
74773 if (entropyChangeTimeoutEvent != null) {
74774 clearTimeout(entropyChangeTimeoutEvent);
74775 }
74776 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
74777 }
74778
74779 function entropyChanged() {
18abe53b
IC
74780 // If blank entropy, clear mnemonic, addresses, errors
74781 if (DOM.entropy.val().trim().length == 0) {
74782 clearDisplay();
2a6dd137 74783 clearEntropyFeedback();
18abe53b
IC
74784 DOM.phrase.val("");
74785 showValidationError("Blank entropy");
74786 return;
74787 }
74788 // Get the current phrase to detect changes
74789 var phrase = DOM.phrase.val();
74790 // Set the phrase from the entropy
c6624d51 74791 setMnemonicFromEntropy();
18abe53b
IC
74792 // Recalc addresses if the phrase has changed
74793 var newPhrase = DOM.phrase.val();
74794 if (newPhrase != phrase) {
74795 if (newPhrase.length == 0) {
74796 clearDisplay();
74797 }
74798 else {
74799 phraseChanged();
74800 }
74801 }
74802 else {
74803 hidePending();
74804 }
c6624d51
IC
74805 }
74806
74807 function delayedRootKeyChanged() {
74808 // Warn if there is an existing mnemonic or passphrase.
74809 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
74810 if (!confirm("This will clear existing mnemonic and passphrase")) {
74811 DOM.rootKey.val(bip32RootKey);
74812 return
74813 }
74814 }
74815 hideValidationError();
74816 showPending();
74817 // Clear existing mnemonic and passphrase
74818 DOM.phrase.val("");
74819 DOM.passphrase.val("");
74820 seed = null;
74821 if (rootKeyChangedTimeoutEvent != null) {
74822 clearTimeout(rootKeyChangedTimeoutEvent);
74823 }
74824 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
74825 }
74826
74827 function rootKeyChanged() {
74828 showPending();
74829 hideValidationError();
c6624d51
IC
74830 var rootKeyBase58 = DOM.rootKey.val();
74831 var errorText = validateRootKey(rootKeyBase58);
74832 if (errorText) {
74833 showValidationError(errorText);
74834 return;
74835 }
74836 // Calculate and display
74837 calcBip32RootKeyFromBase58(rootKeyBase58);
74838 calcForDerivationPath();
c6624d51
IC
74839 }
74840
8d18f379
IC
74841 function litecoinUseLtubChanged() {
74842 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
74843 if (litecoinUseLtub) {
cf6c2044 74844 network = bitcoinjs.bitcoin.networks.litecoin;
8d18f379
IC
74845 }
74846 else {
cf6c2044 74847 network = bitcoinjs.bitcoin.networks.litecoinXprv;
8d18f379
IC
74848 }
74849 phraseChanged();
74850 }
74851
c6624d51 74852 function calcForDerivationPath() {
9987f0c1 74853 clearDerivedKeys();
ba3cb9ec 74854 clearAddressesList();
f128bd58 74855 showPending();
cf6c2044
IC
74856 // Don't show segwit if it's selected but network doesn't support it
74857 if (segwitSelected() && !networkHasSegwit()) {
9987f0c1
IC
74858 return;
74859 }
c6624d51
IC
74860 // Get the derivation path
74861 var derivationPath = getDerivationPath();
74862 var errorText = findDerivationPathErrors(derivationPath);
74863 if (errorText) {
74864 showValidationError(errorText);
74865 return;
74866 }
20083ab9
IC
74867 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
74868 if (bip44TabSelected()) {
74869 displayBip44Info();
74870 }
cf6c2044 74871 else if (bip49TabSelected()) {
9987f0c1
IC
74872 displayBip49Info();
74873 }
c6624d51 74874 displayBip32Info();
c6624d51
IC
74875 }
74876
74877 function generateClicked() {
74878 if (isUsingOwnEntropy()) {
74879 return;
74880 }
74881 clearDisplay();
74882 showPending();
74883 setTimeout(function() {
74884 setMnemonicLanguage();
74885 var phrase = generateRandomPhrase();
74886 if (!phrase) {
74887 return;
74888 }
74889 phraseChanged();
74890 }, 50);
74891 }
74892
74893 function languageChanged() {
74894 setTimeout(function() {
74895 setMnemonicLanguage();
74896 if (DOM.phrase.val().length > 0) {
74897 var newPhrase = convertPhraseToNewLanguage();
74898 DOM.phrase.val(newPhrase);
74899 phraseChanged();
74900 }
74901 else {
74902 DOM.generate.trigger("click");
74903 }
74904 }, 50);
74905 }
74906
0f6b34d6
IC
74907 function useBitpayAddressesChange() {
74908 setBitcoinCashNetworkValues();
74909 phraseChanged();
74910 }
74911
c6624d51
IC
74912 function toggleIndexes() {
74913 showIndex = !showIndex;
74914 $("td.index span").toggleClass("invisible");
74915 }
74916
74917 function toggleAddresses() {
74918 showAddress = !showAddress;
74919 $("td.address span").toggleClass("invisible");
74920 }
74921
74922 function togglePublicKeys() {
74923 showPubKey = !showPubKey;
74924 $("td.pubkey span").toggleClass("invisible");
74925 }
74926
74927 function togglePrivateKeys() {
74928 showPrivKey = !showPrivKey;
74929 $("td.privkey span").toggleClass("invisible");
74930 }
74931
74932 // Private methods
74933
74934 function generateRandomPhrase() {
74935 if (!hasStrongRandom()) {
74936 var errorText = "This browser does not support strong randomness";
74937 showValidationError(errorText);
74938 return;
74939 }
26dd39fd 74940 // get the amount of entropy to use
18abe53b 74941 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51 74942 var strength = numWords / 3 * 32;
26dd39fd
IC
74943 var buffer = new Uint8Array(strength / 8);
74944 // create secure entropy
74945 var data = crypto.getRandomValues(buffer);
74946 // show the words
74947 var words = mnemonic.toMnemonic(data);
c6624d51 74948 DOM.phrase.val(words);
26dd39fd
IC
74949 // show the entropy
74950 var entropyHex = uint8ArrayToHex(data);
74951 DOM.entropy.val(entropyHex);
74952 // ensure entropy fields are consistent with what is being displayed
74953 DOM.entropyMnemonicLength.val("raw");
c6624d51
IC
74954 return words;
74955 }
74956
74957 function calcBip32RootKeyFromSeed(phrase, passphrase) {
74958 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 74959 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
74960 }
74961
74962 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 74963 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
74964 }
74965
74966 function calcBip32ExtendedKey(path) {
0a1f0259
IC
74967 // Check there's a root key to derive from
74968 if (!bip32RootKey) {
74969 return bip32RootKey;
74970 }
20083ab9 74971 var extendedKey = bip32RootKey;
c6624d51
IC
74972 // Derive the key from the path
74973 var pathBits = path.split("/");
ebd8d4e8
IC
74974 for (var i=0; i<pathBits.length; i++) {
74975 var bit = pathBits[i];
74976 var index = parseInt(bit);
74977 if (isNaN(index)) {
74978 continue;
74979 }
74980 var hardened = bit[bit.length-1] == "'";
9987f0c1 74981 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
74982 var invalidDerivationPath = hardened && !isPriv;
74983 if (invalidDerivationPath) {
74984 extendedKey = null;
74985 }
74986 else if (hardened) {
20083ab9 74987 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
74988 }
74989 else {
20083ab9 74990 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
74991 }
74992 }
20083ab9 74993 return extendedKey
ebd8d4e8
IC
74994 }
74995
74996 function showValidationError(errorText) {
74997 DOM.feedback
74998 .text(errorText)
74999 .show();
75000 }
75001
75002 function hideValidationError() {
75003 DOM.feedback
75004 .text("")
75005 .hide();
75006 }
75007
75008 function findPhraseErrors(phrase) {
ebd8d4e8 75009 // Preprocess the words
783981de 75010 phrase = mnemonic.normalizeString(phrase);
0515eeec 75011 var words = phraseToWordArray(phrase);
18abe53b
IC
75012 // Detect blank phrase
75013 if (words.length == 0) {
75014 return "Blank mnemonic";
75015 }
563e401a 75016 // Check each word
0515eeec
IC
75017 for (var i=0; i<words.length; i++) {
75018 var word = words[i];
75019 var language = getLanguage();
75020 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
75021 console.log("Finding closest match to " + word);
75022 var nearestWord = findNearestWord(word);
75023 return word + " not in wordlist, did you mean " + nearestWord + "?";
75024 }
75025 }
ebd8d4e8 75026 // Check the words are valid
0515eeec 75027 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
75028 var isValid = mnemonic.check(properPhrase);
75029 if (!isValid) {
75030 return "Invalid mnemonic";
75031 }
75032 return false;
75033 }
75034
efe41586
IC
75035 function validateRootKey(rootKeyBase58) {
75036 try {
0a8d06d0 75037 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
75038 }
75039 catch (e) {
75040 return "Invalid root key";
75041 }
75042 return "";
75043 }
75044
38523d36 75045 function getDerivationPath() {
20083ab9 75046 if (bip44TabSelected()) {
38523d36
IC
75047 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
75048 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
75049 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
75050 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
75051 var path = "m/";
75052 path += purpose + "'/";
75053 path += coin + "'/";
75054 path += account + "'/";
75055 path += change;
75056 DOM.bip44path.val(path);
75057 var derivationPath = DOM.bip44path.val();
75058 console.log("Using derivation path from BIP44 tab: " + derivationPath);
75059 return derivationPath;
75060 }
cf6c2044 75061 else if (bip49TabSelected()) {
9987f0c1
IC
75062 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
75063 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
75064 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
75065 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
75066 var path = "m/";
75067 path += purpose + "'/";
75068 path += coin + "'/";
75069 path += account + "'/";
75070 path += change;
75071 DOM.bip49path.val(path);
75072 var derivationPath = DOM.bip49path.val();
75073 console.log("Using derivation path from BIP49 tab: " + derivationPath);
75074 return derivationPath;
75075 }
20083ab9 75076 else if (bip32TabSelected()) {
38523d36
IC
75077 var derivationPath = DOM.bip32path.val();
75078 console.log("Using derivation path from BIP32 tab: " + derivationPath);
75079 return derivationPath;
75080 }
cf6c2044
IC
75081 else if (bip141TabSelected()) {
75082 var derivationPath = DOM.bip141path.val();
75083 console.log("Using derivation path from BIP141 tab: " + derivationPath);
75084 return derivationPath;
75085 }
38523d36
IC
75086 else {
75087 console.log("Unknown derivation path");
75088 }
75089 }
75090
ebd8d4e8 75091 function findDerivationPathErrors(path) {
30c9e79d
IC
75092 // TODO is not perfect but is better than nothing
75093 // Inspired by
75094 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
75095 // and
75096 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
75097 var maxDepth = 255; // TODO verify this!!
75098 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
75099 if (path[0] != "m") {
75100 return "First character must be 'm'";
75101 }
75102 if (path.length > 1) {
75103 if (path[1] != "/") {
75104 return "Separator must be '/'";
75105 }
75106 var indexes = path.split("/");
75107 if (indexes.length > maxDepth) {
75108 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
75109 }
75110 for (var depth = 1; depth<indexes.length; depth++) {
75111 var index = indexes[depth];
75112 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
75113 if (invalidChars.length > 0) {
75114 return "Invalid characters " + invalidChars + " found at depth " + depth;
75115 }
75116 var indexValue = parseInt(index.replace("'", ""));
75117 if (isNaN(depth)) {
75118 return "Invalid number at depth " + depth;
75119 }
75120 if (indexValue > maxIndexValue) {
75121 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
75122 }
75123 }
75124 }
0a1f0259
IC
75125 // Check root key exists or else derivation path is useless!
75126 if (!bip32RootKey) {
75127 return "No root key";
75128 }
ba3cb9ec 75129 // Check no hardened derivation path when using xpub keys
8d18f379
IC
75130 var hardenedPath = path.indexOf("'") > -1;
75131 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
75132 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 75133 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
75134 if (hardened && isXpubkey) {
75135 return "Hardened derivation path is invalid with xpub key";
75136 }
ebd8d4e8
IC
75137 return false;
75138 }
75139
20083ab9
IC
75140 function displayBip44Info() {
75141 // Get the derivation path for the account
75142 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
75143 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
75144 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
75145 var path = "m/";
75146 path += purpose + "'/";
75147 path += coin + "'/";
75148 path += account + "'/";
75149 // Calculate the account extended keys
75150 var accountExtendedKey = calcBip32ExtendedKey(path);
75151 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 75152 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
75153 // Display the extended keys
75154 DOM.bip44accountXprv.val(accountXprv);
75155 DOM.bip44accountXpub.val(accountXpub);
75156 }
75157
9987f0c1
IC
75158 function displayBip49Info() {
75159 // Get the derivation path for the account
75160 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
75161 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
75162 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
75163 var path = "m/";
75164 path += purpose + "'/";
75165 path += coin + "'/";
75166 path += account + "'/";
75167 // Calculate the account extended keys
75168 var accountExtendedKey = calcBip32ExtendedKey(path);
75169 var accountXprv = accountExtendedKey.toBase58();
75170 var accountXpub = accountExtendedKey.neutered().toBase58();
75171 // Display the extended keys
75172 DOM.bip49accountXprv.val(accountXprv);
75173 DOM.bip49accountXpub.val(accountXpub);
75174 }
75175
ebd8d4e8
IC
75176 function displayBip32Info() {
75177 // Display the key
73161a92 75178 DOM.seed.val(seed);
ebd8d4e8
IC
75179 var rootKey = bip32RootKey.toBase58();
75180 DOM.rootKey.val(rootKey);
ba3cb9ec 75181 var xprvkeyB58 = "NA";
9987f0c1 75182 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
75183 xprvkeyB58 = bip32ExtendedKey.toBase58();
75184 }
75185 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 75186 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 75187 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
75188 DOM.extendedPubKey.val(extendedPubKey);
75189 // Display the addresses and privkeys
75190 clearAddressesList();
75191 displayAddresses(0, 20);
75192 }
75193
75194 function displayAddresses(start, total) {
40892aba
IC
75195 generationProcesses.push(new (function() {
75196
75197 var rows = [];
75198
75199 this.stop = function() {
75200 for (var i=0; i<rows.length; i++) {
75201 rows[i].shouldGenerate = false;
75202 }
f128bd58 75203 hidePending();
40892aba
IC
75204 }
75205
75206 for (var i=0; i<total; i++) {
75207 var index = i + start;
f128bd58
IC
75208 var isLast = i == total - 1;
75209 rows.push(new TableRow(index, isLast));
40892aba
IC
75210 }
75211
75212 })());
80c4dd2a
IC
75213 }
75214
cf6c2044
IC
75215 function segwitSelected() {
75216 return bip49TabSelected() || bip141TabSelected();
75217 }
75218
75219 function p2wpkhSelected() {
75220 return bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
75221 }
75222
75223 function p2wpkhInP2shSelected() {
75224 return bip49TabSelected() ||
75225 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
0f6b34d6
IC
75226 }
75227
f128bd58 75228 function TableRow(index, isLast) {
80c4dd2a 75229
40892aba
IC
75230 var self = this;
75231 this.shouldGenerate = true;
1975bfbc 75232 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
cf6c2044
IC
75233 var isSegwit = segwitSelected();
75234 var segwitAvailable = networkHasSegwit();
75235 var isP2wpkh = p2wpkhSelected();
75236 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
1975bfbc 75237
80c4dd2a
IC
75238 function init() {
75239 calculateValues();
75240 }
75241
75242 function calculateValues() {
75243 setTimeout(function() {
40892aba
IC
75244 if (!self.shouldGenerate) {
75245 return;
75246 }
9987f0c1 75247 var key = "NA";
1975bfbc
IC
75248 if (useHardenedAddresses) {
75249 key = bip32ExtendedKey.deriveHardened(index);
75250 }
75251 else {
75252 key = bip32ExtendedKey.derive(index);
75253 }
80c4dd2a 75254 var address = key.getAddress().toString();
ba3cb9ec 75255 var privkey = "NA";
9987f0c1
IC
75256 if (!key.isNeutered()) {
75257 privkey = key.keyPair.toWIF(network);
ba3cb9ec 75258 }
9987f0c1 75259 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 75260 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
75261 if (useHardenedAddresses) {
75262 indexText = indexText + "'";
75263 }
8b095871 75264 // Ethereum values are different
534481b6 75265 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 75266 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
75267 privkey = privKeyBuffer.toString('hex');
75268 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
75269 var hexAddress = addressBuffer.toString('hex');
75270 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
75271 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
75272 privkey = ethUtil.addHexPrefix(privkey);
75273 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 75274 }
8a1f452d 75275 // Ripple values are different
534481b6 75276 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 75277 privkey = convertRipplePriv(privkey);
75278 address = convertRippleAdrr(address);
75279 }
cf6c2044
IC
75280 // Segwit addresses are different
75281 if (isSegwit) {
75282 if (!segwitAvailable) {
9987f0c1
IC
75283 return;
75284 }
cf6c2044
IC
75285 if (isP2wpkh) {
75286 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
75287 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
75288 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
75289 }
75290 else if (isP2wpkhInP2sh) {
75291 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
75292 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
75293 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
75294 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
75295 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
75296 }
9987f0c1 75297 }
1b12b2f5 75298 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
75299 if (isLast) {
75300 hidePending();
75301 }
80c4dd2a 75302 }, 50)
ebd8d4e8 75303 }
80c4dd2a
IC
75304
75305 init();
75306
ebd8d4e8
IC
75307 }
75308
75309 function showMore() {
ebd8d4e8
IC
75310 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
75311 if (isNaN(rowsToAdd)) {
75312 rowsToAdd = 20;
75313 DOM.rowsToAdd.val("20");
75314 }
924727ed
IC
75315 var start = parseInt(DOM.moreRowsStartIndex.val())
75316 if (isNaN(start)) {
75317 start = lastIndexInTable() + 1;
75318 }
75319 else {
75320 var newStart = start + rowsToAdd;
75321 DOM.moreRowsStartIndex.val(newStart);
75322 }
ebd8d4e8
IC
75323 if (rowsToAdd > 200) {
75324 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
75325 msg += "Do you want to continue?";
75326 if (!confirm(msg)) {
75327 return;
75328 }
75329 }
ebd8d4e8 75330 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
75331 }
75332
75333 function clearDisplay() {
75334 clearAddressesList();
9987f0c1 75335 clearKeys();
ebd8d4e8
IC
75336 hideValidationError();
75337 }
75338
75339 function clearAddressesList() {
75340 DOM.addresses.empty();
40892aba
IC
75341 stopGenerating();
75342 }
75343
75344 function stopGenerating() {
75345 while (generationProcesses.length > 0) {
75346 var generation = generationProcesses.shift();
75347 generation.stop();
75348 }
ebd8d4e8
IC
75349 }
75350
9987f0c1
IC
75351 function clearKeys() {
75352 clearRootKey();
75353 clearDerivedKeys();
75354 }
75355
75356 function clearRootKey() {
ebd8d4e8 75357 DOM.rootKey.val("");
9987f0c1
IC
75358 }
75359
75360 function clearDerivedKeys() {
ebd8d4e8
IC
75361 DOM.extendedPrivKey.val("");
75362 DOM.extendedPubKey.val("");
9987f0c1
IC
75363 DOM.bip44accountXprv.val("");
75364 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
75365 }
75366
1b12b2f5 75367 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 75368 var row = $(addressRowTemplate.html());
80c4dd2a
IC
75369 // Elements
75370 var indexCell = row.find(".index span");
75371 var addressCell = row.find(".address span");
1b12b2f5 75372 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
75373 var privkeyCell = row.find(".privkey span");
75374 // Content
ae30fed8 75375 indexCell.text(indexText);
80c4dd2a 75376 addressCell.text(address);
1b12b2f5 75377 pubkeyCell.text(pubkey);
80c4dd2a
IC
75378 privkeyCell.text(privkey);
75379 // Visibility
75380 if (!showIndex) {
75381 indexCell.addClass("invisible");
75382 }
75383 if (!showAddress) {
75384 addressCell.addClass("invisible");
75385 }
1b12b2f5
IC
75386 if (!showPubKey) {
75387 pubkeyCell.addClass("invisible");
75388 }
80c4dd2a 75389 if (!showPrivKey) {
6d628db7 75390 privkeyCell.addClass("invisible");
80c4dd2a 75391 }
ebd8d4e8 75392 DOM.addresses.append(row);
e00964cc
IC
75393 var rowShowQrEls = row.find("[data-show-qr]");
75394 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
75395 }
75396
75397 function hasStrongRandom() {
75398 return 'crypto' in window && window['crypto'] !== null;
75399 }
75400
75401 function disableForms() {
75402 $("form").on("submit", function(e) {
75403 e.preventDefault();
75404 });
75405 }
75406
ebd8d4e8
IC
75407 function parseIntNoNaN(val, defaultVal) {
75408 var v = parseInt(val);
75409 if (isNaN(v)) {
75410 return defaultVal;
75411 }
75412 return v;
75413 }
75414
75415 function showPending() {
75416 DOM.feedback
75417 .text("Calculating...")
75418 .show();
75419 }
75420
563e401a 75421 function findNearestWord(word) {
0515eeec
IC
75422 var language = getLanguage();
75423 var words = WORDLISTS[language];
563e401a
IC
75424 var minDistance = 99;
75425 var closestWord = words[0];
75426 for (var i=0; i<words.length; i++) {
75427 var comparedTo = words[i];
6ea15134
IC
75428 if (comparedTo.indexOf(word) == 0) {
75429 return comparedTo;
75430 }
563e401a
IC
75431 var distance = Levenshtein.get(word, comparedTo);
75432 if (distance < minDistance) {
75433 closestWord = comparedTo;
75434 minDistance = distance;
75435 }
75436 }
75437 return closestWord;
75438 }
75439
ebd8d4e8
IC
75440 function hidePending() {
75441 DOM.feedback
75442 .text("")
75443 .hide();
75444 }
75445
ab78acc6
IC
75446 function populateNetworkSelect() {
75447 for (var i=0; i<networks.length; i++) {
75448 var network = networks[i];
75449 var option = $("<option>");
75450 option.attr("value", i);
75451 option.text(network.name);
b3cc3930
IC
75452 if (network.name == "BTC - Bitcoin") {
75453 option.prop("selected", true);
75454 }
ab78acc6
IC
75455 DOM.phraseNetwork.append(option);
75456 }
75457 }
75458
56530adc
IC
75459 function populateClientSelect() {
75460 for (var i=0; i<clients.length; i++) {
75461 var client = clients[i];
75462 var option = $("<option>");
75463 option.attr("value", i);
75464 option.text(client.name);
75465 DOM.bip32Client.append(option);
75466 }
75467 }
75468
0515eeec
IC
75469 function getLanguage() {
75470 var defaultLanguage = "english";
75471 // Try to get from existing phrase
75472 var language = getLanguageFromPhrase();
75473 // Try to get from url if not from phrase
75474 if (language.length == 0) {
75475 language = getLanguageFromUrl();
75476 }
75477 // Default to English if no other option
75478 if (language.length == 0) {
75479 language = defaultLanguage;
75480 }
75481 return language;
75482 }
75483
75484 function getLanguageFromPhrase(phrase) {
75485 // Check if how many words from existing phrase match a language.
75486 var language = "";
75487 if (!phrase) {
75488 phrase = DOM.phrase.val();
75489 }
75490 if (phrase.length > 0) {
75491 var words = phraseToWordArray(phrase);
75492 var languageMatches = {};
75493 for (l in WORDLISTS) {
75494 // Track how many words match in this language
75495 languageMatches[l] = 0;
75496 for (var i=0; i<words.length; i++) {
75497 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
75498 if (wordInLanguage) {
75499 languageMatches[l]++;
75500 }
75501 }
75502 // Find languages with most word matches.
75503 // This is made difficult due to commonalities between Chinese
75504 // simplified vs traditional.
75505 var mostMatches = 0;
75506 var mostMatchedLanguages = [];
75507 for (var l in languageMatches) {
75508 var numMatches = languageMatches[l];
75509 if (numMatches > mostMatches) {
75510 mostMatches = numMatches;
75511 mostMatchedLanguages = [l];
75512 }
75513 else if (numMatches == mostMatches) {
75514 mostMatchedLanguages.push(l);
75515 }
75516 }
75517 }
75518 if (mostMatchedLanguages.length > 0) {
75519 // Use first language and warn if multiple detected
75520 language = mostMatchedLanguages[0];
75521 if (mostMatchedLanguages.length > 1) {
75522 console.warn("Multiple possible languages");
75523 console.warn(mostMatchedLanguages);
75524 }
75525 }
75526 }
75527 return language;
75528 }
75529
75530 function getLanguageFromUrl() {
c6624d51
IC
75531 for (var language in WORDLISTS) {
75532 if (window.location.hash.indexOf(language) > -1) {
75533 return language;
75534 }
75535 }
75536 return "";
0515eeec
IC
75537 }
75538
75539 function setMnemonicLanguage() {
75540 var language = getLanguage();
75541 // Load the bip39 mnemonic generator for this language if required
75542 if (!(language in mnemonics)) {
75543 mnemonics[language] = new Mnemonic(language);
75544 }
75545 mnemonic = mnemonics[language];
75546 }
75547
75548 function convertPhraseToNewLanguage() {
75549 var oldLanguage = getLanguageFromPhrase();
75550 var newLanguage = getLanguageFromUrl();
75551 var oldPhrase = DOM.phrase.val();
75552 var oldWords = phraseToWordArray(oldPhrase);
75553 var newWords = [];
75554 for (var i=0; i<oldWords.length; i++) {
75555 var oldWord = oldWords[i];
75556 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
75557 var newWord = WORDLISTS[newLanguage][index];
75558 newWords.push(newWord);
75559 }
75560 newPhrase = wordArrayToPhrase(newWords);
75561 return newPhrase;
75562 }
75563
75564 // TODO look at jsbip39 - mnemonic.splitWords
75565 function phraseToWordArray(phrase) {
75566 var words = phrase.split(/\s/g);
75567 var noBlanks = [];
75568 for (var i=0; i<words.length; i++) {
75569 var word = words[i];
75570 if (word.length > 0) {
75571 noBlanks.push(word);
75572 }
75573 }
75574 return noBlanks;
75575 }
75576
75577 // TODO look at jsbip39 - mnemonic.joinWords
75578 function wordArrayToPhrase(words) {
75579 var phrase = words.join(" ");
75580 var language = getLanguageFromPhrase(phrase);
75581 if (language == "japanese") {
75582 phrase = words.join("\u3000");
75583 }
75584 return phrase;
75585 }
75586
c6624d51
IC
75587 function isUsingOwnEntropy() {
75588 return DOM.useEntropy.prop("checked");
75589 }
75590
75591 function setMnemonicFromEntropy() {
2a6dd137 75592 clearEntropyFeedback();
18abe53b 75593 // Get entropy value
c6624d51 75594 var entropyStr = DOM.entropy.val();
18abe53b 75595 // Work out minimum base for entropy
c6624d51 75596 var entropy = Entropy.fromString(entropyStr);
18abe53b 75597 if (entropy.binaryStr.length == 0) {
c6624d51
IC
75598 return;
75599 }
75600 // Show entropy details
18abe53b
IC
75601 showEntropyFeedback(entropy);
75602 // Use entropy hash if not using raw entropy
75603 var bits = entropy.binaryStr;
75604 var mnemonicLength = DOM.entropyMnemonicLength.val();
75605 if (mnemonicLength != "raw") {
75606 // Get bits by hashing entropy with SHA256
75607 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
75608 var hex = sjcl.codec.hex.fromBits(hash);
75609 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 75610 while (bits.length % 256 != 0) {
18abe53b
IC
75611 bits = "0" + bits;
75612 }
75613 // Truncate hash to suit number of words
75614 mnemonicLength = parseInt(mnemonicLength);
75615 var numberOfBits = 32 * mnemonicLength / 3;
75616 bits = bits.substring(0, numberOfBits);
c6624d51 75617 }
c6624d51 75618 // Discard trailing entropy
18abe53b 75619 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
75620 var start = bits.length - bitsToUse;
75621 var binaryStr = bits.substring(start);
c6624d51
IC
75622 // Convert entropy string to numeric array
75623 var entropyArr = [];
18abe53b
IC
75624 for (var i=0; i<binaryStr.length / 8; i++) {
75625 var byteAsBits = binaryStr.substring(i*8, i*8+8);
75626 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
75627 entropyArr.push(entropyByte)
75628 }
75629 // Convert entropy array to mnemonic
75630 var phrase = mnemonic.toMnemonic(entropyArr);
75631 // Set the mnemonic in the UI
75632 DOM.phrase.val(phrase);
26dd39fd
IC
75633 // Show the word indexes
75634 showWordIndexes();
c6624d51
IC
75635 }
75636
2a6dd137 75637 function clearEntropyFeedback() {
f1e5d484 75638 DOM.entropyCrackTime.text("...");
18abe53b 75639 DOM.entropyType.text("");
2a6dd137
IC
75640 DOM.entropyWordCount.text("0");
75641 DOM.entropyEventCount.text("0");
75642 DOM.entropyBitsPerEvent.text("0");
75643 DOM.entropyBits.text("0");
75644 DOM.entropyFiltered.html("&nbsp;");
75645 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
75646 }
75647
18abe53b 75648 function showEntropyFeedback(entropy) {
9e97eb76 75649 var numberOfBits = entropy.binaryStr.length;
f1e5d484 75650 var timeToCrack = "unknown";
95f04905
IC
75651 try {
75652 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
75653 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
75654 if (z.feedback.warning != "") {
75655 timeToCrack = timeToCrack + " - " + z.feedback.warning;
75656 };
18abe53b 75657 }
95f04905 75658 catch (e) {
95f04905
IC
75659 console.log("Error detecting entropy strength with zxcvbn:");
75660 console.log(e);
75661 }
95f04905 75662 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 75663 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 75664 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 75665 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 75666 DOM.entropyType.text(entropyTypeStr);
f1e5d484 75667 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 75668 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 75669 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
75670 DOM.entropyWordCount.text(wordCount);
75671 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 75672 DOM.entropyBitsPerEvent.text(bitsPerEvent);
9ff30bab
IC
75673 // detect and warn of filtering
75674 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
75675 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
75676 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
75677 if (isFiltered) {
75678 DOM.entropyFilterWarning.removeClass('hidden');
75679 }
75680 else {
75681 DOM.entropyFilterWarning.addClass('hidden');
75682 }
95f04905
IC
75683 }
75684
75685 function getEntropyTypeStr(entropy) {
75686 var typeStr = entropy.base.str;
75687 // Add some detail if these are cards
75688 if (entropy.base.asInt == 52) {
75689 var cardDetail = []; // array of message strings
75690 // Detect duplicates
75691 var dupes = [];
75692 var dupeTracker = {};
75693 for (var i=0; i<entropy.base.parts.length; i++) {
75694 var card = entropy.base.parts[i];
9e97eb76
IC
75695 var cardUpper = card.toUpperCase();
75696 if (cardUpper in dupeTracker) {
95f04905
IC
75697 dupes.push(card);
75698 }
9e97eb76 75699 dupeTracker[cardUpper] = true;
95f04905
IC
75700 }
75701 if (dupes.length > 0) {
75702 var dupeWord = "duplicates";
75703 if (dupes.length == 1) {
75704 dupeWord = "duplicate";
75705 }
75706 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
75707 if (dupes.length > 3) {
75708 msg += "...";
75709 }
75710 cardDetail.push(msg);
75711 }
75712 // Detect full deck
75713 var uniqueCards = [];
75714 for (var uniqueCard in dupeTracker) {
75715 uniqueCards.push(uniqueCard);
75716 }
75717 if (uniqueCards.length == 52) {
75718 cardDetail.unshift("full deck");
75719 }
9e97eb76
IC
75720 // Detect missing cards
75721 var values = "A23456789TJQK";
75722 var suits = "CDHS";
75723 var missingCards = [];
75724 for (var i=0; i<suits.length; i++) {
75725 for (var j=0; j<values.length; j++) {
75726 var card = values[j] + suits[i];
75727 if (!(card in dupeTracker)) {
75728 missingCards.push(card);
75729 }
75730 }
75731 }
75732 // Display missing cards if six or less, ie clearly going for full deck
75733 if (missingCards.length > 0 && missingCards.length <= 6) {
75734 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
75735 if (missingCards.length > 3) {
75736 msg += "...";
75737 }
75738 cardDetail.push(msg);
75739 }
95f04905
IC
75740 // Add card details to typeStr
75741 if (cardDetail.length > 0) {
75742 typeStr += " (" + cardDetail.join(", ") + ")";
75743 }
75744 }
75745 return typeStr;
75746 }
75747
e00964cc
IC
75748 function setQrEvents(els) {
75749 els.on("mouseenter", createQr);
75750 els.on("mouseleave", destroyQr);
75751 els.on("click", toggleQr);
75752 }
75753
75754 function createQr(e) {
75755 var content = e.target.textContent || e.target.value;
75756 if (content) {
26dd39fd
IC
75757 var qrEl = kjua({
75758 text: content,
75759 render: "canvas",
75760 size: 310,
75761 ecLevel: 'H',
75762 });
75763 DOM.qrImage.append(qrEl);
e00964cc 75764 if (!showQr) {
52da415f
IC
75765 DOM.qrHider.addClass("hidden");
75766 }
75767 else {
75768 DOM.qrHider.removeClass("hidden");
e00964cc
IC
75769 }
75770 DOM.qrContainer.removeClass("hidden");
75771 }
75772 }
75773
75774 function destroyQr() {
75775 DOM.qrImage.text("");
75776 DOM.qrContainer.addClass("hidden");
75777 }
75778
75779 function toggleQr() {
75780 showQr = !showQr;
52da415f 75781 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
75782 DOM.qrHint.toggleClass("hidden");
75783 }
75784
20083ab9
IC
75785 function bip44TabSelected() {
75786 return DOM.bip44tab.hasClass("active");
75787 }
75788
75789 function bip32TabSelected() {
75790 return DOM.bip32tab.hasClass("active");
75791 }
75792
cf6c2044
IC
75793 function networkHasSegwit() {
75794 return networks[DOM.network.val()].segwitAvailable;
9987f0c1
IC
75795 }
75796
75797 function bip49TabSelected() {
75798 return DOM.bip49tab.hasClass("active");
75799 }
75800
cf6c2044
IC
75801 function bip141TabSelected() {
75802 return DOM.bip141tab.hasClass("active");
75803 }
75804
9987f0c1
IC
75805 function setHdCoin(coinValue) {
75806 DOM.bip44coin.val(coinValue);
75807 DOM.bip49coin.val(coinValue);
75808 }
75809
cf6c2044 75810 function showSegwitAvailable() {
9987f0c1
IC
75811 DOM.bip49unavailable.addClass("hidden");
75812 DOM.bip49available.removeClass("hidden");
cf6c2044
IC
75813 DOM.bip141unavailable.addClass("hidden");
75814 DOM.bip141available.removeClass("hidden");
9987f0c1
IC
75815 }
75816
cf6c2044 75817 function showSegwitUnavailable() {
9987f0c1
IC
75818 DOM.bip49available.addClass("hidden");
75819 DOM.bip49unavailable.removeClass("hidden");
cf6c2044
IC
75820 DOM.bip141available.addClass("hidden");
75821 DOM.bip141unavailable.removeClass("hidden");
9987f0c1
IC
75822 }
75823
0f6b34d6
IC
75824 function useBitpayAddresses() {
75825 return !(DOM.useBitpayAddresses.prop("checked"));
75826 }
75827
75828 function setBitcoinCashNetworkValues() {
75829 if (useBitpayAddresses()) {
75830 network = bitcoinjs.bitcoin.networks.bitcoin;
75831 }
75832 else {
75833 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
75834 }
75835 }
75836
cf6c2044
IC
75837 function adjustNetworkForSegwit() {
75838 // If segwit is selected the xpub/xprv prefixes need to be adjusted
0f6b34d6
IC
75839 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
75840 // wallet.
75841 // See https://github.com/iancoleman/bip39/issues/125
cf6c2044
IC
75842 var segwitNetworks = null;
75843 // if a segwit network is alread selected, need to use base network to
75844 // look up new parameters
75845 if ("baseNetwork" in network) {
75846 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
0f6b34d6 75847 }
cf6c2044
IC
75848 // choose the right segwit params
75849 if (p2wpkhSelected() && "p2wpkh" in network) {
75850 network = network.p2wpkh;
75851 }
75852 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
75853 network = network.p2wpkhInP2sh;
0f6b34d6
IC
75854 }
75855 }
75856
924727ed
IC
75857 function lastIndexInTable() {
75858 var pathText = DOM.addresses.find(".index").last().text();
75859 var pathBits = pathText.split("/");
75860 var lastBit = pathBits[pathBits.length-1];
75861 var lastBitClean = lastBit.replace("'", "");
75862 return parseInt(lastBitClean);
75863 }
75864
26dd39fd
IC
75865 function uint8ArrayToHex(a) {
75866 var s = ""
75867 for (var i=0; i<a.length; i++) {
75868 var h = a[i].toString(16);
75869 while (h.length < 2) {
75870 h = "0" + h;
75871 }
75872 s = s + h;
75873 }
75874 return s;
75875 }
75876
75877 function showWordIndexes() {
75878 var phrase = DOM.phrase.val();
75879 var words = phraseToWordArray(phrase);
75880 var wordIndexes = [];
75881 var language = getLanguage();
75882 for (var i=0; i<words.length; i++) {
75883 var word = words[i];
75884 var wordIndex = WORDLISTS[language].indexOf(word);
75885 wordIndexes.push(wordIndex);
75886 }
75887 var wordIndexesStr = wordIndexes.join(", ");
75888 DOM.entropyWordIndexes.text(wordIndexesStr);
75889 }
75890
ab78acc6 75891 var networks = [
b3cc3930
IC
75892 {
75893 name: "BCH - Bitcoin Cash",
cf6c2044 75894 segwitAvailable: false,
b3cc3930 75895 onSelect: function() {
0f6b34d6
IC
75896 DOM.useBitpayAddressesContainer.removeClass("hidden");
75897 setBitcoinCashNetworkValues();
b3cc3930
IC
75898 setHdCoin(145);
75899 },
75900 },
ab78acc6 75901 {
534481b6 75902 name: "BTC - Bitcoin",
cf6c2044 75903 segwitAvailable: true,
ab78acc6 75904 onSelect: function() {
9987f0c1
IC
75905 network = bitcoinjs.bitcoin.networks.bitcoin;
75906 setHdCoin(0);
ab78acc6
IC
75907 },
75908 },
75909 {
534481b6 75910 name: "BTC - Bitcoin Testnet",
cf6c2044 75911 segwitAvailable: true,
ab78acc6 75912 onSelect: function() {
9987f0c1
IC
75913 network = bitcoinjs.bitcoin.networks.testnet;
75914 setHdCoin(1);
ab78acc6
IC
75915 },
75916 },
39608073
RS
75917 {
75918 name: "BTG - Bitcoin Gold",
cf6c2044 75919 segwitAvailable: true,
39608073
RS
75920 onSelect: function() {
75921 network = bitcoinjs.bitcoin.networks.bgold;
75922 setHdCoin(0);
75923 },
75924 },
ab78acc6 75925 {
534481b6 75926 name: "CLAM - Clams",
cf6c2044 75927 segwitAvailable: false,
ab78acc6 75928 onSelect: function() {
9987f0c1
IC
75929 network = bitcoinjs.bitcoin.networks.clam;
75930 setHdCoin(23);
ab78acc6
IC
75931 },
75932 },
0921f370 75933 {
75934 name: "CRW - Crown",
cf6c2044 75935 segwitAvailable: false,
0921f370 75936 onSelect: function() {
9987f0c1
IC
75937 network = bitcoinjs.bitcoin.networks.crown;
75938 setHdCoin(72);
0921f370 75939 },
75940 },
ab78acc6 75941 {
534481b6 75942 name: "DASH - Dash",
cf6c2044 75943 segwitAvailable: false,
d5dc92fd 75944 onSelect: function() {
9987f0c1
IC
75945 network = bitcoinjs.bitcoin.networks.dash;
75946 setHdCoin(5);
d5dc92fd
IC
75947 },
75948 },
c0386f3b 75949 {
534481b6 75950 name: "DASH - Dash Testnet",
cf6c2044 75951 segwitAvailable: false,
c0386f3b 75952 onSelect: function() {
9987f0c1
IC
75953 network = bitcoinjs.bitcoin.networks.dashtn;
75954 setHdCoin(1);
c0386f3b
KR
75955 },
75956 },
d5dc92fd 75957 {
534481b6 75958 name: "DOGE - Dogecoin",
cf6c2044 75959 segwitAvailable: false,
534481b6 75960 onSelect: function() {
9987f0c1
IC
75961 network = bitcoinjs.bitcoin.networks.dogecoin;
75962 setHdCoin(3);
534481b6 75963 },
75964 },
75965 {
75966 name: "ETH - Ethereum",
cf6c2044 75967 segwitAvailable: false,
d5dc92fd 75968 onSelect: function() {
9987f0c1
IC
75969 network = bitcoinjs.bitcoin.networks.bitcoin;
75970 setHdCoin(60);
d5dc92fd
IC
75971 },
75972 },
1102f201
IC
75973 {
75974 name: "FJC - Fujicoin",
cf6c2044 75975 segwitAvailable: false,
1102f201
IC
75976 onSelect: function() {
75977 network = bitcoinjs.bitcoin.networks.fujicoin;
75978 setHdCoin(75);
75979 },
75980 },
f88fab20 75981 {
534481b6 75982 name: "GAME - GameCredits",
cf6c2044 75983 segwitAvailable: false,
f88fab20 75984 onSelect: function() {
9987f0c1
IC
75985 network = bitcoinjs.bitcoin.networks.game;
75986 setHdCoin(101);
f88fab20 75987 },
75988 },
a3baa26e 75989 {
534481b6 75990 name: "JBS - Jumbucks",
cf6c2044 75991 segwitAvailable: false,
a3baa26e 75992 onSelect: function() {
9987f0c1
IC
75993 network = bitcoinjs.bitcoin.networks.jumbucks;
75994 setHdCoin(26);
a3baa26e
IC
75995 },
75996 },
75997 {
534481b6 75998 name: "LTC - Litecoin",
cf6c2044 75999 segwitAvailable: true,
a3baa26e 76000 onSelect: function() {
9987f0c1
IC
76001 network = bitcoinjs.bitcoin.networks.litecoin;
76002 setHdCoin(2);
8d18f379 76003 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
76004 },
76005 },
56ad9601
JS
76006 {
76007 name: "MAZA - Maza",
cf6c2044 76008 segwitAvailable: false,
56ad9601
JS
76009 onSelect: function() {
76010 network = bitcoinjs.bitcoin.networks.maza;
76011 setHdCoin(13);
76012 },
76013 },
924727ed
IC
76014 {
76015 name: "MONA - Monacoin",
cf6c2044 76016 segwitAvailable: true,
924727ed
IC
76017 onSelect: function() {
76018 network = bitcoinjs.bitcoin.networks.monacoin,
76019 setHdCoin(22);
76020 },
76021 },
a3baa26e 76022 {
534481b6 76023 name: "NMC - Namecoin",
cf6c2044 76024 segwitAvailable: false,
a3baa26e 76025 onSelect: function() {
9987f0c1
IC
76026 network = bitcoinjs.bitcoin.networks.namecoin;
76027 setHdCoin(7);
a3baa26e
IC
76028 },
76029 },
f128bd58
IC
76030 {
76031 name: "PIVX - PIVX",
cf6c2044 76032 segwitAvailable: false,
f128bd58
IC
76033 onSelect: function() {
76034 network = bitcoinjs.bitcoin.networks.pivx;
76035 setHdCoin(119);
76036 },
76037 },
76038 {
76039 name: "PIVX - PIVX Testnet",
cf6c2044 76040 segwitAvailable: false,
f128bd58
IC
76041 onSelect: function() {
76042 network = bitcoinjs.bitcoin.networks.pivxtestnet;
76043 setHdCoin(1);
76044 },
76045 },
5c434a8a 76046 {
534481b6 76047 name: "PPC - Peercoin",
cf6c2044 76048 segwitAvailable: false,
5c434a8a 76049 onSelect: function() {
9987f0c1
IC
76050 network = bitcoinjs.bitcoin.networks.peercoin;
76051 setHdCoin(6);
5c434a8a
CM
76052 },
76053 },
8a1f452d 76054 {
534481b6 76055 name: "SDC - ShadowCash",
cf6c2044 76056 segwitAvailable: false,
5493efc3 76057 onSelect: function() {
9987f0c1
IC
76058 network = bitcoinjs.bitcoin.networks.shadow;
76059 setHdCoin(35);
5493efc3 76060 },
76061 },
07ac4350 76062 {
534481b6 76063 name: "SDC - ShadowCash Testnet",
cf6c2044 76064 segwitAvailable: false,
07ac4350 76065 onSelect: function() {
9987f0c1
IC
76066 network = bitcoinjs.bitcoin.networks.shadowtn;
76067 setHdCoin(1);
07ac4350 76068 },
76069 },
01e81e53 76070 {
534481b6 76071 name: "SLM - Slimcoin",
cf6c2044 76072 segwitAvailable: false,
01e81e53 76073 onSelect: function() {
9987f0c1
IC
76074 network = bitcoinjs.bitcoin.networks.slimcoin;
76075 setHdCoin(63);
01e81e53
GH
76076 },
76077 },
76078 {
534481b6 76079 name: "SLM - Slimcoin Testnet",
cf6c2044 76080 segwitAvailable: false,
01e81e53 76081 onSelect: function() {
9987f0c1
IC
76082 network = bitcoinjs.bitcoin.networks.slimcointn;
76083 setHdCoin(111);
01e81e53
GH
76084 },
76085 },
0f6b34d6
IC
76086 {
76087 name: "USNBT - NuBits",
cf6c2044 76088 segwitAvailable: false,
0f6b34d6
IC
76089 onSelect: function() {
76090 network = bitcoinjs.bitcoin.networks.nubits;
76091 setHdCoin(12);
76092 },
76093 },
07ac4350 76094 {
534481b6 76095 name: "VIA - Viacoin",
cf6c2044 76096 segwitAvailable: false,
07ac4350 76097 onSelect: function() {
9987f0c1
IC
76098 network = bitcoinjs.bitcoin.networks.viacoin;
76099 setHdCoin(14);
07ac4350 76100 },
76101 },
8b095871 76102 {
534481b6 76103 name: "VIA - Viacoin Testnet",
cf6c2044 76104 segwitAvailable: false,
8b095871 76105 onSelect: function() {
9987f0c1
IC
76106 network = bitcoinjs.bitcoin.networks.viacointestnet;
76107 setHdCoin(1);
8b095871
IC
76108 },
76109 },
b3cc3930
IC
76110 {
76111 name: "XMY - Myriadcoin",
cf6c2044 76112 segwitAvailable: false,
b3cc3930
IC
76113 onSelect: function() {
76114 network = bitcoinjs.bitcoin.networks.myriadcoin;
76115 setHdCoin(90);
76116 },
76117 },
534481b6 76118 {
76119 name: "XRP - Ripple",
cf6c2044 76120 segwitAvailable: false,
534481b6 76121 onSelect: function() {
9987f0c1
IC
76122 network = bitcoinjs.bitcoin.networks.bitcoin;
76123 setHdCoin(144);
534481b6 76124 },
76125 }
ab78acc6
IC
76126 ]
76127
56530adc
IC
76128 var clients = [
76129 {
76130 name: "Bitcoin Core",
76131 onSelect: function() {
76132 DOM.bip32path.val("m/0'/0'");
76133 DOM.hardenedAddresses.prop('checked', true);
76134 },
76135 },
76136 {
76137 name: "blockchain.info",
76138 onSelect: function() {
76139 DOM.bip32path.val("m/44'/0'/0'");
76140 DOM.hardenedAddresses.prop('checked', false);
76141 },
76142 },
76143 {
76144 name: "MultiBit HD",
76145 onSelect: function() {
76146 DOM.bip32path.val("m/0'/0");
76147 DOM.hardenedAddresses.prop('checked', false);
76148 },
76149 }
76150 ]
76151
ebd8d4e8
IC
76152 init();
76153
76154})();
dc55c6b0 76155</script>
ebd8d4e8
IC
76156 </body>
76157</html>