]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
New cells show with correct visibility
[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>
ebd8d4e8
IC
6 <style>
7/*!
8 * Bootstrap v3.2.0 (http://getbootstrap.com)
9 * Copyright 2011-2014 Twitter, Inc.
10 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3af2954a
IC
11 */
12
13/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
14html {
15 font-family: sans-serif;
16 -webkit-text-size-adjust: 100%;
17 -ms-text-size-adjust: 100%;
18}
19body {
20 margin: 0;
21}
22article,
23aside,
24details,
25figcaption,
26figure,
27footer,
28header,
29hgroup,
30main,
31nav,
32section,
33summary {
34 display: block;
35}
36audio,
37canvas,
38progress,
39video {
40 display: inline-block;
41 vertical-align: baseline;
42}
43audio:not([controls]) {
44 display: none;
45 height: 0;
46}
47[hidden],
48template {
49 display: none;
50}
51a {
52 background: transparent;
53}
54a:active,
55a:hover {
56 outline: 0;
57}
58abbr[title] {
59 border-bottom: 1px dotted;
60}
61b,
62strong {
63 font-weight: bold;
64}
65dfn {
66 font-style: italic;
67}
68h1 {
69 margin: .67em 0;
70 font-size: 2em;
71}
72mark {
73 color: #000;
74 background: #ff0;
75}
76small {
77 font-size: 80%;
78}
79sub,
80sup {
81 position: relative;
82 font-size: 75%;
83 line-height: 0;
84 vertical-align: baseline;
85}
86sup {
87 top: -.5em;
88}
89sub {
90 bottom: -.25em;
91}
92img {
93 border: 0;
94}
95svg:not(:root) {
96 overflow: hidden;
97}
98figure {
99 margin: 1em 40px;
100}
101hr {
102 height: 0;
103 -webkit-box-sizing: content-box;
104 -moz-box-sizing: content-box;
105 box-sizing: content-box;
106}
107pre {
108 overflow: auto;
109}
110code,
111kbd,
112pre,
113samp {
114 font-family: monospace, monospace;
115 font-size: 1em;
116}
117button,
118input,
119optgroup,
120select,
121textarea {
122 margin: 0;
123 font: inherit;
124 color: inherit;
125}
126button {
127 overflow: visible;
128}
129button,
130select {
131 text-transform: none;
132}
133button,
134html input[type="button"],
135input[type="reset"],
136input[type="submit"] {
137 -webkit-appearance: button;
138 cursor: pointer;
139}
140button[disabled],
141html input[disabled] {
142 cursor: default;
143}
144button::-moz-focus-inner,
145input::-moz-focus-inner {
146 padding: 0;
147 border: 0;
148}
149input {
150 line-height: normal;
151}
152input[type="checkbox"],
153input[type="radio"] {
154 -webkit-box-sizing: border-box;
155 -moz-box-sizing: border-box;
156 box-sizing: border-box;
157 padding: 0;
158}
159input[type="number"]::-webkit-inner-spin-button,
160input[type="number"]::-webkit-outer-spin-button {
161 height: auto;
162}
163input[type="search"] {
164 -webkit-box-sizing: content-box;
165 -moz-box-sizing: content-box;
166 box-sizing: content-box;
167 -webkit-appearance: textfield;
168}
169input[type="search"]::-webkit-search-cancel-button,
170input[type="search"]::-webkit-search-decoration {
171 -webkit-appearance: none;
172}
173fieldset {
174 padding: .35em .625em .75em;
175 margin: 0 2px;
176 border: 1px solid #c0c0c0;
177}
178legend {
179 padding: 0;
180 border: 0;
181}
182textarea {
183 overflow: auto;
184}
185optgroup {
186 font-weight: bold;
187}
188table {
189 border-spacing: 0;
190 border-collapse: collapse;
191}
192td,
193th {
194 padding: 0;
195}
196@media print {
197 * {
198 color: #000 !important;
199 text-shadow: none !important;
200 background: transparent !important;
201 -webkit-box-shadow: none !important;
202 box-shadow: none !important;
203 }
204 a,
205 a:visited {
206 text-decoration: underline;
207 }
208 a[href]:after {
209 content: " (" attr(href) ")";
210 }
211 abbr[title]:after {
212 content: " (" attr(title) ")";
213 }
214 a[href^="javascript:"]:after,
215 a[href^="#"]:after {
216 content: "";
217 }
218 pre,
219 blockquote {
220 border: 1px solid #999;
221
222 page-break-inside: avoid;
223 }
224 thead {
225 display: table-header-group;
226 }
227 tr,
228 img {
229 page-break-inside: avoid;
230 }
231 img {
232 max-width: 100% !important;
233 }
234 p,
235 h2,
236 h3 {
237 orphans: 3;
238 widows: 3;
239 }
240 h2,
241 h3 {
242 page-break-after: avoid;
243 }
244 select {
245 background: #fff !important;
246 }
247 .navbar {
248 display: none;
249 }
250 .table td,
251 .table th {
252 background-color: #fff !important;
253 }
254 .btn > .caret,
255 .dropup > .btn > .caret {
256 border-top-color: #000 !important;
257 }
258 .label {
259 border: 1px solid #000;
260 }
261 .table {
262 border-collapse: collapse !important;
263 }
264 .table-bordered th,
265 .table-bordered td {
266 border: 1px solid #ddd !important;
267 }
268}
269@font-face {
270 font-family: 'Glyphicons Halflings';
271
272 src: url('../fonts/glyphicons-halflings-regular.eot');
273 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
274}
275.glyphicon {
276 position: relative;
277 top: 1px;
278 display: inline-block;
279 font-family: 'Glyphicons Halflings';
280 font-style: normal;
281 font-weight: normal;
282 line-height: 1;
283
284 -webkit-font-smoothing: antialiased;
285 -moz-osx-font-smoothing: grayscale;
286}
287.glyphicon-asterisk:before {
288 content: "\2a";
289}
290.glyphicon-plus:before {
291 content: "\2b";
292}
293.glyphicon-euro: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* {
888 -webkit-box-sizing: border-box;
889 -moz-box-sizing: border-box;
890 box-sizing: border-box;
891}
892*:before,
893*:after {
894 -webkit-box-sizing: border-box;
895 -moz-box-sizing: border-box;
896 box-sizing: border-box;
897}
898html {
899 font-size: 10px;
900
901 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
902}
903body {
904 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
905 font-size: 14px;
906 line-height: 1.42857143;
907 color: #333;
908 background-color: #fff;
909}
910input,
911button,
912select,
913textarea {
914 font-family: inherit;
915 font-size: inherit;
916 line-height: inherit;
917}
918a {
919 color: #428bca;
920 text-decoration: none;
921}
922a:hover,
923a:focus {
924 color: #2a6496;
925 text-decoration: underline;
926}
927a:focus {
928 outline: thin dotted;
929 outline: 5px auto -webkit-focus-ring-color;
930 outline-offset: -2px;
931}
932figure {
933 margin: 0;
934}
935img {
936 vertical-align: middle;
937}
938.img-responsive,
939.thumbnail > img,
940.thumbnail a > img,
941.carousel-inner > .item > img,
942.carousel-inner > .item > a > img {
943 display: block;
944 width: 100% \9;
945 max-width: 100%;
946 height: auto;
947}
948.img-rounded {
949 border-radius: 6px;
950}
951.img-thumbnail {
952 display: inline-block;
953 width: 100% \9;
954 max-width: 100%;
955 height: auto;
956 padding: 4px;
957 line-height: 1.42857143;
958 background-color: #fff;
959 border: 1px solid #ddd;
960 border-radius: 4px;
961 -webkit-transition: all .2s ease-in-out;
962 -o-transition: all .2s ease-in-out;
963 transition: all .2s ease-in-out;
964}
965.img-circle {
966 border-radius: 50%;
967}
968hr {
969 margin-top: 20px;
970 margin-bottom: 20px;
971 border: 0;
972 border-top: 1px solid #eee;
973}
974.sr-only {
975 position: absolute;
976 width: 1px;
977 height: 1px;
978 padding: 0;
979 margin: -1px;
980 overflow: hidden;
981 clip: rect(0, 0, 0, 0);
982 border: 0;
983}
984.sr-only-focusable:active,
985.sr-only-focusable:focus {
986 position: static;
987 width: auto;
988 height: auto;
989 margin: 0;
990 overflow: visible;
991 clip: auto;
992}
993h1,
994h2,
995h3,
996h4,
997h5,
998h6,
999.h1,
1000.h2,
1001.h3,
1002.h4,
1003.h5,
1004.h6 {
1005 font-family: inherit;
1006 font-weight: 500;
1007 line-height: 1.1;
1008 color: inherit;
1009}
1010h1 small,
1011h2 small,
1012h3 small,
1013h4 small,
1014h5 small,
1015h6 small,
1016.h1 small,
1017.h2 small,
1018.h3 small,
1019.h4 small,
1020.h5 small,
1021.h6 small,
1022h1 .small,
1023h2 .small,
1024h3 .small,
1025h4 .small,
1026h5 .small,
1027h6 .small,
1028.h1 .small,
1029.h2 .small,
1030.h3 .small,
1031.h4 .small,
1032.h5 .small,
1033.h6 .small {
1034 font-weight: normal;
1035 line-height: 1;
1036 color: #777;
1037}
1038h1,
1039.h1,
1040h2,
1041.h2,
1042h3,
1043.h3 {
1044 margin-top: 20px;
1045 margin-bottom: 10px;
1046}
1047h1 small,
1048.h1 small,
1049h2 small,
1050.h2 small,
1051h3 small,
1052.h3 small,
1053h1 .small,
1054.h1 .small,
1055h2 .small,
1056.h2 .small,
1057h3 .small,
1058.h3 .small {
1059 font-size: 65%;
1060}
1061h4,
1062.h4,
1063h5,
1064.h5,
1065h6,
1066.h6 {
1067 margin-top: 10px;
1068 margin-bottom: 10px;
1069}
1070h4 small,
1071.h4 small,
1072h5 small,
1073.h5 small,
1074h6 small,
1075.h6 small,
1076h4 .small,
1077.h4 .small,
1078h5 .small,
1079.h5 .small,
1080h6 .small,
1081.h6 .small {
1082 font-size: 75%;
1083}
1084h1,
1085.h1 {
1086 font-size: 36px;
1087}
1088h2,
1089.h2 {
1090 font-size: 30px;
1091}
1092h3,
1093.h3 {
1094 font-size: 24px;
1095}
1096h4,
1097.h4 {
1098 font-size: 18px;
1099}
1100h5,
1101.h5 {
1102 font-size: 14px;
1103}
1104h6,
1105.h6 {
1106 font-size: 12px;
1107}
1108p {
1109 margin: 0 0 10px;
1110}
1111.lead {
1112 margin-bottom: 20px;
1113 font-size: 16px;
1114 font-weight: 300;
1115 line-height: 1.4;
1116}
1117@media (min-width: 768px) {
1118 .lead {
1119 font-size: 21px;
1120 }
1121}
1122small,
1123.small {
1124 font-size: 85%;
1125}
1126cite {
1127 font-style: normal;
1128}
1129mark,
1130.mark {
1131 padding: .2em;
1132 background-color: #fcf8e3;
1133}
1134.text-left {
1135 text-align: left;
1136}
1137.text-right {
1138 text-align: right;
1139}
1140.text-center {
1141 text-align: center;
1142}
1143.text-justify {
1144 text-align: justify;
1145}
1146.text-nowrap {
1147 white-space: nowrap;
1148}
1149.text-lowercase {
1150 text-transform: lowercase;
1151}
1152.text-uppercase {
1153 text-transform: uppercase;
1154}
1155.text-capitalize {
1156 text-transform: capitalize;
1157}
1158.text-muted {
1159 color: #777;
1160}
1161.text-primary {
1162 color: #428bca;
1163}
1164a.text-primary:hover {
1165 color: #3071a9;
1166}
1167.text-success {
1168 color: #3c763d;
1169}
1170a.text-success:hover {
1171 color: #2b542c;
1172}
1173.text-info {
1174 color: #31708f;
1175}
1176a.text-info:hover {
1177 color: #245269;
1178}
1179.text-warning {
1180 color: #8a6d3b;
1181}
1182a.text-warning:hover {
1183 color: #66512c;
1184}
1185.text-danger {
1186 color: #a94442;
1187}
1188a.text-danger:hover {
1189 color: #843534;
1190}
1191.bg-primary {
1192 color: #fff;
1193 background-color: #428bca;
1194}
1195a.bg-primary:hover {
1196 background-color: #3071a9;
1197}
1198.bg-success {
1199 background-color: #dff0d8;
1200}
1201a.bg-success:hover {
1202 background-color: #c1e2b3;
1203}
1204.bg-info {
1205 background-color: #d9edf7;
1206}
1207a.bg-info:hover {
1208 background-color: #afd9ee;
1209}
1210.bg-warning {
1211 background-color: #fcf8e3;
1212}
1213a.bg-warning:hover {
1214 background-color: #f7ecb5;
1215}
1216.bg-danger {
1217 background-color: #f2dede;
1218}
1219a.bg-danger:hover {
1220 background-color: #e4b9b9;
1221}
1222.page-header {
1223 padding-bottom: 9px;
1224 margin: 40px 0 20px;
1225 border-bottom: 1px solid #eee;
1226}
1227ul,
1228ol {
1229 margin-top: 0;
1230 margin-bottom: 10px;
1231}
1232ul ul,
1233ol ul,
1234ul ol,
1235ol ol {
1236 margin-bottom: 0;
1237}
1238.list-unstyled {
1239 padding-left: 0;
1240 list-style: none;
1241}
1242.list-inline {
1243 padding-left: 0;
1244 margin-left: -5px;
1245 list-style: none;
1246}
1247.list-inline > li {
1248 display: inline-block;
1249 padding-right: 5px;
1250 padding-left: 5px;
1251}
1252dl {
1253 margin-top: 0;
1254 margin-bottom: 20px;
1255}
1256dt,
1257dd {
1258 line-height: 1.42857143;
1259}
1260dt {
1261 font-weight: bold;
1262}
1263dd {
1264 margin-left: 0;
1265}
1266@media (min-width: 768px) {
1267 .dl-horizontal dt {
1268 float: left;
1269 width: 160px;
1270 overflow: hidden;
1271 clear: left;
1272 text-align: right;
1273 text-overflow: ellipsis;
1274 white-space: nowrap;
1275 }
1276 .dl-horizontal dd {
1277 margin-left: 180px;
1278 }
1279}
1280abbr[title],
1281abbr[data-original-title] {
1282 cursor: help;
1283 border-bottom: 1px dotted #777;
1284}
1285.initialism {
1286 font-size: 90%;
1287 text-transform: uppercase;
1288}
1289blockquote {
1290 padding: 10px 20px;
1291 margin: 0 0 20px;
1292 font-size: 17.5px;
1293 border-left: 5px solid #eee;
1294}
1295blockquote p:last-child,
1296blockquote ul:last-child,
1297blockquote ol:last-child {
1298 margin-bottom: 0;
1299}
1300blockquote footer,
1301blockquote small,
1302blockquote .small {
1303 display: block;
1304 font-size: 80%;
1305 line-height: 1.42857143;
1306 color: #777;
1307}
1308blockquote footer:before,
1309blockquote small:before,
1310blockquote .small:before {
1311 content: '\2014 \00A0';
1312}
1313.blockquote-reverse,
1314blockquote.pull-right {
1315 padding-right: 15px;
1316 padding-left: 0;
1317 text-align: right;
1318 border-right: 5px solid #eee;
1319 border-left: 0;
1320}
1321.blockquote-reverse footer:before,
1322blockquote.pull-right footer:before,
1323.blockquote-reverse small:before,
1324blockquote.pull-right small:before,
1325.blockquote-reverse .small:before,
1326blockquote.pull-right .small:before {
1327 content: '';
1328}
1329.blockquote-reverse footer:after,
1330blockquote.pull-right footer:after,
1331.blockquote-reverse small:after,
1332blockquote.pull-right small:after,
1333.blockquote-reverse .small:after,
1334blockquote.pull-right .small:after {
1335 content: '\00A0 \2014';
1336}
1337blockquote:before,
1338blockquote:after {
1339 content: "";
1340}
1341address {
1342 margin-bottom: 20px;
1343 font-style: normal;
1344 line-height: 1.42857143;
1345}
1346code,
1347kbd,
1348pre,
1349samp {
1350 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1351}
1352code {
1353 padding: 2px 4px;
1354 font-size: 90%;
1355 color: #c7254e;
1356 background-color: #f9f2f4;
1357 border-radius: 4px;
1358}
1359kbd {
1360 padding: 2px 4px;
1361 font-size: 90%;
1362 color: #fff;
1363 background-color: #333;
1364 border-radius: 3px;
1365 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1366 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1367}
1368kbd kbd {
1369 padding: 0;
1370 font-size: 100%;
1371 -webkit-box-shadow: none;
1372 box-shadow: none;
1373}
1374pre {
1375 display: block;
1376 padding: 9.5px;
1377 margin: 0 0 10px;
1378 font-size: 13px;
1379 line-height: 1.42857143;
1380 color: #333;
1381 word-break: break-all;
1382 word-wrap: break-word;
1383 background-color: #f5f5f5;
1384 border: 1px solid #ccc;
1385 border-radius: 4px;
1386}
1387pre code {
1388 padding: 0;
1389 font-size: inherit;
1390 color: inherit;
1391 white-space: pre-wrap;
1392 background-color: transparent;
1393 border-radius: 0;
1394}
1395.pre-scrollable {
1396 max-height: 340px;
1397 overflow-y: scroll;
1398}
1399.container {
1400 padding-right: 15px;
1401 padding-left: 15px;
1402 margin-right: auto;
1403 margin-left: auto;
1404}
1405@media (min-width: 768px) {
1406 .container {
1407 width: 750px;
1408 }
1409}
1410@media (min-width: 992px) {
1411 .container {
1412 width: 970px;
1413 }
1414}
1415@media (min-width: 1200px) {
1416 .container {
1417 width: 1170px;
1418 }
1419}
1420.container-fluid {
1421 padding-right: 15px;
1422 padding-left: 15px;
1423 margin-right: auto;
1424 margin-left: auto;
1425}
1426.row {
1427 margin-right: -15px;
1428 margin-left: -15px;
1429}
1430.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 {
1431 position: relative;
1432 min-height: 1px;
1433 padding-right: 15px;
1434 padding-left: 15px;
1435}
1436.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 {
1437 float: left;
1438}
1439.col-xs-12 {
1440 width: 100%;
1441}
1442.col-xs-11 {
1443 width: 91.66666667%;
1444}
1445.col-xs-10 {
1446 width: 83.33333333%;
1447}
1448.col-xs-9 {
1449 width: 75%;
1450}
1451.col-xs-8 {
1452 width: 66.66666667%;
1453}
1454.col-xs-7 {
1455 width: 58.33333333%;
1456}
1457.col-xs-6 {
1458 width: 50%;
1459}
1460.col-xs-5 {
1461 width: 41.66666667%;
1462}
1463.col-xs-4 {
1464 width: 33.33333333%;
1465}
1466.col-xs-3 {
1467 width: 25%;
1468}
1469.col-xs-2 {
1470 width: 16.66666667%;
1471}
1472.col-xs-1 {
1473 width: 8.33333333%;
1474}
1475.col-xs-pull-12 {
1476 right: 100%;
1477}
1478.col-xs-pull-11 {
1479 right: 91.66666667%;
1480}
1481.col-xs-pull-10 {
1482 right: 83.33333333%;
1483}
1484.col-xs-pull-9 {
1485 right: 75%;
1486}
1487.col-xs-pull-8 {
1488 right: 66.66666667%;
1489}
1490.col-xs-pull-7 {
1491 right: 58.33333333%;
1492}
1493.col-xs-pull-6 {
1494 right: 50%;
1495}
1496.col-xs-pull-5 {
1497 right: 41.66666667%;
1498}
1499.col-xs-pull-4 {
1500 right: 33.33333333%;
1501}
1502.col-xs-pull-3 {
1503 right: 25%;
1504}
1505.col-xs-pull-2 {
1506 right: 16.66666667%;
1507}
1508.col-xs-pull-1 {
1509 right: 8.33333333%;
1510}
1511.col-xs-pull-0 {
1512 right: auto;
1513}
1514.col-xs-push-12 {
1515 left: 100%;
1516}
1517.col-xs-push-11 {
1518 left: 91.66666667%;
1519}
1520.col-xs-push-10 {
1521 left: 83.33333333%;
1522}
1523.col-xs-push-9 {
1524 left: 75%;
1525}
1526.col-xs-push-8 {
1527 left: 66.66666667%;
1528}
1529.col-xs-push-7 {
1530 left: 58.33333333%;
1531}
1532.col-xs-push-6 {
1533 left: 50%;
1534}
1535.col-xs-push-5 {
1536 left: 41.66666667%;
1537}
1538.col-xs-push-4 {
1539 left: 33.33333333%;
1540}
1541.col-xs-push-3 {
1542 left: 25%;
1543}
1544.col-xs-push-2 {
1545 left: 16.66666667%;
1546}
1547.col-xs-push-1 {
1548 left: 8.33333333%;
1549}
1550.col-xs-push-0 {
1551 left: auto;
1552}
1553.col-xs-offset-12 {
1554 margin-left: 100%;
1555}
1556.col-xs-offset-11 {
1557 margin-left: 91.66666667%;
1558}
1559.col-xs-offset-10 {
1560 margin-left: 83.33333333%;
1561}
1562.col-xs-offset-9 {
1563 margin-left: 75%;
1564}
1565.col-xs-offset-8 {
1566 margin-left: 66.66666667%;
1567}
1568.col-xs-offset-7 {
1569 margin-left: 58.33333333%;
1570}
1571.col-xs-offset-6 {
1572 margin-left: 50%;
1573}
1574.col-xs-offset-5 {
1575 margin-left: 41.66666667%;
1576}
1577.col-xs-offset-4 {
1578 margin-left: 33.33333333%;
1579}
1580.col-xs-offset-3 {
1581 margin-left: 25%;
1582}
1583.col-xs-offset-2 {
1584 margin-left: 16.66666667%;
1585}
1586.col-xs-offset-1 {
1587 margin-left: 8.33333333%;
1588}
1589.col-xs-offset-0 {
1590 margin-left: 0;
1591}
1592@media (min-width: 768px) {
1593 .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 {
1594 float: left;
1595 }
1596 .col-sm-12 {
1597 width: 100%;
1598 }
1599 .col-sm-11 {
1600 width: 91.66666667%;
1601 }
1602 .col-sm-10 {
1603 width: 83.33333333%;
1604 }
1605 .col-sm-9 {
1606 width: 75%;
1607 }
1608 .col-sm-8 {
1609 width: 66.66666667%;
1610 }
1611 .col-sm-7 {
1612 width: 58.33333333%;
1613 }
1614 .col-sm-6 {
1615 width: 50%;
1616 }
1617 .col-sm-5 {
1618 width: 41.66666667%;
1619 }
1620 .col-sm-4 {
1621 width: 33.33333333%;
1622 }
1623 .col-sm-3 {
1624 width: 25%;
1625 }
1626 .col-sm-2 {
1627 width: 16.66666667%;
1628 }
1629 .col-sm-1 {
1630 width: 8.33333333%;
1631 }
1632 .col-sm-pull-12 {
1633 right: 100%;
1634 }
1635 .col-sm-pull-11 {
1636 right: 91.66666667%;
1637 }
1638 .col-sm-pull-10 {
1639 right: 83.33333333%;
1640 }
1641 .col-sm-pull-9 {
1642 right: 75%;
1643 }
1644 .col-sm-pull-8 {
1645 right: 66.66666667%;
1646 }
1647 .col-sm-pull-7 {
1648 right: 58.33333333%;
1649 }
1650 .col-sm-pull-6 {
1651 right: 50%;
1652 }
1653 .col-sm-pull-5 {
1654 right: 41.66666667%;
1655 }
1656 .col-sm-pull-4 {
1657 right: 33.33333333%;
1658 }
1659 .col-sm-pull-3 {
1660 right: 25%;
1661 }
1662 .col-sm-pull-2 {
1663 right: 16.66666667%;
1664 }
1665 .col-sm-pull-1 {
1666 right: 8.33333333%;
1667 }
1668 .col-sm-pull-0 {
1669 right: auto;
1670 }
1671 .col-sm-push-12 {
1672 left: 100%;
1673 }
1674 .col-sm-push-11 {
1675 left: 91.66666667%;
1676 }
1677 .col-sm-push-10 {
1678 left: 83.33333333%;
1679 }
1680 .col-sm-push-9 {
1681 left: 75%;
1682 }
1683 .col-sm-push-8 {
1684 left: 66.66666667%;
1685 }
1686 .col-sm-push-7 {
1687 left: 58.33333333%;
1688 }
1689 .col-sm-push-6 {
1690 left: 50%;
1691 }
1692 .col-sm-push-5 {
1693 left: 41.66666667%;
1694 }
1695 .col-sm-push-4 {
1696 left: 33.33333333%;
1697 }
1698 .col-sm-push-3 {
1699 left: 25%;
1700 }
1701 .col-sm-push-2 {
1702 left: 16.66666667%;
1703 }
1704 .col-sm-push-1 {
1705 left: 8.33333333%;
1706 }
1707 .col-sm-push-0 {
1708 left: auto;
1709 }
1710 .col-sm-offset-12 {
1711 margin-left: 100%;
1712 }
1713 .col-sm-offset-11 {
1714 margin-left: 91.66666667%;
1715 }
1716 .col-sm-offset-10 {
1717 margin-left: 83.33333333%;
1718 }
1719 .col-sm-offset-9 {
1720 margin-left: 75%;
1721 }
1722 .col-sm-offset-8 {
1723 margin-left: 66.66666667%;
1724 }
1725 .col-sm-offset-7 {
1726 margin-left: 58.33333333%;
1727 }
1728 .col-sm-offset-6 {
1729 margin-left: 50%;
1730 }
1731 .col-sm-offset-5 {
1732 margin-left: 41.66666667%;
1733 }
1734 .col-sm-offset-4 {
1735 margin-left: 33.33333333%;
1736 }
1737 .col-sm-offset-3 {
1738 margin-left: 25%;
1739 }
1740 .col-sm-offset-2 {
1741 margin-left: 16.66666667%;
1742 }
1743 .col-sm-offset-1 {
1744 margin-left: 8.33333333%;
1745 }
1746 .col-sm-offset-0 {
1747 margin-left: 0;
1748 }
1749}
1750@media (min-width: 992px) {
1751 .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 {
1752 float: left;
1753 }
1754 .col-md-12 {
1755 width: 100%;
1756 }
1757 .col-md-11 {
1758 width: 91.66666667%;
1759 }
1760 .col-md-10 {
1761 width: 83.33333333%;
1762 }
1763 .col-md-9 {
1764 width: 75%;
1765 }
1766 .col-md-8 {
1767 width: 66.66666667%;
1768 }
1769 .col-md-7 {
1770 width: 58.33333333%;
1771 }
1772 .col-md-6 {
1773 width: 50%;
1774 }
1775 .col-md-5 {
1776 width: 41.66666667%;
1777 }
1778 .col-md-4 {
1779 width: 33.33333333%;
1780 }
1781 .col-md-3 {
1782 width: 25%;
1783 }
1784 .col-md-2 {
1785 width: 16.66666667%;
1786 }
1787 .col-md-1 {
1788 width: 8.33333333%;
1789 }
1790 .col-md-pull-12 {
1791 right: 100%;
1792 }
1793 .col-md-pull-11 {
1794 right: 91.66666667%;
1795 }
1796 .col-md-pull-10 {
1797 right: 83.33333333%;
1798 }
1799 .col-md-pull-9 {
1800 right: 75%;
1801 }
1802 .col-md-pull-8 {
1803 right: 66.66666667%;
1804 }
1805 .col-md-pull-7 {
1806 right: 58.33333333%;
1807 }
1808 .col-md-pull-6 {
1809 right: 50%;
1810 }
1811 .col-md-pull-5 {
1812 right: 41.66666667%;
1813 }
1814 .col-md-pull-4 {
1815 right: 33.33333333%;
1816 }
1817 .col-md-pull-3 {
1818 right: 25%;
1819 }
1820 .col-md-pull-2 {
1821 right: 16.66666667%;
1822 }
1823 .col-md-pull-1 {
1824 right: 8.33333333%;
1825 }
1826 .col-md-pull-0 {
1827 right: auto;
1828 }
1829 .col-md-push-12 {
1830 left: 100%;
1831 }
1832 .col-md-push-11 {
1833 left: 91.66666667%;
1834 }
1835 .col-md-push-10 {
1836 left: 83.33333333%;
1837 }
1838 .col-md-push-9 {
1839 left: 75%;
1840 }
1841 .col-md-push-8 {
1842 left: 66.66666667%;
1843 }
1844 .col-md-push-7 {
1845 left: 58.33333333%;
1846 }
1847 .col-md-push-6 {
1848 left: 50%;
1849 }
1850 .col-md-push-5 {
1851 left: 41.66666667%;
1852 }
1853 .col-md-push-4 {
1854 left: 33.33333333%;
1855 }
1856 .col-md-push-3 {
1857 left: 25%;
1858 }
1859 .col-md-push-2 {
1860 left: 16.66666667%;
1861 }
1862 .col-md-push-1 {
1863 left: 8.33333333%;
1864 }
1865 .col-md-push-0 {
1866 left: auto;
1867 }
1868 .col-md-offset-12 {
1869 margin-left: 100%;
1870 }
1871 .col-md-offset-11 {
1872 margin-left: 91.66666667%;
1873 }
1874 .col-md-offset-10 {
1875 margin-left: 83.33333333%;
1876 }
1877 .col-md-offset-9 {
1878 margin-left: 75%;
1879 }
1880 .col-md-offset-8 {
1881 margin-left: 66.66666667%;
1882 }
1883 .col-md-offset-7 {
1884 margin-left: 58.33333333%;
1885 }
1886 .col-md-offset-6 {
1887 margin-left: 50%;
1888 }
1889 .col-md-offset-5 {
1890 margin-left: 41.66666667%;
1891 }
1892 .col-md-offset-4 {
1893 margin-left: 33.33333333%;
1894 }
1895 .col-md-offset-3 {
1896 margin-left: 25%;
1897 }
1898 .col-md-offset-2 {
1899 margin-left: 16.66666667%;
1900 }
1901 .col-md-offset-1 {
1902 margin-left: 8.33333333%;
1903 }
1904 .col-md-offset-0 {
1905 margin-left: 0;
1906 }
1907}
1908@media (min-width: 1200px) {
1909 .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 {
1910 float: left;
1911 }
1912 .col-lg-12 {
1913 width: 100%;
1914 }
1915 .col-lg-11 {
1916 width: 91.66666667%;
1917 }
1918 .col-lg-10 {
1919 width: 83.33333333%;
1920 }
1921 .col-lg-9 {
1922 width: 75%;
1923 }
1924 .col-lg-8 {
1925 width: 66.66666667%;
1926 }
1927 .col-lg-7 {
1928 width: 58.33333333%;
1929 }
1930 .col-lg-6 {
1931 width: 50%;
1932 }
1933 .col-lg-5 {
1934 width: 41.66666667%;
1935 }
1936 .col-lg-4 {
1937 width: 33.33333333%;
1938 }
1939 .col-lg-3 {
1940 width: 25%;
1941 }
1942 .col-lg-2 {
1943 width: 16.66666667%;
1944 }
1945 .col-lg-1 {
1946 width: 8.33333333%;
1947 }
1948 .col-lg-pull-12 {
1949 right: 100%;
1950 }
1951 .col-lg-pull-11 {
1952 right: 91.66666667%;
1953 }
1954 .col-lg-pull-10 {
1955 right: 83.33333333%;
1956 }
1957 .col-lg-pull-9 {
1958 right: 75%;
1959 }
1960 .col-lg-pull-8 {
1961 right: 66.66666667%;
1962 }
1963 .col-lg-pull-7 {
1964 right: 58.33333333%;
1965 }
1966 .col-lg-pull-6 {
1967 right: 50%;
1968 }
1969 .col-lg-pull-5 {
1970 right: 41.66666667%;
1971 }
1972 .col-lg-pull-4 {
1973 right: 33.33333333%;
1974 }
1975 .col-lg-pull-3 {
1976 right: 25%;
1977 }
1978 .col-lg-pull-2 {
1979 right: 16.66666667%;
1980 }
1981 .col-lg-pull-1 {
1982 right: 8.33333333%;
1983 }
1984 .col-lg-pull-0 {
1985 right: auto;
1986 }
1987 .col-lg-push-12 {
1988 left: 100%;
1989 }
1990 .col-lg-push-11 {
1991 left: 91.66666667%;
1992 }
1993 .col-lg-push-10 {
1994 left: 83.33333333%;
1995 }
1996 .col-lg-push-9 {
1997 left: 75%;
1998 }
1999 .col-lg-push-8 {
2000 left: 66.66666667%;
2001 }
2002 .col-lg-push-7 {
2003 left: 58.33333333%;
2004 }
2005 .col-lg-push-6 {
2006 left: 50%;
2007 }
2008 .col-lg-push-5 {
2009 left: 41.66666667%;
2010 }
2011 .col-lg-push-4 {
2012 left: 33.33333333%;
2013 }
2014 .col-lg-push-3 {
2015 left: 25%;
2016 }
2017 .col-lg-push-2 {
2018 left: 16.66666667%;
2019 }
2020 .col-lg-push-1 {
2021 left: 8.33333333%;
2022 }
2023 .col-lg-push-0 {
2024 left: auto;
2025 }
2026 .col-lg-offset-12 {
2027 margin-left: 100%;
2028 }
2029 .col-lg-offset-11 {
2030 margin-left: 91.66666667%;
2031 }
2032 .col-lg-offset-10 {
2033 margin-left: 83.33333333%;
2034 }
2035 .col-lg-offset-9 {
2036 margin-left: 75%;
2037 }
2038 .col-lg-offset-8 {
2039 margin-left: 66.66666667%;
2040 }
2041 .col-lg-offset-7 {
2042 margin-left: 58.33333333%;
2043 }
2044 .col-lg-offset-6 {
2045 margin-left: 50%;
2046 }
2047 .col-lg-offset-5 {
2048 margin-left: 41.66666667%;
2049 }
2050 .col-lg-offset-4 {
2051 margin-left: 33.33333333%;
2052 }
2053 .col-lg-offset-3 {
2054 margin-left: 25%;
2055 }
2056 .col-lg-offset-2 {
2057 margin-left: 16.66666667%;
2058 }
2059 .col-lg-offset-1 {
2060 margin-left: 8.33333333%;
2061 }
2062 .col-lg-offset-0 {
2063 margin-left: 0;
2064 }
2065}
2066table {
2067 background-color: transparent;
2068}
2069th {
2070 text-align: left;
2071}
2072.table {
2073 width: 100%;
2074 max-width: 100%;
2075 margin-bottom: 20px;
2076}
2077.table > thead > tr > th,
2078.table > tbody > tr > th,
2079.table > tfoot > tr > th,
2080.table > thead > tr > td,
2081.table > tbody > tr > td,
2082.table > tfoot > tr > td {
2083 padding: 8px;
2084 line-height: 1.42857143;
2085 vertical-align: top;
2086 border-top: 1px solid #ddd;
2087}
2088.table > thead > tr > th {
2089 vertical-align: bottom;
2090 border-bottom: 2px solid #ddd;
2091}
2092.table > caption + thead > tr:first-child > th,
2093.table > colgroup + thead > tr:first-child > th,
2094.table > thead:first-child > tr:first-child > th,
2095.table > caption + thead > tr:first-child > td,
2096.table > colgroup + thead > tr:first-child > td,
2097.table > thead:first-child > tr:first-child > td {
2098 border-top: 0;
2099}
2100.table > tbody + tbody {
2101 border-top: 2px solid #ddd;
2102}
2103.table .table {
2104 background-color: #fff;
2105}
2106.table-condensed > thead > tr > th,
2107.table-condensed > tbody > tr > th,
2108.table-condensed > tfoot > tr > th,
2109.table-condensed > thead > tr > td,
2110.table-condensed > tbody > tr > td,
2111.table-condensed > tfoot > tr > td {
2112 padding: 5px;
2113}
2114.table-bordered {
2115 border: 1px solid #ddd;
2116}
2117.table-bordered > thead > tr > th,
2118.table-bordered > tbody > tr > th,
2119.table-bordered > tfoot > tr > th,
2120.table-bordered > thead > tr > td,
2121.table-bordered > tbody > tr > td,
2122.table-bordered > tfoot > tr > td {
2123 border: 1px solid #ddd;
2124}
2125.table-bordered > thead > tr > th,
2126.table-bordered > thead > tr > td {
2127 border-bottom-width: 2px;
2128}
2129.table-striped > tbody > tr:nth-child(odd) > td,
2130.table-striped > tbody > tr:nth-child(odd) > th {
2131 background-color: #f9f9f9;
2132}
2133.table-hover > tbody > tr:hover > td,
2134.table-hover > tbody > tr:hover > th {
2135 background-color: #f5f5f5;
2136}
2137table col[class*="col-"] {
2138 position: static;
2139 display: table-column;
2140 float: none;
2141}
2142table td[class*="col-"],
2143table th[class*="col-"] {
2144 position: static;
2145 display: table-cell;
2146 float: none;
2147}
2148.table > thead > tr > td.active,
2149.table > tbody > tr > td.active,
2150.table > tfoot > tr > td.active,
2151.table > thead > tr > th.active,
2152.table > tbody > tr > th.active,
2153.table > tfoot > tr > th.active,
2154.table > thead > tr.active > td,
2155.table > tbody > tr.active > td,
2156.table > tfoot > tr.active > td,
2157.table > thead > tr.active > th,
2158.table > tbody > tr.active > th,
2159.table > tfoot > tr.active > th {
2160 background-color: #f5f5f5;
2161}
2162.table-hover > tbody > tr > td.active:hover,
2163.table-hover > tbody > tr > th.active:hover,
2164.table-hover > tbody > tr.active:hover > td,
2165.table-hover > tbody > tr:hover > .active,
2166.table-hover > tbody > tr.active:hover > th {
2167 background-color: #e8e8e8;
2168}
2169.table > thead > tr > td.success,
2170.table > tbody > tr > td.success,
2171.table > tfoot > tr > td.success,
2172.table > thead > tr > th.success,
2173.table > tbody > tr > th.success,
2174.table > tfoot > tr > th.success,
2175.table > thead > tr.success > td,
2176.table > tbody > tr.success > td,
2177.table > tfoot > tr.success > td,
2178.table > thead > tr.success > th,
2179.table > tbody > tr.success > th,
2180.table > tfoot > tr.success > th {
2181 background-color: #dff0d8;
2182}
2183.table-hover > tbody > tr > td.success:hover,
2184.table-hover > tbody > tr > th.success:hover,
2185.table-hover > tbody > tr.success:hover > td,
2186.table-hover > tbody > tr:hover > .success,
2187.table-hover > tbody > tr.success:hover > th {
2188 background-color: #d0e9c6;
2189}
2190.table > thead > tr > td.info,
2191.table > tbody > tr > td.info,
2192.table > tfoot > tr > td.info,
2193.table > thead > tr > th.info,
2194.table > tbody > tr > th.info,
2195.table > tfoot > tr > th.info,
2196.table > thead > tr.info > td,
2197.table > tbody > tr.info > td,
2198.table > tfoot > tr.info > td,
2199.table > thead > tr.info > th,
2200.table > tbody > tr.info > th,
2201.table > tfoot > tr.info > th {
2202 background-color: #d9edf7;
2203}
2204.table-hover > tbody > tr > td.info:hover,
2205.table-hover > tbody > tr > th.info:hover,
2206.table-hover > tbody > tr.info:hover > td,
2207.table-hover > tbody > tr:hover > .info,
2208.table-hover > tbody > tr.info:hover > th {
2209 background-color: #c4e3f3;
2210}
2211.table > thead > tr > td.warning,
2212.table > tbody > tr > td.warning,
2213.table > tfoot > tr > td.warning,
2214.table > thead > tr > th.warning,
2215.table > tbody > tr > th.warning,
2216.table > tfoot > tr > th.warning,
2217.table > thead > tr.warning > td,
2218.table > tbody > tr.warning > td,
2219.table > tfoot > tr.warning > td,
2220.table > thead > tr.warning > th,
2221.table > tbody > tr.warning > th,
2222.table > tfoot > tr.warning > th {
2223 background-color: #fcf8e3;
2224}
2225.table-hover > tbody > tr > td.warning:hover,
2226.table-hover > tbody > tr > th.warning:hover,
2227.table-hover > tbody > tr.warning:hover > td,
2228.table-hover > tbody > tr:hover > .warning,
2229.table-hover > tbody > tr.warning:hover > th {
2230 background-color: #faf2cc;
2231}
2232.table > thead > tr > td.danger,
2233.table > tbody > tr > td.danger,
2234.table > tfoot > tr > td.danger,
2235.table > thead > tr > th.danger,
2236.table > tbody > tr > th.danger,
2237.table > tfoot > tr > th.danger,
2238.table > thead > tr.danger > td,
2239.table > tbody > tr.danger > td,
2240.table > tfoot > tr.danger > td,
2241.table > thead > tr.danger > th,
2242.table > tbody > tr.danger > th,
2243.table > tfoot > tr.danger > th {
2244 background-color: #f2dede;
2245}
2246.table-hover > tbody > tr > td.danger:hover,
2247.table-hover > tbody > tr > th.danger:hover,
2248.table-hover > tbody > tr.danger:hover > td,
2249.table-hover > tbody > tr:hover > .danger,
2250.table-hover > tbody > tr.danger:hover > th {
2251 background-color: #ebcccc;
2252}
2253@media screen and (max-width: 767px) {
2254 .table-responsive {
2255 width: 100%;
2256 margin-bottom: 15px;
2257 overflow-x: auto;
2258 overflow-y: hidden;
2259 -webkit-overflow-scrolling: touch;
2260 -ms-overflow-style: -ms-autohiding-scrollbar;
2261 border: 1px solid #ddd;
2262 }
2263 .table-responsive > .table {
2264 margin-bottom: 0;
2265 }
2266 .table-responsive > .table > thead > tr > th,
2267 .table-responsive > .table > tbody > tr > th,
2268 .table-responsive > .table > tfoot > tr > th,
2269 .table-responsive > .table > thead > tr > td,
2270 .table-responsive > .table > tbody > tr > td,
2271 .table-responsive > .table > tfoot > tr > td {
2272 white-space: nowrap;
2273 }
2274 .table-responsive > .table-bordered {
2275 border: 0;
2276 }
2277 .table-responsive > .table-bordered > thead > tr > th:first-child,
2278 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2279 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2280 .table-responsive > .table-bordered > thead > tr > td:first-child,
2281 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2282 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2283 border-left: 0;
2284 }
2285 .table-responsive > .table-bordered > thead > tr > th:last-child,
2286 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2287 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2288 .table-responsive > .table-bordered > thead > tr > td:last-child,
2289 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2290 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2291 border-right: 0;
2292 }
2293 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2294 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2295 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2296 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2297 border-bottom: 0;
2298 }
2299}
2300fieldset {
2301 min-width: 0;
2302 padding: 0;
2303 margin: 0;
2304 border: 0;
2305}
2306legend {
2307 display: block;
2308 width: 100%;
2309 padding: 0;
2310 margin-bottom: 20px;
2311 font-size: 21px;
2312 line-height: inherit;
2313 color: #333;
2314 border: 0;
2315 border-bottom: 1px solid #e5e5e5;
2316}
2317label {
2318 display: inline-block;
2319 max-width: 100%;
2320 margin-bottom: 5px;
2321 font-weight: bold;
2322}
2323input[type="search"] {
2324 -webkit-box-sizing: border-box;
2325 -moz-box-sizing: border-box;
2326 box-sizing: border-box;
2327}
2328input[type="radio"],
2329input[type="checkbox"] {
2330 margin: 4px 0 0;
2331 margin-top: 1px \9;
2332 line-height: normal;
2333}
2334input[type="file"] {
2335 display: block;
2336}
2337input[type="range"] {
2338 display: block;
2339 width: 100%;
2340}
2341select[multiple],
2342select[size] {
2343 height: auto;
2344}
2345input[type="file"]:focus,
2346input[type="radio"]:focus,
2347input[type="checkbox"]:focus {
2348 outline: thin dotted;
2349 outline: 5px auto -webkit-focus-ring-color;
2350 outline-offset: -2px;
2351}
2352output {
2353 display: block;
2354 padding-top: 7px;
2355 font-size: 14px;
2356 line-height: 1.42857143;
2357 color: #555;
2358}
2359.form-control {
2360 display: block;
2361 width: 100%;
2362 height: 34px;
2363 padding: 6px 12px;
2364 font-size: 14px;
2365 line-height: 1.42857143;
2366 color: #555;
2367 background-color: #fff;
2368 background-image: none;
2369 border: 1px solid #ccc;
2370 border-radius: 4px;
2371 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2372 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2373 -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2374 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2375 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2376}
2377.form-control:focus {
2378 border-color: #66afe9;
2379 outline: 0;
2380 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2381 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2382}
2383.form-control::-moz-placeholder {
2384 color: #777;
2385 opacity: 1;
2386}
2387.form-control:-ms-input-placeholder {
2388 color: #777;
2389}
2390.form-control::-webkit-input-placeholder {
2391 color: #777;
2392}
2393.form-control[disabled],
2394.form-control[readonly],
2395fieldset[disabled] .form-control {
2396 cursor: not-allowed;
2397 background-color: #eee;
2398 opacity: 1;
2399}
2400textarea.form-control {
2401 height: auto;
2402}
2403input[type="search"] {
2404 -webkit-appearance: none;
2405}
2406input[type="date"],
2407input[type="time"],
2408input[type="datetime-local"],
2409input[type="month"] {
2410 line-height: 34px;
2411 line-height: 1.42857143 \0;
2412}
2413input[type="date"].input-sm,
2414input[type="time"].input-sm,
2415input[type="datetime-local"].input-sm,
2416input[type="month"].input-sm {
2417 line-height: 30px;
2418}
2419input[type="date"].input-lg,
2420input[type="time"].input-lg,
2421input[type="datetime-local"].input-lg,
2422input[type="month"].input-lg {
2423 line-height: 46px;
2424}
2425.form-group {
2426 margin-bottom: 15px;
2427}
2428.radio,
2429.checkbox {
2430 position: relative;
2431 display: block;
2432 min-height: 20px;
2433 margin-top: 10px;
2434 margin-bottom: 10px;
2435}
2436.radio label,
2437.checkbox label {
2438 padding-left: 20px;
2439 margin-bottom: 0;
2440 font-weight: normal;
2441 cursor: pointer;
2442}
2443.radio input[type="radio"],
2444.radio-inline input[type="radio"],
2445.checkbox input[type="checkbox"],
2446.checkbox-inline input[type="checkbox"] {
2447 position: absolute;
2448 margin-top: 4px \9;
2449 margin-left: -20px;
2450}
2451.radio + .radio,
2452.checkbox + .checkbox {
2453 margin-top: -5px;
2454}
2455.radio-inline,
2456.checkbox-inline {
2457 display: inline-block;
2458 padding-left: 20px;
2459 margin-bottom: 0;
2460 font-weight: normal;
2461 vertical-align: middle;
2462 cursor: pointer;
2463}
2464.radio-inline + .radio-inline,
2465.checkbox-inline + .checkbox-inline {
2466 margin-top: 0;
2467 margin-left: 10px;
2468}
2469input[type="radio"][disabled],
2470input[type="checkbox"][disabled],
2471input[type="radio"].disabled,
2472input[type="checkbox"].disabled,
2473fieldset[disabled] input[type="radio"],
2474fieldset[disabled] input[type="checkbox"] {
2475 cursor: not-allowed;
2476}
2477.radio-inline.disabled,
2478.checkbox-inline.disabled,
2479fieldset[disabled] .radio-inline,
2480fieldset[disabled] .checkbox-inline {
2481 cursor: not-allowed;
2482}
2483.radio.disabled label,
2484.checkbox.disabled label,
2485fieldset[disabled] .radio label,
2486fieldset[disabled] .checkbox label {
2487 cursor: not-allowed;
2488}
2489.form-control-static {
2490 padding-top: 7px;
2491 padding-bottom: 7px;
2492 margin-bottom: 0;
2493}
2494.form-control-static.input-lg,
2495.form-control-static.input-sm {
2496 padding-right: 0;
2497 padding-left: 0;
2498}
2499.input-sm,
2500.form-horizontal .form-group-sm .form-control {
2501 height: 30px;
2502 padding: 5px 10px;
2503 font-size: 12px;
2504 line-height: 1.5;
2505 border-radius: 3px;
2506}
2507select.input-sm {
2508 height: 30px;
2509 line-height: 30px;
2510}
2511textarea.input-sm,
2512select[multiple].input-sm {
2513 height: auto;
2514}
2515.input-lg,
2516.form-horizontal .form-group-lg .form-control {
2517 height: 46px;
2518 padding: 10px 16px;
2519 font-size: 18px;
2520 line-height: 1.33;
2521 border-radius: 6px;
2522}
2523select.input-lg {
2524 height: 46px;
2525 line-height: 46px;
2526}
2527textarea.input-lg,
2528select[multiple].input-lg {
2529 height: auto;
2530}
2531.has-feedback {
2532 position: relative;
2533}
2534.has-feedback .form-control {
2535 padding-right: 42.5px;
2536}
2537.form-control-feedback {
2538 position: absolute;
2539 top: 25px;
2540 right: 0;
2541 z-index: 2;
2542 display: block;
2543 width: 34px;
2544 height: 34px;
2545 line-height: 34px;
2546 text-align: center;
2547}
2548.input-lg + .form-control-feedback {
2549 width: 46px;
2550 height: 46px;
2551 line-height: 46px;
2552}
2553.input-sm + .form-control-feedback {
2554 width: 30px;
2555 height: 30px;
2556 line-height: 30px;
2557}
2558.has-success .help-block,
2559.has-success .control-label,
2560.has-success .radio,
2561.has-success .checkbox,
2562.has-success .radio-inline,
2563.has-success .checkbox-inline {
2564 color: #3c763d;
2565}
2566.has-success .form-control {
2567 border-color: #3c763d;
2568 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2569 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2570}
2571.has-success .form-control:focus {
2572 border-color: #2b542c;
2573 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2574 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2575}
2576.has-success .input-group-addon {
2577 color: #3c763d;
2578 background-color: #dff0d8;
2579 border-color: #3c763d;
2580}
2581.has-success .form-control-feedback {
2582 color: #3c763d;
2583}
2584.has-warning .help-block,
2585.has-warning .control-label,
2586.has-warning .radio,
2587.has-warning .checkbox,
2588.has-warning .radio-inline,
2589.has-warning .checkbox-inline {
2590 color: #8a6d3b;
2591}
2592.has-warning .form-control {
2593 border-color: #8a6d3b;
2594 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2595 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2596}
2597.has-warning .form-control:focus {
2598 border-color: #66512c;
2599 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2600 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2601}
2602.has-warning .input-group-addon {
2603 color: #8a6d3b;
2604 background-color: #fcf8e3;
2605 border-color: #8a6d3b;
2606}
2607.has-warning .form-control-feedback {
2608 color: #8a6d3b;
2609}
2610.has-error .help-block,
2611.has-error .control-label,
2612.has-error .radio,
2613.has-error .checkbox,
2614.has-error .radio-inline,
2615.has-error .checkbox-inline {
2616 color: #a94442;
2617}
2618.has-error .form-control {
2619 border-color: #a94442;
2620 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2621 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2622}
2623.has-error .form-control:focus {
2624 border-color: #843534;
2625 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2626 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2627}
2628.has-error .input-group-addon {
2629 color: #a94442;
2630 background-color: #f2dede;
2631 border-color: #a94442;
2632}
2633.has-error .form-control-feedback {
2634 color: #a94442;
2635}
2636.has-feedback label.sr-only ~ .form-control-feedback {
2637 top: 0;
2638}
2639.help-block {
2640 display: block;
2641 margin-top: 5px;
2642 margin-bottom: 10px;
2643 color: #737373;
2644}
2645@media (min-width: 768px) {
2646 .form-inline .form-group {
2647 display: inline-block;
2648 margin-bottom: 0;
2649 vertical-align: middle;
2650 }
2651 .form-inline .form-control {
2652 display: inline-block;
2653 width: auto;
2654 vertical-align: middle;
2655 }
2656 .form-inline .input-group {
2657 display: inline-table;
2658 vertical-align: middle;
2659 }
2660 .form-inline .input-group .input-group-addon,
2661 .form-inline .input-group .input-group-btn,
2662 .form-inline .input-group .form-control {
2663 width: auto;
2664 }
2665 .form-inline .input-group > .form-control {
2666 width: 100%;
2667 }
2668 .form-inline .control-label {
2669 margin-bottom: 0;
2670 vertical-align: middle;
2671 }
2672 .form-inline .radio,
2673 .form-inline .checkbox {
2674 display: inline-block;
2675 margin-top: 0;
2676 margin-bottom: 0;
2677 vertical-align: middle;
2678 }
2679 .form-inline .radio label,
2680 .form-inline .checkbox label {
2681 padding-left: 0;
2682 }
2683 .form-inline .radio input[type="radio"],
2684 .form-inline .checkbox input[type="checkbox"] {
2685 position: relative;
2686 margin-left: 0;
2687 }
2688 .form-inline .has-feedback .form-control-feedback {
2689 top: 0;
2690 }
2691}
2692.form-horizontal .radio,
2693.form-horizontal .checkbox,
2694.form-horizontal .radio-inline,
2695.form-horizontal .checkbox-inline {
2696 padding-top: 7px;
2697 margin-top: 0;
2698 margin-bottom: 0;
2699}
2700.form-horizontal .radio,
2701.form-horizontal .checkbox {
2702 min-height: 27px;
2703}
2704.form-horizontal .form-group {
2705 margin-right: -15px;
2706 margin-left: -15px;
2707}
2708@media (min-width: 768px) {
2709 .form-horizontal .control-label {
2710 padding-top: 7px;
2711 margin-bottom: 0;
2712 text-align: right;
2713 }
2714}
2715.form-horizontal .has-feedback .form-control-feedback {
2716 top: 0;
2717 right: 15px;
2718}
2719@media (min-width: 768px) {
2720 .form-horizontal .form-group-lg .control-label {
2721 padding-top: 14.3px;
2722 }
2723}
2724@media (min-width: 768px) {
2725 .form-horizontal .form-group-sm .control-label {
2726 padding-top: 6px;
2727 }
2728}
2729.btn {
2730 display: inline-block;
2731 padding: 6px 12px;
2732 margin-bottom: 0;
2733 font-size: 14px;
2734 font-weight: normal;
2735 line-height: 1.42857143;
2736 text-align: center;
2737 white-space: nowrap;
2738 vertical-align: middle;
2739 cursor: pointer;
2740 -webkit-user-select: none;
2741 -moz-user-select: none;
2742 -ms-user-select: none;
2743 user-select: none;
2744 background-image: none;
2745 border: 1px solid transparent;
2746 border-radius: 4px;
2747}
2748.btn:focus,
2749.btn:active:focus,
2750.btn.active:focus {
2751 outline: thin dotted;
2752 outline: 5px auto -webkit-focus-ring-color;
2753 outline-offset: -2px;
2754}
2755.btn:hover,
2756.btn:focus {
2757 color: #333;
2758 text-decoration: none;
2759}
2760.btn:active,
2761.btn.active {
2762 background-image: none;
2763 outline: 0;
2764 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2765 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2766}
2767.btn.disabled,
2768.btn[disabled],
2769fieldset[disabled] .btn {
2770 pointer-events: none;
2771 cursor: not-allowed;
2772 filter: alpha(opacity=65);
2773 -webkit-box-shadow: none;
2774 box-shadow: none;
2775 opacity: .65;
2776}
2777.btn-default {
2778 color: #333;
2779 background-color: #fff;
2780 border-color: #ccc;
2781}
2782.btn-default:hover,
2783.btn-default:focus,
2784.btn-default:active,
2785.btn-default.active,
2786.open > .dropdown-toggle.btn-default {
2787 color: #333;
2788 background-color: #e6e6e6;
2789 border-color: #adadad;
2790}
2791.btn-default:active,
2792.btn-default.active,
2793.open > .dropdown-toggle.btn-default {
2794 background-image: none;
2795}
2796.btn-default.disabled,
2797.btn-default[disabled],
2798fieldset[disabled] .btn-default,
2799.btn-default.disabled:hover,
2800.btn-default[disabled]:hover,
2801fieldset[disabled] .btn-default:hover,
2802.btn-default.disabled:focus,
2803.btn-default[disabled]:focus,
2804fieldset[disabled] .btn-default:focus,
2805.btn-default.disabled:active,
2806.btn-default[disabled]:active,
2807fieldset[disabled] .btn-default:active,
2808.btn-default.disabled.active,
2809.btn-default[disabled].active,
2810fieldset[disabled] .btn-default.active {
2811 background-color: #fff;
2812 border-color: #ccc;
2813}
2814.btn-default .badge {
2815 color: #fff;
2816 background-color: #333;
2817}
2818.btn-primary {
2819 color: #fff;
2820 background-color: #428bca;
2821 border-color: #357ebd;
2822}
2823.btn-primary:hover,
2824.btn-primary:focus,
2825.btn-primary:active,
2826.btn-primary.active,
2827.open > .dropdown-toggle.btn-primary {
2828 color: #fff;
2829 background-color: #3071a9;
2830 border-color: #285e8e;
2831}
2832.btn-primary:active,
2833.btn-primary.active,
2834.open > .dropdown-toggle.btn-primary {
2835 background-image: none;
2836}
2837.btn-primary.disabled,
2838.btn-primary[disabled],
2839fieldset[disabled] .btn-primary,
2840.btn-primary.disabled:hover,
2841.btn-primary[disabled]:hover,
2842fieldset[disabled] .btn-primary:hover,
2843.btn-primary.disabled:focus,
2844.btn-primary[disabled]:focus,
2845fieldset[disabled] .btn-primary:focus,
2846.btn-primary.disabled:active,
2847.btn-primary[disabled]:active,
2848fieldset[disabled] .btn-primary:active,
2849.btn-primary.disabled.active,
2850.btn-primary[disabled].active,
2851fieldset[disabled] .btn-primary.active {
2852 background-color: #428bca;
2853 border-color: #357ebd;
2854}
2855.btn-primary .badge {
2856 color: #428bca;
2857 background-color: #fff;
2858}
2859.btn-success {
2860 color: #fff;
2861 background-color: #5cb85c;
2862 border-color: #4cae4c;
2863}
2864.btn-success:hover,
2865.btn-success:focus,
2866.btn-success:active,
2867.btn-success.active,
2868.open > .dropdown-toggle.btn-success {
2869 color: #fff;
2870 background-color: #449d44;
2871 border-color: #398439;
2872}
2873.btn-success:active,
2874.btn-success.active,
2875.open > .dropdown-toggle.btn-success {
2876 background-image: none;
2877}
2878.btn-success.disabled,
2879.btn-success[disabled],
2880fieldset[disabled] .btn-success,
2881.btn-success.disabled:hover,
2882.btn-success[disabled]:hover,
2883fieldset[disabled] .btn-success:hover,
2884.btn-success.disabled:focus,
2885.btn-success[disabled]:focus,
2886fieldset[disabled] .btn-success:focus,
2887.btn-success.disabled:active,
2888.btn-success[disabled]:active,
2889fieldset[disabled] .btn-success:active,
2890.btn-success.disabled.active,
2891.btn-success[disabled].active,
2892fieldset[disabled] .btn-success.active {
2893 background-color: #5cb85c;
2894 border-color: #4cae4c;
2895}
2896.btn-success .badge {
2897 color: #5cb85c;
2898 background-color: #fff;
2899}
2900.btn-info {
2901 color: #fff;
2902 background-color: #5bc0de;
2903 border-color: #46b8da;
2904}
2905.btn-info:hover,
2906.btn-info:focus,
2907.btn-info:active,
2908.btn-info.active,
2909.open > .dropdown-toggle.btn-info {
2910 color: #fff;
2911 background-color: #31b0d5;
2912 border-color: #269abc;
2913}
2914.btn-info:active,
2915.btn-info.active,
2916.open > .dropdown-toggle.btn-info {
2917 background-image: none;
2918}
2919.btn-info.disabled,
2920.btn-info[disabled],
2921fieldset[disabled] .btn-info,
2922.btn-info.disabled:hover,
2923.btn-info[disabled]:hover,
2924fieldset[disabled] .btn-info:hover,
2925.btn-info.disabled:focus,
2926.btn-info[disabled]:focus,
2927fieldset[disabled] .btn-info:focus,
2928.btn-info.disabled:active,
2929.btn-info[disabled]:active,
2930fieldset[disabled] .btn-info:active,
2931.btn-info.disabled.active,
2932.btn-info[disabled].active,
2933fieldset[disabled] .btn-info.active {
2934 background-color: #5bc0de;
2935 border-color: #46b8da;
2936}
2937.btn-info .badge {
2938 color: #5bc0de;
2939 background-color: #fff;
2940}
2941.btn-warning {
2942 color: #fff;
2943 background-color: #f0ad4e;
2944 border-color: #eea236;
2945}
2946.btn-warning:hover,
2947.btn-warning:focus,
2948.btn-warning:active,
2949.btn-warning.active,
2950.open > .dropdown-toggle.btn-warning {
2951 color: #fff;
2952 background-color: #ec971f;
2953 border-color: #d58512;
2954}
2955.btn-warning:active,
2956.btn-warning.active,
2957.open > .dropdown-toggle.btn-warning {
2958 background-image: none;
2959}
2960.btn-warning.disabled,
2961.btn-warning[disabled],
2962fieldset[disabled] .btn-warning,
2963.btn-warning.disabled:hover,
2964.btn-warning[disabled]:hover,
2965fieldset[disabled] .btn-warning:hover,
2966.btn-warning.disabled:focus,
2967.btn-warning[disabled]:focus,
2968fieldset[disabled] .btn-warning:focus,
2969.btn-warning.disabled:active,
2970.btn-warning[disabled]:active,
2971fieldset[disabled] .btn-warning:active,
2972.btn-warning.disabled.active,
2973.btn-warning[disabled].active,
2974fieldset[disabled] .btn-warning.active {
2975 background-color: #f0ad4e;
2976 border-color: #eea236;
2977}
2978.btn-warning .badge {
2979 color: #f0ad4e;
2980 background-color: #fff;
2981}
2982.btn-danger {
2983 color: #fff;
2984 background-color: #d9534f;
2985 border-color: #d43f3a;
2986}
2987.btn-danger:hover,
2988.btn-danger:focus,
2989.btn-danger:active,
2990.btn-danger.active,
2991.open > .dropdown-toggle.btn-danger {
2992 color: #fff;
2993 background-color: #c9302c;
2994 border-color: #ac2925;
2995}
2996.btn-danger:active,
2997.btn-danger.active,
2998.open > .dropdown-toggle.btn-danger {
2999 background-image: none;
3000}
3001.btn-danger.disabled,
3002.btn-danger[disabled],
3003fieldset[disabled] .btn-danger,
3004.btn-danger.disabled:hover,
3005.btn-danger[disabled]:hover,
3006fieldset[disabled] .btn-danger:hover,
3007.btn-danger.disabled:focus,
3008.btn-danger[disabled]:focus,
3009fieldset[disabled] .btn-danger:focus,
3010.btn-danger.disabled:active,
3011.btn-danger[disabled]:active,
3012fieldset[disabled] .btn-danger:active,
3013.btn-danger.disabled.active,
3014.btn-danger[disabled].active,
3015fieldset[disabled] .btn-danger.active {
3016 background-color: #d9534f;
3017 border-color: #d43f3a;
3018}
3019.btn-danger .badge {
3020 color: #d9534f;
3021 background-color: #fff;
3022}
3023.btn-link {
3024 font-weight: normal;
3025 color: #428bca;
3026 cursor: pointer;
3027 border-radius: 0;
3028}
3029.btn-link,
3030.btn-link:active,
3031.btn-link[disabled],
3032fieldset[disabled] .btn-link {
3033 background-color: transparent;
3034 -webkit-box-shadow: none;
3035 box-shadow: none;
3036}
3037.btn-link,
3038.btn-link:hover,
3039.btn-link:focus,
3040.btn-link:active {
3041 border-color: transparent;
3042}
3043.btn-link:hover,
3044.btn-link:focus {
3045 color: #2a6496;
3046 text-decoration: underline;
3047 background-color: transparent;
3048}
3049.btn-link[disabled]:hover,
3050fieldset[disabled] .btn-link:hover,
3051.btn-link[disabled]:focus,
3052fieldset[disabled] .btn-link:focus {
3053 color: #777;
3054 text-decoration: none;
3055}
3056.btn-lg,
3057.btn-group-lg > .btn {
3058 padding: 10px 16px;
3059 font-size: 18px;
3060 line-height: 1.33;
3061 border-radius: 6px;
3062}
3063.btn-sm,
3064.btn-group-sm > .btn {
3065 padding: 5px 10px;
3066 font-size: 12px;
3067 line-height: 1.5;
3068 border-radius: 3px;
3069}
3070.btn-xs,
3071.btn-group-xs > .btn {
3072 padding: 1px 5px;
3073 font-size: 12px;
3074 line-height: 1.5;
3075 border-radius: 3px;
3076}
3077.btn-block {
3078 display: block;
3079 width: 100%;
3080}
3081.btn-block + .btn-block {
3082 margin-top: 5px;
3083}
3084input[type="submit"].btn-block,
3085input[type="reset"].btn-block,
3086input[type="button"].btn-block {
3087 width: 100%;
3088}
3089.fade {
3090 opacity: 0;
3091 -webkit-transition: opacity .15s linear;
3092 -o-transition: opacity .15s linear;
3093 transition: opacity .15s linear;
3094}
3095.fade.in {
3096 opacity: 1;
3097}
3098.collapse {
3099 display: none;
3100}
3101.collapse.in {
3102 display: block;
3103}
3104tr.collapse.in {
3105 display: table-row;
3106}
3107tbody.collapse.in {
3108 display: table-row-group;
3109}
3110.collapsing {
3111 position: relative;
3112 height: 0;
3113 overflow: hidden;
3114 -webkit-transition: height .35s ease;
3115 -o-transition: height .35s ease;
3116 transition: height .35s ease;
3117}
3118.caret {
3119 display: inline-block;
3120 width: 0;
3121 height: 0;
3122 margin-left: 2px;
3123 vertical-align: middle;
3124 border-top: 4px solid;
3125 border-right: 4px solid transparent;
3126 border-left: 4px solid transparent;
3127}
3128.dropdown {
3129 position: relative;
3130}
3131.dropdown-toggle:focus {
3132 outline: 0;
3133}
3134.dropdown-menu {
3135 position: absolute;
3136 top: 100%;
3137 left: 0;
3138 z-index: 1000;
3139 display: none;
3140 float: left;
3141 min-width: 160px;
3142 padding: 5px 0;
3143 margin: 2px 0 0;
3144 font-size: 14px;
3145 text-align: left;
3146 list-style: none;
3147 background-color: #fff;
3148 -webkit-background-clip: padding-box;
3149 background-clip: padding-box;
3150 border: 1px solid #ccc;
3151 border: 1px solid rgba(0, 0, 0, .15);
3152 border-radius: 4px;
3153 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3154 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3155}
3156.dropdown-menu.pull-right {
3157 right: 0;
3158 left: auto;
3159}
3160.dropdown-menu .divider {
3161 height: 1px;
3162 margin: 9px 0;
3163 overflow: hidden;
3164 background-color: #e5e5e5;
3165}
3166.dropdown-menu > li > a {
3167 display: block;
3168 padding: 3px 20px;
3169 clear: both;
3170 font-weight: normal;
3171 line-height: 1.42857143;
3172 color: #333;
3173 white-space: nowrap;
3174}
3175.dropdown-menu > li > a:hover,
3176.dropdown-menu > li > a:focus {
3177 color: #262626;
3178 text-decoration: none;
3179 background-color: #f5f5f5;
3180}
3181.dropdown-menu > .active > a,
3182.dropdown-menu > .active > a:hover,
3183.dropdown-menu > .active > a:focus {
3184 color: #fff;
3185 text-decoration: none;
3186 background-color: #428bca;
3187 outline: 0;
3188}
3189.dropdown-menu > .disabled > a,
3190.dropdown-menu > .disabled > a:hover,
3191.dropdown-menu > .disabled > a:focus {
3192 color: #777;
3193}
3194.dropdown-menu > .disabled > a:hover,
3195.dropdown-menu > .disabled > a:focus {
3196 text-decoration: none;
3197 cursor: not-allowed;
3198 background-color: transparent;
3199 background-image: none;
3200 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3201}
3202.open > .dropdown-menu {
3203 display: block;
3204}
3205.open > a {
3206 outline: 0;
3207}
3208.dropdown-menu-right {
3209 right: 0;
3210 left: auto;
3211}
3212.dropdown-menu-left {
3213 right: auto;
3214 left: 0;
3215}
3216.dropdown-header {
3217 display: block;
3218 padding: 3px 20px;
3219 font-size: 12px;
3220 line-height: 1.42857143;
3221 color: #777;
3222 white-space: nowrap;
3223}
3224.dropdown-backdrop {
3225 position: fixed;
3226 top: 0;
3227 right: 0;
3228 bottom: 0;
3229 left: 0;
3230 z-index: 990;
3231}
3232.pull-right > .dropdown-menu {
3233 right: 0;
3234 left: auto;
3235}
3236.dropup .caret,
3237.navbar-fixed-bottom .dropdown .caret {
3238 content: "";
3239 border-top: 0;
3240 border-bottom: 4px solid;
3241}
3242.dropup .dropdown-menu,
3243.navbar-fixed-bottom .dropdown .dropdown-menu {
3244 top: auto;
3245 bottom: 100%;
3246 margin-bottom: 1px;
3247}
3248@media (min-width: 768px) {
3249 .navbar-right .dropdown-menu {
3250 right: 0;
3251 left: auto;
3252 }
3253 .navbar-right .dropdown-menu-left {
3254 right: auto;
3255 left: 0;
3256 }
3257}
3258.btn-group,
3259.btn-group-vertical {
3260 position: relative;
3261 display: inline-block;
3262 vertical-align: middle;
3263}
3264.btn-group > .btn,
3265.btn-group-vertical > .btn {
3266 position: relative;
3267 float: left;
3268}
3269.btn-group > .btn:hover,
3270.btn-group-vertical > .btn:hover,
3271.btn-group > .btn:focus,
3272.btn-group-vertical > .btn:focus,
3273.btn-group > .btn:active,
3274.btn-group-vertical > .btn:active,
3275.btn-group > .btn.active,
3276.btn-group-vertical > .btn.active {
3277 z-index: 2;
3278}
3279.btn-group > .btn:focus,
3280.btn-group-vertical > .btn:focus {
3281 outline: 0;
3282}
3283.btn-group .btn + .btn,
3284.btn-group .btn + .btn-group,
3285.btn-group .btn-group + .btn,
3286.btn-group .btn-group + .btn-group {
3287 margin-left: -1px;
3288}
3289.btn-toolbar {
3290 margin-left: -5px;
3291}
3292.btn-toolbar .btn-group,
3293.btn-toolbar .input-group {
3294 float: left;
3295}
3296.btn-toolbar > .btn,
3297.btn-toolbar > .btn-group,
3298.btn-toolbar > .input-group {
3299 margin-left: 5px;
3300}
3301.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3302 border-radius: 0;
3303}
3304.btn-group > .btn:first-child {
3305 margin-left: 0;
3306}
3307.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3308 border-top-right-radius: 0;
3309 border-bottom-right-radius: 0;
3310}
3311.btn-group > .btn:last-child:not(:first-child),
3312.btn-group > .dropdown-toggle:not(:first-child) {
3313 border-top-left-radius: 0;
3314 border-bottom-left-radius: 0;
3315}
3316.btn-group > .btn-group {
3317 float: left;
3318}
3319.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3320 border-radius: 0;
3321}
3322.btn-group > .btn-group:first-child > .btn:last-child,
3323.btn-group > .btn-group:first-child > .dropdown-toggle {
3324 border-top-right-radius: 0;
3325 border-bottom-right-radius: 0;
3326}
3327.btn-group > .btn-group:last-child > .btn:first-child {
3328 border-top-left-radius: 0;
3329 border-bottom-left-radius: 0;
3330}
3331.btn-group .dropdown-toggle:active,
3332.btn-group.open .dropdown-toggle {
3333 outline: 0;
3334}
3335.btn-group > .btn + .dropdown-toggle {
3336 padding-right: 8px;
3337 padding-left: 8px;
3338}
3339.btn-group > .btn-lg + .dropdown-toggle {
3340 padding-right: 12px;
3341 padding-left: 12px;
3342}
3343.btn-group.open .dropdown-toggle {
3344 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3345 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3346}
3347.btn-group.open .dropdown-toggle.btn-link {
3348 -webkit-box-shadow: none;
3349 box-shadow: none;
3350}
3351.btn .caret {
3352 margin-left: 0;
3353}
3354.btn-lg .caret {
3355 border-width: 5px 5px 0;
3356 border-bottom-width: 0;
3357}
3358.dropup .btn-lg .caret {
3359 border-width: 0 5px 5px;
3360}
3361.btn-group-vertical > .btn,
3362.btn-group-vertical > .btn-group,
3363.btn-group-vertical > .btn-group > .btn {
3364 display: block;
3365 float: none;
3366 width: 100%;
3367 max-width: 100%;
3368}
3369.btn-group-vertical > .btn-group > .btn {
3370 float: none;
3371}
3372.btn-group-vertical > .btn + .btn,
3373.btn-group-vertical > .btn + .btn-group,
3374.btn-group-vertical > .btn-group + .btn,
3375.btn-group-vertical > .btn-group + .btn-group {
3376 margin-top: -1px;
3377 margin-left: 0;
3378}
3379.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3380 border-radius: 0;
3381}
3382.btn-group-vertical > .btn:first-child:not(:last-child) {
3383 border-top-right-radius: 4px;
3384 border-bottom-right-radius: 0;
3385 border-bottom-left-radius: 0;
3386}
3387.btn-group-vertical > .btn:last-child:not(:first-child) {
3388 border-top-left-radius: 0;
3389 border-top-right-radius: 0;
3390 border-bottom-left-radius: 4px;
3391}
3392.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3393 border-radius: 0;
3394}
3395.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3396.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3397 border-bottom-right-radius: 0;
3398 border-bottom-left-radius: 0;
3399}
3400.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3401 border-top-left-radius: 0;
3402 border-top-right-radius: 0;
3403}
3404.btn-group-justified {
3405 display: table;
3406 width: 100%;
3407 table-layout: fixed;
3408 border-collapse: separate;
3409}
3410.btn-group-justified > .btn,
3411.btn-group-justified > .btn-group {
3412 display: table-cell;
3413 float: none;
3414 width: 1%;
3415}
3416.btn-group-justified > .btn-group .btn {
3417 width: 100%;
3418}
3419.btn-group-justified > .btn-group .dropdown-menu {
3420 left: auto;
3421}
3422[data-toggle="buttons"] > .btn > input[type="radio"],
3423[data-toggle="buttons"] > .btn > input[type="checkbox"] {
3424 position: absolute;
3425 z-index: -1;
3426 filter: alpha(opacity=0);
3427 opacity: 0;
3428}
3429.input-group {
3430 position: relative;
3431 display: table;
3432 border-collapse: separate;
3433}
3434.input-group[class*="col-"] {
3435 float: none;
3436 padding-right: 0;
3437 padding-left: 0;
3438}
3439.input-group .form-control {
3440 position: relative;
3441 z-index: 2;
3442 float: left;
3443 width: 100%;
3444 margin-bottom: 0;
3445}
3446.input-group-lg > .form-control,
3447.input-group-lg > .input-group-addon,
3448.input-group-lg > .input-group-btn > .btn {
3449 height: 46px;
3450 padding: 10px 16px;
3451 font-size: 18px;
3452 line-height: 1.33;
3453 border-radius: 6px;
3454}
3455select.input-group-lg > .form-control,
3456select.input-group-lg > .input-group-addon,
3457select.input-group-lg > .input-group-btn > .btn {
3458 height: 46px;
3459 line-height: 46px;
3460}
3461textarea.input-group-lg > .form-control,
3462textarea.input-group-lg > .input-group-addon,
3463textarea.input-group-lg > .input-group-btn > .btn,
3464select[multiple].input-group-lg > .form-control,
3465select[multiple].input-group-lg > .input-group-addon,
3466select[multiple].input-group-lg > .input-group-btn > .btn {
3467 height: auto;
3468}
3469.input-group-sm > .form-control,
3470.input-group-sm > .input-group-addon,
3471.input-group-sm > .input-group-btn > .btn {
3472 height: 30px;
3473 padding: 5px 10px;
3474 font-size: 12px;
3475 line-height: 1.5;
3476 border-radius: 3px;
3477}
3478select.input-group-sm > .form-control,
3479select.input-group-sm > .input-group-addon,
3480select.input-group-sm > .input-group-btn > .btn {
3481 height: 30px;
3482 line-height: 30px;
3483}
3484textarea.input-group-sm > .form-control,
3485textarea.input-group-sm > .input-group-addon,
3486textarea.input-group-sm > .input-group-btn > .btn,
3487select[multiple].input-group-sm > .form-control,
3488select[multiple].input-group-sm > .input-group-addon,
3489select[multiple].input-group-sm > .input-group-btn > .btn {
3490 height: auto;
3491}
3492.input-group-addon,
3493.input-group-btn,
3494.input-group .form-control {
3495 display: table-cell;
3496}
3497.input-group-addon:not(:first-child):not(:last-child),
3498.input-group-btn:not(:first-child):not(:last-child),
3499.input-group .form-control:not(:first-child):not(:last-child) {
3500 border-radius: 0;
3501}
3502.input-group-addon,
3503.input-group-btn {
3504 width: 1%;
3505 white-space: nowrap;
3506 vertical-align: middle;
3507}
3508.input-group-addon {
3509 padding: 6px 12px;
3510 font-size: 14px;
3511 font-weight: normal;
3512 line-height: 1;
3513 color: #555;
3514 text-align: center;
3515 background-color: #eee;
3516 border: 1px solid #ccc;
3517 border-radius: 4px;
3518}
3519.input-group-addon.input-sm {
3520 padding: 5px 10px;
3521 font-size: 12px;
3522 border-radius: 3px;
3523}
3524.input-group-addon.input-lg {
3525 padding: 10px 16px;
3526 font-size: 18px;
3527 border-radius: 6px;
3528}
3529.input-group-addon input[type="radio"],
3530.input-group-addon input[type="checkbox"] {
3531 margin-top: 0;
3532}
3533.input-group .form-control:first-child,
3534.input-group-addon:first-child,
3535.input-group-btn:first-child > .btn,
3536.input-group-btn:first-child > .btn-group > .btn,
3537.input-group-btn:first-child > .dropdown-toggle,
3538.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3539.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3540 border-top-right-radius: 0;
3541 border-bottom-right-radius: 0;
3542}
3543.input-group-addon:first-child {
3544 border-right: 0;
3545}
3546.input-group .form-control:last-child,
3547.input-group-addon:last-child,
3548.input-group-btn:last-child > .btn,
3549.input-group-btn:last-child > .btn-group > .btn,
3550.input-group-btn:last-child > .dropdown-toggle,
3551.input-group-btn:first-child > .btn:not(:first-child),
3552.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3553 border-top-left-radius: 0;
3554 border-bottom-left-radius: 0;
3555}
3556.input-group-addon:last-child {
3557 border-left: 0;
3558}
3559.input-group-btn {
3560 position: relative;
3561 font-size: 0;
3562 white-space: nowrap;
3563}
3564.input-group-btn > .btn {
3565 position: relative;
3566}
3567.input-group-btn > .btn + .btn {
3568 margin-left: -1px;
3569}
3570.input-group-btn > .btn:hover,
3571.input-group-btn > .btn:focus,
3572.input-group-btn > .btn:active {
3573 z-index: 2;
3574}
3575.input-group-btn:first-child > .btn,
3576.input-group-btn:first-child > .btn-group {
3577 margin-right: -1px;
3578}
3579.input-group-btn:last-child > .btn,
3580.input-group-btn:last-child > .btn-group {
3581 margin-left: -1px;
3582}
3583.nav {
3584 padding-left: 0;
3585 margin-bottom: 0;
3586 list-style: none;
3587}
3588.nav > li {
3589 position: relative;
3590 display: block;
3591}
3592.nav > li > a {
3593 position: relative;
3594 display: block;
3595 padding: 10px 15px;
3596}
3597.nav > li > a:hover,
3598.nav > li > a:focus {
3599 text-decoration: none;
3600 background-color: #eee;
3601}
3602.nav > li.disabled > a {
3603 color: #777;
3604}
3605.nav > li.disabled > a:hover,
3606.nav > li.disabled > a:focus {
3607 color: #777;
3608 text-decoration: none;
3609 cursor: not-allowed;
3610 background-color: transparent;
3611}
3612.nav .open > a,
3613.nav .open > a:hover,
3614.nav .open > a:focus {
3615 background-color: #eee;
3616 border-color: #428bca;
3617}
3618.nav .nav-divider {
3619 height: 1px;
3620 margin: 9px 0;
3621 overflow: hidden;
3622 background-color: #e5e5e5;
3623}
3624.nav > li > a > img {
3625 max-width: none;
3626}
3627.nav-tabs {
3628 border-bottom: 1px solid #ddd;
3629}
3630.nav-tabs > li {
3631 float: left;
3632 margin-bottom: -1px;
3633}
3634.nav-tabs > li > a {
3635 margin-right: 2px;
3636 line-height: 1.42857143;
3637 border: 1px solid transparent;
3638 border-radius: 4px 4px 0 0;
3639}
3640.nav-tabs > li > a:hover {
3641 border-color: #eee #eee #ddd;
3642}
3643.nav-tabs > li.active > a,
3644.nav-tabs > li.active > a:hover,
3645.nav-tabs > li.active > a:focus {
3646 color: #555;
3647 cursor: default;
3648 background-color: #fff;
3649 border: 1px solid #ddd;
3650 border-bottom-color: transparent;
3651}
3652.nav-tabs.nav-justified {
3653 width: 100%;
3654 border-bottom: 0;
3655}
3656.nav-tabs.nav-justified > li {
3657 float: none;
3658}
3659.nav-tabs.nav-justified > li > a {
3660 margin-bottom: 5px;
3661 text-align: center;
3662}
3663.nav-tabs.nav-justified > .dropdown .dropdown-menu {
3664 top: auto;
3665 left: auto;
3666}
3667@media (min-width: 768px) {
3668 .nav-tabs.nav-justified > li {
3669 display: table-cell;
3670 width: 1%;
3671 }
3672 .nav-tabs.nav-justified > li > a {
3673 margin-bottom: 0;
3674 }
3675}
3676.nav-tabs.nav-justified > li > a {
3677 margin-right: 0;
3678 border-radius: 4px;
3679}
3680.nav-tabs.nav-justified > .active > a,
3681.nav-tabs.nav-justified > .active > a:hover,
3682.nav-tabs.nav-justified > .active > a:focus {
3683 border: 1px solid #ddd;
3684}
3685@media (min-width: 768px) {
3686 .nav-tabs.nav-justified > li > a {
3687 border-bottom: 1px solid #ddd;
3688 border-radius: 4px 4px 0 0;
3689 }
3690 .nav-tabs.nav-justified > .active > a,
3691 .nav-tabs.nav-justified > .active > a:hover,
3692 .nav-tabs.nav-justified > .active > a:focus {
3693 border-bottom-color: #fff;
3694 }
3695}
3696.nav-pills > li {
3697 float: left;
3698}
3699.nav-pills > li > a {
3700 border-radius: 4px;
3701}
3702.nav-pills > li + li {
3703 margin-left: 2px;
3704}
3705.nav-pills > li.active > a,
3706.nav-pills > li.active > a:hover,
3707.nav-pills > li.active > a:focus {
3708 color: #fff;
3709 background-color: #428bca;
3710}
3711.nav-stacked > li {
3712 float: none;
3713}
3714.nav-stacked > li + li {
3715 margin-top: 2px;
3716 margin-left: 0;
3717}
3718.nav-justified {
3719 width: 100%;
3720}
3721.nav-justified > li {
3722 float: none;
3723}
3724.nav-justified > li > a {
3725 margin-bottom: 5px;
3726 text-align: center;
3727}
3728.nav-justified > .dropdown .dropdown-menu {
3729 top: auto;
3730 left: auto;
3731}
3732@media (min-width: 768px) {
3733 .nav-justified > li {
3734 display: table-cell;
3735 width: 1%;
3736 }
3737 .nav-justified > li > a {
3738 margin-bottom: 0;
3739 }
3740}
3741.nav-tabs-justified {
3742 border-bottom: 0;
3743}
3744.nav-tabs-justified > li > a {
3745 margin-right: 0;
3746 border-radius: 4px;
3747}
3748.nav-tabs-justified > .active > a,
3749.nav-tabs-justified > .active > a:hover,
3750.nav-tabs-justified > .active > a:focus {
3751 border: 1px solid #ddd;
3752}
3753@media (min-width: 768px) {
3754 .nav-tabs-justified > li > a {
3755 border-bottom: 1px solid #ddd;
3756 border-radius: 4px 4px 0 0;
3757 }
3758 .nav-tabs-justified > .active > a,
3759 .nav-tabs-justified > .active > a:hover,
3760 .nav-tabs-justified > .active > a:focus {
3761 border-bottom-color: #fff;
3762 }
3763}
3764.tab-content > .tab-pane {
3765 display: none;
3766}
3767.tab-content > .active {
3768 display: block;
3769}
3770.nav-tabs .dropdown-menu {
3771 margin-top: -1px;
3772 border-top-left-radius: 0;
3773 border-top-right-radius: 0;
3774}
3775.navbar {
3776 position: relative;
3777 min-height: 50px;
3778 margin-bottom: 20px;
3779 border: 1px solid transparent;
3780}
3781@media (min-width: 768px) {
3782 .navbar {
3783 border-radius: 4px;
3784 }
3785}
3786@media (min-width: 768px) {
3787 .navbar-header {
3788 float: left;
3789 }
3790}
3791.navbar-collapse {
3792 padding-right: 15px;
3793 padding-left: 15px;
3794 overflow-x: visible;
3795 -webkit-overflow-scrolling: touch;
3796 border-top: 1px solid transparent;
3797 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3798 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3799}
3800.navbar-collapse.in {
3801 overflow-y: auto;
3802}
3803@media (min-width: 768px) {
3804 .navbar-collapse {
3805 width: auto;
3806 border-top: 0;
3807 -webkit-box-shadow: none;
3808 box-shadow: none;
3809 }
3810 .navbar-collapse.collapse {
3811 display: block !important;
3812 height: auto !important;
3813 padding-bottom: 0;
3814 overflow: visible !important;
3815 }
3816 .navbar-collapse.in {
3817 overflow-y: visible;
3818 }
3819 .navbar-fixed-top .navbar-collapse,
3820 .navbar-static-top .navbar-collapse,
3821 .navbar-fixed-bottom .navbar-collapse {
3822 padding-right: 0;
3823 padding-left: 0;
3824 }
3825}
3826.navbar-fixed-top .navbar-collapse,
3827.navbar-fixed-bottom .navbar-collapse {
3828 max-height: 340px;
3829}
3830@media (max-width: 480px) and (orientation: landscape) {
3831 .navbar-fixed-top .navbar-collapse,
3832 .navbar-fixed-bottom .navbar-collapse {
3833 max-height: 200px;
3834 }
3835}
3836.container > .navbar-header,
3837.container-fluid > .navbar-header,
3838.container > .navbar-collapse,
3839.container-fluid > .navbar-collapse {
3840 margin-right: -15px;
3841 margin-left: -15px;
3842}
3843@media (min-width: 768px) {
3844 .container > .navbar-header,
3845 .container-fluid > .navbar-header,
3846 .container > .navbar-collapse,
3847 .container-fluid > .navbar-collapse {
3848 margin-right: 0;
3849 margin-left: 0;
3850 }
3851}
3852.navbar-static-top {
3853 z-index: 1000;
3854 border-width: 0 0 1px;
3855}
3856@media (min-width: 768px) {
3857 .navbar-static-top {
3858 border-radius: 0;
3859 }
3860}
3861.navbar-fixed-top,
3862.navbar-fixed-bottom {
3863 position: fixed;
3864 right: 0;
3865 left: 0;
3866 z-index: 1030;
3867 -webkit-transform: translate3d(0, 0, 0);
3868 -o-transform: translate3d(0, 0, 0);
3869 transform: translate3d(0, 0, 0);
3870}
3871@media (min-width: 768px) {
3872 .navbar-fixed-top,
3873 .navbar-fixed-bottom {
3874 border-radius: 0;
3875 }
3876}
3877.navbar-fixed-top {
3878 top: 0;
3879 border-width: 0 0 1px;
3880}
3881.navbar-fixed-bottom {
3882 bottom: 0;
3883 margin-bottom: 0;
3884 border-width: 1px 0 0;
3885}
3886.navbar-brand {
3887 float: left;
3888 height: 50px;
3889 padding: 15px 15px;
3890 font-size: 18px;
3891 line-height: 20px;
3892}
3893.navbar-brand:hover,
3894.navbar-brand:focus {
3895 text-decoration: none;
3896}
3897@media (min-width: 768px) {
3898 .navbar > .container .navbar-brand,
3899 .navbar > .container-fluid .navbar-brand {
3900 margin-left: -15px;
3901 }
3902}
3903.navbar-toggle {
3904 position: relative;
3905 float: right;
3906 padding: 9px 10px;
3907 margin-top: 8px;
3908 margin-right: 15px;
3909 margin-bottom: 8px;
3910 background-color: transparent;
3911 background-image: none;
3912 border: 1px solid transparent;
3913 border-radius: 4px;
3914}
3915.navbar-toggle:focus {
3916 outline: 0;
3917}
3918.navbar-toggle .icon-bar {
3919 display: block;
3920 width: 22px;
3921 height: 2px;
3922 border-radius: 1px;
3923}
3924.navbar-toggle .icon-bar + .icon-bar {
3925 margin-top: 4px;
3926}
3927@media (min-width: 768px) {
3928 .navbar-toggle {
3929 display: none;
3930 }
3931}
3932.navbar-nav {
3933 margin: 7.5px -15px;
3934}
3935.navbar-nav > li > a {
3936 padding-top: 10px;
3937 padding-bottom: 10px;
3938 line-height: 20px;
3939}
3940@media (max-width: 767px) {
3941 .navbar-nav .open .dropdown-menu {
3942 position: static;
3943 float: none;
3944 width: auto;
3945 margin-top: 0;
3946 background-color: transparent;
3947 border: 0;
3948 -webkit-box-shadow: none;
3949 box-shadow: none;
3950 }
3951 .navbar-nav .open .dropdown-menu > li > a,
3952 .navbar-nav .open .dropdown-menu .dropdown-header {
3953 padding: 5px 15px 5px 25px;
3954 }
3955 .navbar-nav .open .dropdown-menu > li > a {
3956 line-height: 20px;
3957 }
3958 .navbar-nav .open .dropdown-menu > li > a:hover,
3959 .navbar-nav .open .dropdown-menu > li > a:focus {
3960 background-image: none;
3961 }
3962}
3963@media (min-width: 768px) {
3964 .navbar-nav {
3965 float: left;
3966 margin: 0;
3967 }
3968 .navbar-nav > li {
3969 float: left;
3970 }
3971 .navbar-nav > li > a {
3972 padding-top: 15px;
3973 padding-bottom: 15px;
3974 }
3975 .navbar-nav.navbar-right:last-child {
3976 margin-right: -15px;
3977 }
3978}
3979@media (min-width: 768px) {
3980 .navbar-left {
3981 float: left !important;
3982 }
3983 .navbar-right {
3984 float: right !important;
3985 }
3986}
3987.navbar-form {
3988 padding: 10px 15px;
3989 margin-top: 8px;
3990 margin-right: -15px;
3991 margin-bottom: 8px;
3992 margin-left: -15px;
3993 border-top: 1px solid transparent;
3994 border-bottom: 1px solid transparent;
3995 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
3996 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
3997}
3998@media (min-width: 768px) {
3999 .navbar-form .form-group {
4000 display: inline-block;
4001 margin-bottom: 0;
4002 vertical-align: middle;
4003 }
4004 .navbar-form .form-control {
4005 display: inline-block;
4006 width: auto;
4007 vertical-align: middle;
4008 }
4009 .navbar-form .input-group {
4010 display: inline-table;
4011 vertical-align: middle;
4012 }
4013 .navbar-form .input-group .input-group-addon,
4014 .navbar-form .input-group .input-group-btn,
4015 .navbar-form .input-group .form-control {
4016 width: auto;
4017 }
4018 .navbar-form .input-group > .form-control {
4019 width: 100%;
4020 }
4021 .navbar-form .control-label {
4022 margin-bottom: 0;
4023 vertical-align: middle;
4024 }
4025 .navbar-form .radio,
4026 .navbar-form .checkbox {
4027 display: inline-block;
4028 margin-top: 0;
4029 margin-bottom: 0;
4030 vertical-align: middle;
4031 }
4032 .navbar-form .radio label,
4033 .navbar-form .checkbox label {
4034 padding-left: 0;
4035 }
4036 .navbar-form .radio input[type="radio"],
4037 .navbar-form .checkbox input[type="checkbox"] {
4038 position: relative;
4039 margin-left: 0;
4040 }
4041 .navbar-form .has-feedback .form-control-feedback {
4042 top: 0;
4043 }
4044}
4045@media (max-width: 767px) {
4046 .navbar-form .form-group {
4047 margin-bottom: 5px;
4048 }
4049}
4050@media (min-width: 768px) {
4051 .navbar-form {
4052 width: auto;
4053 padding-top: 0;
4054 padding-bottom: 0;
4055 margin-right: 0;
4056 margin-left: 0;
4057 border: 0;
4058 -webkit-box-shadow: none;
4059 box-shadow: none;
4060 }
4061 .navbar-form.navbar-right:last-child {
4062 margin-right: -15px;
4063 }
4064}
4065.navbar-nav > li > .dropdown-menu {
4066 margin-top: 0;
4067 border-top-left-radius: 0;
4068 border-top-right-radius: 0;
4069}
4070.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4071 border-bottom-right-radius: 0;
4072 border-bottom-left-radius: 0;
4073}
4074.navbar-btn {
4075 margin-top: 8px;
4076 margin-bottom: 8px;
4077}
4078.navbar-btn.btn-sm {
4079 margin-top: 10px;
4080 margin-bottom: 10px;
4081}
4082.navbar-btn.btn-xs {
4083 margin-top: 14px;
4084 margin-bottom: 14px;
4085}
4086.navbar-text {
4087 margin-top: 15px;
4088 margin-bottom: 15px;
4089}
4090@media (min-width: 768px) {
4091 .navbar-text {
4092 float: left;
4093 margin-right: 15px;
4094 margin-left: 15px;
4095 }
4096 .navbar-text.navbar-right:last-child {
4097 margin-right: 0;
4098 }
4099}
4100.navbar-default {
4101 background-color: #f8f8f8;
4102 border-color: #e7e7e7;
4103}
4104.navbar-default .navbar-brand {
4105 color: #777;
4106}
4107.navbar-default .navbar-brand:hover,
4108.navbar-default .navbar-brand:focus {
4109 color: #5e5e5e;
4110 background-color: transparent;
4111}
4112.navbar-default .navbar-text {
4113 color: #777;
4114}
4115.navbar-default .navbar-nav > li > a {
4116 color: #777;
4117}
4118.navbar-default .navbar-nav > li > a:hover,
4119.navbar-default .navbar-nav > li > a:focus {
4120 color: #333;
4121 background-color: transparent;
4122}
4123.navbar-default .navbar-nav > .active > a,
4124.navbar-default .navbar-nav > .active > a:hover,
4125.navbar-default .navbar-nav > .active > a:focus {
4126 color: #555;
4127 background-color: #e7e7e7;
4128}
4129.navbar-default .navbar-nav > .disabled > a,
4130.navbar-default .navbar-nav > .disabled > a:hover,
4131.navbar-default .navbar-nav > .disabled > a:focus {
4132 color: #ccc;
4133 background-color: transparent;
4134}
4135.navbar-default .navbar-toggle {
4136 border-color: #ddd;
4137}
4138.navbar-default .navbar-toggle:hover,
4139.navbar-default .navbar-toggle:focus {
4140 background-color: #ddd;
4141}
4142.navbar-default .navbar-toggle .icon-bar {
4143 background-color: #888;
4144}
4145.navbar-default .navbar-collapse,
4146.navbar-default .navbar-form {
4147 border-color: #e7e7e7;
4148}
4149.navbar-default .navbar-nav > .open > a,
4150.navbar-default .navbar-nav > .open > a:hover,
4151.navbar-default .navbar-nav > .open > a:focus {
4152 color: #555;
4153 background-color: #e7e7e7;
4154}
4155@media (max-width: 767px) {
4156 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4157 color: #777;
4158 }
4159 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4160 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4161 color: #333;
4162 background-color: transparent;
4163 }
4164 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4165 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4166 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4167 color: #555;
4168 background-color: #e7e7e7;
4169 }
4170 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4171 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4172 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4173 color: #ccc;
4174 background-color: transparent;
4175 }
4176}
4177.navbar-default .navbar-link {
4178 color: #777;
4179}
4180.navbar-default .navbar-link:hover {
4181 color: #333;
4182}
4183.navbar-default .btn-link {
4184 color: #777;
4185}
4186.navbar-default .btn-link:hover,
4187.navbar-default .btn-link:focus {
4188 color: #333;
4189}
4190.navbar-default .btn-link[disabled]:hover,
4191fieldset[disabled] .navbar-default .btn-link:hover,
4192.navbar-default .btn-link[disabled]:focus,
4193fieldset[disabled] .navbar-default .btn-link:focus {
4194 color: #ccc;
4195}
4196.navbar-inverse {
4197 background-color: #222;
4198 border-color: #080808;
4199}
4200.navbar-inverse .navbar-brand {
4201 color: #777;
4202}
4203.navbar-inverse .navbar-brand:hover,
4204.navbar-inverse .navbar-brand:focus {
4205 color: #fff;
4206 background-color: transparent;
4207}
4208.navbar-inverse .navbar-text {
4209 color: #777;
4210}
4211.navbar-inverse .navbar-nav > li > a {
4212 color: #777;
4213}
4214.navbar-inverse .navbar-nav > li > a:hover,
4215.navbar-inverse .navbar-nav > li > a:focus {
4216 color: #fff;
4217 background-color: transparent;
4218}
4219.navbar-inverse .navbar-nav > .active > a,
4220.navbar-inverse .navbar-nav > .active > a:hover,
4221.navbar-inverse .navbar-nav > .active > a:focus {
4222 color: #fff;
4223 background-color: #080808;
4224}
4225.navbar-inverse .navbar-nav > .disabled > a,
4226.navbar-inverse .navbar-nav > .disabled > a:hover,
4227.navbar-inverse .navbar-nav > .disabled > a:focus {
4228 color: #444;
4229 background-color: transparent;
4230}
4231.navbar-inverse .navbar-toggle {
4232 border-color: #333;
4233}
4234.navbar-inverse .navbar-toggle:hover,
4235.navbar-inverse .navbar-toggle:focus {
4236 background-color: #333;
4237}
4238.navbar-inverse .navbar-toggle .icon-bar {
4239 background-color: #fff;
4240}
4241.navbar-inverse .navbar-collapse,
4242.navbar-inverse .navbar-form {
4243 border-color: #101010;
4244}
4245.navbar-inverse .navbar-nav > .open > a,
4246.navbar-inverse .navbar-nav > .open > a:hover,
4247.navbar-inverse .navbar-nav > .open > a:focus {
4248 color: #fff;
4249 background-color: #080808;
4250}
4251@media (max-width: 767px) {
4252 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4253 border-color: #080808;
4254 }
4255 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4256 background-color: #080808;
4257 }
4258 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4259 color: #777;
4260 }
4261 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4262 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4263 color: #fff;
4264 background-color: transparent;
4265 }
4266 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4267 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4268 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4269 color: #fff;
4270 background-color: #080808;
4271 }
4272 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4273 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4274 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4275 color: #444;
4276 background-color: transparent;
4277 }
4278}
4279.navbar-inverse .navbar-link {
4280 color: #777;
4281}
4282.navbar-inverse .navbar-link:hover {
4283 color: #fff;
4284}
4285.navbar-inverse .btn-link {
4286 color: #777;
4287}
4288.navbar-inverse .btn-link:hover,
4289.navbar-inverse .btn-link:focus {
4290 color: #fff;
4291}
4292.navbar-inverse .btn-link[disabled]:hover,
4293fieldset[disabled] .navbar-inverse .btn-link:hover,
4294.navbar-inverse .btn-link[disabled]:focus,
4295fieldset[disabled] .navbar-inverse .btn-link:focus {
4296 color: #444;
4297}
4298.breadcrumb {
4299 padding: 8px 15px;
4300 margin-bottom: 20px;
4301 list-style: none;
4302 background-color: #f5f5f5;
4303 border-radius: 4px;
4304}
4305.breadcrumb > li {
4306 display: inline-block;
4307}
4308.breadcrumb > li + li:before {
4309 padding: 0 5px;
4310 color: #ccc;
4311 content: "/\00a0";
4312}
4313.breadcrumb > .active {
4314 color: #777;
4315}
4316.pagination {
4317 display: inline-block;
4318 padding-left: 0;
4319 margin: 20px 0;
4320 border-radius: 4px;
4321}
4322.pagination > li {
4323 display: inline;
4324}
4325.pagination > li > a,
4326.pagination > li > span {
4327 position: relative;
4328 float: left;
4329 padding: 6px 12px;
4330 margin-left: -1px;
4331 line-height: 1.42857143;
4332 color: #428bca;
4333 text-decoration: none;
4334 background-color: #fff;
4335 border: 1px solid #ddd;
4336}
4337.pagination > li:first-child > a,
4338.pagination > li:first-child > span {
4339 margin-left: 0;
4340 border-top-left-radius: 4px;
4341 border-bottom-left-radius: 4px;
4342}
4343.pagination > li:last-child > a,
4344.pagination > li:last-child > span {
4345 border-top-right-radius: 4px;
4346 border-bottom-right-radius: 4px;
4347}
4348.pagination > li > a:hover,
4349.pagination > li > span:hover,
4350.pagination > li > a:focus,
4351.pagination > li > span:focus {
4352 color: #2a6496;
4353 background-color: #eee;
4354 border-color: #ddd;
4355}
4356.pagination > .active > a,
4357.pagination > .active > span,
4358.pagination > .active > a:hover,
4359.pagination > .active > span:hover,
4360.pagination > .active > a:focus,
4361.pagination > .active > span:focus {
4362 z-index: 2;
4363 color: #fff;
4364 cursor: default;
4365 background-color: #428bca;
4366 border-color: #428bca;
4367}
4368.pagination > .disabled > span,
4369.pagination > .disabled > span:hover,
4370.pagination > .disabled > span:focus,
4371.pagination > .disabled > a,
4372.pagination > .disabled > a:hover,
4373.pagination > .disabled > a:focus {
4374 color: #777;
4375 cursor: not-allowed;
4376 background-color: #fff;
4377 border-color: #ddd;
4378}
4379.pagination-lg > li > a,
4380.pagination-lg > li > span {
4381 padding: 10px 16px;
4382 font-size: 18px;
4383}
4384.pagination-lg > li:first-child > a,
4385.pagination-lg > li:first-child > span {
4386 border-top-left-radius: 6px;
4387 border-bottom-left-radius: 6px;
4388}
4389.pagination-lg > li:last-child > a,
4390.pagination-lg > li:last-child > span {
4391 border-top-right-radius: 6px;
4392 border-bottom-right-radius: 6px;
4393}
4394.pagination-sm > li > a,
4395.pagination-sm > li > span {
4396 padding: 5px 10px;
4397 font-size: 12px;
4398}
4399.pagination-sm > li:first-child > a,
4400.pagination-sm > li:first-child > span {
4401 border-top-left-radius: 3px;
4402 border-bottom-left-radius: 3px;
4403}
4404.pagination-sm > li:last-child > a,
4405.pagination-sm > li:last-child > span {
4406 border-top-right-radius: 3px;
4407 border-bottom-right-radius: 3px;
4408}
4409.pager {
4410 padding-left: 0;
4411 margin: 20px 0;
4412 text-align: center;
4413 list-style: none;
4414}
4415.pager li {
4416 display: inline;
4417}
4418.pager li > a,
4419.pager li > span {
4420 display: inline-block;
4421 padding: 5px 14px;
4422 background-color: #fff;
4423 border: 1px solid #ddd;
4424 border-radius: 15px;
4425}
4426.pager li > a:hover,
4427.pager li > a:focus {
4428 text-decoration: none;
4429 background-color: #eee;
4430}
4431.pager .next > a,
4432.pager .next > span {
4433 float: right;
4434}
4435.pager .previous > a,
4436.pager .previous > span {
4437 float: left;
4438}
4439.pager .disabled > a,
4440.pager .disabled > a:hover,
4441.pager .disabled > a:focus,
4442.pager .disabled > span {
4443 color: #777;
4444 cursor: not-allowed;
4445 background-color: #fff;
4446}
4447.label {
4448 display: inline;
4449 padding: .2em .6em .3em;
4450 font-size: 75%;
4451 font-weight: bold;
4452 line-height: 1;
4453 color: #fff;
4454 text-align: center;
4455 white-space: nowrap;
4456 vertical-align: baseline;
4457 border-radius: .25em;
4458}
4459a.label:hover,
4460a.label:focus {
4461 color: #fff;
4462 text-decoration: none;
4463 cursor: pointer;
4464}
4465.label:empty {
4466 display: none;
4467}
4468.btn .label {
4469 position: relative;
4470 top: -1px;
4471}
4472.label-default {
4473 background-color: #777;
4474}
4475.label-default[href]:hover,
4476.label-default[href]:focus {
4477 background-color: #5e5e5e;
4478}
4479.label-primary {
4480 background-color: #428bca;
4481}
4482.label-primary[href]:hover,
4483.label-primary[href]:focus {
4484 background-color: #3071a9;
4485}
4486.label-success {
4487 background-color: #5cb85c;
4488}
4489.label-success[href]:hover,
4490.label-success[href]:focus {
4491 background-color: #449d44;
4492}
4493.label-info {
4494 background-color: #5bc0de;
4495}
4496.label-info[href]:hover,
4497.label-info[href]:focus {
4498 background-color: #31b0d5;
4499}
4500.label-warning {
4501 background-color: #f0ad4e;
4502}
4503.label-warning[href]:hover,
4504.label-warning[href]:focus {
4505 background-color: #ec971f;
4506}
4507.label-danger {
4508 background-color: #d9534f;
4509}
4510.label-danger[href]:hover,
4511.label-danger[href]:focus {
4512 background-color: #c9302c;
4513}
4514.badge {
4515 display: inline-block;
4516 min-width: 10px;
4517 padding: 3px 7px;
4518 font-size: 12px;
4519 font-weight: bold;
4520 line-height: 1;
4521 color: #fff;
4522 text-align: center;
4523 white-space: nowrap;
4524 vertical-align: baseline;
4525 background-color: #777;
4526 border-radius: 10px;
4527}
4528.badge:empty {
4529 display: none;
4530}
4531.btn .badge {
4532 position: relative;
4533 top: -1px;
4534}
4535.btn-xs .badge {
4536 top: 0;
4537 padding: 1px 5px;
4538}
4539a.badge:hover,
4540a.badge:focus {
4541 color: #fff;
4542 text-decoration: none;
4543 cursor: pointer;
4544}
4545a.list-group-item.active > .badge,
4546.nav-pills > .active > a > .badge {
4547 color: #428bca;
4548 background-color: #fff;
4549}
4550.nav-pills > li > a > .badge {
4551 margin-left: 3px;
4552}
4553.jumbotron {
4554 padding: 30px;
4555 margin-bottom: 30px;
4556 color: inherit;
4557 background-color: #eee;
4558}
4559.jumbotron h1,
4560.jumbotron .h1 {
4561 color: inherit;
4562}
4563.jumbotron p {
4564 margin-bottom: 15px;
4565 font-size: 21px;
4566 font-weight: 200;
4567}
4568.jumbotron > hr {
4569 border-top-color: #d5d5d5;
4570}
4571.container .jumbotron {
4572 border-radius: 6px;
4573}
4574.jumbotron .container {
4575 max-width: 100%;
4576}
4577@media screen and (min-width: 768px) {
4578 .jumbotron {
4579 padding-top: 48px;
4580 padding-bottom: 48px;
4581 }
4582 .container .jumbotron {
4583 padding-right: 60px;
4584 padding-left: 60px;
4585 }
4586 .jumbotron h1,
4587 .jumbotron .h1 {
4588 font-size: 63px;
4589 }
4590}
4591.thumbnail {
4592 display: block;
4593 padding: 4px;
4594 margin-bottom: 20px;
4595 line-height: 1.42857143;
4596 background-color: #fff;
4597 border: 1px solid #ddd;
4598 border-radius: 4px;
4599 -webkit-transition: all .2s ease-in-out;
4600 -o-transition: all .2s ease-in-out;
4601 transition: all .2s ease-in-out;
4602}
4603.thumbnail > img,
4604.thumbnail a > img {
4605 margin-right: auto;
4606 margin-left: auto;
4607}
4608a.thumbnail:hover,
4609a.thumbnail:focus,
4610a.thumbnail.active {
4611 border-color: #428bca;
4612}
4613.thumbnail .caption {
4614 padding: 9px;
4615 color: #333;
4616}
4617.alert {
4618 padding: 15px;
4619 margin-bottom: 20px;
4620 border: 1px solid transparent;
4621 border-radius: 4px;
4622}
4623.alert h4 {
4624 margin-top: 0;
4625 color: inherit;
4626}
4627.alert .alert-link {
4628 font-weight: bold;
4629}
4630.alert > p,
4631.alert > ul {
4632 margin-bottom: 0;
4633}
4634.alert > p + p {
4635 margin-top: 5px;
4636}
4637.alert-dismissable,
4638.alert-dismissible {
4639 padding-right: 35px;
4640}
4641.alert-dismissable .close,
4642.alert-dismissible .close {
4643 position: relative;
4644 top: -2px;
4645 right: -21px;
4646 color: inherit;
4647}
4648.alert-success {
4649 color: #3c763d;
4650 background-color: #dff0d8;
4651 border-color: #d6e9c6;
4652}
4653.alert-success hr {
4654 border-top-color: #c9e2b3;
4655}
4656.alert-success .alert-link {
4657 color: #2b542c;
4658}
4659.alert-info {
4660 color: #31708f;
4661 background-color: #d9edf7;
4662 border-color: #bce8f1;
4663}
4664.alert-info hr {
4665 border-top-color: #a6e1ec;
4666}
4667.alert-info .alert-link {
4668 color: #245269;
4669}
4670.alert-warning {
4671 color: #8a6d3b;
4672 background-color: #fcf8e3;
4673 border-color: #faebcc;
4674}
4675.alert-warning hr {
4676 border-top-color: #f7e1b5;
4677}
4678.alert-warning .alert-link {
4679 color: #66512c;
4680}
4681.alert-danger {
4682 color: #a94442;
4683 background-color: #f2dede;
4684 border-color: #ebccd1;
4685}
4686.alert-danger hr {
4687 border-top-color: #e4b9c0;
4688}
4689.alert-danger .alert-link {
4690 color: #843534;
4691}
4692@-webkit-keyframes progress-bar-stripes {
4693 from {
4694 background-position: 40px 0;
4695 }
4696 to {
4697 background-position: 0 0;
4698 }
4699}
4700@-o-keyframes progress-bar-stripes {
4701 from {
4702 background-position: 40px 0;
4703 }
4704 to {
4705 background-position: 0 0;
4706 }
4707}
4708@keyframes progress-bar-stripes {
4709 from {
4710 background-position: 40px 0;
4711 }
4712 to {
4713 background-position: 0 0;
4714 }
4715}
4716.progress {
4717 height: 20px;
4718 margin-bottom: 20px;
4719 overflow: hidden;
4720 background-color: #f5f5f5;
4721 border-radius: 4px;
4722 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
4723 box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
4724}
4725.progress-bar {
4726 float: left;
4727 width: 0;
4728 height: 100%;
4729 font-size: 12px;
4730 line-height: 20px;
4731 color: #fff;
4732 text-align: center;
4733 background-color: #428bca;
4734 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4735 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
4736 -webkit-transition: width .6s ease;
4737 -o-transition: width .6s ease;
4738 transition: width .6s ease;
4739}
4740.progress-striped .progress-bar,
4741.progress-bar-striped {
4742 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);
4743 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);
4744 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);
4745 -webkit-background-size: 40px 40px;
4746 background-size: 40px 40px;
4747}
4748.progress.active .progress-bar,
4749.progress-bar.active {
4750 -webkit-animation: progress-bar-stripes 2s linear infinite;
4751 -o-animation: progress-bar-stripes 2s linear infinite;
4752 animation: progress-bar-stripes 2s linear infinite;
4753}
4754.progress-bar[aria-valuenow="1"],
4755.progress-bar[aria-valuenow="2"] {
4756 min-width: 30px;
4757}
4758.progress-bar[aria-valuenow="0"] {
4759 min-width: 30px;
4760 color: #777;
4761 background-color: transparent;
4762 background-image: none;
4763 -webkit-box-shadow: none;
4764 box-shadow: none;
4765}
4766.progress-bar-success {
4767 background-color: #5cb85c;
4768}
4769.progress-striped .progress-bar-success {
4770 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);
4771 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);
4772 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);
4773}
4774.progress-bar-info {
4775 background-color: #5bc0de;
4776}
4777.progress-striped .progress-bar-info {
4778 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);
4779 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);
4780 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);
4781}
4782.progress-bar-warning {
4783 background-color: #f0ad4e;
4784}
4785.progress-striped .progress-bar-warning {
4786 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);
4787 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);
4788 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);
4789}
4790.progress-bar-danger {
4791 background-color: #d9534f;
4792}
4793.progress-striped .progress-bar-danger {
4794 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);
4795 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);
4796 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);
4797}
4798.media,
4799.media-body {
4800 overflow: hidden;
4801 zoom: 1;
4802}
4803.media,
4804.media .media {
4805 margin-top: 15px;
4806}
4807.media:first-child {
4808 margin-top: 0;
4809}
4810.media-object {
4811 display: block;
4812}
4813.media-heading {
4814 margin: 0 0 5px;
4815}
4816.media > .pull-left {
4817 margin-right: 10px;
4818}
4819.media > .pull-right {
4820 margin-left: 10px;
4821}
4822.media-list {
4823 padding-left: 0;
4824 list-style: none;
4825}
4826.list-group {
4827 padding-left: 0;
4828 margin-bottom: 20px;
4829}
4830.list-group-item {
4831 position: relative;
4832 display: block;
4833 padding: 10px 15px;
4834 margin-bottom: -1px;
4835 background-color: #fff;
4836 border: 1px solid #ddd;
4837}
4838.list-group-item:first-child {
4839 border-top-left-radius: 4px;
4840 border-top-right-radius: 4px;
4841}
4842.list-group-item:last-child {
4843 margin-bottom: 0;
4844 border-bottom-right-radius: 4px;
4845 border-bottom-left-radius: 4px;
4846}
4847.list-group-item > .badge {
4848 float: right;
4849}
4850.list-group-item > .badge + .badge {
4851 margin-right: 5px;
4852}
4853a.list-group-item {
4854 color: #555;
4855}
4856a.list-group-item .list-group-item-heading {
4857 color: #333;
4858}
4859a.list-group-item:hover,
4860a.list-group-item:focus {
4861 color: #555;
4862 text-decoration: none;
4863 background-color: #f5f5f5;
4864}
4865.list-group-item.disabled,
4866.list-group-item.disabled:hover,
4867.list-group-item.disabled:focus {
4868 color: #777;
4869 background-color: #eee;
4870}
4871.list-group-item.disabled .list-group-item-heading,
4872.list-group-item.disabled:hover .list-group-item-heading,
4873.list-group-item.disabled:focus .list-group-item-heading {
4874 color: inherit;
4875}
4876.list-group-item.disabled .list-group-item-text,
4877.list-group-item.disabled:hover .list-group-item-text,
4878.list-group-item.disabled:focus .list-group-item-text {
4879 color: #777;
4880}
4881.list-group-item.active,
4882.list-group-item.active:hover,
4883.list-group-item.active:focus {
4884 z-index: 2;
4885 color: #fff;
4886 background-color: #428bca;
4887 border-color: #428bca;
4888}
4889.list-group-item.active .list-group-item-heading,
4890.list-group-item.active:hover .list-group-item-heading,
4891.list-group-item.active:focus .list-group-item-heading,
4892.list-group-item.active .list-group-item-heading > small,
4893.list-group-item.active:hover .list-group-item-heading > small,
4894.list-group-item.active:focus .list-group-item-heading > small,
4895.list-group-item.active .list-group-item-heading > .small,
4896.list-group-item.active:hover .list-group-item-heading > .small,
4897.list-group-item.active:focus .list-group-item-heading > .small {
4898 color: inherit;
4899}
4900.list-group-item.active .list-group-item-text,
4901.list-group-item.active:hover .list-group-item-text,
4902.list-group-item.active:focus .list-group-item-text {
4903 color: #e1edf7;
4904}
4905.list-group-item-success {
4906 color: #3c763d;
4907 background-color: #dff0d8;
4908}
4909a.list-group-item-success {
4910 color: #3c763d;
4911}
4912a.list-group-item-success .list-group-item-heading {
4913 color: inherit;
4914}
4915a.list-group-item-success:hover,
4916a.list-group-item-success:focus {
4917 color: #3c763d;
4918 background-color: #d0e9c6;
4919}
4920a.list-group-item-success.active,
4921a.list-group-item-success.active:hover,
4922a.list-group-item-success.active:focus {
4923 color: #fff;
4924 background-color: #3c763d;
4925 border-color: #3c763d;
4926}
4927.list-group-item-info {
4928 color: #31708f;
4929 background-color: #d9edf7;
4930}
4931a.list-group-item-info {
4932 color: #31708f;
4933}
4934a.list-group-item-info .list-group-item-heading {
4935 color: inherit;
4936}
4937a.list-group-item-info:hover,
4938a.list-group-item-info:focus {
4939 color: #31708f;
4940 background-color: #c4e3f3;
4941}
4942a.list-group-item-info.active,
4943a.list-group-item-info.active:hover,
4944a.list-group-item-info.active:focus {
4945 color: #fff;
4946 background-color: #31708f;
4947 border-color: #31708f;
4948}
4949.list-group-item-warning {
4950 color: #8a6d3b;
4951 background-color: #fcf8e3;
4952}
4953a.list-group-item-warning {
4954 color: #8a6d3b;
4955}
4956a.list-group-item-warning .list-group-item-heading {
4957 color: inherit;
4958}
4959a.list-group-item-warning:hover,
4960a.list-group-item-warning:focus {
4961 color: #8a6d3b;
4962 background-color: #faf2cc;
4963}
4964a.list-group-item-warning.active,
4965a.list-group-item-warning.active:hover,
4966a.list-group-item-warning.active:focus {
4967 color: #fff;
4968 background-color: #8a6d3b;
4969 border-color: #8a6d3b;
4970}
4971.list-group-item-danger {
4972 color: #a94442;
4973 background-color: #f2dede;
4974}
4975a.list-group-item-danger {
4976 color: #a94442;
4977}
4978a.list-group-item-danger .list-group-item-heading {
4979 color: inherit;
4980}
4981a.list-group-item-danger:hover,
4982a.list-group-item-danger:focus {
4983 color: #a94442;
4984 background-color: #ebcccc;
4985}
4986a.list-group-item-danger.active,
4987a.list-group-item-danger.active:hover,
4988a.list-group-item-danger.active:focus {
4989 color: #fff;
4990 background-color: #a94442;
4991 border-color: #a94442;
4992}
4993.list-group-item-heading {
4994 margin-top: 0;
4995 margin-bottom: 5px;
4996}
4997.list-group-item-text {
4998 margin-bottom: 0;
4999 line-height: 1.3;
5000}
5001.panel {
5002 margin-bottom: 20px;
5003 background-color: #fff;
5004 border: 1px solid transparent;
5005 border-radius: 4px;
5006 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5007 box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5008}
5009.panel-body {
5010 padding: 15px;
5011}
5012.panel-heading {
5013 padding: 10px 15px;
5014 border-bottom: 1px solid transparent;
5015 border-top-left-radius: 3px;
5016 border-top-right-radius: 3px;
5017}
5018.panel-heading > .dropdown .dropdown-toggle {
5019 color: inherit;
5020}
5021.panel-title {
5022 margin-top: 0;
5023 margin-bottom: 0;
5024 font-size: 16px;
5025 color: inherit;
5026}
5027.panel-title > a {
5028 color: inherit;
5029}
5030.panel-footer {
5031 padding: 10px 15px;
5032 background-color: #f5f5f5;
5033 border-top: 1px solid #ddd;
5034 border-bottom-right-radius: 3px;
5035 border-bottom-left-radius: 3px;
5036}
5037.panel > .list-group {
5038 margin-bottom: 0;
5039}
5040.panel > .list-group .list-group-item {
5041 border-width: 1px 0;
5042 border-radius: 0;
5043}
5044.panel > .list-group:first-child .list-group-item:first-child {
5045 border-top: 0;
5046 border-top-left-radius: 3px;
5047 border-top-right-radius: 3px;
5048}
5049.panel > .list-group:last-child .list-group-item:last-child {
5050 border-bottom: 0;
5051 border-bottom-right-radius: 3px;
5052 border-bottom-left-radius: 3px;
5053}
5054.panel-heading + .list-group .list-group-item:first-child {
5055 border-top-width: 0;
5056}
5057.list-group + .panel-footer {
5058 border-top-width: 0;
5059}
5060.panel > .table,
5061.panel > .table-responsive > .table,
5062.panel > .panel-collapse > .table {
5063 margin-bottom: 0;
5064}
5065.panel > .table:first-child,
5066.panel > .table-responsive:first-child > .table:first-child {
5067 border-top-left-radius: 3px;
5068 border-top-right-radius: 3px;
5069}
5070.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5071.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5072.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5073.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5074.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5075.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5076.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5077.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5078 border-top-left-radius: 3px;
5079}
5080.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5081.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5082.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5083.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5084.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5085.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5086.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5087.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5088 border-top-right-radius: 3px;
5089}
5090.panel > .table:last-child,
5091.panel > .table-responsive:last-child > .table:last-child {
5092 border-bottom-right-radius: 3px;
5093 border-bottom-left-radius: 3px;
5094}
5095.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5096.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5097.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5098.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5099.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5100.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5101.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5102.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5103 border-bottom-left-radius: 3px;
5104}
5105.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5106.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5107.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5108.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5109.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5110.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5111.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5112.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5113 border-bottom-right-radius: 3px;
5114}
5115.panel > .panel-body + .table,
5116.panel > .panel-body + .table-responsive {
5117 border-top: 1px solid #ddd;
5118}
5119.panel > .table > tbody:first-child > tr:first-child th,
5120.panel > .table > tbody:first-child > tr:first-child td {
5121 border-top: 0;
5122}
5123.panel > .table-bordered,
5124.panel > .table-responsive > .table-bordered {
5125 border: 0;
5126}
5127.panel > .table-bordered > thead > tr > th:first-child,
5128.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5129.panel > .table-bordered > tbody > tr > th:first-child,
5130.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5131.panel > .table-bordered > tfoot > tr > th:first-child,
5132.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5133.panel > .table-bordered > thead > tr > td:first-child,
5134.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5135.panel > .table-bordered > tbody > tr > td:first-child,
5136.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5137.panel > .table-bordered > tfoot > tr > td:first-child,
5138.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5139 border-left: 0;
5140}
5141.panel > .table-bordered > thead > tr > th:last-child,
5142.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5143.panel > .table-bordered > tbody > tr > th:last-child,
5144.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5145.panel > .table-bordered > tfoot > tr > th:last-child,
5146.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5147.panel > .table-bordered > thead > tr > td:last-child,
5148.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5149.panel > .table-bordered > tbody > tr > td:last-child,
5150.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5151.panel > .table-bordered > tfoot > tr > td:last-child,
5152.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5153 border-right: 0;
5154}
5155.panel > .table-bordered > thead > tr:first-child > td,
5156.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5157.panel > .table-bordered > tbody > tr:first-child > td,
5158.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5159.panel > .table-bordered > thead > tr:first-child > th,
5160.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5161.panel > .table-bordered > tbody > tr:first-child > th,
5162.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5163 border-bottom: 0;
5164}
5165.panel > .table-bordered > tbody > tr:last-child > td,
5166.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5167.panel > .table-bordered > tfoot > tr:last-child > td,
5168.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5169.panel > .table-bordered > tbody > tr:last-child > th,
5170.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5171.panel > .table-bordered > tfoot > tr:last-child > th,
5172.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5173 border-bottom: 0;
5174}
5175.panel > .table-responsive {
5176 margin-bottom: 0;
5177 border: 0;
5178}
5179.panel-group {
5180 margin-bottom: 20px;
5181}
5182.panel-group .panel {
5183 margin-bottom: 0;
5184 border-radius: 4px;
5185}
5186.panel-group .panel + .panel {
5187 margin-top: 5px;
5188}
5189.panel-group .panel-heading {
5190 border-bottom: 0;
5191}
5192.panel-group .panel-heading + .panel-collapse > .panel-body {
5193 border-top: 1px solid #ddd;
5194}
5195.panel-group .panel-footer {
5196 border-top: 0;
5197}
5198.panel-group .panel-footer + .panel-collapse .panel-body {
5199 border-bottom: 1px solid #ddd;
5200}
5201.panel-default {
5202 border-color: #ddd;
5203}
5204.panel-default > .panel-heading {
5205 color: #333;
5206 background-color: #f5f5f5;
5207 border-color: #ddd;
5208}
5209.panel-default > .panel-heading + .panel-collapse > .panel-body {
5210 border-top-color: #ddd;
5211}
5212.panel-default > .panel-heading .badge {
5213 color: #f5f5f5;
5214 background-color: #333;
5215}
5216.panel-default > .panel-footer + .panel-collapse > .panel-body {
5217 border-bottom-color: #ddd;
5218}
5219.panel-primary {
5220 border-color: #428bca;
5221}
5222.panel-primary > .panel-heading {
5223 color: #fff;
5224 background-color: #428bca;
5225 border-color: #428bca;
5226}
5227.panel-primary > .panel-heading + .panel-collapse > .panel-body {
5228 border-top-color: #428bca;
5229}
5230.panel-primary > .panel-heading .badge {
5231 color: #428bca;
5232 background-color: #fff;
5233}
5234.panel-primary > .panel-footer + .panel-collapse > .panel-body {
5235 border-bottom-color: #428bca;
5236}
5237.panel-success {
5238 border-color: #d6e9c6;
5239}
5240.panel-success > .panel-heading {
5241 color: #3c763d;
5242 background-color: #dff0d8;
5243 border-color: #d6e9c6;
5244}
5245.panel-success > .panel-heading + .panel-collapse > .panel-body {
5246 border-top-color: #d6e9c6;
5247}
5248.panel-success > .panel-heading .badge {
5249 color: #dff0d8;
5250 background-color: #3c763d;
5251}
5252.panel-success > .panel-footer + .panel-collapse > .panel-body {
5253 border-bottom-color: #d6e9c6;
5254}
5255.panel-info {
5256 border-color: #bce8f1;
5257}
5258.panel-info > .panel-heading {
5259 color: #31708f;
5260 background-color: #d9edf7;
5261 border-color: #bce8f1;
5262}
5263.panel-info > .panel-heading + .panel-collapse > .panel-body {
5264 border-top-color: #bce8f1;
5265}
5266.panel-info > .panel-heading .badge {
5267 color: #d9edf7;
5268 background-color: #31708f;
5269}
5270.panel-info > .panel-footer + .panel-collapse > .panel-body {
5271 border-bottom-color: #bce8f1;
5272}
5273.panel-warning {
5274 border-color: #faebcc;
5275}
5276.panel-warning > .panel-heading {
5277 color: #8a6d3b;
5278 background-color: #fcf8e3;
5279 border-color: #faebcc;
5280}
5281.panel-warning > .panel-heading + .panel-collapse > .panel-body {
5282 border-top-color: #faebcc;
5283}
5284.panel-warning > .panel-heading .badge {
5285 color: #fcf8e3;
5286 background-color: #8a6d3b;
5287}
5288.panel-warning > .panel-footer + .panel-collapse > .panel-body {
5289 border-bottom-color: #faebcc;
5290}
5291.panel-danger {
5292 border-color: #ebccd1;
5293}
5294.panel-danger > .panel-heading {
5295 color: #a94442;
5296 background-color: #f2dede;
5297 border-color: #ebccd1;
5298}
5299.panel-danger > .panel-heading + .panel-collapse > .panel-body {
5300 border-top-color: #ebccd1;
5301}
5302.panel-danger > .panel-heading .badge {
5303 color: #f2dede;
5304 background-color: #a94442;
5305}
5306.panel-danger > .panel-footer + .panel-collapse > .panel-body {
5307 border-bottom-color: #ebccd1;
5308}
5309.embed-responsive {
5310 position: relative;
5311 display: block;
5312 height: 0;
5313 padding: 0;
5314 overflow: hidden;
5315}
5316.embed-responsive .embed-responsive-item,
5317.embed-responsive iframe,
5318.embed-responsive embed,
5319.embed-responsive object {
5320 position: absolute;
5321 top: 0;
5322 bottom: 0;
5323 left: 0;
5324 width: 100%;
5325 height: 100%;
5326 border: 0;
5327}
5328.embed-responsive.embed-responsive-16by9 {
5329 padding-bottom: 56.25%;
5330}
5331.embed-responsive.embed-responsive-4by3 {
5332 padding-bottom: 75%;
5333}
5334.well {
5335 min-height: 20px;
5336 padding: 19px;
5337 margin-bottom: 20px;
5338 background-color: #f5f5f5;
5339 border: 1px solid #e3e3e3;
5340 border-radius: 4px;
5341 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5342 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5343}
5344.well blockquote {
5345 border-color: #ddd;
5346 border-color: rgba(0, 0, 0, .15);
5347}
5348.well-lg {
5349 padding: 24px;
5350 border-radius: 6px;
5351}
5352.well-sm {
5353 padding: 9px;
5354 border-radius: 3px;
5355}
5356.close {
5357 float: right;
5358 font-size: 21px;
5359 font-weight: bold;
5360 line-height: 1;
5361 color: #000;
5362 text-shadow: 0 1px 0 #fff;
5363 filter: alpha(opacity=20);
5364 opacity: .2;
5365}
5366.close:hover,
5367.close:focus {
5368 color: #000;
5369 text-decoration: none;
5370 cursor: pointer;
5371 filter: alpha(opacity=50);
5372 opacity: .5;
5373}
5374button.close {
5375 -webkit-appearance: none;
5376 padding: 0;
5377 cursor: pointer;
5378 background: transparent;
5379 border: 0;
5380}
5381.modal-open {
5382 overflow: hidden;
5383}
5384.modal {
5385 position: fixed;
5386 top: 0;
5387 right: 0;
5388 bottom: 0;
5389 left: 0;
5390 z-index: 1050;
5391 display: none;
5392 overflow: hidden;
5393 -webkit-overflow-scrolling: touch;
5394 outline: 0;
5395}
5396.modal.fade .modal-dialog {
5397 -webkit-transition: -webkit-transform .3s ease-out;
5398 -o-transition: -o-transform .3s ease-out;
5399 transition: transform .3s ease-out;
5400 -webkit-transform: translate3d(0, -25%, 0);
5401 -o-transform: translate3d(0, -25%, 0);
5402 transform: translate3d(0, -25%, 0);
5403}
5404.modal.in .modal-dialog {
5405 -webkit-transform: translate3d(0, 0, 0);
5406 -o-transform: translate3d(0, 0, 0);
5407 transform: translate3d(0, 0, 0);
5408}
5409.modal-open .modal {
5410 overflow-x: hidden;
5411 overflow-y: auto;
5412}
5413.modal-dialog {
5414 position: relative;
5415 width: auto;
5416 margin: 10px;
5417}
5418.modal-content {
5419 position: relative;
5420 background-color: #fff;
5421 -webkit-background-clip: padding-box;
5422 background-clip: padding-box;
5423 border: 1px solid #999;
5424 border: 1px solid rgba(0, 0, 0, .2);
5425 border-radius: 6px;
5426 outline: 0;
5427 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5428 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5429}
5430.modal-backdrop {
5431 position: fixed;
5432 top: 0;
5433 right: 0;
5434 bottom: 0;
5435 left: 0;
5436 z-index: 1040;
5437 background-color: #000;
5438}
5439.modal-backdrop.fade {
5440 filter: alpha(opacity=0);
5441 opacity: 0;
5442}
5443.modal-backdrop.in {
5444 filter: alpha(opacity=50);
5445 opacity: .5;
5446}
5447.modal-header {
5448 min-height: 16.42857143px;
5449 padding: 15px;
5450 border-bottom: 1px solid #e5e5e5;
5451}
5452.modal-header .close {
5453 margin-top: -2px;
5454}
5455.modal-title {
5456 margin: 0;
5457 line-height: 1.42857143;
5458}
5459.modal-body {
5460 position: relative;
5461 padding: 15px;
5462}
5463.modal-footer {
5464 padding: 15px;
5465 text-align: right;
5466 border-top: 1px solid #e5e5e5;
5467}
5468.modal-footer .btn + .btn {
5469 margin-bottom: 0;
5470 margin-left: 5px;
5471}
5472.modal-footer .btn-group .btn + .btn {
5473 margin-left: -1px;
5474}
5475.modal-footer .btn-block + .btn-block {
5476 margin-left: 0;
5477}
5478.modal-scrollbar-measure {
5479 position: absolute;
5480 top: -9999px;
5481 width: 50px;
5482 height: 50px;
5483 overflow: scroll;
5484}
5485@media (min-width: 768px) {
5486 .modal-dialog {
5487 width: 600px;
5488 margin: 30px auto;
5489 }
5490 .modal-content {
5491 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5492 box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5493 }
5494 .modal-sm {
5495 width: 300px;
5496 }
5497}
5498@media (min-width: 992px) {
5499 .modal-lg {
5500 width: 900px;
5501 }
5502}
5503.tooltip {
5504 position: absolute;
5505 z-index: 1070;
5506 display: block;
5507 font-size: 12px;
5508 line-height: 1.4;
5509 visibility: visible;
5510 filter: alpha(opacity=0);
5511 opacity: 0;
5512}
5513.tooltip.in {
5514 filter: alpha(opacity=90);
5515 opacity: .9;
5516}
5517.tooltip.top {
5518 padding: 5px 0;
5519 margin-top: -3px;
5520}
5521.tooltip.right {
5522 padding: 0 5px;
5523 margin-left: 3px;
5524}
5525.tooltip.bottom {
5526 padding: 5px 0;
5527 margin-top: 3px;
5528}
5529.tooltip.left {
5530 padding: 0 5px;
5531 margin-left: -3px;
5532}
5533.tooltip-inner {
5534 max-width: 200px;
5535 padding: 3px 8px;
5536 color: #fff;
5537 text-align: center;
5538 text-decoration: none;
5539 background-color: #000;
5540 border-radius: 4px;
5541}
5542.tooltip-arrow {
5543 position: absolute;
5544 width: 0;
5545 height: 0;
5546 border-color: transparent;
5547 border-style: solid;
5548}
5549.tooltip.top .tooltip-arrow {
5550 bottom: 0;
5551 left: 50%;
5552 margin-left: -5px;
5553 border-width: 5px 5px 0;
5554 border-top-color: #000;
5555}
5556.tooltip.top-left .tooltip-arrow {
5557 bottom: 0;
5558 left: 5px;
5559 border-width: 5px 5px 0;
5560 border-top-color: #000;
5561}
5562.tooltip.top-right .tooltip-arrow {
5563 right: 5px;
5564 bottom: 0;
5565 border-width: 5px 5px 0;
5566 border-top-color: #000;
5567}
5568.tooltip.right .tooltip-arrow {
5569 top: 50%;
5570 left: 0;
5571 margin-top: -5px;
5572 border-width: 5px 5px 5px 0;
5573 border-right-color: #000;
5574}
5575.tooltip.left .tooltip-arrow {
5576 top: 50%;
5577 right: 0;
5578 margin-top: -5px;
5579 border-width: 5px 0 5px 5px;
5580 border-left-color: #000;
5581}
5582.tooltip.bottom .tooltip-arrow {
5583 top: 0;
5584 left: 50%;
5585 margin-left: -5px;
5586 border-width: 0 5px 5px;
5587 border-bottom-color: #000;
5588}
5589.tooltip.bottom-left .tooltip-arrow {
5590 top: 0;
5591 left: 5px;
5592 border-width: 0 5px 5px;
5593 border-bottom-color: #000;
5594}
5595.tooltip.bottom-right .tooltip-arrow {
5596 top: 0;
5597 right: 5px;
5598 border-width: 0 5px 5px;
5599 border-bottom-color: #000;
5600}
5601.popover {
5602 position: absolute;
5603 top: 0;
5604 left: 0;
5605 z-index: 1060;
5606 display: none;
5607 max-width: 276px;
5608 padding: 1px;
5609 text-align: left;
5610 white-space: normal;
5611 background-color: #fff;
5612 -webkit-background-clip: padding-box;
5613 background-clip: padding-box;
5614 border: 1px solid #ccc;
5615 border: 1px solid rgba(0, 0, 0, .2);
5616 border-radius: 6px;
5617 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
5618 box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
5619}
5620.popover.top {
5621 margin-top: -10px;
5622}
5623.popover.right {
5624 margin-left: 10px;
5625}
5626.popover.bottom {
5627 margin-top: 10px;
5628}
5629.popover.left {
5630 margin-left: -10px;
5631}
5632.popover-title {
5633 padding: 8px 14px;
5634 margin: 0;
5635 font-size: 14px;
5636 font-weight: normal;
5637 line-height: 18px;
5638 background-color: #f7f7f7;
5639 border-bottom: 1px solid #ebebeb;
5640 border-radius: 5px 5px 0 0;
5641}
5642.popover-content {
5643 padding: 9px 14px;
5644}
5645.popover > .arrow,
5646.popover > .arrow:after {
5647 position: absolute;
5648 display: block;
5649 width: 0;
5650 height: 0;
5651 border-color: transparent;
5652 border-style: solid;
5653}
5654.popover > .arrow {
5655 border-width: 11px;
5656}
5657.popover > .arrow:after {
5658 content: "";
5659 border-width: 10px;
5660}
5661.popover.top > .arrow {
5662 bottom: -11px;
5663 left: 50%;
5664 margin-left: -11px;
5665 border-top-color: #999;
5666 border-top-color: rgba(0, 0, 0, .25);
5667 border-bottom-width: 0;
5668}
5669.popover.top > .arrow:after {
5670 bottom: 1px;
5671 margin-left: -10px;
5672 content: " ";
5673 border-top-color: #fff;
5674 border-bottom-width: 0;
5675}
5676.popover.right > .arrow {
5677 top: 50%;
5678 left: -11px;
5679 margin-top: -11px;
5680 border-right-color: #999;
5681 border-right-color: rgba(0, 0, 0, .25);
5682 border-left-width: 0;
5683}
5684.popover.right > .arrow:after {
5685 bottom: -10px;
5686 left: 1px;
5687 content: " ";
5688 border-right-color: #fff;
5689 border-left-width: 0;
5690}
5691.popover.bottom > .arrow {
5692 top: -11px;
5693 left: 50%;
5694 margin-left: -11px;
5695 border-top-width: 0;
5696 border-bottom-color: #999;
5697 border-bottom-color: rgba(0, 0, 0, .25);
5698}
5699.popover.bottom > .arrow:after {
5700 top: 1px;
5701 margin-left: -10px;
5702 content: " ";
5703 border-top-width: 0;
5704 border-bottom-color: #fff;
5705}
5706.popover.left > .arrow {
5707 top: 50%;
5708 right: -11px;
5709 margin-top: -11px;
5710 border-right-width: 0;
5711 border-left-color: #999;
5712 border-left-color: rgba(0, 0, 0, .25);
5713}
5714.popover.left > .arrow:after {
5715 right: 1px;
5716 bottom: -10px;
5717 content: " ";
5718 border-right-width: 0;
5719 border-left-color: #fff;
5720}
5721.carousel {
5722 position: relative;
5723}
5724.carousel-inner {
5725 position: relative;
5726 width: 100%;
5727 overflow: hidden;
5728}
5729.carousel-inner > .item {
5730 position: relative;
5731 display: none;
5732 -webkit-transition: .6s ease-in-out left;
5733 -o-transition: .6s ease-in-out left;
5734 transition: .6s ease-in-out left;
5735}
5736.carousel-inner > .item > img,
5737.carousel-inner > .item > a > img {
5738 line-height: 1;
5739}
5740.carousel-inner > .active,
5741.carousel-inner > .next,
5742.carousel-inner > .prev {
5743 display: block;
5744}
5745.carousel-inner > .active {
5746 left: 0;
5747}
5748.carousel-inner > .next,
5749.carousel-inner > .prev {
5750 position: absolute;
5751 top: 0;
5752 width: 100%;
5753}
5754.carousel-inner > .next {
5755 left: 100%;
5756}
5757.carousel-inner > .prev {
5758 left: -100%;
5759}
5760.carousel-inner > .next.left,
5761.carousel-inner > .prev.right {
5762 left: 0;
5763}
5764.carousel-inner > .active.left {
5765 left: -100%;
5766}
5767.carousel-inner > .active.right {
5768 left: 100%;
5769}
5770.carousel-control {
5771 position: absolute;
5772 top: 0;
5773 bottom: 0;
5774 left: 0;
5775 width: 15%;
5776 font-size: 20px;
5777 color: #fff;
5778 text-align: center;
5779 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
5780 filter: alpha(opacity=50);
5781 opacity: .5;
5782}
5783.carousel-control.left {
5784 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5785 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5786 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
5787 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5788 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5789 background-repeat: repeat-x;
5790}
5791.carousel-control.right {
5792 right: 0;
5793 left: auto;
5794 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5795 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5796 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
5797 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5798 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5799 background-repeat: repeat-x;
5800}
5801.carousel-control:hover,
5802.carousel-control:focus {
5803 color: #fff;
5804 text-decoration: none;
5805 filter: alpha(opacity=90);
5806 outline: 0;
5807 opacity: .9;
5808}
5809.carousel-control .icon-prev,
5810.carousel-control .icon-next,
5811.carousel-control .glyphicon-chevron-left,
5812.carousel-control .glyphicon-chevron-right {
5813 position: absolute;
5814 top: 50%;
5815 z-index: 5;
5816 display: inline-block;
5817}
5818.carousel-control .icon-prev,
5819.carousel-control .glyphicon-chevron-left {
5820 left: 50%;
5821 margin-left: -10px;
5822}
5823.carousel-control .icon-next,
5824.carousel-control .glyphicon-chevron-right {
5825 right: 50%;
5826 margin-right: -10px;
5827}
5828.carousel-control .icon-prev,
5829.carousel-control .icon-next {
5830 width: 20px;
5831 height: 20px;
5832 margin-top: -10px;
5833 font-family: serif;
5834}
5835.carousel-control .icon-prev:before {
5836 content: '\2039';
5837}
5838.carousel-control .icon-next:before {
5839 content: '\203a';
5840}
5841.carousel-indicators {
5842 position: absolute;
5843 bottom: 10px;
5844 left: 50%;
5845 z-index: 15;
5846 width: 60%;
5847 padding-left: 0;
5848 margin-left: -30%;
5849 text-align: center;
5850 list-style: none;
5851}
5852.carousel-indicators li {
5853 display: inline-block;
5854 width: 10px;
5855 height: 10px;
5856 margin: 1px;
5857 text-indent: -999px;
5858 cursor: pointer;
5859 background-color: #000 \9;
5860 background-color: rgba(0, 0, 0, 0);
5861 border: 1px solid #fff;
5862 border-radius: 10px;
5863}
5864.carousel-indicators .active {
5865 width: 12px;
5866 height: 12px;
5867 margin: 0;
5868 background-color: #fff;
5869}
5870.carousel-caption {
5871 position: absolute;
5872 right: 15%;
5873 bottom: 20px;
5874 left: 15%;
5875 z-index: 10;
5876 padding-top: 20px;
5877 padding-bottom: 20px;
5878 color: #fff;
5879 text-align: center;
5880 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
5881}
5882.carousel-caption .btn {
5883 text-shadow: none;
5884}
5885@media screen and (min-width: 768px) {
5886 .carousel-control .glyphicon-chevron-left,
5887 .carousel-control .glyphicon-chevron-right,
5888 .carousel-control .icon-prev,
5889 .carousel-control .icon-next {
5890 width: 30px;
5891 height: 30px;
5892 margin-top: -15px;
5893 font-size: 30px;
5894 }
5895 .carousel-control .glyphicon-chevron-left,
5896 .carousel-control .icon-prev {
5897 margin-left: -15px;
5898 }
5899 .carousel-control .glyphicon-chevron-right,
5900 .carousel-control .icon-next {
5901 margin-right: -15px;
5902 }
5903 .carousel-caption {
5904 right: 20%;
5905 left: 20%;
5906 padding-bottom: 30px;
5907 }
5908 .carousel-indicators {
5909 bottom: 20px;
5910 }
5911}
5912.clearfix:before,
5913.clearfix:after,
5914.dl-horizontal dd:before,
5915.dl-horizontal dd:after,
5916.container:before,
5917.container:after,
5918.container-fluid:before,
5919.container-fluid:after,
5920.row:before,
5921.row:after,
5922.form-horizontal .form-group:before,
5923.form-horizontal .form-group:after,
5924.btn-toolbar:before,
5925.btn-toolbar:after,
5926.btn-group-vertical > .btn-group:before,
5927.btn-group-vertical > .btn-group:after,
5928.nav:before,
5929.nav:after,
5930.navbar:before,
5931.navbar:after,
5932.navbar-header:before,
5933.navbar-header:after,
5934.navbar-collapse:before,
5935.navbar-collapse:after,
5936.pager:before,
5937.pager:after,
5938.panel-body:before,
5939.panel-body:after,
5940.modal-footer:before,
5941.modal-footer:after {
5942 display: table;
5943 content: " ";
5944}
5945.clearfix:after,
5946.dl-horizontal dd:after,
5947.container:after,
5948.container-fluid:after,
5949.row:after,
5950.form-horizontal .form-group:after,
5951.btn-toolbar:after,
5952.btn-group-vertical > .btn-group:after,
5953.nav:after,
5954.navbar:after,
5955.navbar-header:after,
5956.navbar-collapse:after,
5957.pager:after,
5958.panel-body:after,
5959.modal-footer:after {
5960 clear: both;
5961}
5962.center-block {
5963 display: block;
5964 margin-right: auto;
5965 margin-left: auto;
5966}
5967.pull-right {
5968 float: right !important;
5969}
5970.pull-left {
5971 float: left !important;
5972}
5973.hide {
5974 display: none !important;
5975}
5976.show {
5977 display: block !important;
5978}
5979.invisible {
5980 visibility: hidden;
5981}
5982.text-hide {
5983 font: 0/0 a;
5984 color: transparent;
5985 text-shadow: none;
5986 background-color: transparent;
5987 border: 0;
5988}
5989.hidden {
5990 display: none !important;
5991 visibility: hidden !important;
5992}
5993.affix {
5994 position: fixed;
5995 -webkit-transform: translate3d(0, 0, 0);
5996 -o-transform: translate3d(0, 0, 0);
5997 transform: translate3d(0, 0, 0);
5998}
5999@-ms-viewport {
6000 width: device-width;
6001}
6002.visible-xs,
6003.visible-sm,
6004.visible-md,
6005.visible-lg {
6006 display: none !important;
6007}
6008.visible-xs-block,
6009.visible-xs-inline,
6010.visible-xs-inline-block,
6011.visible-sm-block,
6012.visible-sm-inline,
6013.visible-sm-inline-block,
6014.visible-md-block,
6015.visible-md-inline,
6016.visible-md-inline-block,
6017.visible-lg-block,
6018.visible-lg-inline,
6019.visible-lg-inline-block {
6020 display: none !important;
6021}
6022@media (max-width: 767px) {
6023 .visible-xs {
6024 display: block !important;
6025 }
6026 table.visible-xs {
6027 display: table;
6028 }
6029 tr.visible-xs {
6030 display: table-row !important;
6031 }
6032 th.visible-xs,
6033 td.visible-xs {
6034 display: table-cell !important;
6035 }
6036}
6037@media (max-width: 767px) {
6038 .visible-xs-block {
6039 display: block !important;
6040 }
6041}
6042@media (max-width: 767px) {
6043 .visible-xs-inline {
6044 display: inline !important;
6045 }
6046}
6047@media (max-width: 767px) {
6048 .visible-xs-inline-block {
6049 display: inline-block !important;
6050 }
6051}
6052@media (min-width: 768px) and (max-width: 991px) {
6053 .visible-sm {
6054 display: block !important;
6055 }
6056 table.visible-sm {
6057 display: table;
6058 }
6059 tr.visible-sm {
6060 display: table-row !important;
6061 }
6062 th.visible-sm,
6063 td.visible-sm {
6064 display: table-cell !important;
6065 }
6066}
6067@media (min-width: 768px) and (max-width: 991px) {
6068 .visible-sm-block {
6069 display: block !important;
6070 }
6071}
6072@media (min-width: 768px) and (max-width: 991px) {
6073 .visible-sm-inline {
6074 display: inline !important;
6075 }
6076}
6077@media (min-width: 768px) and (max-width: 991px) {
6078 .visible-sm-inline-block {
6079 display: inline-block !important;
6080 }
6081}
6082@media (min-width: 992px) and (max-width: 1199px) {
6083 .visible-md {
6084 display: block !important;
6085 }
6086 table.visible-md {
6087 display: table;
6088 }
6089 tr.visible-md {
6090 display: table-row !important;
6091 }
6092 th.visible-md,
6093 td.visible-md {
6094 display: table-cell !important;
6095 }
6096}
6097@media (min-width: 992px) and (max-width: 1199px) {
6098 .visible-md-block {
6099 display: block !important;
6100 }
6101}
6102@media (min-width: 992px) and (max-width: 1199px) {
6103 .visible-md-inline {
6104 display: inline !important;
6105 }
6106}
6107@media (min-width: 992px) and (max-width: 1199px) {
6108 .visible-md-inline-block {
6109 display: inline-block !important;
6110 }
6111}
6112@media (min-width: 1200px) {
6113 .visible-lg {
6114 display: block !important;
6115 }
6116 table.visible-lg {
6117 display: table;
6118 }
6119 tr.visible-lg {
6120 display: table-row !important;
6121 }
6122 th.visible-lg,
6123 td.visible-lg {
6124 display: table-cell !important;
6125 }
6126}
6127@media (min-width: 1200px) {
6128 .visible-lg-block {
6129 display: block !important;
6130 }
6131}
6132@media (min-width: 1200px) {
6133 .visible-lg-inline {
6134 display: inline !important;
6135 }
6136}
6137@media (min-width: 1200px) {
6138 .visible-lg-inline-block {
6139 display: inline-block !important;
6140 }
6141}
6142@media (max-width: 767px) {
6143 .hidden-xs {
6144 display: none !important;
6145 }
6146}
6147@media (min-width: 768px) and (max-width: 991px) {
6148 .hidden-sm {
6149 display: none !important;
6150 }
6151}
6152@media (min-width: 992px) and (max-width: 1199px) {
6153 .hidden-md {
6154 display: none !important;
6155 }
6156}
6157@media (min-width: 1200px) {
6158 .hidden-lg {
6159 display: none !important;
6160 }
6161}
6162.visible-print {
6163 display: none !important;
6164}
6165@media print {
6166 .visible-print {
6167 display: block !important;
6168 }
6169 table.visible-print {
6170 display: table;
6171 }
6172 tr.visible-print {
6173 display: table-row !important;
6174 }
6175 th.visible-print,
6176 td.visible-print {
6177 display: table-cell !important;
6178 }
6179}
6180.visible-print-block {
6181 display: none !important;
6182}
6183@media print {
6184 .visible-print-block {
6185 display: block !important;
6186 }
6187}
6188.visible-print-inline {
6189 display: none !important;
6190}
6191@media print {
6192 .visible-print-inline {
6193 display: inline !important;
6194 }
6195}
6196.visible-print-inline-block {
6197 display: none !important;
6198}
6199@media print {
6200 .visible-print-inline-block {
6201 display: inline-block !important;
6202 }
6203}
6204@media print {
6205 .hidden-print {
6206 display: none !important;
6207 }
6208}
6209/*# sourceMappingURL=bootstrap.css.map */
6210 </style>
6211 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6212 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6213 <meta content="bitcoin mnemonic converter" name="description" />
6214 <meta content="DC POS" name="author" />
6215
6216 <style>
6217 body {
6218 padding-bottom: 32px;
6219 }
6220 .form-control[readonly] {
6221 cursor: text;
6222 }
6223 .feedback-container {
6224 position: fixed;
6225 top: 0;
6226 width: 100%;
6227 text-align: center;
6228 z-index: 4;
6229 }
6230 .feedback {
6231 display: table;
6232 padding: 0.5em 1em;
6233 background-color: orange;
6234 margin: 0 auto;
6235 font-size: 2em;
6236 color: #444;
6237 border: 2px solid #555;
6238 border-top: 0;
6239 border-bottom-left-radius: 20px 20px;
6240 border-bottom-right-radius: 20px 20px;
6241 }
ebd8d4e8 6242 </style>
3af2954a
IC
6243 </head>
6244 <body>
6245 <div class="container">
6246
6247 <h1 class="text-center">Mnemonic Code Converter</h1>
6248 <hr>
6249 <div class="row">
6250 <div class="col-md-12">
6251 <h2>Mnemonic</h2>
6252 <form class="form-horizontal" role="form">
6253 <div class="col-sm-2"></div>
6254 <div class="col-sm-10">
6255 <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>
6256 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
6257 </div>
6258 <div class="form-group">
6259 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
6260 <div class="col-sm-10">
6261 <textarea id="phrase" class="phrase form-control"></textarea>
6262 </div>
6263 </div>
6264 <div class="form-group">
6265 <label for="strength" class="col-sm-2 control-label">Number of words</label>
6266 <div class="col-sm-10">
6267 <div class="input-group">
6268 <input type="number" class="strength form-control" id="strength" value="12">
6269 <span class="input-group-btn">
6270 <button class="btn generate">Generate Random Mnemonic</button>
6271 </span>
6272 </div>
6273 </div>
6274 </div>
6275 <div class="form-group">
6276 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
6277 <div class="col-sm-10">
6278 <textarea id="passphrase" class="passphrase form-control"></textarea>
6279 </div>
6280 </div>
6281 <div class="form-group">
6282 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
6283 <div class="col-sm-10">
6284 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
6285 </div>
6286 </div>
6287 </form>
6288 </div>
6289 </div>
6290
6291 <hr>
6292
6293 <div class="row">
6294 <div class="col-md-12">
6295 <h2>Derivation Path</h2>
6296 <ul class="derivation-type nav nav-tabs" role="tablist">
6297 <li class="active">
6298 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a></li>
6299 <li><a href="#bip32" role="tab" data-toggle="tab">BIP32</a></li>
6300 </ul>
6301 <div class="derivation-type tab-content">
6302 <div id="bip44" class="tab-pane active">
6303 <form class="form-horizontal" role="form">
6304 <br>
6305 <div class="col-sm-2"></div>
6306 <div class="col-sm-10">
6307 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
6308 </div>
6309 <div class="form-group">
6310 <label for="purpose" class="col-sm-2 control-label">
6311 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
6312 </label>
6313 <div class="col-sm-10">
6314 <input id="purpose" type="text" class="purpose form-control" value="44">
6315 </div>
6316 </div>
6317 <div class="form-group">
6318 <label for="coin" class="col-sm-2 control-label">
6319 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
6320 </label>
6321 <div class="col-sm-10">
6322 <input id="coin" type="text" class="coin form-control" value="0">
6323 </div>
6324 </div>
6325 <div class="form-group">
6326 <label for="account" class="col-sm-2 control-label">
6327 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
6328 </label>
6329 <div class="col-sm-10">
6330 <input id="account" type="text" class="account form-control" value="0">
6331 </div>
6332 </div>
6333 <div class="form-group">
6334 <label for="change" class="col-sm-2 control-label">
6335 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
6336 </label>
6337 <div class="col-sm-10">
6338 <input id="change" type="text" class="change form-control" value="0">
6339 </div>
6340 </div>
6341 <div class="form-group">
6342 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
6343 <div class="col-sm-10">
6344 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
6345 </div>
6346 </div>
6347 </form>
6348 </div>
6349 <div id="bip32" class="tab-pane">
6350 <form class="form-horizontal" role="form">
6351 <br>
6352 <div class="col-sm-2"></div>
6353 <div class="col-sm-10">
6354 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
6355 </div>
6356 <div class="form-group">
6357 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
6358 <div class="col-sm-10">
6359 <input id="bip32-path" type="text" class="path form-control" value="m/0">
6360 </div>
6361 </div>
6362 </form>
6363 </div>
6364 </div>
6365 <form class="form-horizontal" role="form">
6366 <div class="form-group">
6367 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
6368 <div class="col-sm-10">
6369 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
6370 </div>
6371 </div>
6372 <div class="form-group">
6373 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
6374 <div class="col-sm-10">
6375 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
6376 </div>
6377 </div>
6378 </form>
6379 </div>
6380 </div>
6381
6382 <hr>
6383
6384 <div class="row">
6385 <div class="col-md-12">
6386 <h2>Derived Addresses</h2>
6387 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
6388 <table class="table table-striped">
6389 <thead>
6390 <th>
6391 <div class="input-group">
6392 Index&nbsp;&nbsp;
6393 <button class="index-toggle">Toggle</button>
6394 </div>
6395 </th>
6396 <th>
6397 <div class="input-group">
6398 Address&nbsp;&nbsp;
6399 <button class="address-toggle">Toggle</button>
6400 </div>
6401 </th>
6402 <th>
6403 <div class="input-group">
6404 Private Key&nbsp;&nbsp;
6405 <button class="private-key-toggle">Toggle</button>
6406 </div>
6407 </th>
6408 </thead>
6409 <tbody class="addresses">
6410 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
6411 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
6412 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
6413 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
6414 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
6415 </tbody>
6416 </table>
6417 </div>
6418 </div>
6419 <span>Show next </button>
6420 <input type="number" class="rows-to-add" value="20">
6421 <button class="more">Show</button>
6422
6423 <hr>
6424
6425 <div class="row">
6426 <div class="col-md-12">
6427 <h2>More info</h2>
6428 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
6429 <p>
6430 Read more at the
6431 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
6432 </p>
6433 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
6434 <p>
6435 Read more at the
6436 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
6437 and see the demo at
6438 <a href="http://bip32.org/" target="_blank">bip32.org</a>
6439 </p>
6440 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
6441 <p>
6442 Read more at the
6443 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
6444 </p>
6445 <h3>Private Keys</h3>
6446 <p>
6447 Use private keys at
6448 <a href="https://brainwallet.github.io/" target="_blank">brainwallet.org</a>,
6449 but be careful - it can be easy to make mistakes if you
6450 don't know what you're doing
6451 </p>
6452 </div>
6453 </div>
6454
6455 <hr>
6456
6457 <div class="row">
6458 <div class="col-md-12">
6459
6460 <h2>Offline Usage</h2>
6461
6462 <p>
6463 You can use this tool without having to be online.
6464 </p>
6465 <p>
6466 In your browser, select file save-as, and save this page
6467 as a file.
6468 </p>
6469 <p>
6470 Double-click that file to open it in a browser
6471 on any offline computer.
6472 </p>
6473 <p>
6474 Alternatively, download it from
6475 <a href="https://github.com/dcpos/bip39">
6476 https://github.com/dcpos/bip39
6477 </a>
6478
6479 </div>
6480 </div>
6481
6482 <hr>
6483
6484 <div class="row">
6485 <div class="col-md-12">
6486
6487 <h2>This project is 100% open-source code</h2>
6488
6489 <p>
6490 <span>Get the source code at - </span>
6491 <a href="https://github.com/dcpos/bip39" target="_blank">
6492 https://github.com/dcpos/bip39
6493 </a>
6494 </p>
6495
6496 <h3>Libraries</h3>
6497
6498 <p>
6499 <span>BitcoinJS - </span>
6500 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
6501 https://github.com/bitcoinjs/bitcoinjs-lib
6502 </a>
6503 </p>
6504
6505 <p>
6506 <span>jsBIP39 - </span>
6507 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
6508 https://github.com/iancoleman/jsbip39
6509 </a>
6510 </p>
6511
6512 <p>
6513 <span>asmCrypto - </span>
6514 <a href="https://github.com/vibornoff/asmcrypto.js" target="_blank">
6515 https://github.com/vibornoff/asmcrypto.js
6516 </a>
6517 </p>
6518
6519 <p>
6520 <span>jQuery - </span>
6521 <a href="https://jquery.com/" target="_blank">
6522 https://jquery.com/
6523 </a>
6524 </p>
6525
6526 <p>
6527 <span>Twitter Bootstrap - </span>
6528 <a href="http://getbootstrap.com/" target="_blank">
6529 http://getbootstrap.com/
6530 </a>
6531 </p>
6532
6533 </div>
6534 </div>
6535
6536 </div>
6537
6538 <div class="feedback-container">
6539 <div class="feedback">Loading...</div>
6540 </div>
6541
6542 <script type="text/template" id="address-row-template">
6543 <tr>
6544 <td class="index"><span></span></td>
6545 <td class="address"><span></span></td>
6546 <td class="privkey"><span></span></td>
6547 </tr>
6548 </script>
6549 <script>
6550/*!
6551 * jQuery JavaScript Library v2.1.1
6552 * http://jquery.com/
6553 *
6554 * Includes Sizzle.js
6555 * http://sizzlejs.com/
6556 *
6557 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
6558 * Released under the MIT license
6559 * http://jquery.org/license
6560 *
6561 * Date: 2014-05-01T17:11Z
6562 */
6563
6564(function( global, factory ) {
6565
6566 if ( typeof module === "object" && typeof module.exports === "object" ) {
6567 // For CommonJS and CommonJS-like environments where a proper window is present,
6568 // execute the factory and get jQuery
6569 // For environments that do not inherently posses a window with a document
6570 // (such as Node.js), expose a jQuery-making factory as module.exports
6571 // This accentuates the need for the creation of a real window
6572 // e.g. var jQuery = require("jquery")(window);
6573 // See ticket #14549 for more info
6574 module.exports = global.document ?
6575 factory( global, true ) :
6576 function( w ) {
6577 if ( !w.document ) {
6578 throw new Error( "jQuery requires a window with a document" );
6579 }
6580 return factory( w );
6581 };
6582 } else {
6583 factory( global );
6584 }
6585
6586// Pass this if window is not defined yet
6587}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
6588
6589// Can't do this because several apps including ASP.NET trace
6590// the stack via arguments.caller.callee and Firefox dies if
6591// you try to trace through "use strict" call chains. (#13335)
6592// Support: Firefox 18+
6593//
6594
6595var arr = [];
6596
6597var slice = arr.slice;
6598
6599var concat = arr.concat;
6600
6601var push = arr.push;
6602
6603var indexOf = arr.indexOf;
6604
6605var class2type = {};
6606
6607var toString = class2type.toString;
6608
6609var hasOwn = class2type.hasOwnProperty;
6610
6611var support = {};
6612
6613
6614
6615var
6616 // Use the correct document accordingly with window argument (sandbox)
6617 document = window.document,
6618
6619 version = "2.1.1",
6620
6621 // Define a local copy of jQuery
6622 jQuery = function( selector, context ) {
6623 // The jQuery object is actually just the init constructor 'enhanced'
6624 // Need init if jQuery is called (just allow error to be thrown if not included)
6625 return new jQuery.fn.init( selector, context );
6626 },
6627
6628 // Support: Android<4.1
6629 // Make sure we trim BOM and NBSP
6630 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
6631
6632 // Matches dashed string for camelizing
6633 rmsPrefix = /^-ms-/,
6634 rdashAlpha = /-([\da-z])/gi,
6635
6636 // Used by jQuery.camelCase as callback to replace()
6637 fcamelCase = function( all, letter ) {
6638 return letter.toUpperCase();
6639 };
6640
6641jQuery.fn = jQuery.prototype = {
6642 // The current version of jQuery being used
6643 jquery: version,
6644
6645 constructor: jQuery,
6646
6647 // Start with an empty selector
6648 selector: "",
6649
6650 // The default length of a jQuery object is 0
6651 length: 0,
6652
6653 toArray: function() {
6654 return slice.call( this );
6655 },
6656
6657 // Get the Nth element in the matched element set OR
6658 // Get the whole matched element set as a clean array
6659 get: function( num ) {
6660 return num != null ?
6661
6662 // Return just the one element from the set
6663 ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
6664
6665 // Return all the elements in a clean array
6666 slice.call( this );
6667 },
6668
6669 // Take an array of elements and push it onto the stack
6670 // (returning the new matched element set)
6671 pushStack: function( elems ) {
6672
6673 // Build a new jQuery matched element set
6674 var ret = jQuery.merge( this.constructor(), elems );
6675
6676 // Add the old object onto the stack (as a reference)
6677 ret.prevObject = this;
6678 ret.context = this.context;
6679
6680 // Return the newly-formed element set
6681 return ret;
6682 },
6683
6684 // Execute a callback for every element in the matched set.
6685 // (You can seed the arguments with an array of args, but this is
6686 // only used internally.)
6687 each: function( callback, args ) {
6688 return jQuery.each( this, callback, args );
6689 },
6690
6691 map: function( callback ) {
6692 return this.pushStack( jQuery.map(this, function( elem, i ) {
6693 return callback.call( elem, i, elem );
6694 }));
6695 },
6696
6697 slice: function() {
6698 return this.pushStack( slice.apply( this, arguments ) );
6699 },
6700
6701 first: function() {
6702 return this.eq( 0 );
6703 },
6704
6705 last: function() {
6706 return this.eq( -1 );
6707 },
6708
6709 eq: function( i ) {
6710 var len = this.length,
6711 j = +i + ( i < 0 ? len : 0 );
6712 return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
6713 },
6714
6715 end: function() {
6716 return this.prevObject || this.constructor(null);
6717 },
6718
6719 // For internal use only.
6720 // Behaves like an Array's method, not like a jQuery method.
6721 push: push,
6722 sort: arr.sort,
6723 splice: arr.splice
6724};
6725
6726jQuery.extend = jQuery.fn.extend = function() {
6727 var options, name, src, copy, copyIsArray, clone,
6728 target = arguments[0] || {},
6729 i = 1,
6730 length = arguments.length,
6731 deep = false;
6732
6733 // Handle a deep copy situation
6734 if ( typeof target === "boolean" ) {
6735 deep = target;
6736
6737 // skip the boolean and the target
6738 target = arguments[ i ] || {};
6739 i++;
6740 }
6741
6742 // Handle case when target is a string or something (possible in deep copy)
6743 if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
6744 target = {};
6745 }
6746
6747 // extend jQuery itself if only one argument is passed
6748 if ( i === length ) {
6749 target = this;
6750 i--;
6751 }
6752
6753 for ( ; i < length; i++ ) {
6754 // Only deal with non-null/undefined values
6755 if ( (options = arguments[ i ]) != null ) {
6756 // Extend the base object
6757 for ( name in options ) {
6758 src = target[ name ];
6759 copy = options[ name ];
6760
6761 // Prevent never-ending loop
6762 if ( target === copy ) {
6763 continue;
6764 }
6765
6766 // Recurse if we're merging plain objects or arrays
6767 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
6768 if ( copyIsArray ) {
6769 copyIsArray = false;
6770 clone = src && jQuery.isArray(src) ? src : [];
6771
6772 } else {
6773 clone = src && jQuery.isPlainObject(src) ? src : {};
6774 }
6775
6776 // Never move original objects, clone them
6777 target[ name ] = jQuery.extend( deep, clone, copy );
6778
6779 // Don't bring in undefined values
6780 } else if ( copy !== undefined ) {
6781 target[ name ] = copy;
6782 }
6783 }
6784 }
6785 }
6786
6787 // Return the modified object
6788 return target;
6789};
6790
6791jQuery.extend({
6792 // Unique for each copy of jQuery on the page
6793 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
6794
6795 // Assume jQuery is ready without the ready module
6796 isReady: true,
6797
6798 error: function( msg ) {
6799 throw new Error( msg );
6800 },
6801
6802 noop: function() {},
6803
6804 // See test/unit/core.js for details concerning isFunction.
6805 // Since version 1.3, DOM methods and functions like alert
6806 // aren't supported. They return false on IE (#2968).
6807 isFunction: function( obj ) {
6808 return jQuery.type(obj) === "function";
6809 },
6810
6811 isArray: Array.isArray,
6812
6813 isWindow: function( obj ) {
6814 return obj != null && obj === obj.window;
6815 },
6816
6817 isNumeric: function( obj ) {
6818 // parseFloat NaNs numeric-cast false positives (null|true|false|"")
6819 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
6820 // subtraction forces infinities to NaN
6821 return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
6822 },
6823
6824 isPlainObject: function( obj ) {
6825 // Not plain objects:
6826 // - Any object or value whose internal [[Class]] property is not "[object Object]"
6827 // - DOM nodes
6828 // - window
6829 if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
6830 return false;
6831 }
6832
6833 if ( obj.constructor &&
6834 !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
6835 return false;
6836 }
6837
6838 // If the function hasn't returned already, we're confident that
6839 // |obj| is a plain object, created by {} or constructed with new Object
6840 return true;
6841 },
6842
6843 isEmptyObject: function( obj ) {
6844 var name;
6845 for ( name in obj ) {
6846 return false;
6847 }
6848 return true;
6849 },
6850
6851 type: function( obj ) {
6852 if ( obj == null ) {
6853 return obj + "";
6854 }
6855 // Support: Android < 4.0, iOS < 6 (functionish RegExp)
6856 return typeof obj === "object" || typeof obj === "function" ?
6857 class2type[ toString.call(obj) ] || "object" :
6858 typeof obj;
6859 },
6860
6861 // Evaluates a script in a global context
6862 globalEval: function( code ) {
6863 var script,
6864 indirect = eval;
6865
6866 code = jQuery.trim( code );
6867
6868 if ( code ) {
6869 // If the code includes a valid, prologue position
6870 // strict mode pragma, execute code by injecting a
6871 // script tag into the document.
6872 if ( code.indexOf("use strict") === 1 ) {
6873 script = document.createElement("script");
6874 script.text = code;
6875 document.head.appendChild( script ).parentNode.removeChild( script );
6876 } else {
6877 // Otherwise, avoid the DOM node creation, insertion
6878 // and removal by using an indirect global eval
6879 indirect( code );
6880 }
6881 }
6882 },
6883
6884 // Convert dashed to camelCase; used by the css and data modules
6885 // Microsoft forgot to hump their vendor prefix (#9572)
6886 camelCase: function( string ) {
6887 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
6888 },
6889
6890 nodeName: function( elem, name ) {
6891 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
6892 },
6893
6894 // args is for internal usage only
6895 each: function( obj, callback, args ) {
6896 var value,
6897 i = 0,
6898 length = obj.length,
6899 isArray = isArraylike( obj );
6900
6901 if ( args ) {
6902 if ( isArray ) {
6903 for ( ; i < length; i++ ) {
6904 value = callback.apply( obj[ i ], args );
6905
6906 if ( value === false ) {
6907 break;
6908 }
6909 }
6910 } else {
6911 for ( i in obj ) {
6912 value = callback.apply( obj[ i ], args );
6913
6914 if ( value === false ) {
6915 break;
6916 }
6917 }
6918 }
6919
6920 // A special, fast, case for the most common use of each
6921 } else {
6922 if ( isArray ) {
6923 for ( ; i < length; i++ ) {
6924 value = callback.call( obj[ i ], i, obj[ i ] );
6925
6926 if ( value === false ) {
6927 break;
6928 }
6929 }
6930 } else {
6931 for ( i in obj ) {
6932 value = callback.call( obj[ i ], i, obj[ i ] );
6933
6934 if ( value === false ) {
6935 break;
6936 }
6937 }
6938 }
6939 }
6940
6941 return obj;
6942 },
6943
6944 // Support: Android<4.1
6945 trim: function( text ) {
6946 return text == null ?
6947 "" :
6948 ( text + "" ).replace( rtrim, "" );
6949 },
6950
6951 // results is for internal usage only
6952 makeArray: function( arr, results ) {
6953 var ret = results || [];
6954
6955 if ( arr != null ) {
6956 if ( isArraylike( Object(arr) ) ) {
6957 jQuery.merge( ret,
6958 typeof arr === "string" ?
6959 [ arr ] : arr
6960 );
6961 } else {
6962 push.call( ret, arr );
6963 }
6964 }
6965
6966 return ret;
6967 },
6968
6969 inArray: function( elem, arr, i ) {
6970 return arr == null ? -1 : indexOf.call( arr, elem, i );
6971 },
6972
6973 merge: function( first, second ) {
6974 var len = +second.length,
6975 j = 0,
6976 i = first.length;
6977
6978 for ( ; j < len; j++ ) {
6979 first[ i++ ] = second[ j ];
6980 }
6981
6982 first.length = i;
6983
6984 return first;
6985 },
6986
6987 grep: function( elems, callback, invert ) {
6988 var callbackInverse,
6989 matches = [],
6990 i = 0,
6991 length = elems.length,
6992 callbackExpect = !invert;
6993
6994 // Go through the array, only saving the items
6995 // that pass the validator function
6996 for ( ; i < length; i++ ) {
6997 callbackInverse = !callback( elems[ i ], i );
6998 if ( callbackInverse !== callbackExpect ) {
6999 matches.push( elems[ i ] );
7000 }
7001 }
7002
7003 return matches;
7004 },
7005
7006 // arg is for internal usage only
7007 map: function( elems, callback, arg ) {
7008 var value,
7009 i = 0,
7010 length = elems.length,
7011 isArray = isArraylike( elems ),
7012 ret = [];
7013
7014 // Go through the array, translating each of the items to their new values
7015 if ( isArray ) {
7016 for ( ; i < length; i++ ) {
7017 value = callback( elems[ i ], i, arg );
7018
7019 if ( value != null ) {
7020 ret.push( value );
7021 }
7022 }
7023
7024 // Go through every key on the object,
7025 } else {
7026 for ( i in elems ) {
7027 value = callback( elems[ i ], i, arg );
7028
7029 if ( value != null ) {
7030 ret.push( value );
7031 }
7032 }
7033 }
7034
7035 // Flatten any nested arrays
7036 return concat.apply( [], ret );
7037 },
7038
7039 // A global GUID counter for objects
7040 guid: 1,
7041
7042 // Bind a function to a context, optionally partially applying any
7043 // arguments.
7044 proxy: function( fn, context ) {
7045 var tmp, args, proxy;
7046
7047 if ( typeof context === "string" ) {
7048 tmp = fn[ context ];
7049 context = fn;
7050 fn = tmp;
7051 }
7052
7053 // Quick check to determine if target is callable, in the spec
7054 // this throws a TypeError, but we will just return undefined.
7055 if ( !jQuery.isFunction( fn ) ) {
7056 return undefined;
7057 }
7058
7059 // Simulated bind
7060 args = slice.call( arguments, 2 );
7061 proxy = function() {
7062 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
7063 };
7064
7065 // Set the guid of unique handler to the same of original handler, so it can be removed
7066 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
7067
7068 return proxy;
7069 },
7070
7071 now: Date.now,
7072
7073 // jQuery.support is not used in Core but other projects attach their
7074 // properties to it so it needs to exist.
7075 support: support
7076});
7077
7078// Populate the class2type map
7079jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
7080 class2type[ "[object " + name + "]" ] = name.toLowerCase();
7081});
7082
7083function isArraylike( obj ) {
7084 var length = obj.length,
7085 type = jQuery.type( obj );
7086
7087 if ( type === "function" || jQuery.isWindow( obj ) ) {
7088 return false;
7089 }
7090
7091 if ( obj.nodeType === 1 && length ) {
7092 return true;
7093 }
7094
7095 return type === "array" || length === 0 ||
7096 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
7097}
7098var Sizzle =
7099/*!
7100 * Sizzle CSS Selector Engine v1.10.19
7101 * http://sizzlejs.com/
7102 *
7103 * Copyright 2013 jQuery Foundation, Inc. and other contributors
7104 * Released under the MIT license
7105 * http://jquery.org/license
7106 *
7107 * Date: 2014-04-18
7108 */
7109(function( window ) {
7110
7111var i,
7112 support,
7113 Expr,
7114 getText,
7115 isXML,
7116 tokenize,
7117 compile,
7118 select,
7119 outermostContext,
7120 sortInput,
7121 hasDuplicate,
7122
7123 // Local document vars
7124 setDocument,
7125 document,
7126 docElem,
7127 documentIsHTML,
7128 rbuggyQSA,
7129 rbuggyMatches,
7130 matches,
7131 contains,
7132
7133 // Instance-specific data
7134 expando = "sizzle" + -(new Date()),
7135 preferredDoc = window.document,
7136 dirruns = 0,
7137 done = 0,
7138 classCache = createCache(),
7139 tokenCache = createCache(),
7140 compilerCache = createCache(),
7141 sortOrder = function( a, b ) {
7142 if ( a === b ) {
7143 hasDuplicate = true;
7144 }
7145 return 0;
7146 },
7147
7148 // General-purpose constants
7149 strundefined = typeof undefined,
7150 MAX_NEGATIVE = 1 << 31,
7151
7152 // Instance methods
7153 hasOwn = ({}).hasOwnProperty,
7154 arr = [],
7155 pop = arr.pop,
7156 push_native = arr.push,
7157 push = arr.push,
7158 slice = arr.slice,
7159 // Use a stripped-down indexOf if we can't use a native one
7160 indexOf = arr.indexOf || function( elem ) {
7161 var i = 0,
7162 len = this.length;
7163 for ( ; i < len; i++ ) {
7164 if ( this[i] === elem ) {
7165 return i;
7166 }
7167 }
7168 return -1;
7169 },
7170
7171 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
7172
7173 // Regular expressions
7174
7175 // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
7176 whitespace = "[\\x20\\t\\r\\n\\f]",
7177 // http://www.w3.org/TR/css3-syntax/#characters
7178 characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
7179
7180 // Loosely modeled on CSS identifier characters
7181 // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
7182 // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
7183 identifier = characterEncoding.replace( "w", "w#" ),
7184
7185 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
7186 attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
7187 // Operator (capture 2)
7188 "*([*^$|!~]?=)" + whitespace +
7189 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
7190 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
7191 "*\\]",
7192
7193 pseudos = ":(" + characterEncoding + ")(?:\\((" +
7194 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
7195 // 1. quoted (capture 3; capture 4 or capture 5)
7196 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
7197 // 2. simple (capture 6)
7198 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
7199 // 3. anything else (capture 2)
7200 ".*" +
7201 ")\\)|)",
7202
7203 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
7204 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
7205
7206 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
7207 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
7208
7209 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
7210
7211 rpseudo = new RegExp( pseudos ),
7212 ridentifier = new RegExp( "^" + identifier + "$" ),
7213
7214 matchExpr = {
7215 "ID": new RegExp( "^#(" + characterEncoding + ")" ),
7216 "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
7217 "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
7218 "ATTR": new RegExp( "^" + attributes ),
7219 "PSEUDO": new RegExp( "^" + pseudos ),
7220 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
7221 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
7222 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
7223 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
7224 // For use in libraries implementing .is()
7225 // We use this for POS matching in `select`
7226 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
7227 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
7228 },
7229
7230 rinputs = /^(?:input|select|textarea|button)$/i,
7231 rheader = /^h\d$/i,
7232
7233 rnative = /^[^{]+\{\s*\[native \w/,
7234
7235 // Easily-parseable/retrievable ID or TAG or CLASS selectors
7236 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
7237
7238 rsibling = /[+~]/,
7239 rescape = /'|\\/g,
7240
7241 // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
7242 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
7243 funescape = function( _, escaped, escapedWhitespace ) {
7244 var high = "0x" + escaped - 0x10000;
7245 // NaN means non-codepoint
7246 // Support: Firefox<24
7247 // Workaround erroneous numeric interpretation of +"0x"
7248 return high !== high || escapedWhitespace ?
7249 escaped :
7250 high < 0 ?
7251 // BMP codepoint
7252 String.fromCharCode( high + 0x10000 ) :
7253 // Supplemental Plane codepoint (surrogate pair)
7254 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
7255 };
7256
7257// Optimize for push.apply( _, NodeList )
7258try {
7259 push.apply(
7260 (arr = slice.call( preferredDoc.childNodes )),
7261 preferredDoc.childNodes
7262 );
7263 // Support: Android<4.0
7264 // Detect silently failing push.apply
7265 arr[ preferredDoc.childNodes.length ].nodeType;
7266} catch ( e ) {
7267 push = { apply: arr.length ?
7268
7269 // Leverage slice if possible
7270 function( target, els ) {
7271 push_native.apply( target, slice.call(els) );
7272 } :
7273
7274 // Support: IE<9
7275 // Otherwise append directly
7276 function( target, els ) {
7277 var j = target.length,
7278 i = 0;
7279 // Can't trust NodeList.length
7280 while ( (target[j++] = els[i++]) ) {}
7281 target.length = j - 1;
7282 }
7283 };
7284}
7285
7286function Sizzle( selector, context, results, seed ) {
7287 var match, elem, m, nodeType,
7288 // QSA vars
7289 i, groups, old, nid, newContext, newSelector;
7290
7291 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
7292 setDocument( context );
7293 }
7294
7295 context = context || document;
7296 results = results || [];
7297
7298 if ( !selector || typeof selector !== "string" ) {
7299 return results;
7300 }
7301
7302 if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
7303 return [];
7304 }
7305
7306 if ( documentIsHTML && !seed ) {
7307
7308 // Shortcuts
7309 if ( (match = rquickExpr.exec( selector )) ) {
7310 // Speed-up: Sizzle("#ID")
7311 if ( (m = match[1]) ) {
7312 if ( nodeType === 9 ) {
7313 elem = context.getElementById( m );
7314 // Check parentNode to catch when Blackberry 4.6 returns
7315 // nodes that are no longer in the document (jQuery #6963)
7316 if ( elem && elem.parentNode ) {
7317 // Handle the case where IE, Opera, and Webkit return items
7318 // by name instead of ID
7319 if ( elem.id === m ) {
7320 results.push( elem );
7321 return results;
7322 }
7323 } else {
7324 return results;
7325 }
7326 } else {
7327 // Context is not a document
7328 if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
7329 contains( context, elem ) && elem.id === m ) {
7330 results.push( elem );
7331 return results;
7332 }
7333 }
7334
7335 // Speed-up: Sizzle("TAG")
7336 } else if ( match[2] ) {
7337 push.apply( results, context.getElementsByTagName( selector ) );
7338 return results;
7339
7340 // Speed-up: Sizzle(".CLASS")
7341 } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
7342 push.apply( results, context.getElementsByClassName( m ) );
7343 return results;
7344 }
7345 }
7346
7347 // QSA path
7348 if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
7349 nid = old = expando;
7350 newContext = context;
7351 newSelector = nodeType === 9 && selector;
7352
7353 // qSA works strangely on Element-rooted queries
7354 // We can work around this by specifying an extra ID on the root
7355 // and working up from there (Thanks to Andrew Dupont for the technique)
7356 // IE 8 doesn't work on object elements
7357 if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
7358 groups = tokenize( selector );
7359
7360 if ( (old = context.getAttribute("id")) ) {
7361 nid = old.replace( rescape, "\\$&" );
7362 } else {
7363 context.setAttribute( "id", nid );
7364 }
7365 nid = "[id='" + nid + "'] ";
7366
7367 i = groups.length;
7368 while ( i-- ) {
7369 groups[i] = nid + toSelector( groups[i] );
7370 }
7371 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
7372 newSelector = groups.join(",");
7373 }
7374
7375 if ( newSelector ) {
7376 try {
7377 push.apply( results,
7378 newContext.querySelectorAll( newSelector )
7379 );
7380 return results;
7381 } catch(qsaError) {
7382 } finally {
7383 if ( !old ) {
7384 context.removeAttribute("id");
7385 }
7386 }
7387 }
7388 }
7389 }
7390
7391 // All others
7392 return select( selector.replace( rtrim, "$1" ), context, results, seed );
7393}
7394
7395/**
7396 * Create key-value caches of limited size
7397 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
7398 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
7399 * deleting the oldest entry
7400 */
7401function createCache() {
7402 var keys = [];
7403
7404 function cache( key, value ) {
7405 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
7406 if ( keys.push( key + " " ) > Expr.cacheLength ) {
7407 // Only keep the most recent entries
7408 delete cache[ keys.shift() ];
7409 }
7410 return (cache[ key + " " ] = value);
7411 }
7412 return cache;
7413}
7414
7415/**
7416 * Mark a function for special use by Sizzle
7417 * @param {Function} fn The function to mark
7418 */
7419function markFunction( fn ) {
7420 fn[ expando ] = true;
7421 return fn;
7422}
7423
7424/**
7425 * Support testing using an element
7426 * @param {Function} fn Passed the created div and expects a boolean result
7427 */
7428function assert( fn ) {
7429 var div = document.createElement("div");
7430
7431 try {
7432 return !!fn( div );
7433 } catch (e) {
7434 return false;
7435 } finally {
7436 // Remove from its parent by default
7437 if ( div.parentNode ) {
7438 div.parentNode.removeChild( div );
7439 }
7440 // release memory in IE
7441 div = null;
7442 }
7443}
7444
7445/**
7446 * Adds the same handler for all of the specified attrs
7447 * @param {String} attrs Pipe-separated list of attributes
7448 * @param {Function} handler The method that will be applied
7449 */
7450function addHandle( attrs, handler ) {
7451 var arr = attrs.split("|"),
7452 i = attrs.length;
7453
7454 while ( i-- ) {
7455 Expr.attrHandle[ arr[i] ] = handler;
7456 }
7457}
7458
7459/**
7460 * Checks document order of two siblings
7461 * @param {Element} a
7462 * @param {Element} b
7463 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
7464 */
7465function siblingCheck( a, b ) {
7466 var cur = b && a,
7467 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
7468 ( ~b.sourceIndex || MAX_NEGATIVE ) -
7469 ( ~a.sourceIndex || MAX_NEGATIVE );
7470
7471 // Use IE sourceIndex if available on both nodes
7472 if ( diff ) {
7473 return diff;
7474 }
7475
7476 // Check if b follows a
7477 if ( cur ) {
7478 while ( (cur = cur.nextSibling) ) {
7479 if ( cur === b ) {
7480 return -1;
7481 }
7482 }
7483 }
7484
7485 return a ? 1 : -1;
7486}
7487
7488/**
7489 * Returns a function to use in pseudos for input types
7490 * @param {String} type
7491 */
7492function createInputPseudo( type ) {
7493 return function( elem ) {
7494 var name = elem.nodeName.toLowerCase();
7495 return name === "input" && elem.type === type;
7496 };
7497}
7498
7499/**
7500 * Returns a function to use in pseudos for buttons
7501 * @param {String} type
7502 */
7503function createButtonPseudo( type ) {
7504 return function( elem ) {
7505 var name = elem.nodeName.toLowerCase();
7506 return (name === "input" || name === "button") && elem.type === type;
7507 };
7508}
7509
7510/**
7511 * Returns a function to use in pseudos for positionals
7512 * @param {Function} fn
7513 */
7514function createPositionalPseudo( fn ) {
7515 return markFunction(function( argument ) {
7516 argument = +argument;
7517 return markFunction(function( seed, matches ) {
7518 var j,
7519 matchIndexes = fn( [], seed.length, argument ),
7520 i = matchIndexes.length;
7521
7522 // Match elements found at the specified indexes
7523 while ( i-- ) {
7524 if ( seed[ (j = matchIndexes[i]) ] ) {
7525 seed[j] = !(matches[j] = seed[j]);
7526 }
7527 }
7528 });
7529 });
7530}
7531
7532/**
7533 * Checks a node for validity as a Sizzle context
7534 * @param {Element|Object=} context
7535 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
7536 */
7537function testContext( context ) {
7538 return context && typeof context.getElementsByTagName !== strundefined && context;
7539}
7540
7541// Expose support vars for convenience
7542support = Sizzle.support = {};
7543
7544/**
7545 * Detects XML nodes
7546 * @param {Element|Object} elem An element or a document
7547 * @returns {Boolean} True iff elem is a non-HTML XML node
7548 */
7549isXML = Sizzle.isXML = function( elem ) {
7550 // documentElement is verified for cases where it doesn't yet exist
7551 // (such as loading iframes in IE - #4833)
7552 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
7553 return documentElement ? documentElement.nodeName !== "HTML" : false;
7554};
7555
7556/**
7557 * Sets document-related variables once based on the current document
7558 * @param {Element|Object} [doc] An element or document object to use to set the document
7559 * @returns {Object} Returns the current document
7560 */
7561setDocument = Sizzle.setDocument = function( node ) {
7562 var hasCompare,
7563 doc = node ? node.ownerDocument || node : preferredDoc,
7564 parent = doc.defaultView;
7565
7566 // If no document and documentElement is available, return
7567 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
7568 return document;
7569 }
7570
7571 // Set our document
7572 document = doc;
7573 docElem = doc.documentElement;
7574
7575 // Support tests
7576 documentIsHTML = !isXML( doc );
7577
7578 // Support: IE>8
7579 // If iframe document is assigned to "document" variable and if iframe has been reloaded,
7580 // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
7581 // IE6-8 do not support the defaultView property so parent will be undefined
7582 if ( parent && parent !== parent.top ) {
7583 // IE11 does not have attachEvent, so all must suffer
7584 if ( parent.addEventListener ) {
7585 parent.addEventListener( "unload", function() {
7586 setDocument();
7587 }, false );
7588 } else if ( parent.attachEvent ) {
7589 parent.attachEvent( "onunload", function() {
7590 setDocument();
7591 });
7592 }
7593 }
7594
7595 /* Attributes
7596 ---------------------------------------------------------------------- */
7597
7598 // Support: IE<8
7599 // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
7600 support.attributes = assert(function( div ) {
7601 div.className = "i";
7602 return !div.getAttribute("className");
7603 });
7604
7605 /* getElement(s)By*
7606 ---------------------------------------------------------------------- */
7607
7608 // Check if getElementsByTagName("*") returns only elements
7609 support.getElementsByTagName = assert(function( div ) {
7610 div.appendChild( doc.createComment("") );
7611 return !div.getElementsByTagName("*").length;
7612 });
7613
7614 // Check if getElementsByClassName can be trusted
7615 support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
7616 div.innerHTML = "<div class='a'></div><div class='a i'></div>";
7617
7618 // Support: Safari<4
7619 // Catch class over-caching
7620 div.firstChild.className = "i";
7621 // Support: Opera<10
7622 // Catch gEBCN failure to find non-leading classes
7623 return div.getElementsByClassName("i").length === 2;
7624 });
7625
7626 // Support: IE<10
7627 // Check if getElementById returns elements by name
7628 // The broken getElementById methods don't pick up programatically-set names,
7629 // so use a roundabout getElementsByName test
7630 support.getById = assert(function( div ) {
7631 docElem.appendChild( div ).id = expando;
7632 return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
7633 });
7634
7635 // ID find and filter
7636 if ( support.getById ) {
7637 Expr.find["ID"] = function( id, context ) {
7638 if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
7639 var m = context.getElementById( id );
7640 // Check parentNode to catch when Blackberry 4.6 returns
7641 // nodes that are no longer in the document #6963
7642 return m && m.parentNode ? [ m ] : [];
7643 }
7644 };
7645 Expr.filter["ID"] = function( id ) {
7646 var attrId = id.replace( runescape, funescape );
7647 return function( elem ) {
7648 return elem.getAttribute("id") === attrId;
7649 };
7650 };
7651 } else {
7652 // Support: IE6/7
7653 // getElementById is not reliable as a find shortcut
7654 delete Expr.find["ID"];
7655
7656 Expr.filter["ID"] = function( id ) {
7657 var attrId = id.replace( runescape, funescape );
7658 return function( elem ) {
7659 var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
7660 return node && node.value === attrId;
7661 };
7662 };
7663 }
7664
7665 // Tag
7666 Expr.find["TAG"] = support.getElementsByTagName ?
7667 function( tag, context ) {
7668 if ( typeof context.getElementsByTagName !== strundefined ) {
7669 return context.getElementsByTagName( tag );
7670 }
7671 } :
7672 function( tag, context ) {
7673 var elem,
7674 tmp = [],
7675 i = 0,
7676 results = context.getElementsByTagName( tag );
7677
7678 // Filter out possible comments
7679 if ( tag === "*" ) {
7680 while ( (elem = results[i++]) ) {
7681 if ( elem.nodeType === 1 ) {
7682 tmp.push( elem );
7683 }
7684 }
7685
7686 return tmp;
7687 }
7688 return results;
7689 };
7690
7691 // Class
7692 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
7693 if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
7694 return context.getElementsByClassName( className );
7695 }
7696 };
7697
7698 /* QSA/matchesSelector
7699 ---------------------------------------------------------------------- */
7700
7701 // QSA and matchesSelector support
7702
7703 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
7704 rbuggyMatches = [];
7705
7706 // qSa(:focus) reports false when true (Chrome 21)
7707 // We allow this because of a bug in IE8/9 that throws an error
7708 // whenever `document.activeElement` is accessed on an iframe
7709 // So, we allow :focus to pass through QSA all the time to avoid the IE error
7710 // See http://bugs.jquery.com/ticket/13378
7711 rbuggyQSA = [];
7712
7713 if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
7714 // Build QSA regex
7715 // Regex strategy adopted from Diego Perini
7716 assert(function( div ) {
7717 // Select is set to empty string on purpose
7718 // This is to test IE's treatment of not explicitly
7719 // setting a boolean content attribute,
7720 // since its presence should be enough
7721 // http://bugs.jquery.com/ticket/12359
7722 div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
7723
7724 // Support: IE8, Opera 11-12.16
7725 // Nothing should be selected when empty strings follow ^= or $= or *=
7726 // The test attribute must be unknown in Opera but "safe" for WinRT
7727 // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
7728 if ( div.querySelectorAll("[msallowclip^='']").length ) {
7729 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
7730 }
7731
7732 // Support: IE8
7733 // Boolean attributes and "value" are not treated correctly
7734 if ( !div.querySelectorAll("[selected]").length ) {
7735 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
7736 }
7737
7738 // Webkit/Opera - :checked should return selected option elements
7739 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
7740 // IE8 throws error here and will not see later tests
7741 if ( !div.querySelectorAll(":checked").length ) {
7742 rbuggyQSA.push(":checked");
7743 }
7744 });
7745
7746 assert(function( div ) {
7747 // Support: Windows 8 Native Apps
7748 // The type and name attributes are restricted during .innerHTML assignment
7749 var input = doc.createElement("input");
7750 input.setAttribute( "type", "hidden" );
7751 div.appendChild( input ).setAttribute( "name", "D" );
7752
7753 // Support: IE8
7754 // Enforce case-sensitivity of name attribute
7755 if ( div.querySelectorAll("[name=d]").length ) {
7756 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
7757 }
7758
7759 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
7760 // IE8 throws error here and will not see later tests
7761 if ( !div.querySelectorAll(":enabled").length ) {
7762 rbuggyQSA.push( ":enabled", ":disabled" );
7763 }
7764
7765 // Opera 10-11 does not throw on post-comma invalid pseudos
7766 div.querySelectorAll("*,:x");
7767 rbuggyQSA.push(",.*:");
7768 });
7769 }
7770
7771 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
7772 docElem.webkitMatchesSelector ||
7773 docElem.mozMatchesSelector ||
7774 docElem.oMatchesSelector ||
7775 docElem.msMatchesSelector) )) ) {
7776
7777 assert(function( div ) {
7778 // Check to see if it's possible to do matchesSelector
7779 // on a disconnected node (IE 9)
7780 support.disconnectedMatch = matches.call( div, "div" );
7781
7782 // This should fail with an exception
7783 // Gecko does not error, returns false instead
7784 matches.call( div, "[s!='']:x" );
7785 rbuggyMatches.push( "!=", pseudos );
7786 });
7787 }
7788
7789 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
7790 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
7791
7792 /* Contains
7793 ---------------------------------------------------------------------- */
7794 hasCompare = rnative.test( docElem.compareDocumentPosition );
7795
7796 // Element contains another
7797 // Purposefully does not implement inclusive descendent
7798 // As in, an element does not contain itself
7799 contains = hasCompare || rnative.test( docElem.contains ) ?
7800 function( a, b ) {
7801 var adown = a.nodeType === 9 ? a.documentElement : a,
7802 bup = b && b.parentNode;
7803 return a === bup || !!( bup && bup.nodeType === 1 && (
7804 adown.contains ?
7805 adown.contains( bup ) :
7806 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
7807 ));
7808 } :
7809 function( a, b ) {
7810 if ( b ) {
7811 while ( (b = b.parentNode) ) {
7812 if ( b === a ) {
7813 return true;
7814 }
7815 }
7816 }
7817 return false;
7818 };
7819
7820 /* Sorting
7821 ---------------------------------------------------------------------- */
7822
7823 // Document order sorting
7824 sortOrder = hasCompare ?
7825 function( a, b ) {
7826
7827 // Flag for duplicate removal
7828 if ( a === b ) {
7829 hasDuplicate = true;
7830 return 0;
7831 }
7832
7833 // Sort on method existence if only one input has compareDocumentPosition
7834 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
7835 if ( compare ) {
7836 return compare;
7837 }
7838
7839 // Calculate position if both inputs belong to the same document
7840 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
7841 a.compareDocumentPosition( b ) :
7842
7843 // Otherwise we know they are disconnected
7844 1;
7845
7846 // Disconnected nodes
7847 if ( compare & 1 ||
7848 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
7849
7850 // Choose the first element that is related to our preferred document
7851 if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
7852 return -1;
7853 }
7854 if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
7855 return 1;
7856 }
7857
7858 // Maintain original order
7859 return sortInput ?
7860 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
7861 0;
7862 }
7863
7864 return compare & 4 ? -1 : 1;
7865 } :
7866 function( a, b ) {
7867 // Exit early if the nodes are identical
7868 if ( a === b ) {
7869 hasDuplicate = true;
7870 return 0;
7871 }
7872
7873 var cur,
7874 i = 0,
7875 aup = a.parentNode,
7876 bup = b.parentNode,
7877 ap = [ a ],
7878 bp = [ b ];
7879
7880 // Parentless nodes are either documents or disconnected
7881 if ( !aup || !bup ) {
7882 return a === doc ? -1 :
7883 b === doc ? 1 :
7884 aup ? -1 :
7885 bup ? 1 :
7886 sortInput ?
7887 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
7888 0;
7889
7890 // If the nodes are siblings, we can do a quick check
7891 } else if ( aup === bup ) {
7892 return siblingCheck( a, b );
7893 }
7894
7895 // Otherwise we need full lists of their ancestors for comparison
7896 cur = a;
7897 while ( (cur = cur.parentNode) ) {
7898 ap.unshift( cur );
7899 }
7900 cur = b;
7901 while ( (cur = cur.parentNode) ) {
7902 bp.unshift( cur );
7903 }
7904
7905 // Walk down the tree looking for a discrepancy
7906 while ( ap[i] === bp[i] ) {
7907 i++;
7908 }
7909
7910 return i ?
7911 // Do a sibling check if the nodes have a common ancestor
7912 siblingCheck( ap[i], bp[i] ) :
7913
7914 // Otherwise nodes in our document sort first
7915 ap[i] === preferredDoc ? -1 :
7916 bp[i] === preferredDoc ? 1 :
7917 0;
7918 };
7919
7920 return doc;
7921};
7922
7923Sizzle.matches = function( expr, elements ) {
7924 return Sizzle( expr, null, null, elements );
7925};
7926
7927Sizzle.matchesSelector = function( elem, expr ) {
7928 // Set document vars if needed
7929 if ( ( elem.ownerDocument || elem ) !== document ) {
7930 setDocument( elem );
7931 }
7932
7933 // Make sure that attribute selectors are quoted
7934 expr = expr.replace( rattributeQuotes, "='$1']" );
7935
7936 if ( support.matchesSelector && documentIsHTML &&
7937 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
7938 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
7939
7940 try {
7941 var ret = matches.call( elem, expr );
7942
7943 // IE 9's matchesSelector returns false on disconnected nodes
7944 if ( ret || support.disconnectedMatch ||
7945 // As well, disconnected nodes are said to be in a document
7946 // fragment in IE 9
7947 elem.document && elem.document.nodeType !== 11 ) {
7948 return ret;
7949 }
7950 } catch(e) {}
7951 }
7952
7953 return Sizzle( expr, document, null, [ elem ] ).length > 0;
7954};
7955
7956Sizzle.contains = function( context, elem ) {
7957 // Set document vars if needed
7958 if ( ( context.ownerDocument || context ) !== document ) {
7959 setDocument( context );
7960 }
7961 return contains( context, elem );
7962};
7963
7964Sizzle.attr = function( elem, name ) {
7965 // Set document vars if needed
7966 if ( ( elem.ownerDocument || elem ) !== document ) {
7967 setDocument( elem );
7968 }
7969
7970 var fn = Expr.attrHandle[ name.toLowerCase() ],
7971 // Don't get fooled by Object.prototype properties (jQuery #13807)
7972 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
7973 fn( elem, name, !documentIsHTML ) :
7974 undefined;
7975
7976 return val !== undefined ?
7977 val :
7978 support.attributes || !documentIsHTML ?
7979 elem.getAttribute( name ) :
7980 (val = elem.getAttributeNode(name)) && val.specified ?
7981 val.value :
7982 null;
7983};
7984
7985Sizzle.error = function( msg ) {
7986 throw new Error( "Syntax error, unrecognized expression: " + msg );
7987};
7988
7989/**
7990 * Document sorting and removing duplicates
7991 * @param {ArrayLike} results
7992 */
7993Sizzle.uniqueSort = function( results ) {
7994 var elem,
7995 duplicates = [],
7996 j = 0,
7997 i = 0;
7998
7999 // Unless we *know* we can detect duplicates, assume their presence
8000 hasDuplicate = !support.detectDuplicates;
8001 sortInput = !support.sortStable && results.slice( 0 );
8002 results.sort( sortOrder );
8003
8004 if ( hasDuplicate ) {
8005 while ( (elem = results[i++]) ) {
8006 if ( elem === results[ i ] ) {
8007 j = duplicates.push( i );
8008 }
8009 }
8010 while ( j-- ) {
8011 results.splice( duplicates[ j ], 1 );
8012 }
8013 }
8014
8015 // Clear input after sorting to release objects
8016 // See https://github.com/jquery/sizzle/pull/225
8017 sortInput = null;
8018
8019 return results;
8020};
8021
8022/**
8023 * Utility function for retrieving the text value of an array of DOM nodes
8024 * @param {Array|Element} elem
8025 */
8026getText = Sizzle.getText = function( elem ) {
8027 var node,
8028 ret = "",
8029 i = 0,
8030 nodeType = elem.nodeType;
8031
8032 if ( !nodeType ) {
8033 // If no nodeType, this is expected to be an array
8034 while ( (node = elem[i++]) ) {
8035 // Do not traverse comment nodes
8036 ret += getText( node );
8037 }
8038 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
8039 // Use textContent for elements
8040 // innerText usage removed for consistency of new lines (jQuery #11153)
8041 if ( typeof elem.textContent === "string" ) {
8042 return elem.textContent;
8043 } else {
8044 // Traverse its children
8045 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
8046 ret += getText( elem );
8047 }
8048 }
8049 } else if ( nodeType === 3 || nodeType === 4 ) {
8050 return elem.nodeValue;
8051 }
8052 // Do not include comment or processing instruction nodes
8053
8054 return ret;
8055};
8056
8057Expr = Sizzle.selectors = {
8058
8059 // Can be adjusted by the user
8060 cacheLength: 50,
8061
8062 createPseudo: markFunction,
8063
8064 match: matchExpr,
8065
8066 attrHandle: {},
8067
8068 find: {},
8069
8070 relative: {
8071 ">": { dir: "parentNode", first: true },
8072 " ": { dir: "parentNode" },
8073 "+": { dir: "previousSibling", first: true },
8074 "~": { dir: "previousSibling" }
8075 },
8076
8077 preFilter: {
8078 "ATTR": function( match ) {
8079 match[1] = match[1].replace( runescape, funescape );
8080
8081 // Move the given value to match[3] whether quoted or unquoted
8082 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
8083
8084 if ( match[2] === "~=" ) {
8085 match[3] = " " + match[3] + " ";
8086 }
8087
8088 return match.slice( 0, 4 );
8089 },
8090
8091 "CHILD": function( match ) {
8092 /* matches from matchExpr["CHILD"]
8093 1 type (only|nth|...)
8094 2 what (child|of-type)
8095 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
8096 4 xn-component of xn+y argument ([+-]?\d*n|)
8097 5 sign of xn-component
8098 6 x of xn-component
8099 7 sign of y-component
8100 8 y of y-component
8101 */
8102 match[1] = match[1].toLowerCase();
8103
8104 if ( match[1].slice( 0, 3 ) === "nth" ) {
8105 // nth-* requires argument
8106 if ( !match[3] ) {
8107 Sizzle.error( match[0] );
8108 }
8109
8110 // numeric x and y parameters for Expr.filter.CHILD
8111 // remember that false/true cast respectively to 0/1
8112 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
8113 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
8114
8115 // other types prohibit arguments
8116 } else if ( match[3] ) {
8117 Sizzle.error( match[0] );
8118 }
8119
8120 return match;
8121 },
8122
8123 "PSEUDO": function( match ) {
8124 var excess,
8125 unquoted = !match[6] && match[2];
8126
8127 if ( matchExpr["CHILD"].test( match[0] ) ) {
8128 return null;
8129 }
8130
8131 // Accept quoted arguments as-is
8132 if ( match[3] ) {
8133 match[2] = match[4] || match[5] || "";
8134
8135 // Strip excess characters from unquoted arguments
8136 } else if ( unquoted && rpseudo.test( unquoted ) &&
8137 // Get excess from tokenize (recursively)
8138 (excess = tokenize( unquoted, true )) &&
8139 // advance to the next closing parenthesis
8140 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
8141
8142 // excess is a negative index
8143 match[0] = match[0].slice( 0, excess );
8144 match[2] = unquoted.slice( 0, excess );
8145 }
8146
8147 // Return only captures needed by the pseudo filter method (type and argument)
8148 return match.slice( 0, 3 );
8149 }
8150 },
8151
8152 filter: {
8153
8154 "TAG": function( nodeNameSelector ) {
8155 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
8156 return nodeNameSelector === "*" ?
8157 function() { return true; } :
8158 function( elem ) {
8159 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
8160 };
8161 },
8162
8163 "CLASS": function( className ) {
8164 var pattern = classCache[ className + " " ];
8165
8166 return pattern ||
8167 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
8168 classCache( className, function( elem ) {
8169 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
8170 });
8171 },
8172
8173 "ATTR": function( name, operator, check ) {
8174 return function( elem ) {
8175 var result = Sizzle.attr( elem, name );
8176
8177 if ( result == null ) {
8178 return operator === "!=";
8179 }
8180 if ( !operator ) {
8181 return true;
8182 }
8183
8184 result += "";
8185
8186 return operator === "=" ? result === check :
8187 operator === "!=" ? result !== check :
8188 operator === "^=" ? check && result.indexOf( check ) === 0 :
8189 operator === "*=" ? check && result.indexOf( check ) > -1 :
8190 operator === "$=" ? check && result.slice( -check.length ) === check :
8191 operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
8192 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
8193 false;
8194 };
8195 },
8196
8197 "CHILD": function( type, what, argument, first, last ) {
8198 var simple = type.slice( 0, 3 ) !== "nth",
8199 forward = type.slice( -4 ) !== "last",
8200 ofType = what === "of-type";
8201
8202 return first === 1 && last === 0 ?
8203
8204 // Shortcut for :nth-*(n)
8205 function( elem ) {
8206 return !!elem.parentNode;
8207 } :
8208
8209 function( elem, context, xml ) {
8210 var cache, outerCache, node, diff, nodeIndex, start,
8211 dir = simple !== forward ? "nextSibling" : "previousSibling",
8212 parent = elem.parentNode,
8213 name = ofType && elem.nodeName.toLowerCase(),
8214 useCache = !xml && !ofType;
8215
8216 if ( parent ) {
8217
8218 // :(first|last|only)-(child|of-type)
8219 if ( simple ) {
8220 while ( dir ) {
8221 node = elem;
8222 while ( (node = node[ dir ]) ) {
8223 if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
8224 return false;
8225 }
8226 }
8227 // Reverse direction for :only-* (if we haven't yet done so)
8228 start = dir = type === "only" && !start && "nextSibling";
8229 }
8230 return true;
8231 }
8232
8233 start = [ forward ? parent.firstChild : parent.lastChild ];
8234
8235 // non-xml :nth-child(...) stores cache data on `parent`
8236 if ( forward && useCache ) {
8237 // Seek `elem` from a previously-cached index
8238 outerCache = parent[ expando ] || (parent[ expando ] = {});
8239 cache = outerCache[ type ] || [];
8240 nodeIndex = cache[0] === dirruns && cache[1];
8241 diff = cache[0] === dirruns && cache[2];
8242 node = nodeIndex && parent.childNodes[ nodeIndex ];
8243
8244 while ( (node = ++nodeIndex && node && node[ dir ] ||
8245
8246 // Fallback to seeking `elem` from the start
8247 (diff = nodeIndex = 0) || start.pop()) ) {
8248
8249 // When found, cache indexes on `parent` and break
8250 if ( node.nodeType === 1 && ++diff && node === elem ) {
8251 outerCache[ type ] = [ dirruns, nodeIndex, diff ];
8252 break;
8253 }
8254 }
8255
8256 // Use previously-cached element index if available
8257 } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
8258 diff = cache[1];
8259
8260 // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
8261 } else {
8262 // Use the same loop as above to seek `elem` from the start
8263 while ( (node = ++nodeIndex && node && node[ dir ] ||
8264 (diff = nodeIndex = 0) || start.pop()) ) {
8265
8266 if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
8267 // Cache the index of each encountered element
8268 if ( useCache ) {
8269 (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
8270 }
8271
8272 if ( node === elem ) {
8273 break;
8274 }
8275 }
8276 }
8277 }
8278
8279 // Incorporate the offset, then check against cycle size
8280 diff -= last;
8281 return diff === first || ( diff % first === 0 && diff / first >= 0 );
8282 }
8283 };
8284 },
8285
8286 "PSEUDO": function( pseudo, argument ) {
8287 // pseudo-class names are case-insensitive
8288 // http://www.w3.org/TR/selectors/#pseudo-classes
8289 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
8290 // Remember that setFilters inherits from pseudos
8291 var args,
8292 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
8293 Sizzle.error( "unsupported pseudo: " + pseudo );
8294
8295 // The user may use createPseudo to indicate that
8296 // arguments are needed to create the filter function
8297 // just as Sizzle does
8298 if ( fn[ expando ] ) {
8299 return fn( argument );
8300 }
8301
8302 // But maintain support for old signatures
8303 if ( fn.length > 1 ) {
8304 args = [ pseudo, pseudo, "", argument ];
8305 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
8306 markFunction(function( seed, matches ) {
8307 var idx,
8308 matched = fn( seed, argument ),
8309 i = matched.length;
8310 while ( i-- ) {
8311 idx = indexOf.call( seed, matched[i] );
8312 seed[ idx ] = !( matches[ idx ] = matched[i] );
8313 }
8314 }) :
8315 function( elem ) {
8316 return fn( elem, 0, args );
8317 };
8318 }
8319
8320 return fn;
8321 }
8322 },
8323
8324 pseudos: {
8325 // Potentially complex pseudos
8326 "not": markFunction(function( selector ) {
8327 // Trim the selector passed to compile
8328 // to avoid treating leading and trailing
8329 // spaces as combinators
8330 var input = [],
8331 results = [],
8332 matcher = compile( selector.replace( rtrim, "$1" ) );
8333
8334 return matcher[ expando ] ?
8335 markFunction(function( seed, matches, context, xml ) {
8336 var elem,
8337 unmatched = matcher( seed, null, xml, [] ),
8338 i = seed.length;
8339
8340 // Match elements unmatched by `matcher`
8341 while ( i-- ) {
8342 if ( (elem = unmatched[i]) ) {
8343 seed[i] = !(matches[i] = elem);
8344 }
8345 }
8346 }) :
8347 function( elem, context, xml ) {
8348 input[0] = elem;
8349 matcher( input, null, xml, results );
8350 return !results.pop();
8351 };
8352 }),
8353
8354 "has": markFunction(function( selector ) {
8355 return function( elem ) {
8356 return Sizzle( selector, elem ).length > 0;
8357 };
8358 }),
8359
8360 "contains": markFunction(function( text ) {
8361 return function( elem ) {
8362 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
8363 };
8364 }),
8365
8366 // "Whether an element is represented by a :lang() selector
8367 // is based solely on the element's language value
8368 // being equal to the identifier C,
8369 // or beginning with the identifier C immediately followed by "-".
8370 // The matching of C against the element's language value is performed case-insensitively.
8371 // The identifier C does not have to be a valid language name."
8372 // http://www.w3.org/TR/selectors/#lang-pseudo
8373 "lang": markFunction( function( lang ) {
8374 // lang value must be a valid identifier
8375 if ( !ridentifier.test(lang || "") ) {
8376 Sizzle.error( "unsupported lang: " + lang );
8377 }
8378 lang = lang.replace( runescape, funescape ).toLowerCase();
8379 return function( elem ) {
8380 var elemLang;
8381 do {
8382 if ( (elemLang = documentIsHTML ?
8383 elem.lang :
8384 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
8385
8386 elemLang = elemLang.toLowerCase();
8387 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
8388 }
8389 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
8390 return false;
8391 };
8392 }),
8393
8394 // Miscellaneous
8395 "target": function( elem ) {
8396 var hash = window.location && window.location.hash;
8397 return hash && hash.slice( 1 ) === elem.id;
8398 },
8399
8400 "root": function( elem ) {
8401 return elem === docElem;
8402 },
8403
8404 "focus": function( elem ) {
8405 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
8406 },
8407
8408 // Boolean properties
8409 "enabled": function( elem ) {
8410 return elem.disabled === false;
8411 },
8412
8413 "disabled": function( elem ) {
8414 return elem.disabled === true;
8415 },
8416
8417 "checked": function( elem ) {
8418 // In CSS3, :checked should return both checked and selected elements
8419 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
8420 var nodeName = elem.nodeName.toLowerCase();
8421 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
8422 },
8423
8424 "selected": function( elem ) {
8425 // Accessing this property makes selected-by-default
8426 // options in Safari work properly
8427 if ( elem.parentNode ) {
8428 elem.parentNode.selectedIndex;
8429 }
8430
8431 return elem.selected === true;
8432 },
8433
8434 // Contents
8435 "empty": function( elem ) {
8436 // http://www.w3.org/TR/selectors/#empty-pseudo
8437 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
8438 // but not by others (comment: 8; processing instruction: 7; etc.)
8439 // nodeType < 6 works because attributes (2) do not appear as children
8440 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
8441 if ( elem.nodeType < 6 ) {
8442 return false;
8443 }
8444 }
8445 return true;
8446 },
8447
8448 "parent": function( elem ) {
8449 return !Expr.pseudos["empty"]( elem );
8450 },
8451
8452 // Element/input types
8453 "header": function( elem ) {
8454 return rheader.test( elem.nodeName );
8455 },
8456
8457 "input": function( elem ) {
8458 return rinputs.test( elem.nodeName );
8459 },
8460
8461 "button": function( elem ) {
8462 var name = elem.nodeName.toLowerCase();
8463 return name === "input" && elem.type === "button" || name === "button";
8464 },
8465
8466 "text": function( elem ) {
8467 var attr;
8468 return elem.nodeName.toLowerCase() === "input" &&
8469 elem.type === "text" &&
8470
8471 // Support: IE<8
8472 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
8473 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
8474 },
8475
8476 // Position-in-collection
8477 "first": createPositionalPseudo(function() {
8478 return [ 0 ];
8479 }),
8480
8481 "last": createPositionalPseudo(function( matchIndexes, length ) {
8482 return [ length - 1 ];
8483 }),
8484
8485 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
8486 return [ argument < 0 ? argument + length : argument ];
8487 }),
8488
8489 "even": createPositionalPseudo(function( matchIndexes, length ) {
8490 var i = 0;
8491 for ( ; i < length; i += 2 ) {
8492 matchIndexes.push( i );
8493 }
8494 return matchIndexes;
8495 }),
8496
8497 "odd": createPositionalPseudo(function( matchIndexes, length ) {
8498 var i = 1;
8499 for ( ; i < length; i += 2 ) {
8500 matchIndexes.push( i );
8501 }
8502 return matchIndexes;
8503 }),
8504
8505 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
8506 var i = argument < 0 ? argument + length : argument;
8507 for ( ; --i >= 0; ) {
8508 matchIndexes.push( i );
8509 }
8510 return matchIndexes;
8511 }),
8512
8513 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
8514 var i = argument < 0 ? argument + length : argument;
8515 for ( ; ++i < length; ) {
8516 matchIndexes.push( i );
8517 }
8518 return matchIndexes;
8519 })
8520 }
8521};
8522
8523Expr.pseudos["nth"] = Expr.pseudos["eq"];
8524
8525// Add button/input type pseudos
8526for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
8527 Expr.pseudos[ i ] = createInputPseudo( i );
8528}
8529for ( i in { submit: true, reset: true } ) {
8530 Expr.pseudos[ i ] = createButtonPseudo( i );
8531}
8532
8533// Easy API for creating new setFilters
8534function setFilters() {}
8535setFilters.prototype = Expr.filters = Expr.pseudos;
8536Expr.setFilters = new setFilters();
8537
8538tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
8539 var matched, match, tokens, type,
8540 soFar, groups, preFilters,
8541 cached = tokenCache[ selector + " " ];
8542
8543 if ( cached ) {
8544 return parseOnly ? 0 : cached.slice( 0 );
8545 }
8546
8547 soFar = selector;
8548 groups = [];
8549 preFilters = Expr.preFilter;
8550
8551 while ( soFar ) {
8552
8553 // Comma and first run
8554 if ( !matched || (match = rcomma.exec( soFar )) ) {
8555 if ( match ) {
8556 // Don't consume trailing commas as valid
8557 soFar = soFar.slice( match[0].length ) || soFar;
8558 }
8559 groups.push( (tokens = []) );
8560 }
8561
8562 matched = false;
8563
8564 // Combinators
8565 if ( (match = rcombinators.exec( soFar )) ) {
8566 matched = match.shift();
8567 tokens.push({
8568 value: matched,
8569 // Cast descendant combinators to space
8570 type: match[0].replace( rtrim, " " )
8571 });
8572 soFar = soFar.slice( matched.length );
8573 }
8574
8575 // Filters
8576 for ( type in Expr.filter ) {
8577 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
8578 (match = preFilters[ type ]( match ))) ) {
8579 matched = match.shift();
8580 tokens.push({
8581 value: matched,
8582 type: type,
8583 matches: match
8584 });
8585 soFar = soFar.slice( matched.length );
8586 }
8587 }
8588
8589 if ( !matched ) {
8590 break;
8591 }
8592 }
8593
8594 // Return the length of the invalid excess
8595 // if we're just parsing
8596 // Otherwise, throw an error or return tokens
8597 return parseOnly ?
8598 soFar.length :
8599 soFar ?
8600 Sizzle.error( selector ) :
8601 // Cache the tokens
8602 tokenCache( selector, groups ).slice( 0 );
8603};
8604
8605function toSelector( tokens ) {
8606 var i = 0,
8607 len = tokens.length,
8608 selector = "";
8609 for ( ; i < len; i++ ) {
8610 selector += tokens[i].value;
8611 }
8612 return selector;
8613}
8614
8615function addCombinator( matcher, combinator, base ) {
8616 var dir = combinator.dir,
8617 checkNonElements = base && dir === "parentNode",
8618 doneName = done++;
8619
8620 return combinator.first ?
8621 // Check against closest ancestor/preceding element
8622 function( elem, context, xml ) {
8623 while ( (elem = elem[ dir ]) ) {
8624 if ( elem.nodeType === 1 || checkNonElements ) {
8625 return matcher( elem, context, xml );
8626 }
8627 }
8628 } :
8629
8630 // Check against all ancestor/preceding elements
8631 function( elem, context, xml ) {
8632 var oldCache, outerCache,
8633 newCache = [ dirruns, doneName ];
8634
8635 // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
8636 if ( xml ) {
8637 while ( (elem = elem[ dir ]) ) {
8638 if ( elem.nodeType === 1 || checkNonElements ) {
8639 if ( matcher( elem, context, xml ) ) {
8640 return true;
8641 }
8642 }
8643 }
8644 } else {
8645 while ( (elem = elem[ dir ]) ) {
8646 if ( elem.nodeType === 1 || checkNonElements ) {
8647 outerCache = elem[ expando ] || (elem[ expando ] = {});
8648 if ( (oldCache = outerCache[ dir ]) &&
8649 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
8650
8651 // Assign to newCache so results back-propagate to previous elements
8652 return (newCache[ 2 ] = oldCache[ 2 ]);
8653 } else {
8654 // Reuse newcache so results back-propagate to previous elements
8655 outerCache[ dir ] = newCache;
8656
8657 // A match means we're done; a fail means we have to keep checking
8658 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
8659 return true;
8660 }
8661 }
8662 }
8663 }
8664 }
8665 };
8666}
8667
8668function elementMatcher( matchers ) {
8669 return matchers.length > 1 ?
8670 function( elem, context, xml ) {
8671 var i = matchers.length;
8672 while ( i-- ) {
8673 if ( !matchers[i]( elem, context, xml ) ) {
8674 return false;
8675 }
8676 }
8677 return true;
8678 } :
8679 matchers[0];
8680}
8681
8682function multipleContexts( selector, contexts, results ) {
8683 var i = 0,
8684 len = contexts.length;
8685 for ( ; i < len; i++ ) {
8686 Sizzle( selector, contexts[i], results );
8687 }
8688 return results;
8689}
8690
8691function condense( unmatched, map, filter, context, xml ) {
8692 var elem,
8693 newUnmatched = [],
8694 i = 0,
8695 len = unmatched.length,
8696 mapped = map != null;
8697
8698 for ( ; i < len; i++ ) {
8699 if ( (elem = unmatched[i]) ) {
8700 if ( !filter || filter( elem, context, xml ) ) {
8701 newUnmatched.push( elem );
8702 if ( mapped ) {
8703 map.push( i );
8704 }
8705 }
8706 }
8707 }
8708
8709 return newUnmatched;
8710}
8711
8712function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
8713 if ( postFilter && !postFilter[ expando ] ) {
8714 postFilter = setMatcher( postFilter );
8715 }
8716 if ( postFinder && !postFinder[ expando ] ) {
8717 postFinder = setMatcher( postFinder, postSelector );
8718 }
8719 return markFunction(function( seed, results, context, xml ) {
8720 var temp, i, elem,
8721 preMap = [],
8722 postMap = [],
8723 preexisting = results.length,
8724
8725 // Get initial elements from seed or context
8726 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
8727
8728 // Prefilter to get matcher input, preserving a map for seed-results synchronization
8729 matcherIn = preFilter && ( seed || !selector ) ?
8730 condense( elems, preMap, preFilter, context, xml ) :
8731 elems,
8732
8733 matcherOut = matcher ?
8734 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
8735 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
8736
8737 // ...intermediate processing is necessary
8738 [] :
8739
8740 // ...otherwise use results directly
8741 results :
8742 matcherIn;
8743
8744 // Find primary matches
8745 if ( matcher ) {
8746 matcher( matcherIn, matcherOut, context, xml );
8747 }
8748
8749 // Apply postFilter
8750 if ( postFilter ) {
8751 temp = condense( matcherOut, postMap );
8752 postFilter( temp, [], context, xml );
8753
8754 // Un-match failing elements by moving them back to matcherIn
8755 i = temp.length;
8756 while ( i-- ) {
8757 if ( (elem = temp[i]) ) {
8758 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
8759 }
8760 }
8761 }
8762
8763 if ( seed ) {
8764 if ( postFinder || preFilter ) {
8765 if ( postFinder ) {
8766 // Get the final matcherOut by condensing this intermediate into postFinder contexts
8767 temp = [];
8768 i = matcherOut.length;
8769 while ( i-- ) {
8770 if ( (elem = matcherOut[i]) ) {
8771 // Restore matcherIn since elem is not yet a final match
8772 temp.push( (matcherIn[i] = elem) );
8773 }
8774 }
8775 postFinder( null, (matcherOut = []), temp, xml );
8776 }
8777
8778 // Move matched elements from seed to results to keep them synchronized
8779 i = matcherOut.length;
8780 while ( i-- ) {
8781 if ( (elem = matcherOut[i]) &&
8782 (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
8783
8784 seed[temp] = !(results[temp] = elem);
8785 }
8786 }
8787 }
8788
8789 // Add elements to results, through postFinder if defined
8790 } else {
8791 matcherOut = condense(
8792 matcherOut === results ?
8793 matcherOut.splice( preexisting, matcherOut.length ) :
8794 matcherOut
8795 );
8796 if ( postFinder ) {
8797 postFinder( null, results, matcherOut, xml );
8798 } else {
8799 push.apply( results, matcherOut );
8800 }
8801 }
8802 });
8803}
8804
8805function matcherFromTokens( tokens ) {
8806 var checkContext, matcher, j,
8807 len = tokens.length,
8808 leadingRelative = Expr.relative[ tokens[0].type ],
8809 implicitRelative = leadingRelative || Expr.relative[" "],
8810 i = leadingRelative ? 1 : 0,
8811
8812 // The foundational matcher ensures that elements are reachable from top-level context(s)
8813 matchContext = addCombinator( function( elem ) {
8814 return elem === checkContext;
8815 }, implicitRelative, true ),
8816 matchAnyContext = addCombinator( function( elem ) {
8817 return indexOf.call( checkContext, elem ) > -1;
8818 }, implicitRelative, true ),
8819 matchers = [ function( elem, context, xml ) {
8820 return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
8821 (checkContext = context).nodeType ?
8822 matchContext( elem, context, xml ) :
8823 matchAnyContext( elem, context, xml ) );
8824 } ];
8825
8826 for ( ; i < len; i++ ) {
8827 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
8828 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
8829 } else {
8830 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
8831
8832 // Return special upon seeing a positional matcher
8833 if ( matcher[ expando ] ) {
8834 // Find the next relative operator (if any) for proper handling
8835 j = ++i;
8836 for ( ; j < len; j++ ) {
8837 if ( Expr.relative[ tokens[j].type ] ) {
8838 break;
8839 }
8840 }
8841 return setMatcher(
8842 i > 1 && elementMatcher( matchers ),
8843 i > 1 && toSelector(
8844 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
8845 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
8846 ).replace( rtrim, "$1" ),
8847 matcher,
8848 i < j && matcherFromTokens( tokens.slice( i, j ) ),
8849 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
8850 j < len && toSelector( tokens )
8851 );
8852 }
8853 matchers.push( matcher );
8854 }
8855 }
8856
8857 return elementMatcher( matchers );
8858}
8859
8860function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
8861 var bySet = setMatchers.length > 0,
8862 byElement = elementMatchers.length > 0,
8863 superMatcher = function( seed, context, xml, results, outermost ) {
8864 var elem, j, matcher,
8865 matchedCount = 0,
8866 i = "0",
8867 unmatched = seed && [],
8868 setMatched = [],
8869 contextBackup = outermostContext,
8870 // We must always have either seed elements or outermost context
8871 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
8872 // Use integer dirruns iff this is the outermost matcher
8873 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
8874 len = elems.length;
8875
8876 if ( outermost ) {
8877 outermostContext = context !== document && context;
8878 }
8879
8880 // Add elements passing elementMatchers directly to results
8881 // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
8882 // Support: IE<9, Safari
8883 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
8884 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
8885 if ( byElement && elem ) {
8886 j = 0;
8887 while ( (matcher = elementMatchers[j++]) ) {
8888 if ( matcher( elem, context, xml ) ) {
8889 results.push( elem );
8890 break;
8891 }
8892 }
8893 if ( outermost ) {
8894 dirruns = dirrunsUnique;
8895 }
8896 }
8897
8898 // Track unmatched elements for set filters
8899 if ( bySet ) {
8900 // They will have gone through all possible matchers
8901 if ( (elem = !matcher && elem) ) {
8902 matchedCount--;
8903 }
8904
8905 // Lengthen the array for every element, matched or not
8906 if ( seed ) {
8907 unmatched.push( elem );
8908 }
8909 }
8910 }
8911
8912 // Apply set filters to unmatched elements
8913 matchedCount += i;
8914 if ( bySet && i !== matchedCount ) {
8915 j = 0;
8916 while ( (matcher = setMatchers[j++]) ) {
8917 matcher( unmatched, setMatched, context, xml );
8918 }
8919
8920 if ( seed ) {
8921 // Reintegrate element matches to eliminate the need for sorting
8922 if ( matchedCount > 0 ) {
8923 while ( i-- ) {
8924 if ( !(unmatched[i] || setMatched[i]) ) {
8925 setMatched[i] = pop.call( results );
8926 }
8927 }
8928 }
8929
8930 // Discard index placeholder values to get only actual matches
8931 setMatched = condense( setMatched );
8932 }
8933
8934 // Add matches to results
8935 push.apply( results, setMatched );
8936
8937 // Seedless set matches succeeding multiple successful matchers stipulate sorting
8938 if ( outermost && !seed && setMatched.length > 0 &&
8939 ( matchedCount + setMatchers.length ) > 1 ) {
8940
8941 Sizzle.uniqueSort( results );
8942 }
8943 }
8944
8945 // Override manipulation of globals by nested matchers
8946 if ( outermost ) {
8947 dirruns = dirrunsUnique;
8948 outermostContext = contextBackup;
8949 }
8950
8951 return unmatched;
8952 };
8953
8954 return bySet ?
8955 markFunction( superMatcher ) :
8956 superMatcher;
8957}
8958
8959compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
8960 var i,
8961 setMatchers = [],
8962 elementMatchers = [],
8963 cached = compilerCache[ selector + " " ];
8964
8965 if ( !cached ) {
8966 // Generate a function of recursive functions that can be used to check each element
8967 if ( !match ) {
8968 match = tokenize( selector );
8969 }
8970 i = match.length;
8971 while ( i-- ) {
8972 cached = matcherFromTokens( match[i] );
8973 if ( cached[ expando ] ) {
8974 setMatchers.push( cached );
8975 } else {
8976 elementMatchers.push( cached );
8977 }
8978 }
8979
8980 // Cache the compiled function
8981 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
8982
8983 // Save selector and tokenization
8984 cached.selector = selector;
8985 }
8986 return cached;
8987};
8988
8989/**
8990 * A low-level selection function that works with Sizzle's compiled
8991 * selector functions
8992 * @param {String|Function} selector A selector or a pre-compiled
8993 * selector function built with Sizzle.compile
8994 * @param {Element} context
8995 * @param {Array} [results]
8996 * @param {Array} [seed] A set of elements to match against
8997 */
8998select = Sizzle.select = function( selector, context, results, seed ) {
8999 var i, tokens, token, type, find,
9000 compiled = typeof selector === "function" && selector,
9001 match = !seed && tokenize( (selector = compiled.selector || selector) );
9002
9003 results = results || [];
9004
9005 // Try to minimize operations if there is no seed and only one group
9006 if ( match.length === 1 ) {
9007
9008 // Take a shortcut and set the context if the root selector is an ID
9009 tokens = match[0] = match[0].slice( 0 );
9010 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
9011 support.getById && context.nodeType === 9 && documentIsHTML &&
9012 Expr.relative[ tokens[1].type ] ) {
9013
9014 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
9015 if ( !context ) {
9016 return results;
9017
9018 // Precompiled matchers will still verify ancestry, so step up a level
9019 } else if ( compiled ) {
9020 context = context.parentNode;
9021 }
9022
9023 selector = selector.slice( tokens.shift().value.length );
9024 }
9025
9026 // Fetch a seed set for right-to-left matching
9027 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
9028 while ( i-- ) {
9029 token = tokens[i];
9030
9031 // Abort if we hit a combinator
9032 if ( Expr.relative[ (type = token.type) ] ) {
9033 break;
9034 }
9035 if ( (find = Expr.find[ type ]) ) {
9036 // Search, expanding context for leading sibling combinators
9037 if ( (seed = find(
9038 token.matches[0].replace( runescape, funescape ),
9039 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
9040 )) ) {
9041
9042 // If seed is empty or no tokens remain, we can return early
9043 tokens.splice( i, 1 );
9044 selector = seed.length && toSelector( tokens );
9045 if ( !selector ) {
9046 push.apply( results, seed );
9047 return results;
9048 }
9049
9050 break;
9051 }
9052 }
9053 }
9054 }
9055
9056 // Compile and execute a filtering function if one is not provided
9057 // Provide `match` to avoid retokenization if we modified the selector above
9058 ( compiled || compile( selector, match ) )(
9059 seed,
9060 context,
9061 !documentIsHTML,
9062 results,
9063 rsibling.test( selector ) && testContext( context.parentNode ) || context
9064 );
9065 return results;
9066};
9067
9068// One-time assignments
9069
9070// Sort stability
9071support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
9072
9073// Support: Chrome<14
9074// Always assume duplicates if they aren't passed to the comparison function
9075support.detectDuplicates = !!hasDuplicate;
9076
9077// Initialize against the default document
9078setDocument();
9079
9080// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
9081// Detached nodes confoundingly follow *each other*
9082support.sortDetached = assert(function( div1 ) {
9083 // Should return 1, but returns 4 (following)
9084 return div1.compareDocumentPosition( document.createElement("div") ) & 1;
9085});
9086
9087// Support: IE<8
9088// Prevent attribute/property "interpolation"
9089// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
9090if ( !assert(function( div ) {
9091 div.innerHTML = "<a href='#'></a>";
9092 return div.firstChild.getAttribute("href") === "#" ;
9093}) ) {
9094 addHandle( "type|href|height|width", function( elem, name, isXML ) {
9095 if ( !isXML ) {
9096 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
9097 }
9098 });
9099}
9100
9101// Support: IE<9
9102// Use defaultValue in place of getAttribute("value")
9103if ( !support.attributes || !assert(function( div ) {
9104 div.innerHTML = "<input/>";
9105 div.firstChild.setAttribute( "value", "" );
9106 return div.firstChild.getAttribute( "value" ) === "";
9107}) ) {
9108 addHandle( "value", function( elem, name, isXML ) {
9109 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
9110 return elem.defaultValue;
9111 }
9112 });
9113}
9114
9115// Support: IE<9
9116// Use getAttributeNode to fetch booleans when getAttribute lies
9117if ( !assert(function( div ) {
9118 return div.getAttribute("disabled") == null;
9119}) ) {
9120 addHandle( booleans, function( elem, name, isXML ) {
9121 var val;
9122 if ( !isXML ) {
9123 return elem[ name ] === true ? name.toLowerCase() :
9124 (val = elem.getAttributeNode( name )) && val.specified ?
9125 val.value :
9126 null;
9127 }
9128 });
9129}
9130
9131return Sizzle;
9132
9133})( window );
9134
9135
9136
9137jQuery.find = Sizzle;
9138jQuery.expr = Sizzle.selectors;
9139jQuery.expr[":"] = jQuery.expr.pseudos;
9140jQuery.unique = Sizzle.uniqueSort;
9141jQuery.text = Sizzle.getText;
9142jQuery.isXMLDoc = Sizzle.isXML;
9143jQuery.contains = Sizzle.contains;
9144
9145
9146
9147var rneedsContext = jQuery.expr.match.needsContext;
9148
9149var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
9150
9151
9152
9153var risSimple = /^.[^:#\[\.,]*$/;
9154
9155// Implement the identical functionality for filter and not
9156function winnow( elements, qualifier, not ) {
9157 if ( jQuery.isFunction( qualifier ) ) {
9158 return jQuery.grep( elements, function( elem, i ) {
9159 /* jshint -W018 */
9160 return !!qualifier.call( elem, i, elem ) !== not;
9161 });
9162
9163 }
9164
9165 if ( qualifier.nodeType ) {
9166 return jQuery.grep( elements, function( elem ) {
9167 return ( elem === qualifier ) !== not;
9168 });
9169
9170 }
9171
9172 if ( typeof qualifier === "string" ) {
9173 if ( risSimple.test( qualifier ) ) {
9174 return jQuery.filter( qualifier, elements, not );
9175 }
9176
9177 qualifier = jQuery.filter( qualifier, elements );
9178 }
9179
9180 return jQuery.grep( elements, function( elem ) {
9181 return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
9182 });
9183}
9184
9185jQuery.filter = function( expr, elems, not ) {
9186 var elem = elems[ 0 ];
9187
9188 if ( not ) {
9189 expr = ":not(" + expr + ")";
9190 }
9191
9192 return elems.length === 1 && elem.nodeType === 1 ?
9193 jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
9194 jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
9195 return elem.nodeType === 1;
9196 }));
9197};
9198
9199jQuery.fn.extend({
9200 find: function( selector ) {
9201 var i,
9202 len = this.length,
9203 ret = [],
9204 self = this;
9205
9206 if ( typeof selector !== "string" ) {
9207 return this.pushStack( jQuery( selector ).filter(function() {
9208 for ( i = 0; i < len; i++ ) {
9209 if ( jQuery.contains( self[ i ], this ) ) {
9210 return true;
9211 }
9212 }
9213 }) );
9214 }
9215
9216 for ( i = 0; i < len; i++ ) {
9217 jQuery.find( selector, self[ i ], ret );
9218 }
9219
9220 // Needed because $( selector, context ) becomes $( context ).find( selector )
9221 ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
9222 ret.selector = this.selector ? this.selector + " " + selector : selector;
9223 return ret;
9224 },
9225 filter: function( selector ) {
9226 return this.pushStack( winnow(this, selector || [], false) );
9227 },
9228 not: function( selector ) {
9229 return this.pushStack( winnow(this, selector || [], true) );
9230 },
9231 is: function( selector ) {
9232 return !!winnow(
9233 this,
9234
9235 // If this is a positional/relative selector, check membership in the returned set
9236 // so $("p:first").is("p:last") won't return true for a doc with two "p".
9237 typeof selector === "string" && rneedsContext.test( selector ) ?
9238 jQuery( selector ) :
9239 selector || [],
9240 false
9241 ).length;
9242 }
9243});
9244
9245
9246// Initialize a jQuery object
9247
9248
9249// A central reference to the root jQuery(document)
9250var rootjQuery,
9251
9252 // A simple way to check for HTML strings
9253 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
9254 // Strict HTML recognition (#11290: must start with <)
9255 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
9256
9257 init = jQuery.fn.init = function( selector, context ) {
9258 var match, elem;
9259
9260 // HANDLE: $(""), $(null), $(undefined), $(false)
9261 if ( !selector ) {
9262 return this;
9263 }
9264
9265 // Handle HTML strings
9266 if ( typeof selector === "string" ) {
9267 if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
9268 // Assume that strings that start and end with <> are HTML and skip the regex check
9269 match = [ null, selector, null ];
9270
9271 } else {
9272 match = rquickExpr.exec( selector );
9273 }
9274
9275 // Match html or make sure no context is specified for #id
9276 if ( match && (match[1] || !context) ) {
9277
9278 // HANDLE: $(html) -> $(array)
9279 if ( match[1] ) {
9280 context = context instanceof jQuery ? context[0] : context;
9281
9282 // scripts is true for back-compat
9283 // Intentionally let the error be thrown if parseHTML is not present
9284 jQuery.merge( this, jQuery.parseHTML(
9285 match[1],
9286 context && context.nodeType ? context.ownerDocument || context : document,
9287 true
9288 ) );
9289
9290 // HANDLE: $(html, props)
9291 if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
9292 for ( match in context ) {
9293 // Properties of context are called as methods if possible
9294 if ( jQuery.isFunction( this[ match ] ) ) {
9295 this[ match ]( context[ match ] );
9296
9297 // ...and otherwise set as attributes
9298 } else {
9299 this.attr( match, context[ match ] );
9300 }
9301 }
9302 }
9303
9304 return this;
9305
9306 // HANDLE: $(#id)
9307 } else {
9308 elem = document.getElementById( match[2] );
9309
9310 // Check parentNode to catch when Blackberry 4.6 returns
9311 // nodes that are no longer in the document #6963
9312 if ( elem && elem.parentNode ) {
9313 // Inject the element directly into the jQuery object
9314 this.length = 1;
9315 this[0] = elem;
9316 }
9317
9318 this.context = document;
9319 this.selector = selector;
9320 return this;
9321 }
9322
9323 // HANDLE: $(expr, $(...))
9324 } else if ( !context || context.jquery ) {
9325 return ( context || rootjQuery ).find( selector );
9326
9327 // HANDLE: $(expr, context)
9328 // (which is just equivalent to: $(context).find(expr)
9329 } else {
9330 return this.constructor( context ).find( selector );
9331 }
9332
9333 // HANDLE: $(DOMElement)
9334 } else if ( selector.nodeType ) {
9335 this.context = this[0] = selector;
9336 this.length = 1;
9337 return this;
9338
9339 // HANDLE: $(function)
9340 // Shortcut for document ready
9341 } else if ( jQuery.isFunction( selector ) ) {
9342 return typeof rootjQuery.ready !== "undefined" ?
9343 rootjQuery.ready( selector ) :
9344 // Execute immediately if ready is not present
9345 selector( jQuery );
9346 }
9347
9348 if ( selector.selector !== undefined ) {
9349 this.selector = selector.selector;
9350 this.context = selector.context;
9351 }
9352
9353 return jQuery.makeArray( selector, this );
9354 };
9355
9356// Give the init function the jQuery prototype for later instantiation
9357init.prototype = jQuery.fn;
9358
9359// Initialize central reference
9360rootjQuery = jQuery( document );
9361
9362
9363var rparentsprev = /^(?:parents|prev(?:Until|All))/,
9364 // methods guaranteed to produce a unique set when starting from a unique set
9365 guaranteedUnique = {
9366 children: true,
9367 contents: true,
9368 next: true,
9369 prev: true
9370 };
9371
9372jQuery.extend({
9373 dir: function( elem, dir, until ) {
9374 var matched = [],
9375 truncate = until !== undefined;
9376
9377 while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
9378 if ( elem.nodeType === 1 ) {
9379 if ( truncate && jQuery( elem ).is( until ) ) {
9380 break;
9381 }
9382 matched.push( elem );
9383 }
9384 }
9385 return matched;
9386 },
9387
9388 sibling: function( n, elem ) {
9389 var matched = [];
9390
9391 for ( ; n; n = n.nextSibling ) {
9392 if ( n.nodeType === 1 && n !== elem ) {
9393 matched.push( n );
9394 }
9395 }
9396
9397 return matched;
9398 }
9399});
9400
9401jQuery.fn.extend({
9402 has: function( target ) {
9403 var targets = jQuery( target, this ),
9404 l = targets.length;
9405
9406 return this.filter(function() {
9407 var i = 0;
9408 for ( ; i < l; i++ ) {
9409 if ( jQuery.contains( this, targets[i] ) ) {
9410 return true;
9411 }
9412 }
9413 });
9414 },
9415
9416 closest: function( selectors, context ) {
9417 var cur,
9418 i = 0,
9419 l = this.length,
9420 matched = [],
9421 pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
9422 jQuery( selectors, context || this.context ) :
9423 0;
9424
9425 for ( ; i < l; i++ ) {
9426 for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
9427 // Always skip document fragments
9428 if ( cur.nodeType < 11 && (pos ?
9429 pos.index(cur) > -1 :
9430
9431 // Don't pass non-elements to Sizzle
9432 cur.nodeType === 1 &&
9433 jQuery.find.matchesSelector(cur, selectors)) ) {
9434
9435 matched.push( cur );
9436 break;
9437 }
9438 }
9439 }
9440
9441 return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
9442 },
9443
9444 // Determine the position of an element within
9445 // the matched set of elements
9446 index: function( elem ) {
9447
9448 // No argument, return index in parent
9449 if ( !elem ) {
9450 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
9451 }
9452
9453 // index in selector
9454 if ( typeof elem === "string" ) {
9455 return indexOf.call( jQuery( elem ), this[ 0 ] );
9456 }
9457
9458 // Locate the position of the desired element
9459 return indexOf.call( this,
9460
9461 // If it receives a jQuery object, the first element is used
9462 elem.jquery ? elem[ 0 ] : elem
9463 );
9464 },
9465
9466 add: function( selector, context ) {
9467 return this.pushStack(
9468 jQuery.unique(
9469 jQuery.merge( this.get(), jQuery( selector, context ) )
9470 )
9471 );
9472 },
9473
9474 addBack: function( selector ) {
9475 return this.add( selector == null ?
9476 this.prevObject : this.prevObject.filter(selector)
9477 );
9478 }
9479});
9480
9481function sibling( cur, dir ) {
9482 while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
9483 return cur;
9484}
9485
9486jQuery.each({
9487 parent: function( elem ) {
9488 var parent = elem.parentNode;
9489 return parent && parent.nodeType !== 11 ? parent : null;
9490 },
9491 parents: function( elem ) {
9492 return jQuery.dir( elem, "parentNode" );
9493 },
9494 parentsUntil: function( elem, i, until ) {
9495 return jQuery.dir( elem, "parentNode", until );
9496 },
9497 next: function( elem ) {
9498 return sibling( elem, "nextSibling" );
9499 },
9500 prev: function( elem ) {
9501 return sibling( elem, "previousSibling" );
9502 },
9503 nextAll: function( elem ) {
9504 return jQuery.dir( elem, "nextSibling" );
9505 },
9506 prevAll: function( elem ) {
9507 return jQuery.dir( elem, "previousSibling" );
9508 },
9509 nextUntil: function( elem, i, until ) {
9510 return jQuery.dir( elem, "nextSibling", until );
9511 },
9512 prevUntil: function( elem, i, until ) {
9513 return jQuery.dir( elem, "previousSibling", until );
9514 },
9515 siblings: function( elem ) {
9516 return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
9517 },
9518 children: function( elem ) {
9519 return jQuery.sibling( elem.firstChild );
9520 },
9521 contents: function( elem ) {
9522 return elem.contentDocument || jQuery.merge( [], elem.childNodes );
9523 }
9524}, function( name, fn ) {
9525 jQuery.fn[ name ] = function( until, selector ) {
9526 var matched = jQuery.map( this, fn, until );
9527
9528 if ( name.slice( -5 ) !== "Until" ) {
9529 selector = until;
9530 }
9531
9532 if ( selector && typeof selector === "string" ) {
9533 matched = jQuery.filter( selector, matched );
9534 }
9535
9536 if ( this.length > 1 ) {
9537 // Remove duplicates
9538 if ( !guaranteedUnique[ name ] ) {
9539 jQuery.unique( matched );
9540 }
9541
9542 // Reverse order for parents* and prev-derivatives
9543 if ( rparentsprev.test( name ) ) {
9544 matched.reverse();
9545 }
9546 }
9547
9548 return this.pushStack( matched );
9549 };
9550});
9551var rnotwhite = (/\S+/g);
9552
9553
9554
9555// String to Object options format cache
9556var optionsCache = {};
9557
9558// Convert String-formatted options into Object-formatted ones and store in cache
9559function createOptions( options ) {
9560 var object = optionsCache[ options ] = {};
9561 jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
9562 object[ flag ] = true;
9563 });
9564 return object;
9565}
9566
9567/*
9568 * Create a callback list using the following parameters:
9569 *
9570 * options: an optional list of space-separated options that will change how
9571 * the callback list behaves or a more traditional option object
9572 *
9573 * By default a callback list will act like an event callback list and can be
9574 * "fired" multiple times.
9575 *
9576 * Possible options:
9577 *
9578 * once: will ensure the callback list can only be fired once (like a Deferred)
9579 *
9580 * memory: will keep track of previous values and will call any callback added
9581 * after the list has been fired right away with the latest "memorized"
9582 * values (like a Deferred)
9583 *
9584 * unique: will ensure a callback can only be added once (no duplicate in the list)
9585 *
9586 * stopOnFalse: interrupt callings when a callback returns false
9587 *
9588 */
9589jQuery.Callbacks = function( options ) {
9590
9591 // Convert options from String-formatted to Object-formatted if needed
9592 // (we check in cache first)
9593 options = typeof options === "string" ?
9594 ( optionsCache[ options ] || createOptions( options ) ) :
9595 jQuery.extend( {}, options );
9596
9597 var // Last fire value (for non-forgettable lists)
9598 memory,
9599 // Flag to know if list was already fired
9600 fired,
9601 // Flag to know if list is currently firing
9602 firing,
9603 // First callback to fire (used internally by add and fireWith)
9604 firingStart,
9605 // End of the loop when firing
9606 firingLength,
9607 // Index of currently firing callback (modified by remove if needed)
9608 firingIndex,
9609 // Actual callback list
9610 list = [],
9611 // Stack of fire calls for repeatable lists
9612 stack = !options.once && [],
9613 // Fire callbacks
9614 fire = function( data ) {
9615 memory = options.memory && data;
9616 fired = true;
9617 firingIndex = firingStart || 0;
9618 firingStart = 0;
9619 firingLength = list.length;
9620 firing = true;
9621 for ( ; list && firingIndex < firingLength; firingIndex++ ) {
9622 if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
9623 memory = false; // To prevent further calls using add
9624 break;
9625 }
9626 }
9627 firing = false;
9628 if ( list ) {
9629 if ( stack ) {
9630 if ( stack.length ) {
9631 fire( stack.shift() );
9632 }
9633 } else if ( memory ) {
9634 list = [];
9635 } else {
9636 self.disable();
9637 }
9638 }
9639 },
9640 // Actual Callbacks object
9641 self = {
9642 // Add a callback or a collection of callbacks to the list
9643 add: function() {
9644 if ( list ) {
9645 // First, we save the current length
9646 var start = list.length;
9647 (function add( args ) {
9648 jQuery.each( args, function( _, arg ) {
9649 var type = jQuery.type( arg );
9650 if ( type === "function" ) {
9651 if ( !options.unique || !self.has( arg ) ) {
9652 list.push( arg );
9653 }
9654 } else if ( arg && arg.length && type !== "string" ) {
9655 // Inspect recursively
9656 add( arg );
9657 }
9658 });
9659 })( arguments );
9660 // Do we need to add the callbacks to the
9661 // current firing batch?
9662 if ( firing ) {
9663 firingLength = list.length;
9664 // With memory, if we're not firing then
9665 // we should call right away
9666 } else if ( memory ) {
9667 firingStart = start;
9668 fire( memory );
9669 }
9670 }
9671 return this;
9672 },
9673 // Remove a callback from the list
9674 remove: function() {
9675 if ( list ) {
9676 jQuery.each( arguments, function( _, arg ) {
9677 var index;
9678 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
9679 list.splice( index, 1 );
9680 // Handle firing indexes
9681 if ( firing ) {
9682 if ( index <= firingLength ) {
9683 firingLength--;
9684 }
9685 if ( index <= firingIndex ) {
9686 firingIndex--;
9687 }
9688 }
9689 }
9690 });
9691 }
9692 return this;
9693 },
9694 // Check if a given callback is in the list.
9695 // If no argument is given, return whether or not list has callbacks attached.
9696 has: function( fn ) {
9697 return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
9698 },
9699 // Remove all callbacks from the list
9700 empty: function() {
9701 list = [];
9702 firingLength = 0;
9703 return this;
9704 },
9705 // Have the list do nothing anymore
9706 disable: function() {
9707 list = stack = memory = undefined;
9708 return this;
9709 },
9710 // Is it disabled?
9711 disabled: function() {
9712 return !list;
9713 },
9714 // Lock the list in its current state
9715 lock: function() {
9716 stack = undefined;
9717 if ( !memory ) {
9718 self.disable();
9719 }
9720 return this;
9721 },
9722 // Is it locked?
9723 locked: function() {
9724 return !stack;
9725 },
9726 // Call all callbacks with the given context and arguments
9727 fireWith: function( context, args ) {
9728 if ( list && ( !fired || stack ) ) {
9729 args = args || [];
9730 args = [ context, args.slice ? args.slice() : args ];
9731 if ( firing ) {
9732 stack.push( args );
9733 } else {
9734 fire( args );
9735 }
9736 }
9737 return this;
9738 },
9739 // Call all the callbacks with the given arguments
9740 fire: function() {
9741 self.fireWith( this, arguments );
9742 return this;
9743 },
9744 // To know if the callbacks have already been called at least once
9745 fired: function() {
9746 return !!fired;
9747 }
9748 };
9749
9750 return self;
9751};
9752
9753
9754jQuery.extend({
9755
9756 Deferred: function( func ) {
9757 var tuples = [
9758 // action, add listener, listener list, final state
9759 [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
9760 [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
9761 [ "notify", "progress", jQuery.Callbacks("memory") ]
9762 ],
9763 state = "pending",
9764 promise = {
9765 state: function() {
9766 return state;
9767 },
9768 always: function() {
9769 deferred.done( arguments ).fail( arguments );
9770 return this;
9771 },
9772 then: function( /* fnDone, fnFail, fnProgress */ ) {
9773 var fns = arguments;
9774 return jQuery.Deferred(function( newDefer ) {
9775 jQuery.each( tuples, function( i, tuple ) {
9776 var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
9777 // deferred[ done | fail | progress ] for forwarding actions to newDefer
9778 deferred[ tuple[1] ](function() {
9779 var returned = fn && fn.apply( this, arguments );
9780 if ( returned && jQuery.isFunction( returned.promise ) ) {
9781 returned.promise()
9782 .done( newDefer.resolve )
9783 .fail( newDefer.reject )
9784 .progress( newDefer.notify );
9785 } else {
9786 newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
9787 }
9788 });
9789 });
9790 fns = null;
9791 }).promise();
9792 },
9793 // Get a promise for this deferred
9794 // If obj is provided, the promise aspect is added to the object
9795 promise: function( obj ) {
9796 return obj != null ? jQuery.extend( obj, promise ) : promise;
9797 }
9798 },
9799 deferred = {};
9800
9801 // Keep pipe for back-compat
9802 promise.pipe = promise.then;
9803
9804 // Add list-specific methods
9805 jQuery.each( tuples, function( i, tuple ) {
9806 var list = tuple[ 2 ],
9807 stateString = tuple[ 3 ];
9808
9809 // promise[ done | fail | progress ] = list.add
9810 promise[ tuple[1] ] = list.add;
9811
9812 // Handle state
9813 if ( stateString ) {
9814 list.add(function() {
9815 // state = [ resolved | rejected ]
9816 state = stateString;
9817
9818 // [ reject_list | resolve_list ].disable; progress_list.lock
9819 }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
9820 }
9821
9822 // deferred[ resolve | reject | notify ]
9823 deferred[ tuple[0] ] = function() {
9824 deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
9825 return this;
9826 };
9827 deferred[ tuple[0] + "With" ] = list.fireWith;
9828 });
9829
9830 // Make the deferred a promise
9831 promise.promise( deferred );
9832
9833 // Call given func if any
9834 if ( func ) {
9835 func.call( deferred, deferred );
9836 }
9837
9838 // All done!
9839 return deferred;
9840 },
9841
9842 // Deferred helper
9843 when: function( subordinate /* , ..., subordinateN */ ) {
9844 var i = 0,
9845 resolveValues = slice.call( arguments ),
9846 length = resolveValues.length,
9847
9848 // the count of uncompleted subordinates
9849 remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
9850
9851 // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
9852 deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
9853
9854 // Update function for both resolve and progress values
9855 updateFunc = function( i, contexts, values ) {
9856 return function( value ) {
9857 contexts[ i ] = this;
9858 values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
9859 if ( values === progressValues ) {
9860 deferred.notifyWith( contexts, values );
9861 } else if ( !( --remaining ) ) {
9862 deferred.resolveWith( contexts, values );
9863 }
9864 };
9865 },
9866
9867 progressValues, progressContexts, resolveContexts;
9868
9869 // add listeners to Deferred subordinates; treat others as resolved
9870 if ( length > 1 ) {
9871 progressValues = new Array( length );
9872 progressContexts = new Array( length );
9873 resolveContexts = new Array( length );
9874 for ( ; i < length; i++ ) {
9875 if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
9876 resolveValues[ i ].promise()
9877 .done( updateFunc( i, resolveContexts, resolveValues ) )
9878 .fail( deferred.reject )
9879 .progress( updateFunc( i, progressContexts, progressValues ) );
9880 } else {
9881 --remaining;
9882 }
9883 }
9884 }
9885
9886 // if we're not waiting on anything, resolve the master
9887 if ( !remaining ) {
9888 deferred.resolveWith( resolveContexts, resolveValues );
9889 }
9890
9891 return deferred.promise();
9892 }
9893});
9894
9895
9896// The deferred used on DOM ready
9897var readyList;
9898
9899jQuery.fn.ready = function( fn ) {
9900 // Add the callback
9901 jQuery.ready.promise().done( fn );
9902
9903 return this;
9904};
9905
9906jQuery.extend({
9907 // Is the DOM ready to be used? Set to true once it occurs.
9908 isReady: false,
9909
9910 // A counter to track how many items to wait for before
9911 // the ready event fires. See #6781
9912 readyWait: 1,
9913
9914 // Hold (or release) the ready event
9915 holdReady: function( hold ) {
9916 if ( hold ) {
9917 jQuery.readyWait++;
9918 } else {
9919 jQuery.ready( true );
9920 }
9921 },
9922
9923 // Handle when the DOM is ready
9924 ready: function( wait ) {
9925
9926 // Abort if there are pending holds or we're already ready
9927 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
9928 return;
9929 }
9930
9931 // Remember that the DOM is ready
9932 jQuery.isReady = true;
9933
9934 // If a normal DOM Ready event fired, decrement, and wait if need be
9935 if ( wait !== true && --jQuery.readyWait > 0 ) {
9936 return;
9937 }
9938
9939 // If there are functions bound, to execute
9940 readyList.resolveWith( document, [ jQuery ] );
9941
9942 // Trigger any bound ready events
9943 if ( jQuery.fn.triggerHandler ) {
9944 jQuery( document ).triggerHandler( "ready" );
9945 jQuery( document ).off( "ready" );
9946 }
9947 }
9948});
9949
9950/**
9951 * The ready event handler and self cleanup method
9952 */
9953function completed() {
9954 document.removeEventListener( "DOMContentLoaded", completed, false );
9955 window.removeEventListener( "load", completed, false );
9956 jQuery.ready();
9957}
9958
9959jQuery.ready.promise = function( obj ) {
9960 if ( !readyList ) {
9961
9962 readyList = jQuery.Deferred();
9963
9964 // Catch cases where $(document).ready() is called after the browser event has already occurred.
9965 // we once tried to use readyState "interactive" here, but it caused issues like the one
9966 // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
9967 if ( document.readyState === "complete" ) {
9968 // Handle it asynchronously to allow scripts the opportunity to delay ready
9969 setTimeout( jQuery.ready );
9970
9971 } else {
9972
9973 // Use the handy event callback
9974 document.addEventListener( "DOMContentLoaded", completed, false );
9975
9976 // A fallback to window.onload, that will always work
9977 window.addEventListener( "load", completed, false );
9978 }
9979 }
9980 return readyList.promise( obj );
9981};
9982
9983// Kick off the DOM ready check even if the user does not
9984jQuery.ready.promise();
9985
9986
9987
9988
9989// Multifunctional method to get and set values of a collection
9990// The value/s can optionally be executed if it's a function
9991var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
9992 var i = 0,
9993 len = elems.length,
9994 bulk = key == null;
9995
9996 // Sets many values
9997 if ( jQuery.type( key ) === "object" ) {
9998 chainable = true;
9999 for ( i in key ) {
10000 jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
10001 }
10002
10003 // Sets one value
10004 } else if ( value !== undefined ) {
10005 chainable = true;
10006
10007 if ( !jQuery.isFunction( value ) ) {
10008 raw = true;
10009 }
10010
10011 if ( bulk ) {
10012 // Bulk operations run against the entire set
10013 if ( raw ) {
10014 fn.call( elems, value );
10015 fn = null;
10016
10017 // ...except when executing function values
10018 } else {
10019 bulk = fn;
10020 fn = function( elem, key, value ) {
10021 return bulk.call( jQuery( elem ), value );
10022 };
10023 }
10024 }
10025
10026 if ( fn ) {
10027 for ( ; i < len; i++ ) {
10028 fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
10029 }
10030 }
10031 }
10032
10033 return chainable ?
10034 elems :
10035
10036 // Gets
10037 bulk ?
10038 fn.call( elems ) :
10039 len ? fn( elems[0], key ) : emptyGet;
10040};
10041
10042
10043/**
10044 * Determines whether an object can have data
10045 */
10046jQuery.acceptData = function( owner ) {
10047 // Accepts only:
10048 // - Node
10049 // - Node.ELEMENT_NODE
10050 // - Node.DOCUMENT_NODE
10051 // - Object
10052 // - Any
10053 /* jshint -W018 */
10054 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
10055};
10056
10057
10058function Data() {
10059 // Support: Android < 4,
10060 // Old WebKit does not have Object.preventExtensions/freeze method,
10061 // return new empty object instead with no [[set]] accessor
10062 Object.defineProperty( this.cache = {}, 0, {
10063 get: function() {
10064 return {};
10065 }
10066 });
10067
10068 this.expando = jQuery.expando + Math.random();
10069}
10070
10071Data.uid = 1;
10072Data.accepts = jQuery.acceptData;
10073
10074Data.prototype = {
10075 key: function( owner ) {
10076 // We can accept data for non-element nodes in modern browsers,
10077 // but we should not, see #8335.
10078 // Always return the key for a frozen object.
10079 if ( !Data.accepts( owner ) ) {
10080 return 0;
10081 }
10082
10083 var descriptor = {},
10084 // Check if the owner object already has a cache key
10085 unlock = owner[ this.expando ];
10086
10087 // If not, create one
10088 if ( !unlock ) {
10089 unlock = Data.uid++;
10090
10091 // Secure it in a non-enumerable, non-writable property
10092 try {
10093 descriptor[ this.expando ] = { value: unlock };
10094 Object.defineProperties( owner, descriptor );
10095
10096 // Support: Android < 4
10097 // Fallback to a less secure definition
10098 } catch ( e ) {
10099 descriptor[ this.expando ] = unlock;
10100 jQuery.extend( owner, descriptor );
10101 }
10102 }
10103
10104 // Ensure the cache object
10105 if ( !this.cache[ unlock ] ) {
10106 this.cache[ unlock ] = {};
10107 }
10108
10109 return unlock;
10110 },
10111 set: function( owner, data, value ) {
10112 var prop,
10113 // There may be an unlock assigned to this node,
10114 // if there is no entry for this "owner", create one inline
10115 // and set the unlock as though an owner entry had always existed
10116 unlock = this.key( owner ),
10117 cache = this.cache[ unlock ];
10118
10119 // Handle: [ owner, key, value ] args
10120 if ( typeof data === "string" ) {
10121 cache[ data ] = value;
10122
10123 // Handle: [ owner, { properties } ] args
10124 } else {
10125 // Fresh assignments by object are shallow copied
10126 if ( jQuery.isEmptyObject( cache ) ) {
10127 jQuery.extend( this.cache[ unlock ], data );
10128 // Otherwise, copy the properties one-by-one to the cache object
10129 } else {
10130 for ( prop in data ) {
10131 cache[ prop ] = data[ prop ];
10132 }
10133 }
10134 }
10135 return cache;
10136 },
10137 get: function( owner, key ) {
10138 // Either a valid cache is found, or will be created.
10139 // New caches will be created and the unlock returned,
10140 // allowing direct access to the newly created
10141 // empty data object. A valid owner object must be provided.
10142 var cache = this.cache[ this.key( owner ) ];
10143
10144 return key === undefined ?
10145 cache : cache[ key ];
10146 },
10147 access: function( owner, key, value ) {
10148 var stored;
10149 // In cases where either:
10150 //
10151 // 1. No key was specified
10152 // 2. A string key was specified, but no value provided
10153 //
10154 // Take the "read" path and allow the get method to determine
10155 // which value to return, respectively either:
10156 //
10157 // 1. The entire cache object
10158 // 2. The data stored at the key
10159 //
10160 if ( key === undefined ||
10161 ((key && typeof key === "string") && value === undefined) ) {
10162
10163 stored = this.get( owner, key );
10164
10165 return stored !== undefined ?
10166 stored : this.get( owner, jQuery.camelCase(key) );
10167 }
10168
10169 // [*]When the key is not a string, or both a key and value
10170 // are specified, set or extend (existing objects) with either:
10171 //
10172 // 1. An object of properties
10173 // 2. A key and value
10174 //
10175 this.set( owner, key, value );
10176
10177 // Since the "set" path can have two possible entry points
10178 // return the expected data based on which path was taken[*]
10179 return value !== undefined ? value : key;
10180 },
10181 remove: function( owner, key ) {
10182 var i, name, camel,
10183 unlock = this.key( owner ),
10184 cache = this.cache[ unlock ];
10185
10186 if ( key === undefined ) {
10187 this.cache[ unlock ] = {};
10188
10189 } else {
10190 // Support array or space separated string of keys
10191 if ( jQuery.isArray( key ) ) {
10192 // If "name" is an array of keys...
10193 // When data is initially created, via ("key", "val") signature,
10194 // keys will be converted to camelCase.
10195 // Since there is no way to tell _how_ a key was added, remove
10196 // both plain key and camelCase key. #12786
10197 // This will only penalize the array argument path.
10198 name = key.concat( key.map( jQuery.camelCase ) );
10199 } else {
10200 camel = jQuery.camelCase( key );
10201 // Try the string as a key before any manipulation
10202 if ( key in cache ) {
10203 name = [ key, camel ];
10204 } else {
10205 // If a key with the spaces exists, use it.
10206 // Otherwise, create an array by matching non-whitespace
10207 name = camel;
10208 name = name in cache ?
10209 [ name ] : ( name.match( rnotwhite ) || [] );
10210 }
10211 }
10212
10213 i = name.length;
10214 while ( i-- ) {
10215 delete cache[ name[ i ] ];
10216 }
10217 }
10218 },
10219 hasData: function( owner ) {
10220 return !jQuery.isEmptyObject(
10221 this.cache[ owner[ this.expando ] ] || {}
10222 );
10223 },
10224 discard: function( owner ) {
10225 if ( owner[ this.expando ] ) {
10226 delete this.cache[ owner[ this.expando ] ];
10227 }
10228 }
10229};
10230var data_priv = new Data();
10231
10232var data_user = new Data();
10233
10234
10235
10236/*
10237 Implementation Summary
10238
10239 1. Enforce API surface and semantic compatibility with 1.9.x branch
10240 2. Improve the module's maintainability by reducing the storage
10241 paths to a single mechanism.
10242 3. Use the same single mechanism to support "private" and "user" data.
10243 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
10244 5. Avoid exposing implementation details on user objects (eg. expando properties)
10245 6. Provide a clear path for implementation upgrade to WeakMap in 2014
10246*/
10247var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
10248 rmultiDash = /([A-Z])/g;
10249
10250function dataAttr( elem, key, data ) {
10251 var name;
10252
10253 // If nothing was found internally, try to fetch any
10254 // data from the HTML5 data-* attribute
10255 if ( data === undefined && elem.nodeType === 1 ) {
10256 name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
10257 data = elem.getAttribute( name );
10258
10259 if ( typeof data === "string" ) {
10260 try {
10261 data = data === "true" ? true :
10262 data === "false" ? false :
10263 data === "null" ? null :
10264 // Only convert to a number if it doesn't change the string
10265 +data + "" === data ? +data :
10266 rbrace.test( data ) ? jQuery.parseJSON( data ) :
10267 data;
10268 } catch( e ) {}
10269
10270 // Make sure we set the data so it isn't changed later
10271 data_user.set( elem, key, data );
10272 } else {
10273 data = undefined;
10274 }
10275 }
10276 return data;
10277}
10278
10279jQuery.extend({
10280 hasData: function( elem ) {
10281 return data_user.hasData( elem ) || data_priv.hasData( elem );
10282 },
10283
10284 data: function( elem, name, data ) {
10285 return data_user.access( elem, name, data );
10286 },
10287
10288 removeData: function( elem, name ) {
10289 data_user.remove( elem, name );
10290 },
10291
10292 // TODO: Now that all calls to _data and _removeData have been replaced
10293 // with direct calls to data_priv methods, these can be deprecated.
10294 _data: function( elem, name, data ) {
10295 return data_priv.access( elem, name, data );
10296 },
10297
10298 _removeData: function( elem, name ) {
10299 data_priv.remove( elem, name );
10300 }
10301});
10302
10303jQuery.fn.extend({
10304 data: function( key, value ) {
10305 var i, name, data,
10306 elem = this[ 0 ],
10307 attrs = elem && elem.attributes;
10308
10309 // Gets all values
10310 if ( key === undefined ) {
10311 if ( this.length ) {
10312 data = data_user.get( elem );
10313
10314 if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
10315 i = attrs.length;
10316 while ( i-- ) {
10317
10318 // Support: IE11+
10319 // The attrs elements can be null (#14894)
10320 if ( attrs[ i ] ) {
10321 name = attrs[ i ].name;
10322 if ( name.indexOf( "data-" ) === 0 ) {
10323 name = jQuery.camelCase( name.slice(5) );
10324 dataAttr( elem, name, data[ name ] );
10325 }
10326 }
10327 }
10328 data_priv.set( elem, "hasDataAttrs", true );
10329 }
10330 }
10331
10332 return data;
10333 }
10334
10335 // Sets multiple values
10336 if ( typeof key === "object" ) {
10337 return this.each(function() {
10338 data_user.set( this, key );
10339 });
10340 }
10341
10342 return access( this, function( value ) {
10343 var data,
10344 camelKey = jQuery.camelCase( key );
10345
10346 // The calling jQuery object (element matches) is not empty
10347 // (and therefore has an element appears at this[ 0 ]) and the
10348 // `value` parameter was not undefined. An empty jQuery object
10349 // will result in `undefined` for elem = this[ 0 ] which will
10350 // throw an exception if an attempt to read a data cache is made.
10351 if ( elem && value === undefined ) {
10352 // Attempt to get data from the cache
10353 // with the key as-is
10354 data = data_user.get( elem, key );
10355 if ( data !== undefined ) {
10356 return data;
10357 }
10358
10359 // Attempt to get data from the cache
10360 // with the key camelized
10361 data = data_user.get( elem, camelKey );
10362 if ( data !== undefined ) {
10363 return data;
10364 }
10365
10366 // Attempt to "discover" the data in
10367 // HTML5 custom data-* attrs
10368 data = dataAttr( elem, camelKey, undefined );
10369 if ( data !== undefined ) {
10370 return data;
10371 }
10372
10373 // We tried really hard, but the data doesn't exist.
10374 return;
10375 }
10376
10377 // Set the data...
10378 this.each(function() {
10379 // First, attempt to store a copy or reference of any
10380 // data that might've been store with a camelCased key.
10381 var data = data_user.get( this, camelKey );
10382
10383 // For HTML5 data-* attribute interop, we have to
10384 // store property names with dashes in a camelCase form.
10385 // This might not apply to all properties...*
10386 data_user.set( this, camelKey, value );
10387
10388 // *... In the case of properties that might _actually_
10389 // have dashes, we need to also store a copy of that
10390 // unchanged property.
10391 if ( key.indexOf("-") !== -1 && data !== undefined ) {
10392 data_user.set( this, key, value );
10393 }
10394 });
10395 }, null, value, arguments.length > 1, null, true );
10396 },
10397
10398 removeData: function( key ) {
10399 return this.each(function() {
10400 data_user.remove( this, key );
10401 });
10402 }
10403});
10404
10405
10406jQuery.extend({
10407 queue: function( elem, type, data ) {
10408 var queue;
10409
10410 if ( elem ) {
10411 type = ( type || "fx" ) + "queue";
10412 queue = data_priv.get( elem, type );
10413
10414 // Speed up dequeue by getting out quickly if this is just a lookup
10415 if ( data ) {
10416 if ( !queue || jQuery.isArray( data ) ) {
10417 queue = data_priv.access( elem, type, jQuery.makeArray(data) );
10418 } else {
10419 queue.push( data );
10420 }
10421 }
10422 return queue || [];
10423 }
10424 },
10425
10426 dequeue: function( elem, type ) {
10427 type = type || "fx";
10428
10429 var queue = jQuery.queue( elem, type ),
10430 startLength = queue.length,
10431 fn = queue.shift(),
10432 hooks = jQuery._queueHooks( elem, type ),
10433 next = function() {
10434 jQuery.dequeue( elem, type );
10435 };
10436
10437 // If the fx queue is dequeued, always remove the progress sentinel
10438 if ( fn === "inprogress" ) {
10439 fn = queue.shift();
10440 startLength--;
10441 }
10442
10443 if ( fn ) {
10444
10445 // Add a progress sentinel to prevent the fx queue from being
10446 // automatically dequeued
10447 if ( type === "fx" ) {
10448 queue.unshift( "inprogress" );
10449 }
10450
10451 // clear up the last queue stop function
10452 delete hooks.stop;
10453 fn.call( elem, next, hooks );
10454 }
10455
10456 if ( !startLength && hooks ) {
10457 hooks.empty.fire();
10458 }
10459 },
10460
10461 // not intended for public consumption - generates a queueHooks object, or returns the current one
10462 _queueHooks: function( elem, type ) {
10463 var key = type + "queueHooks";
10464 return data_priv.get( elem, key ) || data_priv.access( elem, key, {
10465 empty: jQuery.Callbacks("once memory").add(function() {
10466 data_priv.remove( elem, [ type + "queue", key ] );
10467 })
10468 });
10469 }
10470});
10471
10472jQuery.fn.extend({
10473 queue: function( type, data ) {
10474 var setter = 2;
10475
10476 if ( typeof type !== "string" ) {
10477 data = type;
10478 type = "fx";
10479 setter--;
10480 }
10481
10482 if ( arguments.length < setter ) {
10483 return jQuery.queue( this[0], type );
10484 }
10485
10486 return data === undefined ?
10487 this :
10488 this.each(function() {
10489 var queue = jQuery.queue( this, type, data );
10490
10491 // ensure a hooks for this queue
10492 jQuery._queueHooks( this, type );
10493
10494 if ( type === "fx" && queue[0] !== "inprogress" ) {
10495 jQuery.dequeue( this, type );
10496 }
10497 });
10498 },
10499 dequeue: function( type ) {
10500 return this.each(function() {
10501 jQuery.dequeue( this, type );
10502 });
10503 },
10504 clearQueue: function( type ) {
10505 return this.queue( type || "fx", [] );
10506 },
10507 // Get a promise resolved when queues of a certain type
10508 // are emptied (fx is the type by default)
10509 promise: function( type, obj ) {
10510 var tmp,
10511 count = 1,
10512 defer = jQuery.Deferred(),
10513 elements = this,
10514 i = this.length,
10515 resolve = function() {
10516 if ( !( --count ) ) {
10517 defer.resolveWith( elements, [ elements ] );
10518 }
10519 };
10520
10521 if ( typeof type !== "string" ) {
10522 obj = type;
10523 type = undefined;
10524 }
10525 type = type || "fx";
10526
10527 while ( i-- ) {
10528 tmp = data_priv.get( elements[ i ], type + "queueHooks" );
10529 if ( tmp && tmp.empty ) {
10530 count++;
10531 tmp.empty.add( resolve );
10532 }
10533 }
10534 resolve();
10535 return defer.promise( obj );
10536 }
10537});
10538var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
10539
10540var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
10541
10542var isHidden = function( elem, el ) {
10543 // isHidden might be called from jQuery#filter function;
10544 // in that case, element will be second argument
10545 elem = el || elem;
10546 return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
10547 };
10548
10549var rcheckableType = (/^(?:checkbox|radio)$/i);
10550
10551
10552
10553(function() {
10554 var fragment = document.createDocumentFragment(),
10555 div = fragment.appendChild( document.createElement( "div" ) ),
10556 input = document.createElement( "input" );
10557
10558 // #11217 - WebKit loses check when the name is after the checked attribute
10559 // Support: Windows Web Apps (WWA)
10560 // `name` and `type` need .setAttribute for WWA
10561 input.setAttribute( "type", "radio" );
10562 input.setAttribute( "checked", "checked" );
10563 input.setAttribute( "name", "t" );
10564
10565 div.appendChild( input );
10566
10567 // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
10568 // old WebKit doesn't clone checked state correctly in fragments
10569 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
10570
10571 // Make sure textarea (and checkbox) defaultValue is properly cloned
10572 // Support: IE9-IE11+
10573 div.innerHTML = "<textarea>x</textarea>";
10574 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
10575})();
10576var strundefined = typeof undefined;
10577
10578
10579
10580support.focusinBubbles = "onfocusin" in window;
10581
10582
10583var
10584 rkeyEvent = /^key/,
10585 rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
10586 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
10587 rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
10588
10589function returnTrue() {
10590 return true;
10591}
10592
10593function returnFalse() {
10594 return false;
10595}
10596
10597function safeActiveElement() {
10598 try {
10599 return document.activeElement;
10600 } catch ( err ) { }
10601}
10602
10603/*
10604 * Helper functions for managing events -- not part of the public interface.
10605 * Props to Dean Edwards' addEvent library for many of the ideas.
10606 */
10607jQuery.event = {
10608
10609 global: {},
10610
10611 add: function( elem, types, handler, data, selector ) {
10612
10613 var handleObjIn, eventHandle, tmp,
10614 events, t, handleObj,
10615 special, handlers, type, namespaces, origType,
10616 elemData = data_priv.get( elem );
10617
10618 // Don't attach events to noData or text/comment nodes (but allow plain objects)
10619 if ( !elemData ) {
10620 return;
10621 }
10622
10623 // Caller can pass in an object of custom data in lieu of the handler
10624 if ( handler.handler ) {
10625 handleObjIn = handler;
10626 handler = handleObjIn.handler;
10627 selector = handleObjIn.selector;
10628 }
10629
10630 // Make sure that the handler has a unique ID, used to find/remove it later
10631 if ( !handler.guid ) {
10632 handler.guid = jQuery.guid++;
10633 }
10634
10635 // Init the element's event structure and main handler, if this is the first
10636 if ( !(events = elemData.events) ) {
10637 events = elemData.events = {};
10638 }
10639 if ( !(eventHandle = elemData.handle) ) {
10640 eventHandle = elemData.handle = function( e ) {
10641 // Discard the second event of a jQuery.event.trigger() and
10642 // when an event is called after a page has unloaded
10643 return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
10644 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
10645 };
10646 }
10647
10648 // Handle multiple events separated by a space
10649 types = ( types || "" ).match( rnotwhite ) || [ "" ];
10650 t = types.length;
10651 while ( t-- ) {
10652 tmp = rtypenamespace.exec( types[t] ) || [];
10653 type = origType = tmp[1];
10654 namespaces = ( tmp[2] || "" ).split( "." ).sort();
10655
10656 // There *must* be a type, no attaching namespace-only handlers
10657 if ( !type ) {
10658 continue;
10659 }
10660
10661 // If event changes its type, use the special event handlers for the changed type
10662 special = jQuery.event.special[ type ] || {};
10663
10664 // If selector defined, determine special event api type, otherwise given type
10665 type = ( selector ? special.delegateType : special.bindType ) || type;
10666
10667 // Update special based on newly reset type
10668 special = jQuery.event.special[ type ] || {};
10669
10670 // handleObj is passed to all event handlers
10671 handleObj = jQuery.extend({
10672 type: type,
10673 origType: origType,
10674 data: data,
10675 handler: handler,
10676 guid: handler.guid,
10677 selector: selector,
10678 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
10679 namespace: namespaces.join(".")
10680 }, handleObjIn );
10681
10682 // Init the event handler queue if we're the first
10683 if ( !(handlers = events[ type ]) ) {
10684 handlers = events[ type ] = [];
10685 handlers.delegateCount = 0;
10686
10687 // Only use addEventListener if the special events handler returns false
10688 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
10689 if ( elem.addEventListener ) {
10690 elem.addEventListener( type, eventHandle, false );
10691 }
10692 }
10693 }
10694
10695 if ( special.add ) {
10696 special.add.call( elem, handleObj );
10697
10698 if ( !handleObj.handler.guid ) {
10699 handleObj.handler.guid = handler.guid;
10700 }
10701 }
10702
10703 // Add to the element's handler list, delegates in front
10704 if ( selector ) {
10705 handlers.splice( handlers.delegateCount++, 0, handleObj );
10706 } else {
10707 handlers.push( handleObj );
10708 }
10709
10710 // Keep track of which events have ever been used, for event optimization
10711 jQuery.event.global[ type ] = true;
10712 }
10713
10714 },
10715
10716 // Detach an event or set of events from an element
10717 remove: function( elem, types, handler, selector, mappedTypes ) {
10718
10719 var j, origCount, tmp,
10720 events, t, handleObj,
10721 special, handlers, type, namespaces, origType,
10722 elemData = data_priv.hasData( elem ) && data_priv.get( elem );
10723
10724 if ( !elemData || !(events = elemData.events) ) {
10725 return;
10726 }
10727
10728 // Once for each type.namespace in types; type may be omitted
10729 types = ( types || "" ).match( rnotwhite ) || [ "" ];
10730 t = types.length;
10731 while ( t-- ) {
10732 tmp = rtypenamespace.exec( types[t] ) || [];
10733 type = origType = tmp[1];
10734 namespaces = ( tmp[2] || "" ).split( "." ).sort();
10735
10736 // Unbind all events (on this namespace, if provided) for the element
10737 if ( !type ) {
10738 for ( type in events ) {
10739 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
10740 }
10741 continue;
10742 }
10743
10744 special = jQuery.event.special[ type ] || {};
10745 type = ( selector ? special.delegateType : special.bindType ) || type;
10746 handlers = events[ type ] || [];
10747 tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
10748
10749 // Remove matching events
10750 origCount = j = handlers.length;
10751 while ( j-- ) {
10752 handleObj = handlers[ j ];
10753
10754 if ( ( mappedTypes || origType === handleObj.origType ) &&
10755 ( !handler || handler.guid === handleObj.guid ) &&
10756 ( !tmp || tmp.test( handleObj.namespace ) ) &&
10757 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
10758 handlers.splice( j, 1 );
10759
10760 if ( handleObj.selector ) {
10761 handlers.delegateCount--;
10762 }
10763 if ( special.remove ) {
10764 special.remove.call( elem, handleObj );
10765 }
10766 }
10767 }
10768
10769 // Remove generic event handler if we removed something and no more handlers exist
10770 // (avoids potential for endless recursion during removal of special event handlers)
10771 if ( origCount && !handlers.length ) {
10772 if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
10773 jQuery.removeEvent( elem, type, elemData.handle );
10774 }
10775
10776 delete events[ type ];
10777 }
10778 }
10779
10780 // Remove the expando if it's no longer used
10781 if ( jQuery.isEmptyObject( events ) ) {
10782 delete elemData.handle;
10783 data_priv.remove( elem, "events" );
10784 }
10785 },
10786
10787 trigger: function( event, data, elem, onlyHandlers ) {
10788
10789 var i, cur, tmp, bubbleType, ontype, handle, special,
10790 eventPath = [ elem || document ],
10791 type = hasOwn.call( event, "type" ) ? event.type : event,
10792 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
10793
10794 cur = tmp = elem = elem || document;
10795
10796 // Don't do events on text and comment nodes
10797 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
10798 return;
10799 }
10800
10801 // focus/blur morphs to focusin/out; ensure we're not firing them right now
10802 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
10803 return;
10804 }
10805
10806 if ( type.indexOf(".") >= 0 ) {
10807 // Namespaced trigger; create a regexp to match event type in handle()
10808 namespaces = type.split(".");
10809 type = namespaces.shift();
10810 namespaces.sort();
10811 }
10812 ontype = type.indexOf(":") < 0 && "on" + type;
10813
10814 // Caller can pass in a jQuery.Event object, Object, or just an event type string
10815 event = event[ jQuery.expando ] ?
10816 event :
10817 new jQuery.Event( type, typeof event === "object" && event );
10818
10819 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
10820 event.isTrigger = onlyHandlers ? 2 : 3;
10821 event.namespace = namespaces.join(".");
10822 event.namespace_re = event.namespace ?
10823 new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
10824 null;
10825
10826 // Clean up the event in case it is being reused
10827 event.result = undefined;
10828 if ( !event.target ) {
10829 event.target = elem;
10830 }
10831
10832 // Clone any incoming data and prepend the event, creating the handler arg list
10833 data = data == null ?
10834 [ event ] :
10835 jQuery.makeArray( data, [ event ] );
10836
10837 // Allow special events to draw outside the lines
10838 special = jQuery.event.special[ type ] || {};
10839 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
10840 return;
10841 }
10842
10843 // Determine event propagation path in advance, per W3C events spec (#9951)
10844 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
10845 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
10846
10847 bubbleType = special.delegateType || type;
10848 if ( !rfocusMorph.test( bubbleType + type ) ) {
10849 cur = cur.parentNode;
10850 }
10851 for ( ; cur; cur = cur.parentNode ) {
10852 eventPath.push( cur );
10853 tmp = cur;
10854 }
10855
10856 // Only add window if we got to document (e.g., not plain obj or detached DOM)
10857 if ( tmp === (elem.ownerDocument || document) ) {
10858 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
10859 }
10860 }
10861
10862 // Fire handlers on the event path
10863 i = 0;
10864 while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
10865
10866 event.type = i > 1 ?
10867 bubbleType :
10868 special.bindType || type;
10869
10870 // jQuery handler
10871 handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
10872 if ( handle ) {
10873 handle.apply( cur, data );
10874 }
10875
10876 // Native handler
10877 handle = ontype && cur[ ontype ];
10878 if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
10879 event.result = handle.apply( cur, data );
10880 if ( event.result === false ) {
10881 event.preventDefault();
10882 }
10883 }
10884 }
10885 event.type = type;
10886
10887 // If nobody prevented the default action, do it now
10888 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
10889
10890 if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
10891 jQuery.acceptData( elem ) ) {
10892
10893 // Call a native DOM method on the target with the same name name as the event.
10894 // Don't do default actions on window, that's where global variables be (#6170)
10895 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
10896
10897 // Don't re-trigger an onFOO event when we call its FOO() method
10898 tmp = elem[ ontype ];
10899
10900 if ( tmp ) {
10901 elem[ ontype ] = null;
10902 }
10903
10904 // Prevent re-triggering of the same event, since we already bubbled it above
10905 jQuery.event.triggered = type;
10906 elem[ type ]();
10907 jQuery.event.triggered = undefined;
10908
10909 if ( tmp ) {
10910 elem[ ontype ] = tmp;
10911 }
10912 }
10913 }
10914 }
10915
10916 return event.result;
10917 },
10918
10919 dispatch: function( event ) {
10920
10921 // Make a writable jQuery.Event from the native event object
10922 event = jQuery.event.fix( event );
10923
10924 var i, j, ret, matched, handleObj,
10925 handlerQueue = [],
10926 args = slice.call( arguments ),
10927 handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
10928 special = jQuery.event.special[ event.type ] || {};
10929
10930 // Use the fix-ed jQuery.Event rather than the (read-only) native event
10931 args[0] = event;
10932 event.delegateTarget = this;
10933
10934 // Call the preDispatch hook for the mapped type, and let it bail if desired
10935 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
10936 return;
10937 }
10938
10939 // Determine handlers
10940 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
10941
10942 // Run delegates first; they may want to stop propagation beneath us
10943 i = 0;
10944 while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
10945 event.currentTarget = matched.elem;
10946
10947 j = 0;
10948 while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
10949
10950 // Triggered event must either 1) have no namespace, or
10951 // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
10952 if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
10953
10954 event.handleObj = handleObj;
10955 event.data = handleObj.data;
10956
10957 ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
10958 .apply( matched.elem, args );
10959
10960 if ( ret !== undefined ) {
10961 if ( (event.result = ret) === false ) {
10962 event.preventDefault();
10963 event.stopPropagation();
10964 }
10965 }
10966 }
10967 }
10968 }
10969
10970 // Call the postDispatch hook for the mapped type
10971 if ( special.postDispatch ) {
10972 special.postDispatch.call( this, event );
10973 }
10974
10975 return event.result;
10976 },
10977
10978 handlers: function( event, handlers ) {
10979 var i, matches, sel, handleObj,
10980 handlerQueue = [],
10981 delegateCount = handlers.delegateCount,
10982 cur = event.target;
10983
10984 // Find delegate handlers
10985 // Black-hole SVG <use> instance trees (#13180)
10986 // Avoid non-left-click bubbling in Firefox (#3861)
10987 if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
10988
10989 for ( ; cur !== this; cur = cur.parentNode || this ) {
10990
10991 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
10992 if ( cur.disabled !== true || event.type !== "click" ) {
10993 matches = [];
10994 for ( i = 0; i < delegateCount; i++ ) {
10995 handleObj = handlers[ i ];
10996
10997 // Don't conflict with Object.prototype properties (#13203)
10998 sel = handleObj.selector + " ";
10999
11000 if ( matches[ sel ] === undefined ) {
11001 matches[ sel ] = handleObj.needsContext ?
11002 jQuery( sel, this ).index( cur ) >= 0 :
11003 jQuery.find( sel, this, null, [ cur ] ).length;
11004 }
11005 if ( matches[ sel ] ) {
11006 matches.push( handleObj );
11007 }
11008 }
11009 if ( matches.length ) {
11010 handlerQueue.push({ elem: cur, handlers: matches });
11011 }
11012 }
11013 }
11014 }
11015
11016 // Add the remaining (directly-bound) handlers
11017 if ( delegateCount < handlers.length ) {
11018 handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
11019 }
11020
11021 return handlerQueue;
11022 },
11023
11024 // Includes some event props shared by KeyEvent and MouseEvent
11025 props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
11026
11027 fixHooks: {},
11028
11029 keyHooks: {
11030 props: "char charCode key keyCode".split(" "),
11031 filter: function( event, original ) {
11032
11033 // Add which for key events
11034 if ( event.which == null ) {
11035 event.which = original.charCode != null ? original.charCode : original.keyCode;
11036 }
11037
11038 return event;
11039 }
11040 },
11041
11042 mouseHooks: {
11043 props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
11044 filter: function( event, original ) {
11045 var eventDoc, doc, body,
11046 button = original.button;
11047
11048 // Calculate pageX/Y if missing and clientX/Y available
11049 if ( event.pageX == null && original.clientX != null ) {
11050 eventDoc = event.target.ownerDocument || document;
11051 doc = eventDoc.documentElement;
11052 body = eventDoc.body;
11053
11054 event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
11055 event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
11056 }
11057
11058 // Add which for click: 1 === left; 2 === middle; 3 === right
11059 // Note: button is not normalized, so don't use it
11060 if ( !event.which && button !== undefined ) {
11061 event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
11062 }
11063
11064 return event;
11065 }
11066 },
11067
11068 fix: function( event ) {
11069 if ( event[ jQuery.expando ] ) {
11070 return event;
11071 }
11072
11073 // Create a writable copy of the event object and normalize some properties
11074 var i, prop, copy,
11075 type = event.type,
11076 originalEvent = event,
11077 fixHook = this.fixHooks[ type ];
11078
11079 if ( !fixHook ) {
11080 this.fixHooks[ type ] = fixHook =
11081 rmouseEvent.test( type ) ? this.mouseHooks :
11082 rkeyEvent.test( type ) ? this.keyHooks :
11083 {};
11084 }
11085 copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
11086
11087 event = new jQuery.Event( originalEvent );
11088
11089 i = copy.length;
11090 while ( i-- ) {
11091 prop = copy[ i ];
11092 event[ prop ] = originalEvent[ prop ];
11093 }
11094
11095 // Support: Cordova 2.5 (WebKit) (#13255)
11096 // All events should have a target; Cordova deviceready doesn't
11097 if ( !event.target ) {
11098 event.target = document;
11099 }
11100
11101 // Support: Safari 6.0+, Chrome < 28
11102 // Target should not be a text node (#504, #13143)
11103 if ( event.target.nodeType === 3 ) {
11104 event.target = event.target.parentNode;
11105 }
11106
11107 return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
11108 },
11109
11110 special: {
11111 load: {
11112 // Prevent triggered image.load events from bubbling to window.load
11113 noBubble: true
11114 },
11115 focus: {
11116 // Fire native event if possible so blur/focus sequence is correct
11117 trigger: function() {
11118 if ( this !== safeActiveElement() && this.focus ) {
11119 this.focus();
11120 return false;
11121 }
11122 },
11123 delegateType: "focusin"
11124 },
11125 blur: {
11126 trigger: function() {
11127 if ( this === safeActiveElement() && this.blur ) {
11128 this.blur();
11129 return false;
11130 }
11131 },
11132 delegateType: "focusout"
11133 },
11134 click: {
11135 // For checkbox, fire native event so checked state will be right
11136 trigger: function() {
11137 if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
11138 this.click();
11139 return false;
11140 }
11141 },
11142
11143 // For cross-browser consistency, don't fire native .click() on links
11144 _default: function( event ) {
11145 return jQuery.nodeName( event.target, "a" );
11146 }
11147 },
11148
11149 beforeunload: {
11150 postDispatch: function( event ) {
11151
11152 // Support: Firefox 20+
11153 // Firefox doesn't alert if the returnValue field is not set.
11154 if ( event.result !== undefined && event.originalEvent ) {
11155 event.originalEvent.returnValue = event.result;
11156 }
11157 }
11158 }
11159 },
11160
11161 simulate: function( type, elem, event, bubble ) {
11162 // Piggyback on a donor event to simulate a different one.
11163 // Fake originalEvent to avoid donor's stopPropagation, but if the
11164 // simulated event prevents default then we do the same on the donor.
11165 var e = jQuery.extend(
11166 new jQuery.Event(),
11167 event,
11168 {
11169 type: type,
11170 isSimulated: true,
11171 originalEvent: {}
11172 }
11173 );
11174 if ( bubble ) {
11175 jQuery.event.trigger( e, null, elem );
11176 } else {
11177 jQuery.event.dispatch.call( elem, e );
11178 }
11179 if ( e.isDefaultPrevented() ) {
11180 event.preventDefault();
11181 }
11182 }
11183};
11184
11185jQuery.removeEvent = function( elem, type, handle ) {
11186 if ( elem.removeEventListener ) {
11187 elem.removeEventListener( type, handle, false );
11188 }
11189};
11190
11191jQuery.Event = function( src, props ) {
11192 // Allow instantiation without the 'new' keyword
11193 if ( !(this instanceof jQuery.Event) ) {
11194 return new jQuery.Event( src, props );
11195 }
11196
11197 // Event object
11198 if ( src && src.type ) {
11199 this.originalEvent = src;
11200 this.type = src.type;
11201
11202 // Events bubbling up the document may have been marked as prevented
11203 // by a handler lower down the tree; reflect the correct value.
11204 this.isDefaultPrevented = src.defaultPrevented ||
11205 src.defaultPrevented === undefined &&
11206 // Support: Android < 4.0
11207 src.returnValue === false ?
11208 returnTrue :
11209 returnFalse;
11210
11211 // Event type
11212 } else {
11213 this.type = src;
11214 }
11215
11216 // Put explicitly provided properties onto the event object
11217 if ( props ) {
11218 jQuery.extend( this, props );
11219 }
11220
11221 // Create a timestamp if incoming event doesn't have one
11222 this.timeStamp = src && src.timeStamp || jQuery.now();
11223
11224 // Mark it as fixed
11225 this[ jQuery.expando ] = true;
11226};
11227
11228// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
11229// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
11230jQuery.Event.prototype = {
11231 isDefaultPrevented: returnFalse,
11232 isPropagationStopped: returnFalse,
11233 isImmediatePropagationStopped: returnFalse,
11234
11235 preventDefault: function() {
11236 var e = this.originalEvent;
11237
11238 this.isDefaultPrevented = returnTrue;
11239
11240 if ( e && e.preventDefault ) {
11241 e.preventDefault();
11242 }
11243 },
11244 stopPropagation: function() {
11245 var e = this.originalEvent;
11246
11247 this.isPropagationStopped = returnTrue;
11248
11249 if ( e && e.stopPropagation ) {
11250 e.stopPropagation();
11251 }
11252 },
11253 stopImmediatePropagation: function() {
11254 var e = this.originalEvent;
11255
11256 this.isImmediatePropagationStopped = returnTrue;
11257
11258 if ( e && e.stopImmediatePropagation ) {
11259 e.stopImmediatePropagation();
11260 }
11261
11262 this.stopPropagation();
11263 }
11264};
11265
11266// Create mouseenter/leave events using mouseover/out and event-time checks
11267// Support: Chrome 15+
11268jQuery.each({
11269 mouseenter: "mouseover",
11270 mouseleave: "mouseout",
11271 pointerenter: "pointerover",
11272 pointerleave: "pointerout"
11273}, function( orig, fix ) {
11274 jQuery.event.special[ orig ] = {
11275 delegateType: fix,
11276 bindType: fix,
11277
11278 handle: function( event ) {
11279 var ret,
11280 target = this,
11281 related = event.relatedTarget,
11282 handleObj = event.handleObj;
11283
11284 // For mousenter/leave call the handler if related is outside the target.
11285 // NB: No relatedTarget if the mouse left/entered the browser window
11286 if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
11287 event.type = handleObj.origType;
11288 ret = handleObj.handler.apply( this, arguments );
11289 event.type = fix;
11290 }
11291 return ret;
11292 }
11293 };
11294});
11295
11296// Create "bubbling" focus and blur events
11297// Support: Firefox, Chrome, Safari
11298if ( !support.focusinBubbles ) {
11299 jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
11300
11301 // Attach a single capturing handler on the document while someone wants focusin/focusout
11302 var handler = function( event ) {
11303 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
11304 };
11305
11306 jQuery.event.special[ fix ] = {
11307 setup: function() {
11308 var doc = this.ownerDocument || this,
11309 attaches = data_priv.access( doc, fix );
11310
11311 if ( !attaches ) {
11312 doc.addEventListener( orig, handler, true );
11313 }
11314 data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
11315 },
11316 teardown: function() {
11317 var doc = this.ownerDocument || this,
11318 attaches = data_priv.access( doc, fix ) - 1;
11319
11320 if ( !attaches ) {
11321 doc.removeEventListener( orig, handler, true );
11322 data_priv.remove( doc, fix );
11323
11324 } else {
11325 data_priv.access( doc, fix, attaches );
11326 }
11327 }
11328 };
11329 });
11330}
11331
11332jQuery.fn.extend({
11333
11334 on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
11335 var origFn, type;
11336
11337 // Types can be a map of types/handlers
11338 if ( typeof types === "object" ) {
11339 // ( types-Object, selector, data )
11340 if ( typeof selector !== "string" ) {
11341 // ( types-Object, data )
11342 data = data || selector;
11343 selector = undefined;
11344 }
11345 for ( type in types ) {
11346 this.on( type, selector, data, types[ type ], one );
11347 }
11348 return this;
11349 }
11350
11351 if ( data == null && fn == null ) {
11352 // ( types, fn )
11353 fn = selector;
11354 data = selector = undefined;
11355 } else if ( fn == null ) {
11356 if ( typeof selector === "string" ) {
11357 // ( types, selector, fn )
11358 fn = data;
11359 data = undefined;
11360 } else {
11361 // ( types, data, fn )
11362 fn = data;
11363 data = selector;
11364 selector = undefined;
11365 }
11366 }
11367 if ( fn === false ) {
11368 fn = returnFalse;
11369 } else if ( !fn ) {
11370 return this;
11371 }
11372
11373 if ( one === 1 ) {
11374 origFn = fn;
11375 fn = function( event ) {
11376 // Can use an empty set, since event contains the info
11377 jQuery().off( event );
11378 return origFn.apply( this, arguments );
11379 };
11380 // Use same guid so caller can remove using origFn
11381 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
11382 }
11383 return this.each( function() {
11384 jQuery.event.add( this, types, fn, data, selector );
11385 });
11386 },
11387 one: function( types, selector, data, fn ) {
11388 return this.on( types, selector, data, fn, 1 );
11389 },
11390 off: function( types, selector, fn ) {
11391 var handleObj, type;
11392 if ( types && types.preventDefault && types.handleObj ) {
11393 // ( event ) dispatched jQuery.Event
11394 handleObj = types.handleObj;
11395 jQuery( types.delegateTarget ).off(
11396 handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
11397 handleObj.selector,
11398 handleObj.handler
11399 );
11400 return this;
11401 }
11402 if ( typeof types === "object" ) {
11403 // ( types-object [, selector] )
11404 for ( type in types ) {
11405 this.off( type, selector, types[ type ] );
11406 }
11407 return this;
11408 }
11409 if ( selector === false || typeof selector === "function" ) {
11410 // ( types [, fn] )
11411 fn = selector;
11412 selector = undefined;
11413 }
11414 if ( fn === false ) {
11415 fn = returnFalse;
11416 }
11417 return this.each(function() {
11418 jQuery.event.remove( this, types, fn, selector );
11419 });
11420 },
11421
11422 trigger: function( type, data ) {
11423 return this.each(function() {
11424 jQuery.event.trigger( type, data, this );
11425 });
11426 },
11427 triggerHandler: function( type, data ) {
11428 var elem = this[0];
11429 if ( elem ) {
11430 return jQuery.event.trigger( type, data, elem, true );
11431 }
11432 }
11433});
11434
11435
11436var
11437 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
11438 rtagName = /<([\w:]+)/,
11439 rhtml = /<|&#?\w+;/,
11440 rnoInnerhtml = /<(?:script|style|link)/i,
11441 // checked="checked" or checked
11442 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
11443 rscriptType = /^$|\/(?:java|ecma)script/i,
11444 rscriptTypeMasked = /^true\/(.*)/,
11445 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
11446
11447 // We have to close these tags to support XHTML (#13200)
11448 wrapMap = {
11449
11450 // Support: IE 9
11451 option: [ 1, "<select multiple='multiple'>", "</select>" ],
11452
11453 thead: [ 1, "<table>", "</table>" ],
11454 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
11455 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
11456 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
11457
11458 _default: [ 0, "", "" ]
11459 };
11460
11461// Support: IE 9
11462wrapMap.optgroup = wrapMap.option;
11463
11464wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
11465wrapMap.th = wrapMap.td;
11466
11467// Support: 1.x compatibility
11468// Manipulating tables requires a tbody
11469function manipulationTarget( elem, content ) {
11470 return jQuery.nodeName( elem, "table" ) &&
11471 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
11472
11473 elem.getElementsByTagName("tbody")[0] ||
11474 elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
11475 elem;
11476}
11477
11478// Replace/restore the type attribute of script elements for safe DOM manipulation
11479function disableScript( elem ) {
11480 elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
11481 return elem;
11482}
11483function restoreScript( elem ) {
11484 var match = rscriptTypeMasked.exec( elem.type );
11485
11486 if ( match ) {
11487 elem.type = match[ 1 ];
11488 } else {
11489 elem.removeAttribute("type");
11490 }
11491
11492 return elem;
11493}
11494
11495// Mark scripts as having already been evaluated
11496function setGlobalEval( elems, refElements ) {
11497 var i = 0,
11498 l = elems.length;
11499
11500 for ( ; i < l; i++ ) {
11501 data_priv.set(
11502 elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
11503 );
11504 }
11505}
11506
11507function cloneCopyEvent( src, dest ) {
11508 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
11509
11510 if ( dest.nodeType !== 1 ) {
11511 return;
11512 }
11513
11514 // 1. Copy private data: events, handlers, etc.
11515 if ( data_priv.hasData( src ) ) {
11516 pdataOld = data_priv.access( src );
11517 pdataCur = data_priv.set( dest, pdataOld );
11518 events = pdataOld.events;
11519
11520 if ( events ) {
11521 delete pdataCur.handle;
11522 pdataCur.events = {};
11523
11524 for ( type in events ) {
11525 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
11526 jQuery.event.add( dest, type, events[ type ][ i ] );
11527 }
11528 }
11529 }
11530 }
11531
11532 // 2. Copy user data
11533 if ( data_user.hasData( src ) ) {
11534 udataOld = data_user.access( src );
11535 udataCur = jQuery.extend( {}, udataOld );
11536
11537 data_user.set( dest, udataCur );
11538 }
11539}
11540
11541function getAll( context, tag ) {
11542 var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
11543 context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
11544 [];
11545
11546 return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
11547 jQuery.merge( [ context ], ret ) :
11548 ret;
11549}
11550
11551// Support: IE >= 9
11552function fixInput( src, dest ) {
11553 var nodeName = dest.nodeName.toLowerCase();
11554
11555 // Fails to persist the checked state of a cloned checkbox or radio button.
11556 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
11557 dest.checked = src.checked;
11558
11559 // Fails to return the selected option to the default selected state when cloning options
11560 } else if ( nodeName === "input" || nodeName === "textarea" ) {
11561 dest.defaultValue = src.defaultValue;
11562 }
11563}
11564
11565jQuery.extend({
11566 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
11567 var i, l, srcElements, destElements,
11568 clone = elem.cloneNode( true ),
11569 inPage = jQuery.contains( elem.ownerDocument, elem );
11570
11571 // Support: IE >= 9
11572 // Fix Cloning issues
11573 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
11574 !jQuery.isXMLDoc( elem ) ) {
11575
11576 // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
11577 destElements = getAll( clone );
11578 srcElements = getAll( elem );
11579
11580 for ( i = 0, l = srcElements.length; i < l; i++ ) {
11581 fixInput( srcElements[ i ], destElements[ i ] );
11582 }
11583 }
11584
11585 // Copy the events from the original to the clone
11586 if ( dataAndEvents ) {
11587 if ( deepDataAndEvents ) {
11588 srcElements = srcElements || getAll( elem );
11589 destElements = destElements || getAll( clone );
11590
11591 for ( i = 0, l = srcElements.length; i < l; i++ ) {
11592 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
11593 }
11594 } else {
11595 cloneCopyEvent( elem, clone );
11596 }
11597 }
11598
11599 // Preserve script evaluation history
11600 destElements = getAll( clone, "script" );
11601 if ( destElements.length > 0 ) {
11602 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
11603 }
11604
11605 // Return the cloned set
11606 return clone;
11607 },
11608
11609 buildFragment: function( elems, context, scripts, selection ) {
11610 var elem, tmp, tag, wrap, contains, j,
11611 fragment = context.createDocumentFragment(),
11612 nodes = [],
11613 i = 0,
11614 l = elems.length;
11615
11616 for ( ; i < l; i++ ) {
11617 elem = elems[ i ];
11618
11619 if ( elem || elem === 0 ) {
11620
11621 // Add nodes directly
11622 if ( jQuery.type( elem ) === "object" ) {
11623 // Support: QtWebKit
11624 // jQuery.merge because push.apply(_, arraylike) throws
11625 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
11626
11627 // Convert non-html into a text node
11628 } else if ( !rhtml.test( elem ) ) {
11629 nodes.push( context.createTextNode( elem ) );
11630
11631 // Convert html into DOM nodes
11632 } else {
11633 tmp = tmp || fragment.appendChild( context.createElement("div") );
11634
11635 // Deserialize a standard representation
11636 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
11637 wrap = wrapMap[ tag ] || wrapMap._default;
11638 tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
11639
11640 // Descend through wrappers to the right content
11641 j = wrap[ 0 ];
11642 while ( j-- ) {
11643 tmp = tmp.lastChild;
11644 }
11645
11646 // Support: QtWebKit
11647 // jQuery.merge because push.apply(_, arraylike) throws
11648 jQuery.merge( nodes, tmp.childNodes );
11649
11650 // Remember the top-level container
11651 tmp = fragment.firstChild;
11652
11653 // Fixes #12346
11654 // Support: Webkit, IE
11655 tmp.textContent = "";
11656 }
11657 }
11658 }
11659
11660 // Remove wrapper from fragment
11661 fragment.textContent = "";
11662
11663 i = 0;
11664 while ( (elem = nodes[ i++ ]) ) {
11665
11666 // #4087 - If origin and destination elements are the same, and this is
11667 // that element, do not do anything
11668 if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
11669 continue;
11670 }
11671
11672 contains = jQuery.contains( elem.ownerDocument, elem );
11673
11674 // Append to fragment
11675 tmp = getAll( fragment.appendChild( elem ), "script" );
11676
11677 // Preserve script evaluation history
11678 if ( contains ) {
11679 setGlobalEval( tmp );
11680 }
11681
11682 // Capture executables
11683 if ( scripts ) {
11684 j = 0;
11685 while ( (elem = tmp[ j++ ]) ) {
11686 if ( rscriptType.test( elem.type || "" ) ) {
11687 scripts.push( elem );
11688 }
11689 }
11690 }
11691 }
11692
11693 return fragment;
11694 },
11695
11696 cleanData: function( elems ) {
11697 var data, elem, type, key,
11698 special = jQuery.event.special,
11699 i = 0;
11700
11701 for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
11702 if ( jQuery.acceptData( elem ) ) {
11703 key = elem[ data_priv.expando ];
11704
11705 if ( key && (data = data_priv.cache[ key ]) ) {
11706 if ( data.events ) {
11707 for ( type in data.events ) {
11708 if ( special[ type ] ) {
11709 jQuery.event.remove( elem, type );
11710
11711 // This is a shortcut to avoid jQuery.event.remove's overhead
11712 } else {
11713 jQuery.removeEvent( elem, type, data.handle );
11714 }
11715 }
11716 }
11717 if ( data_priv.cache[ key ] ) {
11718 // Discard any remaining `private` data
11719 delete data_priv.cache[ key ];
11720 }
11721 }
11722 }
11723 // Discard any remaining `user` data
11724 delete data_user.cache[ elem[ data_user.expando ] ];
11725 }
11726 }
11727});
11728
11729jQuery.fn.extend({
11730 text: function( value ) {
11731 return access( this, function( value ) {
11732 return value === undefined ?
11733 jQuery.text( this ) :
11734 this.empty().each(function() {
11735 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
11736 this.textContent = value;
11737 }
11738 });
11739 }, null, value, arguments.length );
11740 },
11741
11742 append: function() {
11743 return this.domManip( arguments, function( elem ) {
11744 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
11745 var target = manipulationTarget( this, elem );
11746 target.appendChild( elem );
11747 }
11748 });
11749 },
11750
11751 prepend: function() {
11752 return this.domManip( arguments, function( elem ) {
11753 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
11754 var target = manipulationTarget( this, elem );
11755 target.insertBefore( elem, target.firstChild );
11756 }
11757 });
11758 },
11759
11760 before: function() {
11761 return this.domManip( arguments, function( elem ) {
11762 if ( this.parentNode ) {
11763 this.parentNode.insertBefore( elem, this );
11764 }
11765 });
11766 },
11767
11768 after: function() {
11769 return this.domManip( arguments, function( elem ) {
11770 if ( this.parentNode ) {
11771 this.parentNode.insertBefore( elem, this.nextSibling );
11772 }
11773 });
11774 },
11775
11776 remove: function( selector, keepData /* Internal Use Only */ ) {
11777 var elem,
11778 elems = selector ? jQuery.filter( selector, this ) : this,
11779 i = 0;
11780
11781 for ( ; (elem = elems[i]) != null; i++ ) {
11782 if ( !keepData && elem.nodeType === 1 ) {
11783 jQuery.cleanData( getAll( elem ) );
11784 }
11785
11786 if ( elem.parentNode ) {
11787 if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
11788 setGlobalEval( getAll( elem, "script" ) );
11789 }
11790 elem.parentNode.removeChild( elem );
11791 }
11792 }
11793
11794 return this;
11795 },
11796
11797 empty: function() {
11798 var elem,
11799 i = 0;
11800
11801 for ( ; (elem = this[i]) != null; i++ ) {
11802 if ( elem.nodeType === 1 ) {
11803
11804 // Prevent memory leaks
11805 jQuery.cleanData( getAll( elem, false ) );
11806
11807 // Remove any remaining nodes
11808 elem.textContent = "";
11809 }
11810 }
11811
11812 return this;
11813 },
11814
11815 clone: function( dataAndEvents, deepDataAndEvents ) {
11816 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
11817 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
11818
11819 return this.map(function() {
11820 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
11821 });
11822 },
11823
11824 html: function( value ) {
11825 return access( this, function( value ) {
11826 var elem = this[ 0 ] || {},
11827 i = 0,
11828 l = this.length;
11829
11830 if ( value === undefined && elem.nodeType === 1 ) {
11831 return elem.innerHTML;
11832 }
11833
11834 // See if we can take a shortcut and just use innerHTML
11835 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
11836 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
11837
11838 value = value.replace( rxhtmlTag, "<$1></$2>" );
11839
11840 try {
11841 for ( ; i < l; i++ ) {
11842 elem = this[ i ] || {};
11843
11844 // Remove element nodes and prevent memory leaks
11845 if ( elem.nodeType === 1 ) {
11846 jQuery.cleanData( getAll( elem, false ) );
11847 elem.innerHTML = value;
11848 }
11849 }
11850
11851 elem = 0;
11852
11853 // If using innerHTML throws an exception, use the fallback method
11854 } catch( e ) {}
11855 }
11856
11857 if ( elem ) {
11858 this.empty().append( value );
11859 }
11860 }, null, value, arguments.length );
11861 },
11862
11863 replaceWith: function() {
11864 var arg = arguments[ 0 ];
11865
11866 // Make the changes, replacing each context element with the new content
11867 this.domManip( arguments, function( elem ) {
11868 arg = this.parentNode;
11869
11870 jQuery.cleanData( getAll( this ) );
11871
11872 if ( arg ) {
11873 arg.replaceChild( elem, this );
11874 }
11875 });
11876
11877 // Force removal if there was no new content (e.g., from empty arguments)
11878 return arg && (arg.length || arg.nodeType) ? this : this.remove();
11879 },
11880
11881 detach: function( selector ) {
11882 return this.remove( selector, true );
11883 },
11884
11885 domManip: function( args, callback ) {
11886
11887 // Flatten any nested arrays
11888 args = concat.apply( [], args );
11889
11890 var fragment, first, scripts, hasScripts, node, doc,
11891 i = 0,
11892 l = this.length,
11893 set = this,
11894 iNoClone = l - 1,
11895 value = args[ 0 ],
11896 isFunction = jQuery.isFunction( value );
11897
11898 // We can't cloneNode fragments that contain checked, in WebKit
11899 if ( isFunction ||
11900 ( l > 1 && typeof value === "string" &&
11901 !support.checkClone && rchecked.test( value ) ) ) {
11902 return this.each(function( index ) {
11903 var self = set.eq( index );
11904 if ( isFunction ) {
11905 args[ 0 ] = value.call( this, index, self.html() );
11906 }
11907 self.domManip( args, callback );
11908 });
11909 }
11910
11911 if ( l ) {
11912 fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
11913 first = fragment.firstChild;
11914
11915 if ( fragment.childNodes.length === 1 ) {
11916 fragment = first;
11917 }
11918
11919 if ( first ) {
11920 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
11921 hasScripts = scripts.length;
11922
11923 // Use the original fragment for the last item instead of the first because it can end up
11924 // being emptied incorrectly in certain situations (#8070).
11925 for ( ; i < l; i++ ) {
11926 node = fragment;
11927
11928 if ( i !== iNoClone ) {
11929 node = jQuery.clone( node, true, true );
11930
11931 // Keep references to cloned scripts for later restoration
11932 if ( hasScripts ) {
11933 // Support: QtWebKit
11934 // jQuery.merge because push.apply(_, arraylike) throws
11935 jQuery.merge( scripts, getAll( node, "script" ) );
11936 }
11937 }
11938
11939 callback.call( this[ i ], node, i );
11940 }
11941
11942 if ( hasScripts ) {
11943 doc = scripts[ scripts.length - 1 ].ownerDocument;
11944
11945 // Reenable scripts
11946 jQuery.map( scripts, restoreScript );
11947
11948 // Evaluate executable scripts on first document insertion
11949 for ( i = 0; i < hasScripts; i++ ) {
11950 node = scripts[ i ];
11951 if ( rscriptType.test( node.type || "" ) &&
11952 !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
11953
11954 if ( node.src ) {
11955 // Optional AJAX dependency, but won't run scripts if not present
11956 if ( jQuery._evalUrl ) {
11957 jQuery._evalUrl( node.src );
11958 }
11959 } else {
11960 jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
11961 }
11962 }
11963 }
11964 }
11965 }
11966 }
11967
11968 return this;
11969 }
11970});
11971
11972jQuery.each({
11973 appendTo: "append",
11974 prependTo: "prepend",
11975 insertBefore: "before",
11976 insertAfter: "after",
11977 replaceAll: "replaceWith"
11978}, function( name, original ) {
11979 jQuery.fn[ name ] = function( selector ) {
11980 var elems,
11981 ret = [],
11982 insert = jQuery( selector ),
11983 last = insert.length - 1,
11984 i = 0;
11985
11986 for ( ; i <= last; i++ ) {
11987 elems = i === last ? this : this.clone( true );
11988 jQuery( insert[ i ] )[ original ]( elems );
11989
11990 // Support: QtWebKit
11991 // .get() because push.apply(_, arraylike) throws
11992 push.apply( ret, elems.get() );
11993 }
11994
11995 return this.pushStack( ret );
11996 };
11997});
11998
11999
12000var iframe,
12001 elemdisplay = {};
12002
12003/**
12004 * Retrieve the actual display of a element
12005 * @param {String} name nodeName of the element
12006 * @param {Object} doc Document object
12007 */
12008// Called only from within defaultDisplay
12009function actualDisplay( name, doc ) {
12010 var style,
12011 elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
12012
12013 // getDefaultComputedStyle might be reliably used only on attached element
12014 display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
12015
12016 // Use of this method is a temporary fix (more like optmization) until something better comes along,
12017 // since it was removed from specification and supported only in FF
12018 style.display : jQuery.css( elem[ 0 ], "display" );
12019
12020 // We don't have any data stored on the element,
12021 // so use "detach" method as fast way to get rid of the element
12022 elem.detach();
12023
12024 return display;
12025}
12026
12027/**
12028 * Try to determine the default display value of an element
12029 * @param {String} nodeName
12030 */
12031function defaultDisplay( nodeName ) {
12032 var doc = document,
12033 display = elemdisplay[ nodeName ];
12034
12035 if ( !display ) {
12036 display = actualDisplay( nodeName, doc );
12037
12038 // If the simple way fails, read from inside an iframe
12039 if ( display === "none" || !display ) {
12040
12041 // Use the already-created iframe if possible
12042 iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
12043
12044 // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
12045 doc = iframe[ 0 ].contentDocument;
12046
12047 // Support: IE
12048 doc.write();
12049 doc.close();
12050
12051 display = actualDisplay( nodeName, doc );
12052 iframe.detach();
12053 }
12054
12055 // Store the correct default display
12056 elemdisplay[ nodeName ] = display;
12057 }
12058
12059 return display;
12060}
12061var rmargin = (/^margin/);
12062
12063var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
12064
12065var getStyles = function( elem ) {
12066 return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
12067 };
12068
12069
12070
12071function curCSS( elem, name, computed ) {
12072 var width, minWidth, maxWidth, ret,
12073 style = elem.style;
12074
12075 computed = computed || getStyles( elem );
12076
12077 // Support: IE9
12078 // getPropertyValue is only needed for .css('filter') in IE9, see #12537
12079 if ( computed ) {
12080 ret = computed.getPropertyValue( name ) || computed[ name ];
12081 }
12082
12083 if ( computed ) {
12084
12085 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
12086 ret = jQuery.style( elem, name );
12087 }
12088
12089 // Support: iOS < 6
12090 // A tribute to the "awesome hack by Dean Edwards"
12091 // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
12092 // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
12093 if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
12094
12095 // Remember the original values
12096 width = style.width;
12097 minWidth = style.minWidth;
12098 maxWidth = style.maxWidth;
12099
12100 // Put in the new values to get a computed value out
12101 style.minWidth = style.maxWidth = style.width = ret;
12102 ret = computed.width;
12103
12104 // Revert the changed values
12105 style.width = width;
12106 style.minWidth = minWidth;
12107 style.maxWidth = maxWidth;
12108 }
12109 }
12110
12111 return ret !== undefined ?
12112 // Support: IE
12113 // IE returns zIndex value as an integer.
12114 ret + "" :
12115 ret;
12116}
12117
12118
12119function addGetHookIf( conditionFn, hookFn ) {
12120 // Define the hook, we'll check on the first run if it's really needed.
12121 return {
12122 get: function() {
12123 if ( conditionFn() ) {
12124 // Hook not needed (or it's not possible to use it due to missing dependency),
12125 // remove it.
12126 // Since there are no other hooks for marginRight, remove the whole object.
12127 delete this.get;
12128 return;
12129 }
12130
12131 // Hook needed; redefine it so that the support test is not executed again.
12132
12133 return (this.get = hookFn).apply( this, arguments );
12134 }
12135 };
12136}
12137
12138
12139(function() {
12140 var pixelPositionVal, boxSizingReliableVal,
12141 docElem = document.documentElement,
12142 container = document.createElement( "div" ),
12143 div = document.createElement( "div" );
12144
12145 if ( !div.style ) {
12146 return;
12147 }
12148
12149 div.style.backgroundClip = "content-box";
12150 div.cloneNode( true ).style.backgroundClip = "";
12151 support.clearCloneStyle = div.style.backgroundClip === "content-box";
12152
12153 container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
12154 "position:absolute";
12155 container.appendChild( div );
12156
12157 // Executing both pixelPosition & boxSizingReliable tests require only one layout
12158 // so they're executed at the same time to save the second computation.
12159 function computePixelPositionAndBoxSizingReliable() {
12160 div.style.cssText =
12161 // Support: Firefox<29, Android 2.3
12162 // Vendor-prefix box-sizing
12163 "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
12164 "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
12165 "border:1px;padding:1px;width:4px;position:absolute";
12166 div.innerHTML = "";
12167 docElem.appendChild( container );
12168
12169 var divStyle = window.getComputedStyle( div, null );
12170 pixelPositionVal = divStyle.top !== "1%";
12171 boxSizingReliableVal = divStyle.width === "4px";
12172
12173 docElem.removeChild( container );
12174 }
12175
12176 // Support: node.js jsdom
12177 // Don't assume that getComputedStyle is a property of the global object
12178 if ( window.getComputedStyle ) {
12179 jQuery.extend( support, {
12180 pixelPosition: function() {
12181 // This test is executed only once but we still do memoizing
12182 // since we can use the boxSizingReliable pre-computing.
12183 // No need to check if the test was already performed, though.
12184 computePixelPositionAndBoxSizingReliable();
12185 return pixelPositionVal;
12186 },
12187 boxSizingReliable: function() {
12188 if ( boxSizingReliableVal == null ) {
12189 computePixelPositionAndBoxSizingReliable();
12190 }
12191 return boxSizingReliableVal;
12192 },
12193 reliableMarginRight: function() {
12194 // Support: Android 2.3
12195 // Check if div with explicit width and no margin-right incorrectly
12196 // gets computed margin-right based on width of container. (#3333)
12197 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
12198 // This support function is only executed once so no memoizing is needed.
12199 var ret,
12200 marginDiv = div.appendChild( document.createElement( "div" ) );
12201
12202 // Reset CSS: box-sizing; display; margin; border; padding
12203 marginDiv.style.cssText = div.style.cssText =
12204 // Support: Firefox<29, Android 2.3
12205 // Vendor-prefix box-sizing
12206 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
12207 "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
12208 marginDiv.style.marginRight = marginDiv.style.width = "0";
12209 div.style.width = "1px";
12210 docElem.appendChild( container );
12211
12212 ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
12213
12214 docElem.removeChild( container );
12215
12216 return ret;
12217 }
12218 });
12219 }
12220})();
12221
12222
12223// A method for quickly swapping in/out CSS properties to get correct calculations.
12224jQuery.swap = function( elem, options, callback, args ) {
12225 var ret, name,
12226 old = {};
12227
12228 // Remember the old values, and insert the new ones
12229 for ( name in options ) {
12230 old[ name ] = elem.style[ name ];
12231 elem.style[ name ] = options[ name ];
12232 }
12233
12234 ret = callback.apply( elem, args || [] );
12235
12236 // Revert the old values
12237 for ( name in options ) {
12238 elem.style[ name ] = old[ name ];
12239 }
12240
12241 return ret;
12242};
12243
12244
12245var
12246 // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
12247 // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
12248 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
12249 rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
12250 rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
12251
12252 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
12253 cssNormalTransform = {
12254 letterSpacing: "0",
12255 fontWeight: "400"
12256 },
12257
12258 cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
12259
12260// return a css property mapped to a potentially vendor prefixed property
12261function vendorPropName( style, name ) {
12262
12263 // shortcut for names that are not vendor prefixed
12264 if ( name in style ) {
12265 return name;
12266 }
12267
12268 // check for vendor prefixed names
12269 var capName = name[0].toUpperCase() + name.slice(1),
12270 origName = name,
12271 i = cssPrefixes.length;
12272
12273 while ( i-- ) {
12274 name = cssPrefixes[ i ] + capName;
12275 if ( name in style ) {
12276 return name;
12277 }
12278 }
12279
12280 return origName;
12281}
12282
12283function setPositiveNumber( elem, value, subtract ) {
12284 var matches = rnumsplit.exec( value );
12285 return matches ?
12286 // Guard against undefined "subtract", e.g., when used as in cssHooks
12287 Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
12288 value;
12289}
12290
12291function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
12292 var i = extra === ( isBorderBox ? "border" : "content" ) ?
12293 // If we already have the right measurement, avoid augmentation
12294 4 :
12295 // Otherwise initialize for horizontal or vertical properties
12296 name === "width" ? 1 : 0,
12297
12298 val = 0;
12299
12300 for ( ; i < 4; i += 2 ) {
12301 // both box models exclude margin, so add it if we want it
12302 if ( extra === "margin" ) {
12303 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
12304 }
12305
12306 if ( isBorderBox ) {
12307 // border-box includes padding, so remove it if we want content
12308 if ( extra === "content" ) {
12309 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
12310 }
12311
12312 // at this point, extra isn't border nor margin, so remove border
12313 if ( extra !== "margin" ) {
12314 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
12315 }
12316 } else {
12317 // at this point, extra isn't content, so add padding
12318 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
12319
12320 // at this point, extra isn't content nor padding, so add border
12321 if ( extra !== "padding" ) {
12322 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
12323 }
12324 }
12325 }
12326
12327 return val;
12328}
12329
12330function getWidthOrHeight( elem, name, extra ) {
12331
12332 // Start with offset property, which is equivalent to the border-box value
12333 var valueIsBorderBox = true,
12334 val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
12335 styles = getStyles( elem ),
12336 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
12337
12338 // some non-html elements return undefined for offsetWidth, so check for null/undefined
12339 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
12340 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
12341 if ( val <= 0 || val == null ) {
12342 // Fall back to computed then uncomputed css if necessary
12343 val = curCSS( elem, name, styles );
12344 if ( val < 0 || val == null ) {
12345 val = elem.style[ name ];
12346 }
12347
12348 // Computed unit is not pixels. Stop here and return.
12349 if ( rnumnonpx.test(val) ) {
12350 return val;
12351 }
12352
12353 // we need the check for style in case a browser which returns unreliable values
12354 // for getComputedStyle silently falls back to the reliable elem.style
12355 valueIsBorderBox = isBorderBox &&
12356 ( support.boxSizingReliable() || val === elem.style[ name ] );
12357
12358 // Normalize "", auto, and prepare for extra
12359 val = parseFloat( val ) || 0;
12360 }
12361
12362 // use the active box-sizing model to add/subtract irrelevant styles
12363 return ( val +
12364 augmentWidthOrHeight(
12365 elem,
12366 name,
12367 extra || ( isBorderBox ? "border" : "content" ),
12368 valueIsBorderBox,
12369 styles
12370 )
12371 ) + "px";
12372}
12373
12374function showHide( elements, show ) {
12375 var display, elem, hidden,
12376 values = [],
12377 index = 0,
12378 length = elements.length;
12379
12380 for ( ; index < length; index++ ) {
12381 elem = elements[ index ];
12382 if ( !elem.style ) {
12383 continue;
12384 }
12385
12386 values[ index ] = data_priv.get( elem, "olddisplay" );
12387 display = elem.style.display;
12388 if ( show ) {
12389 // Reset the inline display of this element to learn if it is
12390 // being hidden by cascaded rules or not
12391 if ( !values[ index ] && display === "none" ) {
12392 elem.style.display = "";
12393 }
12394
12395 // Set elements which have been overridden with display: none
12396 // in a stylesheet to whatever the default browser style is
12397 // for such an element
12398 if ( elem.style.display === "" && isHidden( elem ) ) {
12399 values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
12400 }
12401 } else {
12402 hidden = isHidden( elem );
12403
12404 if ( display !== "none" || !hidden ) {
12405 data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
12406 }
12407 }
12408 }
12409
12410 // Set the display of most of the elements in a second loop
12411 // to avoid the constant reflow
12412 for ( index = 0; index < length; index++ ) {
12413 elem = elements[ index ];
12414 if ( !elem.style ) {
12415 continue;
12416 }
12417 if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
12418 elem.style.display = show ? values[ index ] || "" : "none";
12419 }
12420 }
12421
12422 return elements;
12423}
12424
12425jQuery.extend({
12426 // Add in style property hooks for overriding the default
12427 // behavior of getting and setting a style property
12428 cssHooks: {
12429 opacity: {
12430 get: function( elem, computed ) {
12431 if ( computed ) {
12432 // We should always get a number back from opacity
12433 var ret = curCSS( elem, "opacity" );
12434 return ret === "" ? "1" : ret;
12435 }
12436 }
12437 }
12438 },
12439
12440 // Don't automatically add "px" to these possibly-unitless properties
12441 cssNumber: {
12442 "columnCount": true,
12443 "fillOpacity": true,
12444 "flexGrow": true,
12445 "flexShrink": true,
12446 "fontWeight": true,
12447 "lineHeight": true,
12448 "opacity": true,
12449 "order": true,
12450 "orphans": true,
12451 "widows": true,
12452 "zIndex": true,
12453 "zoom": true
12454 },
12455
12456 // Add in properties whose names you wish to fix before
12457 // setting or getting the value
12458 cssProps: {
12459 // normalize float css property
12460 "float": "cssFloat"
12461 },
12462
12463 // Get and set the style property on a DOM Node
12464 style: function( elem, name, value, extra ) {
12465 // Don't set styles on text and comment nodes
12466 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
12467 return;
12468 }
12469
12470 // Make sure that we're working with the right name
12471 var ret, type, hooks,
12472 origName = jQuery.camelCase( name ),
12473 style = elem.style;
12474
12475 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
12476
12477 // gets hook for the prefixed version
12478 // followed by the unprefixed version
12479 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
12480
12481 // Check if we're setting a value
12482 if ( value !== undefined ) {
12483 type = typeof value;
12484
12485 // convert relative number strings (+= or -=) to relative numbers. #7345
12486 if ( type === "string" && (ret = rrelNum.exec( value )) ) {
12487 value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
12488 // Fixes bug #9237
12489 type = "number";
12490 }
12491
12492 // Make sure that null and NaN values aren't set. See: #7116
12493 if ( value == null || value !== value ) {
12494 return;
12495 }
12496
12497 // If a number was passed in, add 'px' to the (except for certain CSS properties)
12498 if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
12499 value += "px";
12500 }
12501
12502 // Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
12503 // but it would mean to define eight (for every problematic property) identical functions
12504 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
12505 style[ name ] = "inherit";
12506 }
12507
12508 // If a hook was provided, use that value, otherwise just set the specified value
12509 if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
12510 style[ name ] = value;
12511 }
12512
12513 } else {
12514 // If a hook was provided get the non-computed value from there
12515 if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
12516 return ret;
12517 }
12518
12519 // Otherwise just get the value from the style object
12520 return style[ name ];
12521 }
12522 },
12523
12524 css: function( elem, name, extra, styles ) {
12525 var val, num, hooks,
12526 origName = jQuery.camelCase( name );
12527
12528 // Make sure that we're working with the right name
12529 name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
12530
12531 // gets hook for the prefixed version
12532 // followed by the unprefixed version
12533 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
12534
12535 // If a hook was provided get the computed value from there
12536 if ( hooks && "get" in hooks ) {
12537 val = hooks.get( elem, true, extra );
12538 }
12539
12540 // Otherwise, if a way to get the computed value exists, use that
12541 if ( val === undefined ) {
12542 val = curCSS( elem, name, styles );
12543 }
12544
12545 //convert "normal" to computed value
12546 if ( val === "normal" && name in cssNormalTransform ) {
12547 val = cssNormalTransform[ name ];
12548 }
12549
12550 // Return, converting to number if forced or a qualifier was provided and val looks numeric
12551 if ( extra === "" || extra ) {
12552 num = parseFloat( val );
12553 return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
12554 }
12555 return val;
12556 }
12557});
12558
12559jQuery.each([ "height", "width" ], function( i, name ) {
12560 jQuery.cssHooks[ name ] = {
12561 get: function( elem, computed, extra ) {
12562 if ( computed ) {
12563 // certain elements can have dimension info if we invisibly show them
12564 // however, it must have a current display style that would benefit from this
12565 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
12566 jQuery.swap( elem, cssShow, function() {
12567 return getWidthOrHeight( elem, name, extra );
12568 }) :
12569 getWidthOrHeight( elem, name, extra );
12570 }
12571 },
12572
12573 set: function( elem, value, extra ) {
12574 var styles = extra && getStyles( elem );
12575 return setPositiveNumber( elem, value, extra ?
12576 augmentWidthOrHeight(
12577 elem,
12578 name,
12579 extra,
12580 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
12581 styles
12582 ) : 0
12583 );
12584 }
12585 };
12586});
12587
12588// Support: Android 2.3
12589jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
12590 function( elem, computed ) {
12591 if ( computed ) {
12592 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
12593 // Work around by temporarily setting element display to inline-block
12594 return jQuery.swap( elem, { "display": "inline-block" },
12595 curCSS, [ elem, "marginRight" ] );
12596 }
12597 }
12598);
12599
12600// These hooks are used by animate to expand properties
12601jQuery.each({
12602 margin: "",
12603 padding: "",
12604 border: "Width"
12605}, function( prefix, suffix ) {
12606 jQuery.cssHooks[ prefix + suffix ] = {
12607 expand: function( value ) {
12608 var i = 0,
12609 expanded = {},
12610
12611 // assumes a single number if not a string
12612 parts = typeof value === "string" ? value.split(" ") : [ value ];
12613
12614 for ( ; i < 4; i++ ) {
12615 expanded[ prefix + cssExpand[ i ] + suffix ] =
12616 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
12617 }
12618
12619 return expanded;
12620 }
12621 };
12622
12623 if ( !rmargin.test( prefix ) ) {
12624 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
12625 }
12626});
12627
12628jQuery.fn.extend({
12629 css: function( name, value ) {
12630 return access( this, function( elem, name, value ) {
12631 var styles, len,
12632 map = {},
12633 i = 0;
12634
12635 if ( jQuery.isArray( name ) ) {
12636 styles = getStyles( elem );
12637 len = name.length;
12638
12639 for ( ; i < len; i++ ) {
12640 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
12641 }
12642
12643 return map;
12644 }
12645
12646 return value !== undefined ?
12647 jQuery.style( elem, name, value ) :
12648 jQuery.css( elem, name );
12649 }, name, value, arguments.length > 1 );
12650 },
12651 show: function() {
12652 return showHide( this, true );
12653 },
12654 hide: function() {
12655 return showHide( this );
12656 },
12657 toggle: function( state ) {
12658 if ( typeof state === "boolean" ) {
12659 return state ? this.show() : this.hide();
12660 }
12661
12662 return this.each(function() {
12663 if ( isHidden( this ) ) {
12664 jQuery( this ).show();
12665 } else {
12666 jQuery( this ).hide();
12667 }
12668 });
12669 }
12670});
12671
12672
12673function Tween( elem, options, prop, end, easing ) {
12674 return new Tween.prototype.init( elem, options, prop, end, easing );
12675}
12676jQuery.Tween = Tween;
12677
12678Tween.prototype = {
12679 constructor: Tween,
12680 init: function( elem, options, prop, end, easing, unit ) {
12681 this.elem = elem;
12682 this.prop = prop;
12683 this.easing = easing || "swing";
12684 this.options = options;
12685 this.start = this.now = this.cur();
12686 this.end = end;
12687 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
12688 },
12689 cur: function() {
12690 var hooks = Tween.propHooks[ this.prop ];
12691
12692 return hooks && hooks.get ?
12693 hooks.get( this ) :
12694 Tween.propHooks._default.get( this );
12695 },
12696 run: function( percent ) {
12697 var eased,
12698 hooks = Tween.propHooks[ this.prop ];
12699
12700 if ( this.options.duration ) {
12701 this.pos = eased = jQuery.easing[ this.easing ](
12702 percent, this.options.duration * percent, 0, 1, this.options.duration
12703 );
12704 } else {
12705 this.pos = eased = percent;
12706 }
12707 this.now = ( this.end - this.start ) * eased + this.start;
12708
12709 if ( this.options.step ) {
12710 this.options.step.call( this.elem, this.now, this );
12711 }
12712
12713 if ( hooks && hooks.set ) {
12714 hooks.set( this );
12715 } else {
12716 Tween.propHooks._default.set( this );
12717 }
12718 return this;
12719 }
12720};
12721
12722Tween.prototype.init.prototype = Tween.prototype;
12723
12724Tween.propHooks = {
12725 _default: {
12726 get: function( tween ) {
12727 var result;
12728
12729 if ( tween.elem[ tween.prop ] != null &&
12730 (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
12731 return tween.elem[ tween.prop ];
12732 }
12733
12734 // passing an empty string as a 3rd parameter to .css will automatically
12735 // attempt a parseFloat and fallback to a string if the parse fails
12736 // so, simple values such as "10px" are parsed to Float.
12737 // complex values such as "rotate(1rad)" are returned as is.
12738 result = jQuery.css( tween.elem, tween.prop, "" );
12739 // Empty strings, null, undefined and "auto" are converted to 0.
12740 return !result || result === "auto" ? 0 : result;
12741 },
12742 set: function( tween ) {
12743 // use step hook for back compat - use cssHook if its there - use .style if its
12744 // available and use plain properties where available
12745 if ( jQuery.fx.step[ tween.prop ] ) {
12746 jQuery.fx.step[ tween.prop ]( tween );
12747 } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
12748 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
12749 } else {
12750 tween.elem[ tween.prop ] = tween.now;
12751 }
12752 }
12753 }
12754};
12755
12756// Support: IE9
12757// Panic based approach to setting things on disconnected nodes
12758
12759Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
12760 set: function( tween ) {
12761 if ( tween.elem.nodeType && tween.elem.parentNode ) {
12762 tween.elem[ tween.prop ] = tween.now;
12763 }
12764 }
12765};
12766
12767jQuery.easing = {
12768 linear: function( p ) {
12769 return p;
12770 },
12771 swing: function( p ) {
12772 return 0.5 - Math.cos( p * Math.PI ) / 2;
12773 }
12774};
12775
12776jQuery.fx = Tween.prototype.init;
12777
12778// Back Compat <1.8 extension point
12779jQuery.fx.step = {};
12780
12781
12782
12783
12784var
12785 fxNow, timerId,
12786 rfxtypes = /^(?:toggle|show|hide)$/,
12787 rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
12788 rrun = /queueHooks$/,
12789 animationPrefilters = [ defaultPrefilter ],
12790 tweeners = {
12791 "*": [ function( prop, value ) {
12792 var tween = this.createTween( prop, value ),
12793 target = tween.cur(),
12794 parts = rfxnum.exec( value ),
12795 unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
12796
12797 // Starting value computation is required for potential unit mismatches
12798 start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
12799 rfxnum.exec( jQuery.css( tween.elem, prop ) ),
12800 scale = 1,
12801 maxIterations = 20;
12802
12803 if ( start && start[ 3 ] !== unit ) {
12804 // Trust units reported by jQuery.css
12805 unit = unit || start[ 3 ];
12806
12807 // Make sure we update the tween properties later on
12808 parts = parts || [];
12809
12810 // Iteratively approximate from a nonzero starting point
12811 start = +target || 1;
12812
12813 do {
12814 // If previous iteration zeroed out, double until we get *something*
12815 // Use a string for doubling factor so we don't accidentally see scale as unchanged below
12816 scale = scale || ".5";
12817
12818 // Adjust and apply
12819 start = start / scale;
12820 jQuery.style( tween.elem, prop, start + unit );
12821
12822 // Update scale, tolerating zero or NaN from tween.cur()
12823 // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
12824 } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
12825 }
12826
12827 // Update tween properties
12828 if ( parts ) {
12829 start = tween.start = +start || +target || 0;
12830 tween.unit = unit;
12831 // If a +=/-= token was provided, we're doing a relative animation
12832 tween.end = parts[ 1 ] ?
12833 start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
12834 +parts[ 2 ];
12835 }
12836
12837 return tween;
12838 } ]
12839 };
12840
12841// Animations created synchronously will run synchronously
12842function createFxNow() {
12843 setTimeout(function() {
12844 fxNow = undefined;
12845 });
12846 return ( fxNow = jQuery.now() );
12847}
12848
12849// Generate parameters to create a standard animation
12850function genFx( type, includeWidth ) {
12851 var which,
12852 i = 0,
12853 attrs = { height: type };
12854
12855 // if we include width, step value is 1 to do all cssExpand values,
12856 // if we don't include width, step value is 2 to skip over Left and Right
12857 includeWidth = includeWidth ? 1 : 0;
12858 for ( ; i < 4 ; i += 2 - includeWidth ) {
12859 which = cssExpand[ i ];
12860 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
12861 }
12862
12863 if ( includeWidth ) {
12864 attrs.opacity = attrs.width = type;
12865 }
12866
12867 return attrs;
12868}
12869
12870function createTween( value, prop, animation ) {
12871 var tween,
12872 collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
12873 index = 0,
12874 length = collection.length;
12875 for ( ; index < length; index++ ) {
12876 if ( (tween = collection[ index ].call( animation, prop, value )) ) {
12877
12878 // we're done with this property
12879 return tween;
12880 }
12881 }
12882}
12883
12884function defaultPrefilter( elem, props, opts ) {
12885 /* jshint validthis: true */
12886 var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
12887 anim = this,
12888 orig = {},
12889 style = elem.style,
12890 hidden = elem.nodeType && isHidden( elem ),
12891 dataShow = data_priv.get( elem, "fxshow" );
12892
12893 // handle queue: false promises
12894 if ( !opts.queue ) {
12895 hooks = jQuery._queueHooks( elem, "fx" );
12896 if ( hooks.unqueued == null ) {
12897 hooks.unqueued = 0;
12898 oldfire = hooks.empty.fire;
12899 hooks.empty.fire = function() {
12900 if ( !hooks.unqueued ) {
12901 oldfire();
12902 }
12903 };
12904 }
12905 hooks.unqueued++;
12906
12907 anim.always(function() {
12908 // doing this makes sure that the complete handler will be called
12909 // before this completes
12910 anim.always(function() {
12911 hooks.unqueued--;
12912 if ( !jQuery.queue( elem, "fx" ).length ) {
12913 hooks.empty.fire();
12914 }
12915 });
12916 });
12917 }
12918
12919 // height/width overflow pass
12920 if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
12921 // Make sure that nothing sneaks out
12922 // Record all 3 overflow attributes because IE9-10 do not
12923 // change the overflow attribute when overflowX and
12924 // overflowY are set to the same value
12925 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
12926
12927 // Set display property to inline-block for height/width
12928 // animations on inline elements that are having width/height animated
12929 display = jQuery.css( elem, "display" );
12930
12931 // Test default display if display is currently "none"
12932 checkDisplay = display === "none" ?
12933 data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
12934
12935 if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
12936 style.display = "inline-block";
12937 }
12938 }
12939
12940 if ( opts.overflow ) {
12941 style.overflow = "hidden";
12942 anim.always(function() {
12943 style.overflow = opts.overflow[ 0 ];
12944 style.overflowX = opts.overflow[ 1 ];
12945 style.overflowY = opts.overflow[ 2 ];
12946 });
12947 }
12948
12949 // show/hide pass
12950 for ( prop in props ) {
12951 value = props[ prop ];
12952 if ( rfxtypes.exec( value ) ) {
12953 delete props[ prop ];
12954 toggle = toggle || value === "toggle";
12955 if ( value === ( hidden ? "hide" : "show" ) ) {
12956
12957 // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
12958 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
12959 hidden = true;
12960 } else {
12961 continue;
12962 }
12963 }
12964 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
12965
12966 // Any non-fx value stops us from restoring the original display value
12967 } else {
12968 display = undefined;
12969 }
12970 }
12971
12972 if ( !jQuery.isEmptyObject( orig ) ) {
12973 if ( dataShow ) {
12974 if ( "hidden" in dataShow ) {
12975 hidden = dataShow.hidden;
12976 }
12977 } else {
12978 dataShow = data_priv.access( elem, "fxshow", {} );
12979 }
12980
12981 // store state if its toggle - enables .stop().toggle() to "reverse"
12982 if ( toggle ) {
12983 dataShow.hidden = !hidden;
12984 }
12985 if ( hidden ) {
12986 jQuery( elem ).show();
12987 } else {
12988 anim.done(function() {
12989 jQuery( elem ).hide();
12990 });
12991 }
12992 anim.done(function() {
12993 var prop;
12994
12995 data_priv.remove( elem, "fxshow" );
12996 for ( prop in orig ) {
12997 jQuery.style( elem, prop, orig[ prop ] );
12998 }
12999 });
13000 for ( prop in orig ) {
13001 tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
13002
13003 if ( !( prop in dataShow ) ) {
13004 dataShow[ prop ] = tween.start;
13005 if ( hidden ) {
13006 tween.end = tween.start;
13007 tween.start = prop === "width" || prop === "height" ? 1 : 0;
13008 }
13009 }
13010 }
13011
13012 // If this is a noop like .hide().hide(), restore an overwritten display value
13013 } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
13014 style.display = display;
13015 }
13016}
13017
13018function propFilter( props, specialEasing ) {
13019 var index, name, easing, value, hooks;
13020
13021 // camelCase, specialEasing and expand cssHook pass
13022 for ( index in props ) {
13023 name = jQuery.camelCase( index );
13024 easing = specialEasing[ name ];
13025 value = props[ index ];
13026 if ( jQuery.isArray( value ) ) {
13027 easing = value[ 1 ];
13028 value = props[ index ] = value[ 0 ];
13029 }
13030
13031 if ( index !== name ) {
13032 props[ name ] = value;
13033 delete props[ index ];
13034 }
13035
13036 hooks = jQuery.cssHooks[ name ];
13037 if ( hooks && "expand" in hooks ) {
13038 value = hooks.expand( value );
13039 delete props[ name ];
13040
13041 // not quite $.extend, this wont overwrite keys already present.
13042 // also - reusing 'index' from above because we have the correct "name"
13043 for ( index in value ) {
13044 if ( !( index in props ) ) {
13045 props[ index ] = value[ index ];
13046 specialEasing[ index ] = easing;
13047 }
13048 }
13049 } else {
13050 specialEasing[ name ] = easing;
13051 }
13052 }
13053}
13054
13055function Animation( elem, properties, options ) {
13056 var result,
13057 stopped,
13058 index = 0,
13059 length = animationPrefilters.length,
13060 deferred = jQuery.Deferred().always( function() {
13061 // don't match elem in the :animated selector
13062 delete tick.elem;
13063 }),
13064 tick = function() {
13065 if ( stopped ) {
13066 return false;
13067 }
13068 var currentTime = fxNow || createFxNow(),
13069 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
13070 // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
13071 temp = remaining / animation.duration || 0,
13072 percent = 1 - temp,
13073 index = 0,
13074 length = animation.tweens.length;
13075
13076 for ( ; index < length ; index++ ) {
13077 animation.tweens[ index ].run( percent );
13078 }
13079
13080 deferred.notifyWith( elem, [ animation, percent, remaining ]);
13081
13082 if ( percent < 1 && length ) {
13083 return remaining;
13084 } else {
13085 deferred.resolveWith( elem, [ animation ] );
13086 return false;
13087 }
13088 },
13089 animation = deferred.promise({
13090 elem: elem,
13091 props: jQuery.extend( {}, properties ),
13092 opts: jQuery.extend( true, { specialEasing: {} }, options ),
13093 originalProperties: properties,
13094 originalOptions: options,
13095 startTime: fxNow || createFxNow(),
13096 duration: options.duration,
13097 tweens: [],
13098 createTween: function( prop, end ) {
13099 var tween = jQuery.Tween( elem, animation.opts, prop, end,
13100 animation.opts.specialEasing[ prop ] || animation.opts.easing );
13101 animation.tweens.push( tween );
13102 return tween;
13103 },
13104 stop: function( gotoEnd ) {
13105 var index = 0,
13106 // if we are going to the end, we want to run all the tweens
13107 // otherwise we skip this part
13108 length = gotoEnd ? animation.tweens.length : 0;
13109 if ( stopped ) {
13110 return this;
13111 }
13112 stopped = true;
13113 for ( ; index < length ; index++ ) {
13114 animation.tweens[ index ].run( 1 );
13115 }
13116
13117 // resolve when we played the last frame
13118 // otherwise, reject
13119 if ( gotoEnd ) {
13120 deferred.resolveWith( elem, [ animation, gotoEnd ] );
13121 } else {
13122 deferred.rejectWith( elem, [ animation, gotoEnd ] );
13123 }
13124 return this;
13125 }
13126 }),
13127 props = animation.props;
13128
13129 propFilter( props, animation.opts.specialEasing );
13130
13131 for ( ; index < length ; index++ ) {
13132 result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
13133 if ( result ) {
13134 return result;
13135 }
13136 }
13137
13138 jQuery.map( props, createTween, animation );
13139
13140 if ( jQuery.isFunction( animation.opts.start ) ) {
13141 animation.opts.start.call( elem, animation );
13142 }
13143
13144 jQuery.fx.timer(
13145 jQuery.extend( tick, {
13146 elem: elem,
13147 anim: animation,
13148 queue: animation.opts.queue
13149 })
13150 );
13151
13152 // attach callbacks from options
13153 return animation.progress( animation.opts.progress )
13154 .done( animation.opts.done, animation.opts.complete )
13155 .fail( animation.opts.fail )
13156 .always( animation.opts.always );
13157}
13158
13159jQuery.Animation = jQuery.extend( Animation, {
13160
13161 tweener: function( props, callback ) {
13162 if ( jQuery.isFunction( props ) ) {
13163 callback = props;
13164 props = [ "*" ];
13165 } else {
13166 props = props.split(" ");
13167 }
13168
13169 var prop,
13170 index = 0,
13171 length = props.length;
13172
13173 for ( ; index < length ; index++ ) {
13174 prop = props[ index ];
13175 tweeners[ prop ] = tweeners[ prop ] || [];
13176 tweeners[ prop ].unshift( callback );
13177 }
13178 },
13179
13180 prefilter: function( callback, prepend ) {
13181 if ( prepend ) {
13182 animationPrefilters.unshift( callback );
13183 } else {
13184 animationPrefilters.push( callback );
13185 }
13186 }
13187});
13188
13189jQuery.speed = function( speed, easing, fn ) {
13190 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
13191 complete: fn || !fn && easing ||
13192 jQuery.isFunction( speed ) && speed,
13193 duration: speed,
13194 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
13195 };
13196
13197 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
13198 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
13199
13200 // normalize opt.queue - true/undefined/null -> "fx"
13201 if ( opt.queue == null || opt.queue === true ) {
13202 opt.queue = "fx";
13203 }
13204
13205 // Queueing
13206 opt.old = opt.complete;
13207
13208 opt.complete = function() {
13209 if ( jQuery.isFunction( opt.old ) ) {
13210 opt.old.call( this );
13211 }
13212
13213 if ( opt.queue ) {
13214 jQuery.dequeue( this, opt.queue );
13215 }
13216 };
13217
13218 return opt;
13219};
13220
13221jQuery.fn.extend({
13222 fadeTo: function( speed, to, easing, callback ) {
13223
13224 // show any hidden elements after setting opacity to 0
13225 return this.filter( isHidden ).css( "opacity", 0 ).show()
13226
13227 // animate to the value specified
13228 .end().animate({ opacity: to }, speed, easing, callback );
13229 },
13230 animate: function( prop, speed, easing, callback ) {
13231 var empty = jQuery.isEmptyObject( prop ),
13232 optall = jQuery.speed( speed, easing, callback ),
13233 doAnimation = function() {
13234 // Operate on a copy of prop so per-property easing won't be lost
13235 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
13236
13237 // Empty animations, or finishing resolves immediately
13238 if ( empty || data_priv.get( this, "finish" ) ) {
13239 anim.stop( true );
13240 }
13241 };
13242 doAnimation.finish = doAnimation;
13243
13244 return empty || optall.queue === false ?
13245 this.each( doAnimation ) :
13246 this.queue( optall.queue, doAnimation );
13247 },
13248 stop: function( type, clearQueue, gotoEnd ) {
13249 var stopQueue = function( hooks ) {
13250 var stop = hooks.stop;
13251 delete hooks.stop;
13252 stop( gotoEnd );
13253 };
13254
13255 if ( typeof type !== "string" ) {
13256 gotoEnd = clearQueue;
13257 clearQueue = type;
13258 type = undefined;
13259 }
13260 if ( clearQueue && type !== false ) {
13261 this.queue( type || "fx", [] );
13262 }
13263
13264 return this.each(function() {
13265 var dequeue = true,
13266 index = type != null && type + "queueHooks",
13267 timers = jQuery.timers,
13268 data = data_priv.get( this );
13269
13270 if ( index ) {
13271 if ( data[ index ] && data[ index ].stop ) {
13272 stopQueue( data[ index ] );
13273 }
13274 } else {
13275 for ( index in data ) {
13276 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
13277 stopQueue( data[ index ] );
13278 }
13279 }
13280 }
13281
13282 for ( index = timers.length; index--; ) {
13283 if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
13284 timers[ index ].anim.stop( gotoEnd );
13285 dequeue = false;
13286 timers.splice( index, 1 );
13287 }
13288 }
13289
13290 // start the next in the queue if the last step wasn't forced
13291 // timers currently will call their complete callbacks, which will dequeue
13292 // but only if they were gotoEnd
13293 if ( dequeue || !gotoEnd ) {
13294 jQuery.dequeue( this, type );
13295 }
13296 });
13297 },
13298 finish: function( type ) {
13299 if ( type !== false ) {
13300 type = type || "fx";
13301 }
13302 return this.each(function() {
13303 var index,
13304 data = data_priv.get( this ),
13305 queue = data[ type + "queue" ],
13306 hooks = data[ type + "queueHooks" ],
13307 timers = jQuery.timers,
13308 length = queue ? queue.length : 0;
13309
13310 // enable finishing flag on private data
13311 data.finish = true;
13312
13313 // empty the queue first
13314 jQuery.queue( this, type, [] );
13315
13316 if ( hooks && hooks.stop ) {
13317 hooks.stop.call( this, true );
13318 }
13319
13320 // look for any active animations, and finish them
13321 for ( index = timers.length; index--; ) {
13322 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
13323 timers[ index ].anim.stop( true );
13324 timers.splice( index, 1 );
13325 }
13326 }
13327
13328 // look for any animations in the old queue and finish them
13329 for ( index = 0; index < length; index++ ) {
13330 if ( queue[ index ] && queue[ index ].finish ) {
13331 queue[ index ].finish.call( this );
13332 }
13333 }
13334
13335 // turn off finishing flag
13336 delete data.finish;
13337 });
13338 }
13339});
13340
13341jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
13342 var cssFn = jQuery.fn[ name ];
13343 jQuery.fn[ name ] = function( speed, easing, callback ) {
13344 return speed == null || typeof speed === "boolean" ?
13345 cssFn.apply( this, arguments ) :
13346 this.animate( genFx( name, true ), speed, easing, callback );
13347 };
13348});
13349
13350// Generate shortcuts for custom animations
13351jQuery.each({
13352 slideDown: genFx("show"),
13353 slideUp: genFx("hide"),
13354 slideToggle: genFx("toggle"),
13355 fadeIn: { opacity: "show" },
13356 fadeOut: { opacity: "hide" },
13357 fadeToggle: { opacity: "toggle" }
13358}, function( name, props ) {
13359 jQuery.fn[ name ] = function( speed, easing, callback ) {
13360 return this.animate( props, speed, easing, callback );
13361 };
13362});
13363
13364jQuery.timers = [];
13365jQuery.fx.tick = function() {
13366 var timer,
13367 i = 0,
13368 timers = jQuery.timers;
13369
13370 fxNow = jQuery.now();
13371
13372 for ( ; i < timers.length; i++ ) {
13373 timer = timers[ i ];
13374 // Checks the timer has not already been removed
13375 if ( !timer() && timers[ i ] === timer ) {
13376 timers.splice( i--, 1 );
13377 }
13378 }
13379
13380 if ( !timers.length ) {
13381 jQuery.fx.stop();
13382 }
13383 fxNow = undefined;
13384};
13385
13386jQuery.fx.timer = function( timer ) {
13387 jQuery.timers.push( timer );
13388 if ( timer() ) {
13389 jQuery.fx.start();
13390 } else {
13391 jQuery.timers.pop();
13392 }
13393};
13394
13395jQuery.fx.interval = 13;
13396
13397jQuery.fx.start = function() {
13398 if ( !timerId ) {
13399 timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
13400 }
13401};
13402
13403jQuery.fx.stop = function() {
13404 clearInterval( timerId );
13405 timerId = null;
13406};
13407
13408jQuery.fx.speeds = {
13409 slow: 600,
13410 fast: 200,
13411 // Default speed
13412 _default: 400
13413};
13414
13415
13416// Based off of the plugin by Clint Helfers, with permission.
13417// http://blindsignals.com/index.php/2009/07/jquery-delay/
13418jQuery.fn.delay = function( time, type ) {
13419 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
13420 type = type || "fx";
13421
13422 return this.queue( type, function( next, hooks ) {
13423 var timeout = setTimeout( next, time );
13424 hooks.stop = function() {
13425 clearTimeout( timeout );
13426 };
13427 });
13428};
13429
13430
13431(function() {
13432 var input = document.createElement( "input" ),
13433 select = document.createElement( "select" ),
13434 opt = select.appendChild( document.createElement( "option" ) );
13435
13436 input.type = "checkbox";
13437
13438 // Support: iOS 5.1, Android 4.x, Android 2.3
13439 // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
13440 support.checkOn = input.value !== "";
13441
13442 // Must access the parent to make an option select properly
13443 // Support: IE9, IE10
13444 support.optSelected = opt.selected;
13445
13446 // Make sure that the options inside disabled selects aren't marked as disabled
13447 // (WebKit marks them as disabled)
13448 select.disabled = true;
13449 support.optDisabled = !opt.disabled;
13450
13451 // Check if an input maintains its value after becoming a radio
13452 // Support: IE9, IE10
13453 input = document.createElement( "input" );
13454 input.value = "t";
13455 input.type = "radio";
13456 support.radioValue = input.value === "t";
13457})();
13458
13459
13460var nodeHook, boolHook,
13461 attrHandle = jQuery.expr.attrHandle;
13462
13463jQuery.fn.extend({
13464 attr: function( name, value ) {
13465 return access( this, jQuery.attr, name, value, arguments.length > 1 );
13466 },
13467
13468 removeAttr: function( name ) {
13469 return this.each(function() {
13470 jQuery.removeAttr( this, name );
13471 });
13472 }
13473});
13474
13475jQuery.extend({
13476 attr: function( elem, name, value ) {
13477 var hooks, ret,
13478 nType = elem.nodeType;
13479
13480 // don't get/set attributes on text, comment and attribute nodes
13481 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
13482 return;
13483 }
13484
13485 // Fallback to prop when attributes are not supported
13486 if ( typeof elem.getAttribute === strundefined ) {
13487 return jQuery.prop( elem, name, value );
13488 }
13489
13490 // All attributes are lowercase
13491 // Grab necessary hook if one is defined
13492 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
13493 name = name.toLowerCase();
13494 hooks = jQuery.attrHooks[ name ] ||
13495 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
13496 }
13497
13498 if ( value !== undefined ) {
13499
13500 if ( value === null ) {
13501 jQuery.removeAttr( elem, name );
13502
13503 } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
13504 return ret;
13505
13506 } else {
13507 elem.setAttribute( name, value + "" );
13508 return value;
13509 }
13510
13511 } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
13512 return ret;
13513
13514 } else {
13515 ret = jQuery.find.attr( elem, name );
13516
13517 // Non-existent attributes return null, we normalize to undefined
13518 return ret == null ?
13519 undefined :
13520 ret;
13521 }
13522 },
13523
13524 removeAttr: function( elem, value ) {
13525 var name, propName,
13526 i = 0,
13527 attrNames = value && value.match( rnotwhite );
13528
13529 if ( attrNames && elem.nodeType === 1 ) {
13530 while ( (name = attrNames[i++]) ) {
13531 propName = jQuery.propFix[ name ] || name;
13532
13533 // Boolean attributes get special treatment (#10870)
13534 if ( jQuery.expr.match.bool.test( name ) ) {
13535 // Set corresponding property to false
13536 elem[ propName ] = false;
13537 }
13538
13539 elem.removeAttribute( name );
13540 }
13541 }
13542 },
13543
13544 attrHooks: {
13545 type: {
13546 set: function( elem, value ) {
13547 if ( !support.radioValue && value === "radio" &&
13548 jQuery.nodeName( elem, "input" ) ) {
13549 // Setting the type on a radio button after the value resets the value in IE6-9
13550 // Reset value to default in case type is set after value during creation
13551 var val = elem.value;
13552 elem.setAttribute( "type", value );
13553 if ( val ) {
13554 elem.value = val;
13555 }
13556 return value;
13557 }
13558 }
13559 }
13560 }
13561});
13562
13563// Hooks for boolean attributes
13564boolHook = {
13565 set: function( elem, value, name ) {
13566 if ( value === false ) {
13567 // Remove boolean attributes when set to false
13568 jQuery.removeAttr( elem, name );
13569 } else {
13570 elem.setAttribute( name, name );
13571 }
13572 return name;
13573 }
13574};
13575jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
13576 var getter = attrHandle[ name ] || jQuery.find.attr;
13577
13578 attrHandle[ name ] = function( elem, name, isXML ) {
13579 var ret, handle;
13580 if ( !isXML ) {
13581 // Avoid an infinite loop by temporarily removing this function from the getter
13582 handle = attrHandle[ name ];
13583 attrHandle[ name ] = ret;
13584 ret = getter( elem, name, isXML ) != null ?
13585 name.toLowerCase() :
13586 null;
13587 attrHandle[ name ] = handle;
13588 }
13589 return ret;
13590 };
13591});
13592
13593
13594
13595
13596var rfocusable = /^(?:input|select|textarea|button)$/i;
13597
13598jQuery.fn.extend({
13599 prop: function( name, value ) {
13600 return access( this, jQuery.prop, name, value, arguments.length > 1 );
13601 },
13602
13603 removeProp: function( name ) {
13604 return this.each(function() {
13605 delete this[ jQuery.propFix[ name ] || name ];
13606 });
13607 }
13608});
13609
13610jQuery.extend({
13611 propFix: {
13612 "for": "htmlFor",
13613 "class": "className"
13614 },
13615
13616 prop: function( elem, name, value ) {
13617 var ret, hooks, notxml,
13618 nType = elem.nodeType;
13619
13620 // don't get/set properties on text, comment and attribute nodes
13621 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
13622 return;
13623 }
13624
13625 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
13626
13627 if ( notxml ) {
13628 // Fix name and attach hooks
13629 name = jQuery.propFix[ name ] || name;
13630 hooks = jQuery.propHooks[ name ];
13631 }
13632
13633 if ( value !== undefined ) {
13634 return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
13635 ret :
13636 ( elem[ name ] = value );
13637
13638 } else {
13639 return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
13640 ret :
13641 elem[ name ];
13642 }
13643 },
13644
13645 propHooks: {
13646 tabIndex: {
13647 get: function( elem ) {
13648 return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
13649 elem.tabIndex :
13650 -1;
13651 }
13652 }
13653 }
13654});
13655
13656// Support: IE9+
13657// Selectedness for an option in an optgroup can be inaccurate
13658if ( !support.optSelected ) {
13659 jQuery.propHooks.selected = {
13660 get: function( elem ) {
13661 var parent = elem.parentNode;
13662 if ( parent && parent.parentNode ) {
13663 parent.parentNode.selectedIndex;
13664 }
13665 return null;
13666 }
13667 };
13668}
13669
13670jQuery.each([
13671 "tabIndex",
13672 "readOnly",
13673 "maxLength",
13674 "cellSpacing",
13675 "cellPadding",
13676 "rowSpan",
13677 "colSpan",
13678 "useMap",
13679 "frameBorder",
13680 "contentEditable"
13681], function() {
13682 jQuery.propFix[ this.toLowerCase() ] = this;
13683});
13684
13685
13686
13687
13688var rclass = /[\t\r\n\f]/g;
13689
13690jQuery.fn.extend({
13691 addClass: function( value ) {
13692 var classes, elem, cur, clazz, j, finalValue,
13693 proceed = typeof value === "string" && value,
13694 i = 0,
13695 len = this.length;
13696
13697 if ( jQuery.isFunction( value ) ) {
13698 return this.each(function( j ) {
13699 jQuery( this ).addClass( value.call( this, j, this.className ) );
13700 });
13701 }
13702
13703 if ( proceed ) {
13704 // The disjunction here is for better compressibility (see removeClass)
13705 classes = ( value || "" ).match( rnotwhite ) || [];
13706
13707 for ( ; i < len; i++ ) {
13708 elem = this[ i ];
13709 cur = elem.nodeType === 1 && ( elem.className ?
13710 ( " " + elem.className + " " ).replace( rclass, " " ) :
13711 " "
13712 );
13713
13714 if ( cur ) {
13715 j = 0;
13716 while ( (clazz = classes[j++]) ) {
13717 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
13718 cur += clazz + " ";
13719 }
13720 }
13721
13722 // only assign if different to avoid unneeded rendering.
13723 finalValue = jQuery.trim( cur );
13724 if ( elem.className !== finalValue ) {
13725 elem.className = finalValue;
13726 }
13727 }
13728 }
13729 }
13730
13731 return this;
13732 },
13733
13734 removeClass: function( value ) {
13735 var classes, elem, cur, clazz, j, finalValue,
13736 proceed = arguments.length === 0 || typeof value === "string" && value,
13737 i = 0,
13738 len = this.length;
13739
13740 if ( jQuery.isFunction( value ) ) {
13741 return this.each(function( j ) {
13742 jQuery( this ).removeClass( value.call( this, j, this.className ) );
13743 });
13744 }
13745 if ( proceed ) {
13746 classes = ( value || "" ).match( rnotwhite ) || [];
13747
13748 for ( ; i < len; i++ ) {
13749 elem = this[ i ];
13750 // This expression is here for better compressibility (see addClass)
13751 cur = elem.nodeType === 1 && ( elem.className ?
13752 ( " " + elem.className + " " ).replace( rclass, " " ) :
13753 ""
13754 );
13755
13756 if ( cur ) {
13757 j = 0;
13758 while ( (clazz = classes[j++]) ) {
13759 // Remove *all* instances
13760 while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
13761 cur = cur.replace( " " + clazz + " ", " " );
13762 }
13763 }
13764
13765 // only assign if different to avoid unneeded rendering.
13766 finalValue = value ? jQuery.trim( cur ) : "";
13767 if ( elem.className !== finalValue ) {
13768 elem.className = finalValue;
13769 }
13770 }
13771 }
13772 }
13773
13774 return this;
13775 },
13776
13777 toggleClass: function( value, stateVal ) {
13778 var type = typeof value;
13779
13780 if ( typeof stateVal === "boolean" && type === "string" ) {
13781 return stateVal ? this.addClass( value ) : this.removeClass( value );
13782 }
13783
13784 if ( jQuery.isFunction( value ) ) {
13785 return this.each(function( i ) {
13786 jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
13787 });
13788 }
13789
13790 return this.each(function() {
13791 if ( type === "string" ) {
13792 // toggle individual class names
13793 var className,
13794 i = 0,
13795 self = jQuery( this ),
13796 classNames = value.match( rnotwhite ) || [];
13797
13798 while ( (className = classNames[ i++ ]) ) {
13799 // check each className given, space separated list
13800 if ( self.hasClass( className ) ) {
13801 self.removeClass( className );
13802 } else {
13803 self.addClass( className );
13804 }
13805 }
13806
13807 // Toggle whole class name
13808 } else if ( type === strundefined || type === "boolean" ) {
13809 if ( this.className ) {
13810 // store className if set
13811 data_priv.set( this, "__className__", this.className );
13812 }
13813
13814 // If the element has a class name or if we're passed "false",
13815 // then remove the whole classname (if there was one, the above saved it).
13816 // Otherwise bring back whatever was previously saved (if anything),
13817 // falling back to the empty string if nothing was stored.
13818 this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
13819 }
13820 });
13821 },
13822
13823 hasClass: function( selector ) {
13824 var className = " " + selector + " ",
13825 i = 0,
13826 l = this.length;
13827 for ( ; i < l; i++ ) {
13828 if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
13829 return true;
13830 }
13831 }
13832
13833 return false;
13834 }
13835});
13836
13837
13838
13839
13840var rreturn = /\r/g;
13841
13842jQuery.fn.extend({
13843 val: function( value ) {
13844 var hooks, ret, isFunction,
13845 elem = this[0];
13846
13847 if ( !arguments.length ) {
13848 if ( elem ) {
13849 hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
13850
13851 if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
13852 return ret;
13853 }
13854
13855 ret = elem.value;
13856
13857 return typeof ret === "string" ?
13858 // handle most common string cases
13859 ret.replace(rreturn, "") :
13860 // handle cases where value is null/undef or number
13861 ret == null ? "" : ret;
13862 }
13863
13864 return;
13865 }
13866
13867 isFunction = jQuery.isFunction( value );
13868
13869 return this.each(function( i ) {
13870 var val;
13871
13872 if ( this.nodeType !== 1 ) {
13873 return;
13874 }
13875
13876 if ( isFunction ) {
13877 val = value.call( this, i, jQuery( this ).val() );
13878 } else {
13879 val = value;
13880 }
13881
13882 // Treat null/undefined as ""; convert numbers to string
13883 if ( val == null ) {
13884 val = "";
13885
13886 } else if ( typeof val === "number" ) {
13887 val += "";
13888
13889 } else if ( jQuery.isArray( val ) ) {
13890 val = jQuery.map( val, function( value ) {
13891 return value == null ? "" : value + "";
13892 });
13893 }
13894
13895 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
13896
13897 // If set returns undefined, fall back to normal setting
13898 if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
13899 this.value = val;
13900 }
13901 });
13902 }
13903});
13904
13905jQuery.extend({
13906 valHooks: {
13907 option: {
13908 get: function( elem ) {
13909 var val = jQuery.find.attr( elem, "value" );
13910 return val != null ?
13911 val :
13912 // Support: IE10-11+
13913 // option.text throws exceptions (#14686, #14858)
13914 jQuery.trim( jQuery.text( elem ) );
13915 }
13916 },
13917 select: {
13918 get: function( elem ) {
13919 var value, option,
13920 options = elem.options,
13921 index = elem.selectedIndex,
13922 one = elem.type === "select-one" || index < 0,
13923 values = one ? null : [],
13924 max = one ? index + 1 : options.length,
13925 i = index < 0 ?
13926 max :
13927 one ? index : 0;
13928
13929 // Loop through all the selected options
13930 for ( ; i < max; i++ ) {
13931 option = options[ i ];
13932
13933 // IE6-9 doesn't update selected after form reset (#2551)
13934 if ( ( option.selected || i === index ) &&
13935 // Don't return options that are disabled or in a disabled optgroup
13936 ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
13937 ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
13938
13939 // Get the specific value for the option
13940 value = jQuery( option ).val();
13941
13942 // We don't need an array for one selects
13943 if ( one ) {
13944 return value;
13945 }
13946
13947 // Multi-Selects return an array
13948 values.push( value );
13949 }
13950 }
13951
13952 return values;
13953 },
13954
13955 set: function( elem, value ) {
13956 var optionSet, option,
13957 options = elem.options,
13958 values = jQuery.makeArray( value ),
13959 i = options.length;
13960
13961 while ( i-- ) {
13962 option = options[ i ];
13963 if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
13964 optionSet = true;
13965 }
13966 }
13967
13968 // force browsers to behave consistently when non-matching value is set
13969 if ( !optionSet ) {
13970 elem.selectedIndex = -1;
13971 }
13972 return values;
13973 }
13974 }
13975 }
13976});
13977
13978// Radios and checkboxes getter/setter
13979jQuery.each([ "radio", "checkbox" ], function() {
13980 jQuery.valHooks[ this ] = {
13981 set: function( elem, value ) {
13982 if ( jQuery.isArray( value ) ) {
13983 return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
13984 }
13985 }
13986 };
13987 if ( !support.checkOn ) {
13988 jQuery.valHooks[ this ].get = function( elem ) {
13989 // Support: Webkit
13990 // "" is returned instead of "on" if a value isn't specified
13991 return elem.getAttribute("value") === null ? "on" : elem.value;
13992 };
13993 }
13994});
13995
13996
13997
13998
13999// Return jQuery for attributes-only inclusion
14000
14001
14002jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
14003 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
14004 "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
14005
14006 // Handle event binding
14007 jQuery.fn[ name ] = function( data, fn ) {
14008 return arguments.length > 0 ?
14009 this.on( name, null, data, fn ) :
14010 this.trigger( name );
14011 };
14012});
14013
14014jQuery.fn.extend({
14015 hover: function( fnOver, fnOut ) {
14016 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
14017 },
14018
14019 bind: function( types, data, fn ) {
14020 return this.on( types, null, data, fn );
14021 },
14022 unbind: function( types, fn ) {
14023 return this.off( types, null, fn );
14024 },
14025
14026 delegate: function( selector, types, data, fn ) {
14027 return this.on( types, selector, data, fn );
14028 },
14029 undelegate: function( selector, types, fn ) {
14030 // ( namespace ) or ( selector, types [, fn] )
14031 return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
14032 }
14033});
14034
14035
14036var nonce = jQuery.now();
14037
14038var rquery = (/\?/);
14039
14040
14041
14042// Support: Android 2.3
14043// Workaround failure to string-cast null input
14044jQuery.parseJSON = function( data ) {
14045 return JSON.parse( data + "" );
14046};
14047
14048
14049// Cross-browser xml parsing
14050jQuery.parseXML = function( data ) {
14051 var xml, tmp;
14052 if ( !data || typeof data !== "string" ) {
14053 return null;
14054 }
14055
14056 // Support: IE9
14057 try {
14058 tmp = new DOMParser();
14059 xml = tmp.parseFromString( data, "text/xml" );
14060 } catch ( e ) {
14061 xml = undefined;
14062 }
14063
14064 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
14065 jQuery.error( "Invalid XML: " + data );
14066 }
14067 return xml;
14068};
14069
14070
14071var
14072 // Document location
14073 ajaxLocParts,
14074 ajaxLocation,
14075
14076 rhash = /#.*$/,
14077 rts = /([?&])_=[^&]*/,
14078 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
14079 // #7653, #8125, #8152: local protocol detection
14080 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
14081 rnoContent = /^(?:GET|HEAD)$/,
14082 rprotocol = /^\/\//,
14083 rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
14084
14085 /* Prefilters
14086 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
14087 * 2) These are called:
14088 * - BEFORE asking for a transport
14089 * - AFTER param serialization (s.data is a string if s.processData is true)
14090 * 3) key is the dataType
14091 * 4) the catchall symbol "*" can be used
14092 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
14093 */
14094 prefilters = {},
14095
14096 /* Transports bindings
14097 * 1) key is the dataType
14098 * 2) the catchall symbol "*" can be used
14099 * 3) selection will start with transport dataType and THEN go to "*" if needed
14100 */
14101 transports = {},
14102
14103 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
14104 allTypes = "*/".concat("*");
14105
14106// #8138, IE may throw an exception when accessing
14107// a field from window.location if document.domain has been set
14108try {
14109 ajaxLocation = location.href;
14110} catch( e ) {
14111 // Use the href attribute of an A element
14112 // since IE will modify it given document.location
14113 ajaxLocation = document.createElement( "a" );
14114 ajaxLocation.href = "";
14115 ajaxLocation = ajaxLocation.href;
14116}
14117
14118// Segment location into parts
14119ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
14120
14121// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
14122function addToPrefiltersOrTransports( structure ) {
14123
14124 // dataTypeExpression is optional and defaults to "*"
14125 return function( dataTypeExpression, func ) {
14126
14127 if ( typeof dataTypeExpression !== "string" ) {
14128 func = dataTypeExpression;
14129 dataTypeExpression = "*";
14130 }
14131
14132 var dataType,
14133 i = 0,
14134 dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
14135
14136 if ( jQuery.isFunction( func ) ) {
14137 // For each dataType in the dataTypeExpression
14138 while ( (dataType = dataTypes[i++]) ) {
14139 // Prepend if requested
14140 if ( dataType[0] === "+" ) {
14141 dataType = dataType.slice( 1 ) || "*";
14142 (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
14143
14144 // Otherwise append
14145 } else {
14146 (structure[ dataType ] = structure[ dataType ] || []).push( func );
14147 }
14148 }
14149 }
14150 };
14151}
14152
14153// Base inspection function for prefilters and transports
14154function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
14155
14156 var inspected = {},
14157 seekingTransport = ( structure === transports );
14158
14159 function inspect( dataType ) {
14160 var selected;
14161 inspected[ dataType ] = true;
14162 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
14163 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
14164 if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
14165 options.dataTypes.unshift( dataTypeOrTransport );
14166 inspect( dataTypeOrTransport );
14167 return false;
14168 } else if ( seekingTransport ) {
14169 return !( selected = dataTypeOrTransport );
14170 }
14171 });
14172 return selected;
14173 }
14174
14175 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
14176}
14177
14178// A special extend for ajax options
14179// that takes "flat" options (not to be deep extended)
14180// Fixes #9887
14181function ajaxExtend( target, src ) {
14182 var key, deep,
14183 flatOptions = jQuery.ajaxSettings.flatOptions || {};
14184
14185 for ( key in src ) {
14186 if ( src[ key ] !== undefined ) {
14187 ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
14188 }
14189 }
14190 if ( deep ) {
14191 jQuery.extend( true, target, deep );
14192 }
14193
14194 return target;
14195}
14196
14197/* Handles responses to an ajax request:
14198 * - finds the right dataType (mediates between content-type and expected dataType)
14199 * - returns the corresponding response
14200 */
14201function ajaxHandleResponses( s, jqXHR, responses ) {
14202
14203 var ct, type, finalDataType, firstDataType,
14204 contents = s.contents,
14205 dataTypes = s.dataTypes;
14206
14207 // Remove auto dataType and get content-type in the process
14208 while ( dataTypes[ 0 ] === "*" ) {
14209 dataTypes.shift();
14210 if ( ct === undefined ) {
14211 ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
14212 }
14213 }
14214
14215 // Check if we're dealing with a known content-type
14216 if ( ct ) {
14217 for ( type in contents ) {
14218 if ( contents[ type ] && contents[ type ].test( ct ) ) {
14219 dataTypes.unshift( type );
14220 break;
14221 }
14222 }
14223 }
14224
14225 // Check to see if we have a response for the expected dataType
14226 if ( dataTypes[ 0 ] in responses ) {
14227 finalDataType = dataTypes[ 0 ];
14228 } else {
14229 // Try convertible dataTypes
14230 for ( type in responses ) {
14231 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
14232 finalDataType = type;
14233 break;
14234 }
14235 if ( !firstDataType ) {
14236 firstDataType = type;
14237 }
14238 }
14239 // Or just use first one
14240 finalDataType = finalDataType || firstDataType;
14241 }
14242
14243 // If we found a dataType
14244 // We add the dataType to the list if needed
14245 // and return the corresponding response
14246 if ( finalDataType ) {
14247 if ( finalDataType !== dataTypes[ 0 ] ) {
14248 dataTypes.unshift( finalDataType );
14249 }
14250 return responses[ finalDataType ];
14251 }
14252}
14253
14254/* Chain conversions given the request and the original response
14255 * Also sets the responseXXX fields on the jqXHR instance
14256 */
14257function ajaxConvert( s, response, jqXHR, isSuccess ) {
14258 var conv2, current, conv, tmp, prev,
14259 converters = {},
14260 // Work with a copy of dataTypes in case we need to modify it for conversion
14261 dataTypes = s.dataTypes.slice();
14262
14263 // Create converters map with lowercased keys
14264 if ( dataTypes[ 1 ] ) {
14265 for ( conv in s.converters ) {
14266 converters[ conv.toLowerCase() ] = s.converters[ conv ];
14267 }
14268 }
14269
14270 current = dataTypes.shift();
14271
14272 // Convert to each sequential dataType
14273 while ( current ) {
14274
14275 if ( s.responseFields[ current ] ) {
14276 jqXHR[ s.responseFields[ current ] ] = response;
14277 }
14278
14279 // Apply the dataFilter if provided
14280 if ( !prev && isSuccess && s.dataFilter ) {
14281 response = s.dataFilter( response, s.dataType );
14282 }
14283
14284 prev = current;
14285 current = dataTypes.shift();
14286
14287 if ( current ) {
14288
14289 // There's only work to do if current dataType is non-auto
14290 if ( current === "*" ) {
14291
14292 current = prev;
14293
14294 // Convert response if prev dataType is non-auto and differs from current
14295 } else if ( prev !== "*" && prev !== current ) {
14296
14297 // Seek a direct converter
14298 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
14299
14300 // If none found, seek a pair
14301 if ( !conv ) {
14302 for ( conv2 in converters ) {
14303
14304 // If conv2 outputs current
14305 tmp = conv2.split( " " );
14306 if ( tmp[ 1 ] === current ) {
14307
14308 // If prev can be converted to accepted input
14309 conv = converters[ prev + " " + tmp[ 0 ] ] ||
14310 converters[ "* " + tmp[ 0 ] ];
14311 if ( conv ) {
14312 // Condense equivalence converters
14313 if ( conv === true ) {
14314 conv = converters[ conv2 ];
14315
14316 // Otherwise, insert the intermediate dataType
14317 } else if ( converters[ conv2 ] !== true ) {
14318 current = tmp[ 0 ];
14319 dataTypes.unshift( tmp[ 1 ] );
14320 }
14321 break;
14322 }
14323 }
14324 }
14325 }
14326
14327 // Apply converter (if not an equivalence)
14328 if ( conv !== true ) {
14329
14330 // Unless errors are allowed to bubble, catch and return them
14331 if ( conv && s[ "throws" ] ) {
14332 response = conv( response );
14333 } else {
14334 try {
14335 response = conv( response );
14336 } catch ( e ) {
14337 return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
14338 }
14339 }
14340 }
14341 }
14342 }
14343 }
14344
14345 return { state: "success", data: response };
14346}
14347
14348jQuery.extend({
14349
14350 // Counter for holding the number of active queries
14351 active: 0,
14352
14353 // Last-Modified header cache for next request
14354 lastModified: {},
14355 etag: {},
14356
14357 ajaxSettings: {
14358 url: ajaxLocation,
14359 type: "GET",
14360 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
14361 global: true,
14362 processData: true,
14363 async: true,
14364 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
14365 /*
14366 timeout: 0,
14367 data: null,
14368 dataType: null,
14369 username: null,
14370 password: null,
14371 cache: null,
14372 throws: false,
14373 traditional: false,
14374 headers: {},
14375 */
14376
14377 accepts: {
14378 "*": allTypes,
14379 text: "text/plain",
14380 html: "text/html",
14381 xml: "application/xml, text/xml",
14382 json: "application/json, text/javascript"
14383 },
14384
14385 contents: {
14386 xml: /xml/,
14387 html: /html/,
14388 json: /json/
14389 },
14390
14391 responseFields: {
14392 xml: "responseXML",
14393 text: "responseText",
14394 json: "responseJSON"
14395 },
14396
14397 // Data converters
14398 // Keys separate source (or catchall "*") and destination types with a single space
14399 converters: {
14400
14401 // Convert anything to text
14402 "* text": String,
14403
14404 // Text to html (true = no transformation)
14405 "text html": true,
14406
14407 // Evaluate text as a json expression
14408 "text json": jQuery.parseJSON,
14409
14410 // Parse text as xml
14411 "text xml": jQuery.parseXML
14412 },
14413
14414 // For options that shouldn't be deep extended:
14415 // you can add your own custom options here if
14416 // and when you create one that shouldn't be
14417 // deep extended (see ajaxExtend)
14418 flatOptions: {
14419 url: true,
14420 context: true
14421 }
14422 },
14423
14424 // Creates a full fledged settings object into target
14425 // with both ajaxSettings and settings fields.
14426 // If target is omitted, writes into ajaxSettings.
14427 ajaxSetup: function( target, settings ) {
14428 return settings ?
14429
14430 // Building a settings object
14431 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
14432
14433 // Extending ajaxSettings
14434 ajaxExtend( jQuery.ajaxSettings, target );
14435 },
14436
14437 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
14438 ajaxTransport: addToPrefiltersOrTransports( transports ),
14439
14440 // Main method
14441 ajax: function( url, options ) {
14442
14443 // If url is an object, simulate pre-1.5 signature
14444 if ( typeof url === "object" ) {
14445 options = url;
14446 url = undefined;
14447 }
14448
14449 // Force options to be an object
14450 options = options || {};
14451
14452 var transport,
14453 // URL without anti-cache param
14454 cacheURL,
14455 // Response headers
14456 responseHeadersString,
14457 responseHeaders,
14458 // timeout handle
14459 timeoutTimer,
14460 // Cross-domain detection vars
14461 parts,
14462 // To know if global events are to be dispatched
14463 fireGlobals,
14464 // Loop variable
14465 i,
14466 // Create the final options object
14467 s = jQuery.ajaxSetup( {}, options ),
14468 // Callbacks context
14469 callbackContext = s.context || s,
14470 // Context for global events is callbackContext if it is a DOM node or jQuery collection
14471 globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
14472 jQuery( callbackContext ) :
14473 jQuery.event,
14474 // Deferreds
14475 deferred = jQuery.Deferred(),
14476 completeDeferred = jQuery.Callbacks("once memory"),
14477 // Status-dependent callbacks
14478 statusCode = s.statusCode || {},
14479 // Headers (they are sent all at once)
14480 requestHeaders = {},
14481 requestHeadersNames = {},
14482 // The jqXHR state
14483 state = 0,
14484 // Default abort message
14485 strAbort = "canceled",
14486 // Fake xhr
14487 jqXHR = {
14488 readyState: 0,
14489
14490 // Builds headers hashtable if needed
14491 getResponseHeader: function( key ) {
14492 var match;
14493 if ( state === 2 ) {
14494 if ( !responseHeaders ) {
14495 responseHeaders = {};
14496 while ( (match = rheaders.exec( responseHeadersString )) ) {
14497 responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
14498 }
14499 }
14500 match = responseHeaders[ key.toLowerCase() ];
14501 }
14502 return match == null ? null : match;
14503 },
14504
14505 // Raw string
14506 getAllResponseHeaders: function() {
14507 return state === 2 ? responseHeadersString : null;
14508 },
14509
14510 // Caches the header
14511 setRequestHeader: function( name, value ) {
14512 var lname = name.toLowerCase();
14513 if ( !state ) {
14514 name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
14515 requestHeaders[ name ] = value;
14516 }
14517 return this;
14518 },
14519
14520 // Overrides response content-type header
14521 overrideMimeType: function( type ) {
14522 if ( !state ) {
14523 s.mimeType = type;
14524 }
14525 return this;
14526 },
14527
14528 // Status-dependent callbacks
14529 statusCode: function( map ) {
14530 var code;
14531 if ( map ) {
14532 if ( state < 2 ) {
14533 for ( code in map ) {
14534 // Lazy-add the new callback in a way that preserves old ones
14535 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
14536 }
14537 } else {
14538 // Execute the appropriate callbacks
14539 jqXHR.always( map[ jqXHR.status ] );
14540 }
14541 }
14542 return this;
14543 },
14544
14545 // Cancel the request
14546 abort: function( statusText ) {
14547 var finalText = statusText || strAbort;
14548 if ( transport ) {
14549 transport.abort( finalText );
14550 }
14551 done( 0, finalText );
14552 return this;
14553 }
14554 };
14555
14556 // Attach deferreds
14557 deferred.promise( jqXHR ).complete = completeDeferred.add;
14558 jqXHR.success = jqXHR.done;
14559 jqXHR.error = jqXHR.fail;
14560
14561 // Remove hash character (#7531: and string promotion)
14562 // Add protocol if not provided (prefilters might expect it)
14563 // Handle falsy url in the settings object (#10093: consistency with old signature)
14564 // We also use the url parameter if available
14565 s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
14566 .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
14567
14568 // Alias method option to type as per ticket #12004
14569 s.type = options.method || options.type || s.method || s.type;
14570
14571 // Extract dataTypes list
14572 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
14573
14574 // A cross-domain request is in order when we have a protocol:host:port mismatch
14575 if ( s.crossDomain == null ) {
14576 parts = rurl.exec( s.url.toLowerCase() );
14577 s.crossDomain = !!( parts &&
14578 ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
14579 ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
14580 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
14581 );
14582 }
14583
14584 // Convert data if not already a string
14585 if ( s.data && s.processData && typeof s.data !== "string" ) {
14586 s.data = jQuery.param( s.data, s.traditional );
14587 }
14588
14589 // Apply prefilters
14590 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
14591
14592 // If request was aborted inside a prefilter, stop there
14593 if ( state === 2 ) {
14594 return jqXHR;
14595 }
14596
14597 // We can fire global events as of now if asked to
14598 fireGlobals = s.global;
14599
14600 // Watch for a new set of requests
14601 if ( fireGlobals && jQuery.active++ === 0 ) {
14602 jQuery.event.trigger("ajaxStart");
14603 }
14604
14605 // Uppercase the type
14606 s.type = s.type.toUpperCase();
14607
14608 // Determine if request has content
14609 s.hasContent = !rnoContent.test( s.type );
14610
14611 // Save the URL in case we're toying with the If-Modified-Since
14612 // and/or If-None-Match header later on
14613 cacheURL = s.url;
14614
14615 // More options handling for requests with no content
14616 if ( !s.hasContent ) {
14617
14618 // If data is available, append data to url
14619 if ( s.data ) {
14620 cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
14621 // #9682: remove data so that it's not used in an eventual retry
14622 delete s.data;
14623 }
14624
14625 // Add anti-cache in url if needed
14626 if ( s.cache === false ) {
14627 s.url = rts.test( cacheURL ) ?
14628
14629 // If there is already a '_' parameter, set its value
14630 cacheURL.replace( rts, "$1_=" + nonce++ ) :
14631
14632 // Otherwise add one to the end
14633 cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
14634 }
14635 }
14636
14637 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
14638 if ( s.ifModified ) {
14639 if ( jQuery.lastModified[ cacheURL ] ) {
14640 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
14641 }
14642 if ( jQuery.etag[ cacheURL ] ) {
14643 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
14644 }
14645 }
14646
14647 // Set the correct header, if data is being sent
14648 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
14649 jqXHR.setRequestHeader( "Content-Type", s.contentType );
14650 }
14651
14652 // Set the Accepts header for the server, depending on the dataType
14653 jqXHR.setRequestHeader(
14654 "Accept",
14655 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
14656 s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
14657 s.accepts[ "*" ]
14658 );
14659
14660 // Check for headers option
14661 for ( i in s.headers ) {
14662 jqXHR.setRequestHeader( i, s.headers[ i ] );
14663 }
14664
14665 // Allow custom headers/mimetypes and early abort
14666 if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
14667 // Abort if not done already and return
14668 return jqXHR.abort();
14669 }
14670
14671 // aborting is no longer a cancellation
14672 strAbort = "abort";
14673
14674 // Install callbacks on deferreds
14675 for ( i in { success: 1, error: 1, complete: 1 } ) {
14676 jqXHR[ i ]( s[ i ] );
14677 }
14678
14679 // Get transport
14680 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
14681
14682 // If no transport, we auto-abort
14683 if ( !transport ) {
14684 done( -1, "No Transport" );
14685 } else {
14686 jqXHR.readyState = 1;
14687
14688 // Send global event
14689 if ( fireGlobals ) {
14690 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
14691 }
14692 // Timeout
14693 if ( s.async && s.timeout > 0 ) {
14694 timeoutTimer = setTimeout(function() {
14695 jqXHR.abort("timeout");
14696 }, s.timeout );
14697 }
14698
14699 try {
14700 state = 1;
14701 transport.send( requestHeaders, done );
14702 } catch ( e ) {
14703 // Propagate exception as error if not done
14704 if ( state < 2 ) {
14705 done( -1, e );
14706 // Simply rethrow otherwise
14707 } else {
14708 throw e;
14709 }
14710 }
14711 }
14712
14713 // Callback for when everything is done
14714 function done( status, nativeStatusText, responses, headers ) {
14715 var isSuccess, success, error, response, modified,
14716 statusText = nativeStatusText;
14717
14718 // Called once
14719 if ( state === 2 ) {
14720 return;
14721 }
14722
14723 // State is "done" now
14724 state = 2;
14725
14726 // Clear timeout if it exists
14727 if ( timeoutTimer ) {
14728 clearTimeout( timeoutTimer );
14729 }
14730
14731 // Dereference transport for early garbage collection
14732 // (no matter how long the jqXHR object will be used)
14733 transport = undefined;
14734
14735 // Cache response headers
14736 responseHeadersString = headers || "";
14737
14738 // Set readyState
14739 jqXHR.readyState = status > 0 ? 4 : 0;
14740
14741 // Determine if successful
14742 isSuccess = status >= 200 && status < 300 || status === 304;
14743
14744 // Get response data
14745 if ( responses ) {
14746 response = ajaxHandleResponses( s, jqXHR, responses );
14747 }
14748
14749 // Convert no matter what (that way responseXXX fields are always set)
14750 response = ajaxConvert( s, response, jqXHR, isSuccess );
14751
14752 // If successful, handle type chaining
14753 if ( isSuccess ) {
14754
14755 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
14756 if ( s.ifModified ) {
14757 modified = jqXHR.getResponseHeader("Last-Modified");
14758 if ( modified ) {
14759 jQuery.lastModified[ cacheURL ] = modified;
14760 }
14761 modified = jqXHR.getResponseHeader("etag");
14762 if ( modified ) {
14763 jQuery.etag[ cacheURL ] = modified;
14764 }
14765 }
14766
14767 // if no content
14768 if ( status === 204 || s.type === "HEAD" ) {
14769 statusText = "nocontent";
14770
14771 // if not modified
14772 } else if ( status === 304 ) {
14773 statusText = "notmodified";
14774
14775 // If we have data, let's convert it
14776 } else {
14777 statusText = response.state;
14778 success = response.data;
14779 error = response.error;
14780 isSuccess = !error;
14781 }
14782 } else {
14783 // We extract error from statusText
14784 // then normalize statusText and status for non-aborts
14785 error = statusText;
14786 if ( status || !statusText ) {
14787 statusText = "error";
14788 if ( status < 0 ) {
14789 status = 0;
14790 }
14791 }
14792 }
14793
14794 // Set data for the fake xhr object
14795 jqXHR.status = status;
14796 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
14797
14798 // Success/Error
14799 if ( isSuccess ) {
14800 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
14801 } else {
14802 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
14803 }
14804
14805 // Status-dependent callbacks
14806 jqXHR.statusCode( statusCode );
14807 statusCode = undefined;
14808
14809 if ( fireGlobals ) {
14810 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
14811 [ jqXHR, s, isSuccess ? success : error ] );
14812 }
14813
14814 // Complete
14815 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
14816
14817 if ( fireGlobals ) {
14818 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
14819 // Handle the global AJAX counter
14820 if ( !( --jQuery.active ) ) {
14821 jQuery.event.trigger("ajaxStop");
14822 }
14823 }
14824 }
14825
14826 return jqXHR;
14827 },
14828
14829 getJSON: function( url, data, callback ) {
14830 return jQuery.get( url, data, callback, "json" );
14831 },
14832
14833 getScript: function( url, callback ) {
14834 return jQuery.get( url, undefined, callback, "script" );
14835 }
14836});
14837
14838jQuery.each( [ "get", "post" ], function( i, method ) {
14839 jQuery[ method ] = function( url, data, callback, type ) {
14840 // shift arguments if data argument was omitted
14841 if ( jQuery.isFunction( data ) ) {
14842 type = type || callback;
14843 callback = data;
14844 data = undefined;
14845 }
14846
14847 return jQuery.ajax({
14848 url: url,
14849 type: method,
14850 dataType: type,
14851 data: data,
14852 success: callback
14853 });
14854 };
14855});
14856
14857// Attach a bunch of functions for handling common AJAX events
14858jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
14859 jQuery.fn[ type ] = function( fn ) {
14860 return this.on( type, fn );
14861 };
14862});
14863
14864
14865jQuery._evalUrl = function( url ) {
14866 return jQuery.ajax({
14867 url: url,
14868 type: "GET",
14869 dataType: "script",
14870 async: false,
14871 global: false,
14872 "throws": true
14873 });
14874};
14875
14876
14877jQuery.fn.extend({
14878 wrapAll: function( html ) {
14879 var wrap;
14880
14881 if ( jQuery.isFunction( html ) ) {
14882 return this.each(function( i ) {
14883 jQuery( this ).wrapAll( html.call(this, i) );
14884 });
14885 }
14886
14887 if ( this[ 0 ] ) {
14888
14889 // The elements to wrap the target around
14890 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
14891
14892 if ( this[ 0 ].parentNode ) {
14893 wrap.insertBefore( this[ 0 ] );
14894 }
14895
14896 wrap.map(function() {
14897 var elem = this;
14898
14899 while ( elem.firstElementChild ) {
14900 elem = elem.firstElementChild;
14901 }
14902
14903 return elem;
14904 }).append( this );
14905 }
14906
14907 return this;
14908 },
14909
14910 wrapInner: function( html ) {
14911 if ( jQuery.isFunction( html ) ) {
14912 return this.each(function( i ) {
14913 jQuery( this ).wrapInner( html.call(this, i) );
14914 });
14915 }
14916
14917 return this.each(function() {
14918 var self = jQuery( this ),
14919 contents = self.contents();
14920
14921 if ( contents.length ) {
14922 contents.wrapAll( html );
14923
14924 } else {
14925 self.append( html );
14926 }
14927 });
14928 },
14929
14930 wrap: function( html ) {
14931 var isFunction = jQuery.isFunction( html );
14932
14933 return this.each(function( i ) {
14934 jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
14935 });
14936 },
14937
14938 unwrap: function() {
14939 return this.parent().each(function() {
14940 if ( !jQuery.nodeName( this, "body" ) ) {
14941 jQuery( this ).replaceWith( this.childNodes );
14942 }
14943 }).end();
14944 }
14945});
14946
14947
14948jQuery.expr.filters.hidden = function( elem ) {
14949 // Support: Opera <= 12.12
14950 // Opera reports offsetWidths and offsetHeights less than zero on some elements
14951 return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
14952};
14953jQuery.expr.filters.visible = function( elem ) {
14954 return !jQuery.expr.filters.hidden( elem );
14955};
14956
14957
14958
14959
14960var r20 = /%20/g,
14961 rbracket = /\[\]$/,
14962 rCRLF = /\r?\n/g,
14963 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
14964 rsubmittable = /^(?:input|select|textarea|keygen)/i;
14965
14966function buildParams( prefix, obj, traditional, add ) {
14967 var name;
14968
14969 if ( jQuery.isArray( obj ) ) {
14970 // Serialize array item.
14971 jQuery.each( obj, function( i, v ) {
14972 if ( traditional || rbracket.test( prefix ) ) {
14973 // Treat each array item as a scalar.
14974 add( prefix, v );
14975
14976 } else {
14977 // Item is non-scalar (array or object), encode its numeric index.
14978 buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
14979 }
14980 });
14981
14982 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
14983 // Serialize object item.
14984 for ( name in obj ) {
14985 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
14986 }
14987
14988 } else {
14989 // Serialize scalar item.
14990 add( prefix, obj );
14991 }
14992}
14993
14994// Serialize an array of form elements or a set of
14995// key/values into a query string
14996jQuery.param = function( a, traditional ) {
14997 var prefix,
14998 s = [],
14999 add = function( key, value ) {
15000 // If value is a function, invoke it and return its value
15001 value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
15002 s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
15003 };
15004
15005 // Set traditional to true for jQuery <= 1.3.2 behavior.
15006 if ( traditional === undefined ) {
15007 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
15008 }
15009
15010 // If an array was passed in, assume that it is an array of form elements.
15011 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
15012 // Serialize the form elements
15013 jQuery.each( a, function() {
15014 add( this.name, this.value );
15015 });
15016
15017 } else {
15018 // If traditional, encode the "old" way (the way 1.3.2 or older
15019 // did it), otherwise encode params recursively.
15020 for ( prefix in a ) {
15021 buildParams( prefix, a[ prefix ], traditional, add );
15022 }
15023 }
15024
15025 // Return the resulting serialization
15026 return s.join( "&" ).replace( r20, "+" );
15027};
15028
15029jQuery.fn.extend({
15030 serialize: function() {
15031 return jQuery.param( this.serializeArray() );
15032 },
15033 serializeArray: function() {
15034 return this.map(function() {
15035 // Can add propHook for "elements" to filter or add form elements
15036 var elements = jQuery.prop( this, "elements" );
15037 return elements ? jQuery.makeArray( elements ) : this;
15038 })
15039 .filter(function() {
15040 var type = this.type;
15041
15042 // Use .is( ":disabled" ) so that fieldset[disabled] works
15043 return this.name && !jQuery( this ).is( ":disabled" ) &&
15044 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
15045 ( this.checked || !rcheckableType.test( type ) );
15046 })
15047 .map(function( i, elem ) {
15048 var val = jQuery( this ).val();
15049
15050 return val == null ?
15051 null :
15052 jQuery.isArray( val ) ?
15053 jQuery.map( val, function( val ) {
15054 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
15055 }) :
15056 { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
15057 }).get();
15058 }
15059});
15060
15061
15062jQuery.ajaxSettings.xhr = function() {
15063 try {
15064 return new XMLHttpRequest();
15065 } catch( e ) {}
15066};
15067
15068var xhrId = 0,
15069 xhrCallbacks = {},
15070 xhrSuccessStatus = {
15071 // file protocol always yields status code 0, assume 200
15072 0: 200,
15073 // Support: IE9
15074 // #1450: sometimes IE returns 1223 when it should be 204
15075 1223: 204
15076 },
15077 xhrSupported = jQuery.ajaxSettings.xhr();
15078
15079// Support: IE9
15080// Open requests must be manually aborted on unload (#5280)
15081if ( window.ActiveXObject ) {
15082 jQuery( window ).on( "unload", function() {
15083 for ( var key in xhrCallbacks ) {
15084 xhrCallbacks[ key ]();
15085 }
15086 });
15087}
15088
15089support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
15090support.ajax = xhrSupported = !!xhrSupported;
15091
15092jQuery.ajaxTransport(function( options ) {
15093 var callback;
15094
15095 // Cross domain only allowed if supported through XMLHttpRequest
15096 if ( support.cors || xhrSupported && !options.crossDomain ) {
15097 return {
15098 send: function( headers, complete ) {
15099 var i,
15100 xhr = options.xhr(),
15101 id = ++xhrId;
15102
15103 xhr.open( options.type, options.url, options.async, options.username, options.password );
15104
15105 // Apply custom fields if provided
15106 if ( options.xhrFields ) {
15107 for ( i in options.xhrFields ) {
15108 xhr[ i ] = options.xhrFields[ i ];
15109 }
15110 }
15111
15112 // Override mime type if needed
15113 if ( options.mimeType && xhr.overrideMimeType ) {
15114 xhr.overrideMimeType( options.mimeType );
15115 }
15116
15117 // X-Requested-With header
15118 // For cross-domain requests, seeing as conditions for a preflight are
15119 // akin to a jigsaw puzzle, we simply never set it to be sure.
15120 // (it can always be set on a per-request basis or even using ajaxSetup)
15121 // For same-domain requests, won't change header if already provided.
15122 if ( !options.crossDomain && !headers["X-Requested-With"] ) {
15123 headers["X-Requested-With"] = "XMLHttpRequest";
15124 }
15125
15126 // Set headers
15127 for ( i in headers ) {
15128 xhr.setRequestHeader( i, headers[ i ] );
15129 }
15130
15131 // Callback
15132 callback = function( type ) {
15133 return function() {
15134 if ( callback ) {
15135 delete xhrCallbacks[ id ];
15136 callback = xhr.onload = xhr.onerror = null;
15137
15138 if ( type === "abort" ) {
15139 xhr.abort();
15140 } else if ( type === "error" ) {
15141 complete(
15142 // file: protocol always yields status 0; see #8605, #14207
15143 xhr.status,
15144 xhr.statusText
15145 );
15146 } else {
15147 complete(
15148 xhrSuccessStatus[ xhr.status ] || xhr.status,
15149 xhr.statusText,
15150 // Support: IE9
15151 // Accessing binary-data responseText throws an exception
15152 // (#11426)
15153 typeof xhr.responseText === "string" ? {
15154 text: xhr.responseText
15155 } : undefined,
15156 xhr.getAllResponseHeaders()
15157 );
15158 }
15159 }
15160 };
15161 };
15162
15163 // Listen to events
15164 xhr.onload = callback();
15165 xhr.onerror = callback("error");
15166
15167 // Create the abort callback
15168 callback = xhrCallbacks[ id ] = callback("abort");
15169
15170 try {
15171 // Do send the request (this may raise an exception)
15172 xhr.send( options.hasContent && options.data || null );
15173 } catch ( e ) {
15174 // #14683: Only rethrow if this hasn't been notified as an error yet
15175 if ( callback ) {
15176 throw e;
15177 }
15178 }
15179 },
15180
15181 abort: function() {
15182 if ( callback ) {
15183 callback();
15184 }
15185 }
15186 };
15187 }
15188});
15189
15190
15191
15192
15193// Install script dataType
15194jQuery.ajaxSetup({
15195 accepts: {
15196 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
15197 },
15198 contents: {
15199 script: /(?:java|ecma)script/
15200 },
15201 converters: {
15202 "text script": function( text ) {
15203 jQuery.globalEval( text );
15204 return text;
15205 }
15206 }
15207});
15208
15209// Handle cache's special case and crossDomain
15210jQuery.ajaxPrefilter( "script", function( s ) {
15211 if ( s.cache === undefined ) {
15212 s.cache = false;
15213 }
15214 if ( s.crossDomain ) {
15215 s.type = "GET";
15216 }
15217});
15218
15219// Bind script tag hack transport
15220jQuery.ajaxTransport( "script", function( s ) {
15221 // This transport only deals with cross domain requests
15222 if ( s.crossDomain ) {
15223 var script, callback;
15224 return {
15225 send: function( _, complete ) {
15226 script = jQuery("<script>").prop({
15227 async: true,
15228 charset: s.scriptCharset,
15229 src: s.url
15230 }).on(
15231 "load error",
15232 callback = function( evt ) {
15233 script.remove();
15234 callback = null;
15235 if ( evt ) {
15236 complete( evt.type === "error" ? 404 : 200, evt.type );
15237 }
15238 }
15239 );
15240 document.head.appendChild( script[ 0 ] );
15241 },
15242 abort: function() {
15243 if ( callback ) {
15244 callback();
15245 }
15246 }
15247 };
15248 }
15249});
15250
15251
15252
15253
15254var oldCallbacks = [],
15255 rjsonp = /(=)\?(?=&|$)|\?\?/;
15256
15257// Default jsonp settings
15258jQuery.ajaxSetup({
15259 jsonp: "callback",
15260 jsonpCallback: function() {
15261 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
15262 this[ callback ] = true;
15263 return callback;
15264 }
15265});
15266
15267// Detect, normalize options and install callbacks for jsonp requests
15268jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
15269
15270 var callbackName, overwritten, responseContainer,
15271 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
15272 "url" :
15273 typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
15274 );
15275
15276 // Handle iff the expected data type is "jsonp" or we have a parameter to set
15277 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
15278
15279 // Get callback name, remembering preexisting value associated with it
15280 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
15281 s.jsonpCallback() :
15282 s.jsonpCallback;
15283
15284 // Insert callback into url or form data
15285 if ( jsonProp ) {
15286 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
15287 } else if ( s.jsonp !== false ) {
15288 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
15289 }
15290
15291 // Use data converter to retrieve json after script execution
15292 s.converters["script json"] = function() {
15293 if ( !responseContainer ) {
15294 jQuery.error( callbackName + " was not called" );
15295 }
15296 return responseContainer[ 0 ];
15297 };
15298
15299 // force json dataType
15300 s.dataTypes[ 0 ] = "json";
15301
15302 // Install callback
15303 overwritten = window[ callbackName ];
15304 window[ callbackName ] = function() {
15305 responseContainer = arguments;
15306 };
15307
15308 // Clean-up function (fires after converters)
15309 jqXHR.always(function() {
15310 // Restore preexisting value
15311 window[ callbackName ] = overwritten;
15312
15313 // Save back as free
15314 if ( s[ callbackName ] ) {
15315 // make sure that re-using the options doesn't screw things around
15316 s.jsonpCallback = originalSettings.jsonpCallback;
15317
15318 // save the callback name for future use
15319 oldCallbacks.push( callbackName );
15320 }
15321
15322 // Call if it was a function and we have a response
15323 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
15324 overwritten( responseContainer[ 0 ] );
15325 }
15326
15327 responseContainer = overwritten = undefined;
15328 });
15329
15330 // Delegate to script
15331 return "script";
15332 }
15333});
15334
15335
15336
15337
15338// data: string of html
15339// context (optional): If specified, the fragment will be created in this context, defaults to document
15340// keepScripts (optional): If true, will include scripts passed in the html string
15341jQuery.parseHTML = function( data, context, keepScripts ) {
15342 if ( !data || typeof data !== "string" ) {
15343 return null;
15344 }
15345 if ( typeof context === "boolean" ) {
15346 keepScripts = context;
15347 context = false;
15348 }
15349 context = context || document;
15350
15351 var parsed = rsingleTag.exec( data ),
15352 scripts = !keepScripts && [];
15353
15354 // Single tag
15355 if ( parsed ) {
15356 return [ context.createElement( parsed[1] ) ];
15357 }
15358
15359 parsed = jQuery.buildFragment( [ data ], context, scripts );
15360
15361 if ( scripts && scripts.length ) {
15362 jQuery( scripts ).remove();
15363 }
15364
15365 return jQuery.merge( [], parsed.childNodes );
15366};
15367
15368
15369// Keep a copy of the old load method
15370var _load = jQuery.fn.load;
15371
15372/**
15373 * Load a url into a page
15374 */
15375jQuery.fn.load = function( url, params, callback ) {
15376 if ( typeof url !== "string" && _load ) {
15377 return _load.apply( this, arguments );
15378 }
15379
15380 var selector, type, response,
15381 self = this,
15382 off = url.indexOf(" ");
15383
15384 if ( off >= 0 ) {
15385 selector = jQuery.trim( url.slice( off ) );
15386 url = url.slice( 0, off );
15387 }
15388
15389 // If it's a function
15390 if ( jQuery.isFunction( params ) ) {
15391
15392 // We assume that it's the callback
15393 callback = params;
15394 params = undefined;
15395
15396 // Otherwise, build a param string
15397 } else if ( params && typeof params === "object" ) {
15398 type = "POST";
15399 }
15400
15401 // If we have elements to modify, make the request
15402 if ( self.length > 0 ) {
15403 jQuery.ajax({
15404 url: url,
15405
15406 // if "type" variable is undefined, then "GET" method will be used
15407 type: type,
15408 dataType: "html",
15409 data: params
15410 }).done(function( responseText ) {
15411
15412 // Save response for use in complete callback
15413 response = arguments;
15414
15415 self.html( selector ?
15416
15417 // If a selector was specified, locate the right elements in a dummy div
15418 // Exclude scripts to avoid IE 'Permission Denied' errors
15419 jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
15420
15421 // Otherwise use the full result
15422 responseText );
15423
15424 }).complete( callback && function( jqXHR, status ) {
15425 self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
15426 });
15427 }
15428
15429 return this;
15430};
15431
15432
15433
15434
15435jQuery.expr.filters.animated = function( elem ) {
15436 return jQuery.grep(jQuery.timers, function( fn ) {
15437 return elem === fn.elem;
15438 }).length;
15439};
15440
15441
15442
15443
15444var docElem = window.document.documentElement;
15445
15446/**
15447 * Gets a window from an element
15448 */
15449function getWindow( elem ) {
15450 return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
15451}
15452
15453jQuery.offset = {
15454 setOffset: function( elem, options, i ) {
15455 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
15456 position = jQuery.css( elem, "position" ),
15457 curElem = jQuery( elem ),
15458 props = {};
15459
15460 // Set position first, in-case top/left are set even on static elem
15461 if ( position === "static" ) {
15462 elem.style.position = "relative";
15463 }
15464
15465 curOffset = curElem.offset();
15466 curCSSTop = jQuery.css( elem, "top" );
15467 curCSSLeft = jQuery.css( elem, "left" );
15468 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
15469 ( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
15470
15471 // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
15472 if ( calculatePosition ) {
15473 curPosition = curElem.position();
15474 curTop = curPosition.top;
15475 curLeft = curPosition.left;
15476
15477 } else {
15478 curTop = parseFloat( curCSSTop ) || 0;
15479 curLeft = parseFloat( curCSSLeft ) || 0;
15480 }
15481
15482 if ( jQuery.isFunction( options ) ) {
15483 options = options.call( elem, i, curOffset );
15484 }
15485
15486 if ( options.top != null ) {
15487 props.top = ( options.top - curOffset.top ) + curTop;
15488 }
15489 if ( options.left != null ) {
15490 props.left = ( options.left - curOffset.left ) + curLeft;
15491 }
15492
15493 if ( "using" in options ) {
15494 options.using.call( elem, props );
15495
15496 } else {
15497 curElem.css( props );
15498 }
15499 }
15500};
15501
15502jQuery.fn.extend({
15503 offset: function( options ) {
15504 if ( arguments.length ) {
15505 return options === undefined ?
15506 this :
15507 this.each(function( i ) {
15508 jQuery.offset.setOffset( this, options, i );
15509 });
15510 }
15511
15512 var docElem, win,
15513 elem = this[ 0 ],
15514 box = { top: 0, left: 0 },
15515 doc = elem && elem.ownerDocument;
15516
15517 if ( !doc ) {
15518 return;
15519 }
15520
15521 docElem = doc.documentElement;
15522
15523 // Make sure it's not a disconnected DOM node
15524 if ( !jQuery.contains( docElem, elem ) ) {
15525 return box;
15526 }
15527
15528 // If we don't have gBCR, just use 0,0 rather than error
15529 // BlackBerry 5, iOS 3 (original iPhone)
15530 if ( typeof elem.getBoundingClientRect !== strundefined ) {
15531 box = elem.getBoundingClientRect();
15532 }
15533 win = getWindow( doc );
15534 return {
15535 top: box.top + win.pageYOffset - docElem.clientTop,
15536 left: box.left + win.pageXOffset - docElem.clientLeft
15537 };
15538 },
15539
15540 position: function() {
15541 if ( !this[ 0 ] ) {
15542 return;
15543 }
15544
15545 var offsetParent, offset,
15546 elem = this[ 0 ],
15547 parentOffset = { top: 0, left: 0 };
15548
15549 // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
15550 if ( jQuery.css( elem, "position" ) === "fixed" ) {
15551 // We assume that getBoundingClientRect is available when computed position is fixed
15552 offset = elem.getBoundingClientRect();
15553
15554 } else {
15555 // Get *real* offsetParent
15556 offsetParent = this.offsetParent();
15557
15558 // Get correct offsets
15559 offset = this.offset();
15560 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
15561 parentOffset = offsetParent.offset();
15562 }
15563
15564 // Add offsetParent borders
15565 parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
15566 parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
15567 }
15568
15569 // Subtract parent offsets and element margins
15570 return {
15571 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
15572 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
15573 };
15574 },
15575
15576 offsetParent: function() {
15577 return this.map(function() {
15578 var offsetParent = this.offsetParent || docElem;
15579
15580 while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
15581 offsetParent = offsetParent.offsetParent;
15582 }
15583
15584 return offsetParent || docElem;
15585 });
15586 }
15587});
15588
15589// Create scrollLeft and scrollTop methods
15590jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
15591 var top = "pageYOffset" === prop;
15592
15593 jQuery.fn[ method ] = function( val ) {
15594 return access( this, function( elem, method, val ) {
15595 var win = getWindow( elem );
15596
15597 if ( val === undefined ) {
15598 return win ? win[ prop ] : elem[ method ];
15599 }
15600
15601 if ( win ) {
15602 win.scrollTo(
15603 !top ? val : window.pageXOffset,
15604 top ? val : window.pageYOffset
15605 );
15606
15607 } else {
15608 elem[ method ] = val;
15609 }
15610 }, method, val, arguments.length, null );
15611 };
15612});
15613
15614// Add the top/left cssHooks using jQuery.fn.position
15615// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
15616// getComputedStyle returns percent when specified for top/left/bottom/right
15617// rather than make the css module depend on the offset module, we just check for it here
15618jQuery.each( [ "top", "left" ], function( i, prop ) {
15619 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
15620 function( elem, computed ) {
15621 if ( computed ) {
15622 computed = curCSS( elem, prop );
15623 // if curCSS returns percentage, fallback to offset
15624 return rnumnonpx.test( computed ) ?
15625 jQuery( elem ).position()[ prop ] + "px" :
15626 computed;
15627 }
15628 }
15629 );
15630});
15631
15632
15633// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
15634jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
15635 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
15636 // margin is only for outerHeight, outerWidth
15637 jQuery.fn[ funcName ] = function( margin, value ) {
15638 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
15639 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
15640
15641 return access( this, function( elem, type, value ) {
15642 var doc;
15643
15644 if ( jQuery.isWindow( elem ) ) {
15645 // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
15646 // isn't a whole lot we can do. See pull request at this URL for discussion:
15647 // https://github.com/jquery/jquery/pull/764
15648 return elem.document.documentElement[ "client" + name ];
15649 }
15650
15651 // Get document width or height
15652 if ( elem.nodeType === 9 ) {
15653 doc = elem.documentElement;
15654
15655 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
15656 // whichever is greatest
15657 return Math.max(
15658 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
15659 elem.body[ "offset" + name ], doc[ "offset" + name ],
15660 doc[ "client" + name ]
15661 );
15662 }
15663
15664 return value === undefined ?
15665 // Get width or height on the element, requesting but not forcing parseFloat
15666 jQuery.css( elem, type, extra ) :
15667
15668 // Set width or height on the element
15669 jQuery.style( elem, type, value, extra );
15670 }, type, chainable ? margin : undefined, chainable, null );
15671 };
15672 });
15673});
15674
15675
15676// The number of elements contained in the matched element set
15677jQuery.fn.size = function() {
15678 return this.length;
15679};
15680
15681jQuery.fn.andSelf = jQuery.fn.addBack;
15682
15683
15684
15685
15686// Register as a named AMD module, since jQuery can be concatenated with other
15687// files that may use define, but not via a proper concatenation script that
15688// understands anonymous AMD modules. A named AMD is safest and most robust
15689// way to register. Lowercase jquery is used because AMD module names are
15690// derived from file names, and jQuery is normally delivered in a lowercase
15691// file name. Do this after creating the global so that if an AMD module wants
15692// to call noConflict to hide this version of jQuery, it will work.
15693
15694// Note that for maximum portability, libraries that are not jQuery should
15695// declare themselves as anonymous modules, and avoid setting a global if an
15696// AMD loader is present. jQuery is a special case. For more information, see
15697// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
15698
15699if ( typeof define === "function" && define.amd ) {
15700 define( "jquery", [], function() {
15701 return jQuery;
15702 });
15703}
15704
15705
15706
15707
15708var
15709 // Map over jQuery in case of overwrite
15710 _jQuery = window.jQuery,
15711
15712 // Map over the $ in case of overwrite
15713 _$ = window.$;
15714
15715jQuery.noConflict = function( deep ) {
15716 if ( window.$ === jQuery ) {
15717 window.$ = _$;
15718 }
15719
15720 if ( deep && window.jQuery === jQuery ) {
15721 window.jQuery = _jQuery;
15722 }
15723
15724 return jQuery;
15725};
15726
15727// Expose jQuery and $ identifiers, even in
15728// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
15729// and CommonJS for browser emulators (#13566)
15730if ( typeof noGlobal === strundefined ) {
15731 window.jQuery = window.$ = jQuery;
15732}
15733
15734
15735
15736
15737return jQuery;
15738
15739}));
15740 </script>
15741 <script>
15742/*!
15743 * Bootstrap v3.2.0 (http://getbootstrap.com)
15744 * Copyright 2011-2014 Twitter, Inc.
15745 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15746 */
15747
15748if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
15749
15750/* ========================================================================
15751 * Bootstrap: transition.js v3.2.0
15752 * http://getbootstrap.com/javascript/#transitions
15753 * ========================================================================
15754 * Copyright 2011-2014 Twitter, Inc.
15755 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15756 * ======================================================================== */
15757
15758
15759+function ($) {
15760 'use strict';
15761
15762 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
15763 // ============================================================
15764
15765 function transitionEnd() {
15766 var el = document.createElement('bootstrap')
15767
15768 var transEndEventNames = {
15769 WebkitTransition : 'webkitTransitionEnd',
15770 MozTransition : 'transitionend',
15771 OTransition : 'oTransitionEnd otransitionend',
15772 transition : 'transitionend'
15773 }
15774
15775 for (var name in transEndEventNames) {
15776 if (el.style[name] !== undefined) {
15777 return { end: transEndEventNames[name] }
15778 }
15779 }
15780
15781 return false // explicit for ie8 ( ._.)
15782 }
15783
15784 // http://blog.alexmaccaw.com/css-transitions
15785 $.fn.emulateTransitionEnd = function (duration) {
15786 var called = false
15787 var $el = this
15788 $(this).one('bsTransitionEnd', function () { called = true })
15789 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
15790 setTimeout(callback, duration)
15791 return this
15792 }
15793
15794 $(function () {
15795 $.support.transition = transitionEnd()
15796
15797 if (!$.support.transition) return
15798
15799 $.event.special.bsTransitionEnd = {
15800 bindType: $.support.transition.end,
15801 delegateType: $.support.transition.end,
15802 handle: function (e) {
15803 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
15804 }
15805 }
15806 })
15807
15808}(jQuery);
15809
15810/* ========================================================================
15811 * Bootstrap: alert.js v3.2.0
15812 * http://getbootstrap.com/javascript/#alerts
15813 * ========================================================================
15814 * Copyright 2011-2014 Twitter, Inc.
15815 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15816 * ======================================================================== */
15817
15818
15819+function ($) {
15820 'use strict';
15821
15822 // ALERT CLASS DEFINITION
15823 // ======================
15824
15825 var dismiss = '[data-dismiss="alert"]'
15826 var Alert = function (el) {
15827 $(el).on('click', dismiss, this.close)
15828 }
15829
15830 Alert.VERSION = '3.2.0'
15831
15832 Alert.prototype.close = function (e) {
15833 var $this = $(this)
15834 var selector = $this.attr('data-target')
15835
15836 if (!selector) {
15837 selector = $this.attr('href')
15838 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
15839 }
15840
15841 var $parent = $(selector)
15842
15843 if (e) e.preventDefault()
15844
15845 if (!$parent.length) {
15846 $parent = $this.hasClass('alert') ? $this : $this.parent()
15847 }
15848
15849 $parent.trigger(e = $.Event('close.bs.alert'))
15850
15851 if (e.isDefaultPrevented()) return
15852
15853 $parent.removeClass('in')
15854
15855 function removeElement() {
15856 // detach from parent, fire event then clean up data
15857 $parent.detach().trigger('closed.bs.alert').remove()
15858 }
15859
15860 $.support.transition && $parent.hasClass('fade') ?
15861 $parent
15862 .one('bsTransitionEnd', removeElement)
15863 .emulateTransitionEnd(150) :
15864 removeElement()
15865 }
15866
15867
15868 // ALERT PLUGIN DEFINITION
15869 // =======================
15870
15871 function Plugin(option) {
15872 return this.each(function () {
15873 var $this = $(this)
15874 var data = $this.data('bs.alert')
15875
15876 if (!data) $this.data('bs.alert', (data = new Alert(this)))
15877 if (typeof option == 'string') data[option].call($this)
15878 })
15879 }
15880
15881 var old = $.fn.alert
15882
15883 $.fn.alert = Plugin
15884 $.fn.alert.Constructor = Alert
15885
15886
15887 // ALERT NO CONFLICT
15888 // =================
15889
15890 $.fn.alert.noConflict = function () {
15891 $.fn.alert = old
15892 return this
15893 }
15894
15895
15896 // ALERT DATA-API
15897 // ==============
15898
15899 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
15900
15901}(jQuery);
15902
15903/* ========================================================================
15904 * Bootstrap: button.js v3.2.0
15905 * http://getbootstrap.com/javascript/#buttons
15906 * ========================================================================
15907 * Copyright 2011-2014 Twitter, Inc.
15908 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15909 * ======================================================================== */
15910
15911
15912+function ($) {
15913 'use strict';
15914
15915 // BUTTON PUBLIC CLASS DEFINITION
15916 // ==============================
15917
15918 var Button = function (element, options) {
15919 this.$element = $(element)
15920 this.options = $.extend({}, Button.DEFAULTS, options)
15921 this.isLoading = false
15922 }
15923
15924 Button.VERSION = '3.2.0'
15925
15926 Button.DEFAULTS = {
15927 loadingText: 'loading...'
15928 }
15929
15930 Button.prototype.setState = function (state) {
15931 var d = 'disabled'
15932 var $el = this.$element
15933 var val = $el.is('input') ? 'val' : 'html'
15934 var data = $el.data()
15935
15936 state = state + 'Text'
15937
15938 if (data.resetText == null) $el.data('resetText', $el[val]())
15939
15940 $el[val](data[state] == null ? this.options[state] : data[state])
15941
15942 // push to event loop to allow forms to submit
15943 setTimeout($.proxy(function () {
15944 if (state == 'loadingText') {
15945 this.isLoading = true
15946 $el.addClass(d).attr(d, d)
15947 } else if (this.isLoading) {
15948 this.isLoading = false
15949 $el.removeClass(d).removeAttr(d)
15950 }
15951 }, this), 0)
15952 }
15953
15954 Button.prototype.toggle = function () {
15955 var changed = true
15956 var $parent = this.$element.closest('[data-toggle="buttons"]')
15957
15958 if ($parent.length) {
15959 var $input = this.$element.find('input')
15960 if ($input.prop('type') == 'radio') {
15961 if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
15962 else $parent.find('.active').removeClass('active')
15963 }
15964 if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
15965 }
15966
15967 if (changed) this.$element.toggleClass('active')
15968 }
15969
15970
15971 // BUTTON PLUGIN DEFINITION
15972 // ========================
15973
15974 function Plugin(option) {
15975 return this.each(function () {
15976 var $this = $(this)
15977 var data = $this.data('bs.button')
15978 var options = typeof option == 'object' && option
15979
15980 if (!data) $this.data('bs.button', (data = new Button(this, options)))
15981
15982 if (option == 'toggle') data.toggle()
15983 else if (option) data.setState(option)
15984 })
15985 }
15986
15987 var old = $.fn.button
15988
15989 $.fn.button = Plugin
15990 $.fn.button.Constructor = Button
15991
15992
15993 // BUTTON NO CONFLICT
15994 // ==================
15995
15996 $.fn.button.noConflict = function () {
15997 $.fn.button = old
15998 return this
15999 }
16000
16001
16002 // BUTTON DATA-API
16003 // ===============
16004
16005 $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
16006 var $btn = $(e.target)
16007 if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
16008 Plugin.call($btn, 'toggle')
16009 e.preventDefault()
16010 })
16011
16012}(jQuery);
16013
16014/* ========================================================================
16015 * Bootstrap: carousel.js v3.2.0
16016 * http://getbootstrap.com/javascript/#carousel
16017 * ========================================================================
16018 * Copyright 2011-2014 Twitter, Inc.
16019 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
16020 * ======================================================================== */
16021
16022
16023+function ($) {
16024 'use strict';
16025
16026 // CAROUSEL CLASS DEFINITION
16027 // =========================
16028
16029 var Carousel = function (element, options) {
16030 this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
16031 this.$indicators = this.$element.find('.carousel-indicators')
16032 this.options = options
16033 this.paused =
16034 this.sliding =
16035 this.interval =
16036 this.$active =
16037 this.$items = null
16038
16039 this.options.pause == 'hover' && this.$element
16040 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
16041 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
16042 }
16043
16044 Carousel.VERSION = '3.2.0'
16045
16046 Carousel.DEFAULTS = {
16047 interval: 5000,
16048 pause: 'hover',
16049 wrap: true
16050 }
16051
16052 Carousel.prototype.keydown = function (e) {
16053 switch (e.which) {
16054 case 37: this.prev(); break
16055 case 39: this.next(); break
16056 default: return
16057 }
16058
16059 e.preventDefault()
16060 }
16061
16062 Carousel.prototype.cycle = function (e) {
16063 e || (this.paused = false)
16064
16065 this.interval && clearInterval(this.interval)
16066
16067 this.options.interval
16068 && !this.paused
16069 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
16070
16071 return this
16072 }
16073
16074 Carousel.prototype.getItemIndex = function (item) {
16075 this.$items = item.parent().children('.item')
16076 return this.$items.index(item || this.$active)
16077 }
16078
16079 Carousel.prototype.to = function (pos) {
16080 var that = this
16081 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
16082
16083 if (pos > (this.$items.length - 1) || pos < 0) return
16084
16085 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
16086 if (activeIndex == pos) return this.pause().cycle()
16087
16088 return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
16089 }
16090
16091 Carousel.prototype.pause = function (e) {
16092 e || (this.paused = true)
16093
16094 if (this.$element.find('.next, .prev').length && $.support.transition) {
16095 this.$element.trigger($.support.transition.end)
16096 this.cycle(true)
16097 }
16098
16099 this.interval = clearInterval(this.interval)
16100
16101 return this
16102 }
16103
16104 Carousel.prototype.next = function () {
16105 if (this.sliding) return
16106 return this.slide('next')
16107 }
16108
16109 Carousel.prototype.prev = function () {
16110 if (this.sliding) return
16111 return this.slide('prev')
16112 }
16113
16114 Carousel.prototype.slide = function (type, next) {
16115 var $active = this.$element.find('.item.active')
16116 var $next = next || $active[type]()
16117 var isCycling = this.interval
16118 var direction = type == 'next' ? 'left' : 'right'
16119 var fallback = type == 'next' ? 'first' : 'last'
16120 var that = this
16121
16122 if (!$next.length) {
16123 if (!this.options.wrap) return
16124 $next = this.$element.find('.item')[fallback]()
16125 }
16126
16127 if ($next.hasClass('active')) return (this.sliding = false)
16128
16129 var relatedTarget = $next[0]
16130 var slideEvent = $.Event('slide.bs.carousel', {
16131 relatedTarget: relatedTarget,
16132 direction: direction
16133 })
16134 this.$element.trigger(slideEvent)
16135 if (slideEvent.isDefaultPrevented()) return
16136
16137 this.sliding = true
16138
16139 isCycling && this.pause()
16140
16141 if (this.$indicators.length) {
16142 this.$indicators.find('.active').removeClass('active')
16143 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
16144 $nextIndicator && $nextIndicator.addClass('active')
16145 }
16146
16147 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
16148 if ($.support.transition && this.$element.hasClass('slide')) {
16149 $next.addClass(type)
16150 $next[0].offsetWidth // force reflow
16151 $active.addClass(direction)
16152 $next.addClass(direction)
16153 $active
16154 .one('bsTransitionEnd', function () {
16155 $next.removeClass([type, direction].join(' ')).addClass('active')
16156 $active.removeClass(['active', direction].join(' '))
16157 that.sliding = false
16158 setTimeout(function () {
16159 that.$element.trigger(slidEvent)
16160 }, 0)
16161 })
16162 .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
16163 } else {
16164 $active.removeClass('active')
16165 $next.addClass('active')
16166 this.sliding = false
16167 this.$element.trigger(slidEvent)
16168 }
16169
16170 isCycling && this.cycle()
16171
16172 return this
16173 }
16174
16175
16176 // CAROUSEL PLUGIN DEFINITION
16177 // ==========================
16178
16179 function Plugin(option) {
16180 return this.each(function () {
16181 var $this = $(this)
16182 var data = $this.data('bs.carousel')
16183 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
16184 var action = typeof option == 'string' ? option : options.slide
16185
16186 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
16187 if (typeof option == 'number') data.to(option)
16188 else if (action) data[action]()
16189 else if (options.interval) data.pause().cycle()
16190 })
16191 }
16192
16193 var old = $.fn.carousel
16194
16195 $.fn.carousel = Plugin
16196 $.fn.carousel.Constructor = Carousel
16197
16198
16199 // CAROUSEL NO CONFLICT
16200 // ====================
16201
16202 $.fn.carousel.noConflict = function () {
16203 $.fn.carousel = old
16204 return this
16205 }
16206
16207
16208 // CAROUSEL DATA-API
16209 // =================
16210
16211 $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
16212 var href
16213 var $this = $(this)
16214 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
16215 if (!$target.hasClass('carousel')) return
16216 var options = $.extend({}, $target.data(), $this.data())
16217 var slideIndex = $this.attr('data-slide-to')
16218 if (slideIndex) options.interval = false
16219
16220 Plugin.call($target, options)
16221
16222 if (slideIndex) {
16223 $target.data('bs.carousel').to(slideIndex)
16224 }
16225
16226 e.preventDefault()
16227 })
16228
16229 $(window).on('load', function () {
16230 $('[data-ride="carousel"]').each(function () {
16231 var $carousel = $(this)
16232 Plugin.call($carousel, $carousel.data())
16233 })
16234 })
16235
16236}(jQuery);
16237
16238/* ========================================================================
16239 * Bootstrap: collapse.js v3.2.0
16240 * http://getbootstrap.com/javascript/#collapse
16241 * ========================================================================
16242 * Copyright 2011-2014 Twitter, Inc.
16243 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
16244 * ======================================================================== */
16245
16246
16247+function ($) {
16248 'use strict';
16249
16250 // COLLAPSE PUBLIC CLASS DEFINITION
16251 // ================================
16252
16253 var Collapse = function (element, options) {
16254 this.$element = $(element)
16255 this.options = $.extend({}, Collapse.DEFAULTS, options)
16256 this.transitioning = null
16257
16258 if (this.options.parent) this.$parent = $(this.options.parent)
16259 if (this.options.toggle) this.toggle()
16260 }
16261
16262 Collapse.VERSION = '3.2.0'
16263
16264 Collapse.DEFAULTS = {
16265 toggle: true
16266 }
16267
16268 Collapse.prototype.dimension = function () {
16269 var hasWidth = this.$element.hasClass('width')
16270 return hasWidth ? 'width' : 'height'
16271 }
16272
16273 Collapse.prototype.show = function () {
16274 if (this.transitioning || this.$element.hasClass('in')) return
16275
16276 var startEvent = $.Event('show.bs.collapse')
16277 this.$element.trigger(startEvent)
16278 if (startEvent.isDefaultPrevented()) return
16279
16280 var actives = this.$parent && this.$parent.find('> .panel > .in')
16281
16282 if (actives && actives.length) {
16283 var hasData = actives.data('bs.collapse')
16284 if (hasData && hasData.transitioning) return
16285 Plugin.call(actives, 'hide')
16286 hasData || actives.data('bs.collapse', null)
16287 }
16288
16289 var dimension = this.dimension()
16290
16291 this.$element
16292 .removeClass('collapse')
16293 .addClass('collapsing')[dimension](0)
16294
16295 this.transitioning = 1
16296
16297 var complete = function () {
16298 this.$element
16299 .removeClass('collapsing')
16300 .addClass('collapse in')[dimension]('')
16301 this.transitioning = 0
16302 this.$element
16303 .trigger('shown.bs.collapse')
16304 }
16305
16306 if (!$.support.transition) return complete.call(this)
16307
16308 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
16309
16310 this.$element
16311 .one('bsTransitionEnd', $.proxy(complete, this))
16312 .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
16313 }
16314
16315 Collapse.prototype.hide = function () {
16316 if (this.transitioning || !this.$element.hasClass('in')) return
16317
16318 var startEvent = $.Event('hide.bs.collapse')
16319 this.$element.trigger(startEvent)
16320 if (startEvent.isDefaultPrevented()) return
16321
16322 var dimension = this.dimension()
16323
16324 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
16325
16326 this.$element
16327 .addClass('collapsing')
16328 .removeClass('collapse')
16329 .removeClass('in')
16330
16331 this.transitioning = 1
16332
16333 var complete = function () {
16334 this.transitioning = 0
16335 this.$element
16336 .trigger('hidden.bs.collapse')
16337 .removeClass('collapsing')
16338 .addClass('collapse')
16339 }
16340
16341 if (!$.support.transition) return complete.call(this)
16342
16343 this.$element
16344 [dimension](0)
16345 .one('bsTransitionEnd', $.proxy(complete, this))
16346 .emulateTransitionEnd(350)
16347 }
16348
16349 Collapse.prototype.toggle = function () {
16350 this[this.$element.hasClass('in') ? 'hide' : 'show']()
16351 }
16352
16353
16354 // COLLAPSE PLUGIN DEFINITION
16355 // ==========================
16356
16357 function Plugin(option) {
16358 return this.each(function () {
16359 var $this = $(this)
16360 var data = $this.data('bs.collapse')
16361 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
16362
16363 if (!data && options.toggle && option == 'show') option = !option
16364 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
16365 if (typeof option == 'string') data[option]()
16366 })
16367 }
16368
16369 var old = $.fn.collapse
16370
16371 $.fn.collapse = Plugin
16372 $.fn.collapse.Constructor = Collapse
16373
16374
16375 // COLLAPSE NO CONFLICT
16376 // ====================
16377
16378 $.fn.collapse.noConflict = function () {
16379 $.fn.collapse = old
16380 return this
16381 }
16382
16383
16384 // COLLAPSE DATA-API
16385 // =================
16386
16387 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
16388 var href
16389 var $this = $(this)
16390 var target = $this.attr('data-target')
16391 || e.preventDefault()
16392 || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
16393 var $target = $(target)
16394 var data = $target.data('bs.collapse')
16395 var option = data ? 'toggle' : $this.data()
16396 var parent = $this.attr('data-parent')
16397 var $parent = parent && $(parent)
16398
16399 if (!data || !data.transitioning) {
16400 if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
16401 $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
16402 }
16403
16404 Plugin.call($target, option)
16405 })
16406
16407}(jQuery);
16408
16409/* ========================================================================
16410 * Bootstrap: dropdown.js v3.2.0
16411 * http://getbootstrap.com/javascript/#dropdowns
16412 * ========================================================================
16413 * Copyright 2011-2014 Twitter, Inc.
16414 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
16415 * ======================================================================== */
16416
16417
16418+function ($) {
16419 'use strict';
16420
16421 // DROPDOWN CLASS DEFINITION
16422 // =========================
16423
16424 var backdrop = '.dropdown-backdrop'
16425 var toggle = '[data-toggle="dropdown"]'
16426 var Dropdown = function (element) {
16427 $(element).on('click.bs.dropdown', this.toggle)
16428 }
16429
16430 Dropdown.VERSION = '3.2.0'
16431
16432 Dropdown.prototype.toggle = function (e) {
16433 var $this = $(this)
16434
16435 if ($this.is('.disabled, :disabled')) return
16436
16437 var $parent = getParent($this)
16438 var isActive = $parent.hasClass('open')
16439
16440 clearMenus()
16441
16442 if (!isActive) {
16443 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
16444 // if mobile we use a backdrop because click events don't delegate
16445 $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
16446 }
16447
16448 var relatedTarget = { relatedTarget: this }
16449 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
16450
16451 if (e.isDefaultPrevented()) return
16452
16453 $this.trigger('focus')
16454
16455 $parent
16456 .toggleClass('open')
16457 .trigger('shown.bs.dropdown', relatedTarget)
16458 }
16459
16460 return false
16461 }
16462
16463 Dropdown.prototype.keydown = function (e) {
16464 if (!/(38|40|27)/.test(e.keyCode)) return
16465
16466 var $this = $(this)
16467
16468 e.preventDefault()
16469 e.stopPropagation()
16470
16471 if ($this.is('.disabled, :disabled')) return
16472
16473 var $parent = getParent($this)
16474 var isActive = $parent.hasClass('open')
16475
16476 if (!isActive || (isActive && e.keyCode == 27)) {
16477 if (e.which == 27) $parent.find(toggle).trigger('focus')
16478 return $this.trigger('click')
16479 }
16480
16481 var desc = ' li:not(.divider):visible a'
16482 var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
16483
16484 if (!$items.length) return
16485
16486 var index = $items.index($items.filter(':focus'))
16487
16488 if (e.keyCode == 38 && index > 0) index-- // up
16489 if (e.keyCode == 40 && index < $items.length - 1) index++ // down
16490 if (!~index) index = 0
16491
16492 $items.eq(index).trigger('focus')
16493 }
16494
16495 function clearMenus(e) {
16496 if (e && e.which === 3) return
16497 $(backdrop).remove()
16498 $(toggle).each(function () {
16499 var $parent = getParent($(this))
16500 var relatedTarget = { relatedTarget: this }
16501 if (!$parent.hasClass('open')) return
16502 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
16503 if (e.isDefaultPrevented()) return
16504 $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
16505 })
16506 }
16507
16508 function getParent($this) {
16509 var selector = $this.attr('data-target')
16510
16511 if (!selector) {
16512 selector = $this.attr('href')
16513 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
16514 }
16515
16516 var $parent = selector && $(selector)
16517
16518 return $parent && $parent.length ? $parent : $this.parent()
16519 }
16520
16521
16522 // DROPDOWN PLUGIN DEFINITION
16523 // ==========================
16524
16525 function Plugin(option) {
16526 return this.each(function () {
16527 var $this = $(this)
16528 var data = $this.data('bs.dropdown')
16529
16530 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
16531 if (typeof option == 'string') data[option].call($this)
16532 })
16533 }
16534
16535 var old = $.fn.dropdown
16536
16537 $.fn.dropdown = Plugin
16538 $.fn.dropdown.Constructor = Dropdown
16539
16540
16541 // DROPDOWN NO CONFLICT
16542 // ====================
16543
16544 $.fn.dropdown.noConflict = function () {
16545 $.fn.dropdown = old
16546 return this
16547 }
16548
16549
16550 // APPLY TO STANDARD DROPDOWN ELEMENTS
16551 // ===================================
16552
16553 $(document)
16554 .on('click.bs.dropdown.data-api', clearMenus)
16555 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
16556 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
16557 .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
16558
16559}(jQuery);
16560
16561/* ========================================================================
16562 * Bootstrap: modal.js v3.2.0
16563 * http://getbootstrap.com/javascript/#modals
16564 * ========================================================================
16565 * Copyright 2011-2014 Twitter, Inc.
16566 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
16567 * ======================================================================== */
16568
16569
16570+function ($) {
16571 'use strict';
16572
16573 // MODAL CLASS DEFINITION
16574 // ======================
16575
16576 var Modal = function (element, options) {
16577 this.options = options
16578 this.$body = $(document.body)
16579 this.$element = $(element)
16580 this.$backdrop =
16581 this.isShown = null
16582 this.scrollbarWidth = 0
16583
16584 if (this.options.remote) {
16585 this.$element
16586 .find('.modal-content')
16587 .load(this.options.remote, $.proxy(function () {
16588 this.$element.trigger('loaded.bs.modal')
16589 }, this))
16590 }
16591 }
16592
16593 Modal.VERSION = '3.2.0'
16594
16595 Modal.DEFAULTS = {
16596 backdrop: true,
16597 keyboard: true,
16598 show: true
16599 }
16600
16601 Modal.prototype.toggle = function (_relatedTarget) {
16602 return this.isShown ? this.hide() : this.show(_relatedTarget)
16603 }
16604
16605 Modal.prototype.show = function (_relatedTarget) {
16606 var that = this
16607 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
16608
16609 this.$element.trigger(e)
16610
16611 if (this.isShown || e.isDefaultPrevented()) return
16612
16613 this.isShown = true
16614
16615 this.checkScrollbar()
16616 this.$body.addClass('modal-open')
16617
16618 this.setScrollbar()
16619 this.escape()
16620
16621 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
16622
16623 this.backdrop(function () {
16624 var transition = $.support.transition && that.$element.hasClass('fade')
16625
16626 if (!that.$element.parent().length) {
16627 that.$element.appendTo(that.$body) // don't move modals dom position
16628 }
16629
16630 that.$element
16631 .show()
16632 .scrollTop(0)
16633
16634 if (transition) {
16635 that.$element[0].offsetWidth // force reflow
16636 }
16637
16638 that.$element
16639 .addClass('in')
16640 .attr('aria-hidden', false)
16641
16642 that.enforceFocus()
16643
16644 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
16645
16646 transition ?
16647 that.$element.find('.modal-dialog') // wait for modal to slide in
16648 .one('bsTransitionEnd', function () {
16649 that.$element.trigger('focus').trigger(e)
16650 })
16651 .emulateTransitionEnd(300) :
16652 that.$element.trigger('focus').trigger(e)
16653 })
16654 }
16655
16656 Modal.prototype.hide = function (e) {
16657 if (e) e.preventDefault()
16658
16659 e = $.Event('hide.bs.modal')
16660
16661 this.$element.trigger(e)
16662
16663 if (!this.isShown || e.isDefaultPrevented()) return
16664
16665 this.isShown = false
16666
16667 this.$body.removeClass('modal-open')
16668
16669 this.resetScrollbar()
16670 this.escape()
16671
16672 $(document).off('focusin.bs.modal')
16673
16674 this.$element
16675 .removeClass('in')
16676 .attr('aria-hidden', true)
16677 .off('click.dismiss.bs.modal')
16678
16679 $.support.transition && this.$element.hasClass('fade') ?
16680 this.$element
16681 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
16682 .emulateTransitionEnd(300) :
16683 this.hideModal()
16684 }
16685
16686 Modal.prototype.enforceFocus = function () {
16687 $(document)
16688 .off('focusin.bs.modal') // guard against infinite focus loop
16689 .on('focusin.bs.modal', $.proxy(function (e) {
16690 if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
16691 this.$element.trigger('focus')
16692 }
16693 }, this))
16694 }
16695
16696 Modal.prototype.escape = function () {
16697 if (this.isShown && this.options.keyboard) {
16698 this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
16699 e.which == 27 && this.hide()
16700 }, this))
16701 } else if (!this.isShown) {
16702 this.$element.off('keyup.dismiss.bs.modal')
16703 }
16704 }
16705
16706 Modal.prototype.hideModal = function () {
16707 var that = this
16708 this.$element.hide()
16709 this.backdrop(function () {
16710 that.$element.trigger('hidden.bs.modal')
16711 })
16712 }
16713
16714 Modal.prototype.removeBackdrop = function () {
16715 this.$backdrop && this.$backdrop.remove()
16716 this.$backdrop = null
16717 }
16718
16719 Modal.prototype.backdrop = function (callback) {
16720 var that = this
16721 var animate = this.$element.hasClass('fade') ? 'fade' : ''
16722
16723 if (this.isShown && this.options.backdrop) {
16724 var doAnimate = $.support.transition && animate
16725
16726 this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
16727 .appendTo(this.$body)
16728
16729 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
16730 if (e.target !== e.currentTarget) return
16731 this.options.backdrop == 'static'
16732 ? this.$element[0].focus.call(this.$element[0])
16733 : this.hide.call(this)
16734 }, this))
16735
16736 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
16737
16738 this.$backdrop.addClass('in')
16739
16740 if (!callback) return
16741
16742 doAnimate ?
16743 this.$backdrop
16744 .one('bsTransitionEnd', callback)
16745 .emulateTransitionEnd(150) :
16746 callback()
16747
16748 } else if (!this.isShown && this.$backdrop) {
16749 this.$backdrop.removeClass('in')
16750
16751 var callbackRemove = function () {
16752 that.removeBackdrop()
16753 callback && callback()
16754 }
16755 $.support.transition && this.$element.hasClass('fade') ?
16756 this.$backdrop
16757 .one('bsTransitionEnd', callbackRemove)
16758 .emulateTransitionEnd(150) :
16759 callbackRemove()
16760
16761 } else if (callback) {
16762 callback()
16763 }
16764 }
16765
16766 Modal.prototype.checkScrollbar = function () {
16767 if (document.body.clientWidth >= window.innerWidth) return
16768 this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
16769 }
16770
16771 Modal.prototype.setScrollbar = function () {
16772 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
16773 if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
16774 }
16775
16776 Modal.prototype.resetScrollbar = function () {
16777 this.$body.css('padding-right', '')
16778 }
16779
16780 Modal.prototype.measureScrollbar = function () { // thx walsh
16781 var scrollDiv = document.createElement('div')
16782 scrollDiv.className = 'modal-scrollbar-measure'
16783 this.$body.append(scrollDiv)
16784 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
16785 this.$body[0].removeChild(scrollDiv)
16786 return scrollbarWidth
16787 }
16788
16789
16790 // MODAL PLUGIN DEFINITION
16791 // =======================
16792
16793 function Plugin(option, _relatedTarget) {
16794 return this.each(function () {
16795 var $this = $(this)
16796 var data = $this.data('bs.modal')
16797 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
16798
16799 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
16800 if (typeof option == 'string') data[option](_relatedTarget)
16801 else if (options.show) data.show(_relatedTarget)
16802 })
16803 }
16804
16805 var old = $.fn.modal
16806
16807 $.fn.modal = Plugin
16808 $.fn.modal.Constructor = Modal
16809
16810
16811 // MODAL NO CONFLICT
16812 // =================
16813
16814 $.fn.modal.noConflict = function () {
16815 $.fn.modal = old
16816 return this
16817 }
16818
16819
16820 // MODAL DATA-API
16821 // ==============
16822
16823 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
16824 var $this = $(this)
16825 var href = $this.attr('href')
16826 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
16827 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
16828
16829 if ($this.is('a')) e.preventDefault()
16830
16831 $target.one('show.bs.modal', function (showEvent) {
16832 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
16833 $target.one('hidden.bs.modal', function () {
16834 $this.is(':visible') && $this.trigger('focus')
16835 })
16836 })
16837 Plugin.call($target, option, this)
16838 })
16839
16840}(jQuery);
16841
16842/* ========================================================================
16843 * Bootstrap: tooltip.js v3.2.0
16844 * http://getbootstrap.com/javascript/#tooltip
16845 * Inspired by the original jQuery.tipsy by Jason Frame
16846 * ========================================================================
16847 * Copyright 2011-2014 Twitter, Inc.
16848 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
16849 * ======================================================================== */
16850
16851
16852+function ($) {
16853 'use strict';
16854
16855 // TOOLTIP PUBLIC CLASS DEFINITION
16856 // ===============================
16857
16858 var Tooltip = function (element, options) {
16859 this.type =
16860 this.options =
16861 this.enabled =
16862 this.timeout =
16863 this.hoverState =
16864 this.$element = null
16865
16866 this.init('tooltip', element, options)
16867 }
16868
16869 Tooltip.VERSION = '3.2.0'
16870
16871 Tooltip.DEFAULTS = {
16872 animation: true,
16873 placement: 'top',
16874 selector: false,
16875 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
16876 trigger: 'hover focus',
16877 title: '',
16878 delay: 0,
16879 html: false,
16880 container: false,
16881 viewport: {
16882 selector: 'body',
16883 padding: 0
16884 }
16885 }
16886
16887 Tooltip.prototype.init = function (type, element, options) {
16888 this.enabled = true
16889 this.type = type
16890 this.$element = $(element)
16891 this.options = this.getOptions(options)
16892 this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
16893
16894 var triggers = this.options.trigger.split(' ')
16895
16896 for (var i = triggers.length; i--;) {
16897 var trigger = triggers[i]
16898
16899 if (trigger == 'click') {
16900 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
16901 } else if (trigger != 'manual') {
16902 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
16903 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
16904
16905 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
16906 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
16907 }
16908 }
16909
16910 this.options.selector ?
16911 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
16912 this.fixTitle()
16913 }
16914
16915 Tooltip.prototype.getDefaults = function () {
16916 return Tooltip.DEFAULTS
16917 }
16918
16919 Tooltip.prototype.getOptions = function (options) {
16920 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
16921
16922 if (options.delay && typeof options.delay == 'number') {
16923 options.delay = {
16924 show: options.delay,
16925 hide: options.delay
16926 }
16927 }
16928
16929 return options
16930 }
16931
16932 Tooltip.prototype.getDelegateOptions = function () {
16933 var options = {}
16934 var defaults = this.getDefaults()
16935
16936 this._options && $.each(this._options, function (key, value) {
16937 if (defaults[key] != value) options[key] = value
16938 })
16939
16940 return options
16941 }
16942
16943 Tooltip.prototype.enter = function (obj) {
16944 var self = obj instanceof this.constructor ?
16945 obj : $(obj.currentTarget).data('bs.' + this.type)
16946
16947 if (!self) {
16948 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
16949 $(obj.currentTarget).data('bs.' + this.type, self)
16950 }
16951
16952 clearTimeout(self.timeout)
16953
16954 self.hoverState = 'in'
16955
16956 if (!self.options.delay || !self.options.delay.show) return self.show()
16957
16958 self.timeout = setTimeout(function () {
16959 if (self.hoverState == 'in') self.show()
16960 }, self.options.delay.show)
16961 }
16962
16963 Tooltip.prototype.leave = function (obj) {
16964 var self = obj instanceof this.constructor ?
16965 obj : $(obj.currentTarget).data('bs.' + this.type)
16966
16967 if (!self) {
16968 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
16969 $(obj.currentTarget).data('bs.' + this.type, self)
16970 }
16971
16972 clearTimeout(self.timeout)
16973
16974 self.hoverState = 'out'
16975
16976 if (!self.options.delay || !self.options.delay.hide) return self.hide()
16977
16978 self.timeout = setTimeout(function () {
16979 if (self.hoverState == 'out') self.hide()
16980 }, self.options.delay.hide)
16981 }
16982
16983 Tooltip.prototype.show = function () {
16984 var e = $.Event('show.bs.' + this.type)
16985
16986 if (this.hasContent() && this.enabled) {
16987 this.$element.trigger(e)
16988
16989 var inDom = $.contains(document.documentElement, this.$element[0])
16990 if (e.isDefaultPrevented() || !inDom) return
16991 var that = this
16992
16993 var $tip = this.tip()
16994
16995 var tipId = this.getUID(this.type)
16996
16997 this.setContent()
16998 $tip.attr('id', tipId)
16999 this.$element.attr('aria-describedby', tipId)
17000
17001 if (this.options.animation) $tip.addClass('fade')
17002
17003 var placement = typeof this.options.placement == 'function' ?
17004 this.options.placement.call(this, $tip[0], this.$element[0]) :
17005 this.options.placement
17006
17007 var autoToken = /\s?auto?\s?/i
17008 var autoPlace = autoToken.test(placement)
17009 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
17010
17011 $tip
17012 .detach()
17013 .css({ top: 0, left: 0, display: 'block' })
17014 .addClass(placement)
17015 .data('bs.' + this.type, this)
17016
17017 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
17018
17019 var pos = this.getPosition()
17020 var actualWidth = $tip[0].offsetWidth
17021 var actualHeight = $tip[0].offsetHeight
17022
17023 if (autoPlace) {
17024 var orgPlacement = placement
17025 var $parent = this.$element.parent()
17026 var parentDim = this.getPosition($parent)
ebd8d4e8 17027
3af2954a
IC
17028 placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
17029 placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
17030 placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
17031 placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
17032 placement
17033
17034 $tip
17035 .removeClass(orgPlacement)
17036 .addClass(placement)
17037 }
17038
17039 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
17040
17041 this.applyPlacement(calculatedOffset, placement)
17042
17043 var complete = function () {
17044 that.$element.trigger('shown.bs.' + that.type)
17045 that.hoverState = null
17046 }
17047
17048 $.support.transition && this.$tip.hasClass('fade') ?
17049 $tip
17050 .one('bsTransitionEnd', complete)
17051 .emulateTransitionEnd(150) :
17052 complete()
17053 }
17054 }
17055
17056 Tooltip.prototype.applyPlacement = function (offset, placement) {
17057 var $tip = this.tip()
17058 var width = $tip[0].offsetWidth
17059 var height = $tip[0].offsetHeight
17060
17061 // manually read margins because getBoundingClientRect includes difference
17062 var marginTop = parseInt($tip.css('margin-top'), 10)
17063 var marginLeft = parseInt($tip.css('margin-left'), 10)
17064
17065 // we must check for NaN for ie 8/9
17066 if (isNaN(marginTop)) marginTop = 0
17067 if (isNaN(marginLeft)) marginLeft = 0
17068
17069 offset.top = offset.top + marginTop
17070 offset.left = offset.left + marginLeft
17071
17072 // $.fn.offset doesn't round pixel values
17073 // so we use setOffset directly with our own function B-0
17074 $.offset.setOffset($tip[0], $.extend({
17075 using: function (props) {
17076 $tip.css({
17077 top: Math.round(props.top),
17078 left: Math.round(props.left)
17079 })
17080 }
17081 }, offset), 0)
17082
17083 $tip.addClass('in')
17084
17085 // check to see if placing tip in new offset caused the tip to resize itself
17086 var actualWidth = $tip[0].offsetWidth
17087 var actualHeight = $tip[0].offsetHeight
17088
17089 if (placement == 'top' && actualHeight != height) {
17090 offset.top = offset.top + height - actualHeight
17091 }
17092
17093 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
17094
17095 if (delta.left) offset.left += delta.left
17096 else offset.top += delta.top
17097
17098 var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
17099 var arrowPosition = delta.left ? 'left' : 'top'
17100 var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
17101
17102 $tip.offset(offset)
17103 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
17104 }
17105
17106 Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
17107 this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
17108 }
17109
17110 Tooltip.prototype.setContent = function () {
17111 var $tip = this.tip()
17112 var title = this.getTitle()
17113
17114 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
17115 $tip.removeClass('fade in top bottom left right')
17116 }
17117
17118 Tooltip.prototype.hide = function () {
17119 var that = this
17120 var $tip = this.tip()
17121 var e = $.Event('hide.bs.' + this.type)
17122
17123 this.$element.removeAttr('aria-describedby')
17124
17125 function complete() {
17126 if (that.hoverState != 'in') $tip.detach()
17127 that.$element.trigger('hidden.bs.' + that.type)
17128 }
17129
17130 this.$element.trigger(e)
17131
17132 if (e.isDefaultPrevented()) return
17133
17134 $tip.removeClass('in')
17135
17136 $.support.transition && this.$tip.hasClass('fade') ?
17137 $tip
17138 .one('bsTransitionEnd', complete)
17139 .emulateTransitionEnd(150) :
17140 complete()
17141
17142 this.hoverState = null
17143
17144 return this
17145 }
17146
17147 Tooltip.prototype.fixTitle = function () {
17148 var $e = this.$element
17149 if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
17150 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
17151 }
17152 }
17153
17154 Tooltip.prototype.hasContent = function () {
17155 return this.getTitle()
17156 }
17157
17158 Tooltip.prototype.getPosition = function ($element) {
17159 $element = $element || this.$element
17160 var el = $element[0]
17161 var isBody = el.tagName == 'BODY'
17162 return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
17163 scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
17164 width: isBody ? $(window).width() : $element.outerWidth(),
17165 height: isBody ? $(window).height() : $element.outerHeight()
17166 }, isBody ? { top: 0, left: 0 } : $element.offset())
17167 }
17168
17169 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
17170 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
17171 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
17172 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
17173 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
17174
17175 }
17176
17177 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
17178 var delta = { top: 0, left: 0 }
17179 if (!this.$viewport) return delta
17180
17181 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
17182 var viewportDimensions = this.getPosition(this.$viewport)
17183
17184 if (/right|left/.test(placement)) {
17185 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
17186 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
17187 if (topEdgeOffset < viewportDimensions.top) { // top overflow
17188 delta.top = viewportDimensions.top - topEdgeOffset
17189 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
17190 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
17191 }
17192 } else {
17193 var leftEdgeOffset = pos.left - viewportPadding
17194 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
17195 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
17196 delta.left = viewportDimensions.left - leftEdgeOffset
17197 } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
17198 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
17199 }
17200 }
17201
17202 return delta
17203 }
17204
17205 Tooltip.prototype.getTitle = function () {
17206 var title
17207 var $e = this.$element
17208 var o = this.options
17209
17210 title = $e.attr('data-original-title')
17211 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
17212
17213 return title
17214 }
17215
17216 Tooltip.prototype.getUID = function (prefix) {
17217 do prefix += ~~(Math.random() * 1000000)
17218 while (document.getElementById(prefix))
17219 return prefix
17220 }
17221
17222 Tooltip.prototype.tip = function () {
17223 return (this.$tip = this.$tip || $(this.options.template))
17224 }
17225
17226 Tooltip.prototype.arrow = function () {
17227 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
17228 }
17229
17230 Tooltip.prototype.validate = function () {
17231 if (!this.$element[0].parentNode) {
17232 this.hide()
17233 this.$element = null
17234 this.options = null
17235 }
17236 }
17237
17238 Tooltip.prototype.enable = function () {
17239 this.enabled = true
17240 }
17241
17242 Tooltip.prototype.disable = function () {
17243 this.enabled = false
17244 }
17245
17246 Tooltip.prototype.toggleEnabled = function () {
17247 this.enabled = !this.enabled
17248 }
17249
17250 Tooltip.prototype.toggle = function (e) {
17251 var self = this
17252 if (e) {
17253 self = $(e.currentTarget).data('bs.' + this.type)
17254 if (!self) {
17255 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
17256 $(e.currentTarget).data('bs.' + this.type, self)
17257 }
17258 }
17259
17260 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
17261 }
17262
17263 Tooltip.prototype.destroy = function () {
17264 clearTimeout(this.timeout)
17265 this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
17266 }
17267
17268
17269 // TOOLTIP PLUGIN DEFINITION
17270 // =========================
17271
17272 function Plugin(option) {
17273 return this.each(function () {
17274 var $this = $(this)
17275 var data = $this.data('bs.tooltip')
17276 var options = typeof option == 'object' && option
17277
17278 if (!data && option == 'destroy') return
17279 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
17280 if (typeof option == 'string') data[option]()
17281 })
17282 }
17283
17284 var old = $.fn.tooltip
17285
17286 $.fn.tooltip = Plugin
17287 $.fn.tooltip.Constructor = Tooltip
17288
17289
17290 // TOOLTIP NO CONFLICT
17291 // ===================
17292
17293 $.fn.tooltip.noConflict = function () {
17294 $.fn.tooltip = old
17295 return this
17296 }
17297
17298}(jQuery);
17299
17300/* ========================================================================
17301 * Bootstrap: popover.js v3.2.0
17302 * http://getbootstrap.com/javascript/#popovers
17303 * ========================================================================
17304 * Copyright 2011-2014 Twitter, Inc.
17305 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
17306 * ======================================================================== */
17307
17308
17309+function ($) {
17310 'use strict';
17311
17312 // POPOVER PUBLIC CLASS DEFINITION
17313 // ===============================
17314
17315 var Popover = function (element, options) {
17316 this.init('popover', element, options)
17317 }
17318
17319 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
17320
17321 Popover.VERSION = '3.2.0'
17322
17323 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
17324 placement: 'right',
17325 trigger: 'click',
17326 content: '',
17327 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
17328 })
17329
17330
17331 // NOTE: POPOVER EXTENDS tooltip.js
17332 // ================================
17333
17334 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
17335
17336 Popover.prototype.constructor = Popover
17337
17338 Popover.prototype.getDefaults = function () {
17339 return Popover.DEFAULTS
17340 }
17341
17342 Popover.prototype.setContent = function () {
17343 var $tip = this.tip()
17344 var title = this.getTitle()
17345 var content = this.getContent()
17346
17347 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
17348 $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
17349 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
17350 ](content)
17351
17352 $tip.removeClass('fade top bottom left right in')
17353
17354 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
17355 // this manually by checking the contents.
17356 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
17357 }
17358
17359 Popover.prototype.hasContent = function () {
17360 return this.getTitle() || this.getContent()
17361 }
17362
17363 Popover.prototype.getContent = function () {
17364 var $e = this.$element
17365 var o = this.options
17366
17367 return $e.attr('data-content')
17368 || (typeof o.content == 'function' ?
17369 o.content.call($e[0]) :
17370 o.content)
17371 }
17372
17373 Popover.prototype.arrow = function () {
17374 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
17375 }
17376
17377 Popover.prototype.tip = function () {
17378 if (!this.$tip) this.$tip = $(this.options.template)
17379 return this.$tip
17380 }
17381
17382
17383 // POPOVER PLUGIN DEFINITION
17384 // =========================
17385
17386 function Plugin(option) {
17387 return this.each(function () {
17388 var $this = $(this)
17389 var data = $this.data('bs.popover')
17390 var options = typeof option == 'object' && option
17391
17392 if (!data && option == 'destroy') return
17393 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
17394 if (typeof option == 'string') data[option]()
17395 })
17396 }
17397
17398 var old = $.fn.popover
17399
17400 $.fn.popover = Plugin
17401 $.fn.popover.Constructor = Popover
17402
17403
17404 // POPOVER NO CONFLICT
17405 // ===================
17406
17407 $.fn.popover.noConflict = function () {
17408 $.fn.popover = old
17409 return this
17410 }
17411
17412}(jQuery);
17413
17414/* ========================================================================
17415 * Bootstrap: scrollspy.js v3.2.0
17416 * http://getbootstrap.com/javascript/#scrollspy
17417 * ========================================================================
17418 * Copyright 2011-2014 Twitter, Inc.
17419 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
17420 * ======================================================================== */
17421
17422
17423+function ($) {
17424 'use strict';
17425
17426 // SCROLLSPY CLASS DEFINITION
17427 // ==========================
17428
17429 function ScrollSpy(element, options) {
17430 var process = $.proxy(this.process, this)
17431
17432 this.$body = $('body')
17433 this.$scrollElement = $(element).is('body') ? $(window) : $(element)
17434 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
17435 this.selector = (this.options.target || '') + ' .nav li > a'
17436 this.offsets = []
17437 this.targets = []
17438 this.activeTarget = null
17439 this.scrollHeight = 0
17440
17441 this.$scrollElement.on('scroll.bs.scrollspy', process)
17442 this.refresh()
17443 this.process()
17444 }
17445
17446 ScrollSpy.VERSION = '3.2.0'
17447
17448 ScrollSpy.DEFAULTS = {
17449 offset: 10
17450 }
17451
17452 ScrollSpy.prototype.getScrollHeight = function () {
17453 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
17454 }
17455
17456 ScrollSpy.prototype.refresh = function () {
17457 var offsetMethod = 'offset'
17458 var offsetBase = 0
17459
17460 if (!$.isWindow(this.$scrollElement[0])) {
17461 offsetMethod = 'position'
17462 offsetBase = this.$scrollElement.scrollTop()
17463 }
17464
17465 this.offsets = []
17466 this.targets = []
17467 this.scrollHeight = this.getScrollHeight()
17468
17469 var self = this
17470
17471 this.$body
17472 .find(this.selector)
17473 .map(function () {
17474 var $el = $(this)
17475 var href = $el.data('target') || $el.attr('href')
17476 var $href = /^#./.test(href) && $(href)
17477
17478 return ($href
17479 && $href.length
17480 && $href.is(':visible')
17481 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
17482 })
17483 .sort(function (a, b) { return a[0] - b[0] })
17484 .each(function () {
17485 self.offsets.push(this[0])
17486 self.targets.push(this[1])
17487 })
17488 }
17489
17490 ScrollSpy.prototype.process = function () {
17491 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
17492 var scrollHeight = this.getScrollHeight()
17493 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
17494 var offsets = this.offsets
17495 var targets = this.targets
17496 var activeTarget = this.activeTarget
17497 var i
17498
17499 if (this.scrollHeight != scrollHeight) {
17500 this.refresh()
17501 }
17502
17503 if (scrollTop >= maxScroll) {
17504 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
17505 }
17506
17507 if (activeTarget && scrollTop <= offsets[0]) {
17508 return activeTarget != (i = targets[0]) && this.activate(i)
17509 }
17510
17511 for (i = offsets.length; i--;) {
17512 activeTarget != targets[i]
17513 && scrollTop >= offsets[i]
17514 && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
17515 && this.activate(targets[i])
17516 }
17517 }
17518
17519 ScrollSpy.prototype.activate = function (target) {
17520 this.activeTarget = target
17521
17522 $(this.selector)
17523 .parentsUntil(this.options.target, '.active')
17524 .removeClass('active')
17525
17526 var selector = this.selector +
17527 '[data-target="' + target + '"],' +
17528 this.selector + '[href="' + target + '"]'
17529
17530 var active = $(selector)
17531 .parents('li')
17532 .addClass('active')
17533
17534 if (active.parent('.dropdown-menu').length) {
17535 active = active
17536 .closest('li.dropdown')
17537 .addClass('active')
17538 }
17539
17540 active.trigger('activate.bs.scrollspy')
17541 }
17542
17543
17544 // SCROLLSPY PLUGIN DEFINITION
17545 // ===========================
17546
17547 function Plugin(option) {
17548 return this.each(function () {
17549 var $this = $(this)
17550 var data = $this.data('bs.scrollspy')
17551 var options = typeof option == 'object' && option
17552
17553 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
17554 if (typeof option == 'string') data[option]()
17555 })
17556 }
17557
17558 var old = $.fn.scrollspy
17559
17560 $.fn.scrollspy = Plugin
17561 $.fn.scrollspy.Constructor = ScrollSpy
17562
17563
17564 // SCROLLSPY NO CONFLICT
17565 // =====================
17566
17567 $.fn.scrollspy.noConflict = function () {
17568 $.fn.scrollspy = old
17569 return this
17570 }
17571
17572
17573 // SCROLLSPY DATA-API
17574 // ==================
17575
17576 $(window).on('load.bs.scrollspy.data-api', function () {
17577 $('[data-spy="scroll"]').each(function () {
17578 var $spy = $(this)
17579 Plugin.call($spy, $spy.data())
17580 })
17581 })
17582
17583}(jQuery);
17584
17585/* ========================================================================
17586 * Bootstrap: tab.js v3.2.0
17587 * http://getbootstrap.com/javascript/#tabs
17588 * ========================================================================
17589 * Copyright 2011-2014 Twitter, Inc.
17590 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
17591 * ======================================================================== */
17592
17593
17594+function ($) {
17595 'use strict';
17596
17597 // TAB CLASS DEFINITION
17598 // ====================
17599
17600 var Tab = function (element) {
17601 this.element = $(element)
17602 }
17603
17604 Tab.VERSION = '3.2.0'
17605
17606 Tab.prototype.show = function () {
17607 var $this = this.element
17608 var $ul = $this.closest('ul:not(.dropdown-menu)')
17609 var selector = $this.data('target')
17610
17611 if (!selector) {
17612 selector = $this.attr('href')
17613 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
17614 }
17615
17616 if ($this.parent('li').hasClass('active')) return
17617
17618 var previous = $ul.find('.active:last a')[0]
17619 var e = $.Event('show.bs.tab', {
17620 relatedTarget: previous
17621 })
17622
17623 $this.trigger(e)
17624
17625 if (e.isDefaultPrevented()) return
17626
17627 var $target = $(selector)
17628
17629 this.activate($this.closest('li'), $ul)
17630 this.activate($target, $target.parent(), function () {
17631 $this.trigger({
17632 type: 'shown.bs.tab',
17633 relatedTarget: previous
17634 })
17635 })
17636 }
17637
17638 Tab.prototype.activate = function (element, container, callback) {
17639 var $active = container.find('> .active')
17640 var transition = callback
17641 && $.support.transition
17642 && $active.hasClass('fade')
17643
17644 function next() {
17645 $active
17646 .removeClass('active')
17647 .find('> .dropdown-menu > .active')
17648 .removeClass('active')
17649
17650 element.addClass('active')
17651
17652 if (transition) {
17653 element[0].offsetWidth // reflow for transition
17654 element.addClass('in')
17655 } else {
17656 element.removeClass('fade')
17657 }
17658
17659 if (element.parent('.dropdown-menu')) {
17660 element.closest('li.dropdown').addClass('active')
17661 }
17662
17663 callback && callback()
17664 }
17665
17666 transition ?
17667 $active
17668 .one('bsTransitionEnd', next)
17669 .emulateTransitionEnd(150) :
17670 next()
17671
17672 $active.removeClass('in')
17673 }
17674
17675
17676 // TAB PLUGIN DEFINITION
17677 // =====================
17678
17679 function Plugin(option) {
17680 return this.each(function () {
17681 var $this = $(this)
17682 var data = $this.data('bs.tab')
17683
17684 if (!data) $this.data('bs.tab', (data = new Tab(this)))
17685 if (typeof option == 'string') data[option]()
17686 })
17687 }
17688
17689 var old = $.fn.tab
17690
17691 $.fn.tab = Plugin
17692 $.fn.tab.Constructor = Tab
17693
17694
17695 // TAB NO CONFLICT
17696 // ===============
17697
17698 $.fn.tab.noConflict = function () {
17699 $.fn.tab = old
17700 return this
17701 }
17702
17703
17704 // TAB DATA-API
17705 // ============
17706
17707 $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
17708 e.preventDefault()
17709 Plugin.call($(this), 'show')
17710 })
17711
17712}(jQuery);
ebd8d4e8 17713
3af2954a
IC
17714/* ========================================================================
17715 * Bootstrap: affix.js v3.2.0
17716 * http://getbootstrap.com/javascript/#affix
17717 * ========================================================================
17718 * Copyright 2011-2014 Twitter, Inc.
17719 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
17720 * ======================================================================== */
ebd8d4e8 17721
ebd8d4e8 17722
3af2954a
IC
17723+function ($) {
17724 'use strict';
ebd8d4e8 17725
3af2954a
IC
17726 // AFFIX CLASS DEFINITION
17727 // ======================
ebd8d4e8 17728
3af2954a
IC
17729 var Affix = function (element, options) {
17730 this.options = $.extend({}, Affix.DEFAULTS, options)
ebd8d4e8 17731
3af2954a
IC
17732 this.$target = $(this.options.target)
17733 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
17734 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
212b1b46 17735
3af2954a
IC
17736 this.$element = $(element)
17737 this.affixed =
17738 this.unpin =
17739 this.pinnedOffset = null
212b1b46 17740
3af2954a
IC
17741 this.checkPosition()
17742 }
212b1b46 17743
3af2954a 17744 Affix.VERSION = '3.2.0'
212b1b46 17745
3af2954a 17746 Affix.RESET = 'affix affix-top affix-bottom'
212b1b46 17747
3af2954a
IC
17748 Affix.DEFAULTS = {
17749 offset: 0,
17750 target: window
17751 }
212b1b46 17752
3af2954a
IC
17753 Affix.prototype.getPinnedOffset = function () {
17754 if (this.pinnedOffset) return this.pinnedOffset
17755 this.$element.removeClass(Affix.RESET).addClass('affix')
17756 var scrollTop = this.$target.scrollTop()
17757 var position = this.$element.offset()
17758 return (this.pinnedOffset = position.top - scrollTop)
17759 }
212b1b46 17760
3af2954a
IC
17761 Affix.prototype.checkPositionWithEventLoop = function () {
17762 setTimeout($.proxy(this.checkPosition, this), 1)
17763 }
212b1b46 17764
3af2954a
IC
17765 Affix.prototype.checkPosition = function () {
17766 if (!this.$element.is(':visible')) return
212b1b46 17767
3af2954a
IC
17768 var scrollHeight = $(document).height()
17769 var scrollTop = this.$target.scrollTop()
17770 var position = this.$element.offset()
17771 var offset = this.options.offset
17772 var offsetTop = offset.top
17773 var offsetBottom = offset.bottom
212b1b46 17774
3af2954a
IC
17775 if (typeof offset != 'object') offsetBottom = offsetTop = offset
17776 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
17777 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
212b1b46 17778
3af2954a
IC
17779 var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
17780 offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
17781 offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
212b1b46 17782
3af2954a
IC
17783 if (this.affixed === affix) return
17784 if (this.unpin != null) this.$element.css('top', '')
212b1b46 17785
3af2954a
IC
17786 var affixType = 'affix' + (affix ? '-' + affix : '')
17787 var e = $.Event(affixType + '.bs.affix')
212b1b46 17788
3af2954a 17789 this.$element.trigger(e)
212b1b46 17790
3af2954a 17791 if (e.isDefaultPrevented()) return
212b1b46 17792
3af2954a
IC
17793 this.affixed = affix
17794 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
212b1b46 17795
3af2954a
IC
17796 this.$element
17797 .removeClass(Affix.RESET)
17798 .addClass(affixType)
17799 .trigger($.Event(affixType.replace('affix', 'affixed')))
212b1b46 17800
3af2954a
IC
17801 if (affix == 'bottom') {
17802 this.$element.offset({
17803 top: scrollHeight - this.$element.height() - offsetBottom
17804 })
17805 }
17806 }
212b1b46 17807
ebd8d4e8 17808
3af2954a
IC
17809 // AFFIX PLUGIN DEFINITION
17810 // =======================
ebd8d4e8 17811
3af2954a
IC
17812 function Plugin(option) {
17813 return this.each(function () {
17814 var $this = $(this)
17815 var data = $this.data('bs.affix')
17816 var options = typeof option == 'object' && option
ebd8d4e8 17817
3af2954a
IC
17818 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
17819 if (typeof option == 'string') data[option]()
17820 })
17821 }
ebd8d4e8 17822
3af2954a
IC
17823 var old = $.fn.affix
17824
17825 $.fn.affix = Plugin
17826 $.fn.affix.Constructor = Affix
17827
17828
17829 // AFFIX NO CONFLICT
17830 // =================
17831
17832 $.fn.affix.noConflict = function () {
17833 $.fn.affix = old
17834 return this
17835 }
17836
17837
17838 // AFFIX DATA-API
17839 // ==============
17840
17841 $(window).on('load', function () {
17842 $('[data-spy="affix"]').each(function () {
17843 var $spy = $(this)
17844 var data = $spy.data()
17845
17846 data.offset = data.offset || {}
ebd8d4e8 17847
3af2954a
IC
17848 if (data.offsetBottom) data.offset.bottom = data.offsetBottom
17849 if (data.offsetTop) data.offset.top = data.offsetTop
17850
17851 Plugin.call($spy, data)
17852 })
17853 })
17854
17855}(jQuery);
17856 </script>
ebd8d4e8
IC
17857 <script>
17858(function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Bitcoin=e()}})(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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.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(_dereq_,module,exports){
17859var assert = _dereq_('assert')
17860
17861module.exports = BigInteger
17862
17863// JavaScript engine analysis
17864var canary = 0xdeadbeefcafe;
17865var j_lm = ((canary&0xffffff)==0xefcafe);
17866
17867// (public) Constructor
17868function BigInteger(a,b,c) {
17869 if (!(this instanceof BigInteger)) {
17870 return new BigInteger(a, b, c);
17871 }
17872
17873 if(a != null) {
17874 if("number" == typeof a) this.fromNumber(a,b,c);
17875 else if(b == null && "string" != typeof a) this.fromString(a,256);
17876 else this.fromString(a,b);
17877 }
17878}
17879
17880var proto = BigInteger.prototype;
17881
17882// return new, unset BigInteger
17883function nbi() { return new BigInteger(null); }
17884
17885// Bits per digit
17886var dbits;
17887
17888// am: Compute w_j += (x*this_i), propagate carries,
17889// c is initial carry, returns final carry.
17890// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
17891// We need to select the fastest one that works in this environment.
17892
17893// am1: use a single mult and divide to get the high bits,
17894// max digit bits should be 26 because
17895// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
17896function am1(i,x,w,j,c,n) {
17897 while(--n >= 0) {
17898 var v = x*this[i++]+w[j]+c;
17899 c = Math.floor(v/0x4000000);
17900 w[j++] = v&0x3ffffff;
17901 }
17902 return c;
17903}
17904// am2 avoids a big mult-and-extract completely.
17905// Max digit bits should be <= 30 because we do bitwise ops
17906// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
17907function am2(i,x,w,j,c,n) {
17908 var xl = x&0x7fff, xh = x>>15;
17909 while(--n >= 0) {
17910 var l = this[i]&0x7fff;
17911 var h = this[i++]>>15;
17912 var m = xh*l+h*xl;
17913 l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
17914 c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
17915 w[j++] = l&0x3fffffff;
17916 }
17917 return c;
17918}
17919// Alternately, set max digit bits to 28 since some
17920// browsers slow down when dealing with 32-bit numbers.
17921function am3(i,x,w,j,c,n) {
17922 var xl = x&0x3fff, xh = x>>14;
17923 while(--n >= 0) {
17924 var l = this[i]&0x3fff;
17925 var h = this[i++]>>14;
17926 var m = xh*l+h*xl;
17927 l = xl*l+((m&0x3fff)<<14)+w[j]+c;
17928 c = (l>>28)+(m>>14)+xh*h;
17929 w[j++] = l&0xfffffff;
17930 }
17931 return c;
17932}
17933
17934// wtf?
17935BigInteger.prototype.am = am1;
17936dbits = 26;
17937
17938/*
17939if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
17940 BigInteger.prototype.am = am2;
17941 dbits = 30;
17942}
17943else if(j_lm && (navigator.appName != "Netscape")) {
17944 BigInteger.prototype.am = am1;
17945 dbits = 26;
17946}
17947else { // Mozilla/Netscape seems to prefer am3
17948 BigInteger.prototype.am = am3;
17949 dbits = 28;
17950}
17951*/
17952
17953BigInteger.prototype.DB = dbits;
17954BigInteger.prototype.DM = ((1<<dbits)-1);
17955var DV = BigInteger.prototype.DV = (1<<dbits);
17956
17957var BI_FP = 52;
17958BigInteger.prototype.FV = Math.pow(2,BI_FP);
17959BigInteger.prototype.F1 = BI_FP-dbits;
17960BigInteger.prototype.F2 = 2*dbits-BI_FP;
17961
17962// Digit conversions
17963var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
17964var BI_RC = new Array();
17965var rr,vv;
17966rr = "0".charCodeAt(0);
17967for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
17968rr = "a".charCodeAt(0);
17969for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
17970rr = "A".charCodeAt(0);
17971for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
17972
17973function int2char(n) { return BI_RM.charAt(n); }
17974function intAt(s,i) {
17975 var c = BI_RC[s.charCodeAt(i)];
17976 return (c==null)?-1:c;
17977}
17978
17979// (protected) copy this to r
17980function bnpCopyTo(r) {
17981 for(var i = this.t-1; i >= 0; --i) r[i] = this[i];
17982 r.t = this.t;
17983 r.s = this.s;
17984}
17985
17986// (protected) set from integer value x, -DV <= x < DV
17987function bnpFromInt(x) {
17988 this.t = 1;
17989 this.s = (x<0)?-1:0;
17990 if(x > 0) this[0] = x;
17991 else if(x < -1) this[0] = x+DV;
17992 else this.t = 0;
17993}
17994
17995// return bigint initialized to value
17996function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
17997
17998// (protected) set from string and radix
17999function bnpFromString(s,b) {
18000 var self = this;
18001
18002 var k;
18003 if(b == 16) k = 4;
18004 else if(b == 8) k = 3;
18005 else if(b == 256) k = 8; // byte array
18006 else if(b == 2) k = 1;
18007 else if(b == 32) k = 5;
18008 else if(b == 4) k = 2;
18009 else { self.fromRadix(s,b); return; }
18010 self.t = 0;
18011 self.s = 0;
18012 var i = s.length, mi = false, sh = 0;
18013 while(--i >= 0) {
18014 var x = (k==8)?s[i]&0xff:intAt(s,i);
18015 if(x < 0) {
18016 if(s.charAt(i) == "-") mi = true;
18017 continue;
18018 }
18019 mi = false;
18020 if(sh == 0)
18021 self[self.t++] = x;
18022 else if(sh+k > self.DB) {
18023 self[self.t-1] |= (x&((1<<(self.DB-sh))-1))<<sh;
18024 self[self.t++] = (x>>(self.DB-sh));
18025 }
18026 else
18027 self[self.t-1] |= x<<sh;
18028 sh += k;
18029 if(sh >= self.DB) sh -= self.DB;
18030 }
18031 if(k == 8 && (s[0]&0x80) != 0) {
18032 self.s = -1;
18033 if(sh > 0) self[self.t-1] |= ((1<<(self.DB-sh))-1)<<sh;
18034 }
18035 self.clamp();
18036 if(mi) BigInteger.ZERO.subTo(self,self);
18037}
18038
18039// (protected) clamp off excess high words
18040function bnpClamp() {
18041 var c = this.s&this.DM;
18042 while(this.t > 0 && this[this.t-1] == c) --this.t;
18043}
18044
18045// (public) return string representation in given radix
18046function bnToString(b) {
18047 var self = this;
18048 if(self.s < 0) return "-"+self.negate().toString(b);
18049 var k;
18050 if(b == 16) k = 4;
18051 else if(b == 8) k = 3;
18052 else if(b == 2) k = 1;
18053 else if(b == 32) k = 5;
18054 else if(b == 4) k = 2;
18055 else return self.toRadix(b);
18056 var km = (1<<k)-1, d, m = false, r = "", i = self.t;
18057 var p = self.DB-(i*self.DB)%k;
18058 if(i-- > 0) {
18059 if(p < self.DB && (d = self[i]>>p) > 0) { m = true; r = int2char(d); }
18060 while(i >= 0) {
18061 if(p < k) {
18062 d = (self[i]&((1<<p)-1))<<(k-p);
18063 d |= self[--i]>>(p+=self.DB-k);
18064 }
18065 else {
18066 d = (self[i]>>(p-=k))&km;
18067 if(p <= 0) { p += self.DB; --i; }
18068 }
18069 if(d > 0) m = true;
18070 if(m) r += int2char(d);
18071 }
18072 }
18073 return m?r:"0";
18074}
18075
18076// (public) -this
18077function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
18078
18079// (public) |this|
18080function bnAbs() { return (this.s<0)?this.negate():this; }
18081
18082// (public) return + if this > a, - if this < a, 0 if equal
18083function bnCompareTo(a) {
18084 var r = this.s-a.s;
18085 if(r != 0) return r;
18086 var i = this.t;
18087 r = i-a.t;
18088 if(r != 0) return (this.s<0)?-r:r;
18089 while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
18090 return 0;
18091}
18092
18093// returns bit length of the integer x
18094function nbits(x) {
18095 var r = 1, t;
18096 if((t=x>>>16) != 0) { x = t; r += 16; }
18097 if((t=x>>8) != 0) { x = t; r += 8; }
18098 if((t=x>>4) != 0) { x = t; r += 4; }
18099 if((t=x>>2) != 0) { x = t; r += 2; }
18100 if((t=x>>1) != 0) { x = t; r += 1; }
18101 return r;
18102}
18103
18104// (public) return the number of bits in "this"
18105function bnBitLength() {
18106 if(this.t <= 0) return 0;
18107 return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
18108}
18109
18110// (protected) r = this << n*DB
18111function bnpDLShiftTo(n,r) {
18112 var i;
18113 for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
18114 for(i = n-1; i >= 0; --i) r[i] = 0;
18115 r.t = this.t+n;
18116 r.s = this.s;
18117}
18118
18119// (protected) r = this >> n*DB
18120function bnpDRShiftTo(n,r) {
18121 for(var i = n; i < this.t; ++i) r[i-n] = this[i];
18122 r.t = Math.max(this.t-n,0);
18123 r.s = this.s;
18124}
18125
18126// (protected) r = this << n
18127function bnpLShiftTo(n,r) {
18128 var self = this;
18129 var bs = n%self.DB;
18130 var cbs = self.DB-bs;
18131 var bm = (1<<cbs)-1;
18132 var ds = Math.floor(n/self.DB), c = (self.s<<bs)&self.DM, i;
18133 for(i = self.t-1; i >= 0; --i) {
18134 r[i+ds+1] = (self[i]>>cbs)|c;
18135 c = (self[i]&bm)<<bs;
18136 }
18137 for(i = ds-1; i >= 0; --i) r[i] = 0;
18138 r[ds] = c;
18139 r.t = self.t+ds+1;
18140 r.s = self.s;
18141 r.clamp();
18142}
18143
18144// (protected) r = this >> n
18145function bnpRShiftTo(n,r) {
18146 var self = this;
18147 r.s = self.s;
18148 var ds = Math.floor(n/self.DB);
18149 if(ds >= self.t) { r.t = 0; return; }
18150 var bs = n%self.DB;
18151 var cbs = self.DB-bs;
18152 var bm = (1<<bs)-1;
18153 r[0] = self[ds]>>bs;
18154 for(var i = ds+1; i < self.t; ++i) {
18155 r[i-ds-1] |= (self[i]&bm)<<cbs;
18156 r[i-ds] = self[i]>>bs;
18157 }
18158 if(bs > 0) r[self.t-ds-1] |= (self.s&bm)<<cbs;
18159 r.t = self.t-ds;
18160 r.clamp();
18161}
18162
18163// (protected) r = this - a
18164function bnpSubTo(a,r) {
18165 var self = this;
18166 var i = 0, c = 0, m = Math.min(a.t,self.t);
18167 while(i < m) {
18168 c += self[i]-a[i];
18169 r[i++] = c&self.DM;
18170 c >>= self.DB;
18171 }
18172 if(a.t < self.t) {
18173 c -= a.s;
18174 while(i < self.t) {
18175 c += self[i];
18176 r[i++] = c&self.DM;
18177 c >>= self.DB;
18178 }
18179 c += self.s;
18180 }
18181 else {
18182 c += self.s;
18183 while(i < a.t) {
18184 c -= a[i];
18185 r[i++] = c&self.DM;
18186 c >>= self.DB;
18187 }
18188 c -= a.s;
18189 }
18190 r.s = (c<0)?-1:0;
18191 if(c < -1) r[i++] = self.DV+c;
18192 else if(c > 0) r[i++] = c;
18193 r.t = i;
18194 r.clamp();
18195}
18196
18197// (protected) r = this * a, r != this,a (HAC 14.12)
18198// "this" should be the larger one if appropriate.
18199function bnpMultiplyTo(a,r) {
18200 var x = this.abs(), y = a.abs();
18201 var i = x.t;
18202 r.t = i+y.t;
18203 while(--i >= 0) r[i] = 0;
18204 for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
18205 r.s = 0;
18206 r.clamp();
18207 if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
18208}
18209
18210// (protected) r = this^2, r != this (HAC 14.16)
18211function bnpSquareTo(r) {
18212 var x = this.abs();
18213 var i = r.t = 2*x.t;
18214 while(--i >= 0) r[i] = 0;
18215 for(i = 0; i < x.t-1; ++i) {
18216 var c = x.am(i,x[i],r,2*i,0,1);
18217 if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
18218 r[i+x.t] -= x.DV;
18219 r[i+x.t+1] = 1;
18220 }
18221 }
18222 if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
18223 r.s = 0;
18224 r.clamp();
18225}
18226
18227// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
18228// r != q, this != m. q or r may be null.
18229function bnpDivRemTo(m,q,r) {
18230 var self = this;
18231 var pm = m.abs();
18232 if(pm.t <= 0) return;
18233 var pt = self.abs();
18234 if(pt.t < pm.t) {
18235 if(q != null) q.fromInt(0);
18236 if(r != null) self.copyTo(r);
18237 return;
18238 }
18239 if(r == null) r = nbi();
18240 var y = nbi(), ts = self.s, ms = m.s;
18241 var nsh = self.DB-nbits(pm[pm.t-1]); // normalize modulus
18242 if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
18243 else { pm.copyTo(y); pt.copyTo(r); }
18244 var ys = y.t;
18245 var y0 = y[ys-1];
18246 if(y0 == 0) return;
18247 var yt = y0*(1<<self.F1)+((ys>1)?y[ys-2]>>self.F2:0);
18248 var d1 = self.FV/yt, d2 = (1<<self.F1)/yt, e = 1<<self.F2;
18249 var i = r.t, j = i-ys, t = (q==null)?nbi():q;
18250 y.dlShiftTo(j,t);
18251 if(r.compareTo(t) >= 0) {
18252 r[r.t++] = 1;
18253 r.subTo(t,r);
18254 }
18255 BigInteger.ONE.dlShiftTo(ys,t);
18256 t.subTo(y,y); // "negative" y so we can replace sub with am later
18257 while(y.t < ys) y[y.t++] = 0;
18258 while(--j >= 0) {
18259 // Estimate quotient digit
18260 var qd = (r[--i]==y0)?self.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
18261 if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
18262 y.dlShiftTo(j,t);
18263 r.subTo(t,r);
18264 while(r[i] < --qd) r.subTo(t,r);
18265 }
18266 }
18267 if(q != null) {
18268 r.drShiftTo(ys,q);
18269 if(ts != ms) BigInteger.ZERO.subTo(q,q);
18270 }
18271 r.t = ys;
18272 r.clamp();
18273 if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
18274 if(ts < 0) BigInteger.ZERO.subTo(r,r);
18275}
18276
18277// (public) this mod a
18278function bnMod(a) {
18279 var r = nbi();
18280 this.abs().divRemTo(a,null,r);
18281 if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
18282 return r;
18283}
18284
18285// Modular reduction using "classic" algorithm
18286function Classic(m) { this.m = m; }
18287function cConvert(x) {
18288 if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
18289 else return x;
18290}
18291function cRevert(x) { return x; }
18292function cReduce(x) { x.divRemTo(this.m,null,x); }
18293function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
18294function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
18295
18296Classic.prototype.convert = cConvert;
18297Classic.prototype.revert = cRevert;
18298Classic.prototype.reduce = cReduce;
18299Classic.prototype.mulTo = cMulTo;
18300Classic.prototype.sqrTo = cSqrTo;
18301
18302// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
18303// justification:
18304// xy == 1 (mod m)
18305// xy = 1+km
18306// xy(2-xy) = (1+km)(1-km)
18307// x[y(2-xy)] = 1-k^2m^2
18308// x[y(2-xy)] == 1 (mod m^2)
18309// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
18310// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
18311// JS multiply "overflows" differently from C/C++, so care is needed here.
18312function bnpInvDigit() {
18313 if(this.t < 1) return 0;
18314 var x = this[0];
18315 if((x&1) == 0) return 0;
18316 var y = x&3; // y == 1/x mod 2^2
18317 y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
18318 y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
18319 y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
18320 // last step - calculate inverse mod DV directly;
18321 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
18322 y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
18323 // we really want the negative inverse, and -DV < y < DV
18324 return (y>0)?this.DV-y:-y;
18325}
18326
18327// Montgomery reduction
18328function Montgomery(m) {
18329 this.m = m;
18330 this.mp = m.invDigit();
18331 this.mpl = this.mp&0x7fff;
18332 this.mph = this.mp>>15;
18333 this.um = (1<<(m.DB-15))-1;
18334 this.mt2 = 2*m.t;
18335}
18336
18337// xR mod m
18338function montConvert(x) {
18339 var r = nbi();
18340 x.abs().dlShiftTo(this.m.t,r);
18341 r.divRemTo(this.m,null,r);
18342 if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
18343 return r;
18344}
18345
18346// x/R mod m
18347function montRevert(x) {
18348 var r = nbi();
18349 x.copyTo(r);
18350 this.reduce(r);
18351 return r;
18352}
18353
18354// x = x/R mod m (HAC 14.32)
18355function montReduce(x) {
18356 while(x.t <= this.mt2) // pad x so am has enough room later
18357 x[x.t++] = 0;
18358 for(var i = 0; i < this.m.t; ++i) {
18359 // faster way of calculating u0 = x[i]*mp mod DV
18360 var j = x[i]&0x7fff;
18361 var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
18362 // use am to combine the multiply-shift-add into one call
18363 j = i+this.m.t;
18364 x[j] += this.m.am(0,u0,x,i,0,this.m.t);
18365 // propagate carry
18366 while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
18367 }
18368 x.clamp();
18369 x.drShiftTo(this.m.t,x);
18370 if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
18371}
18372
18373// r = "x^2/R mod m"; x != r
18374function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
18375
18376// r = "xy/R mod m"; x,y != r
18377function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
18378
18379Montgomery.prototype.convert = montConvert;
18380Montgomery.prototype.revert = montRevert;
18381Montgomery.prototype.reduce = montReduce;
18382Montgomery.prototype.mulTo = montMulTo;
18383Montgomery.prototype.sqrTo = montSqrTo;
18384
18385// (protected) true iff this is even
18386function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
18387
18388// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
18389function bnpExp(e,z) {
18390 if(e > 0xffffffff || e < 1) return BigInteger.ONE;
18391 var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
18392 g.copyTo(r);
18393 while(--i >= 0) {
18394 z.sqrTo(r,r2);
18395 if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
18396 else { var t = r; r = r2; r2 = t; }
18397 }
18398 return z.revert(r);
18399}
18400
18401// (public) this^e % m, 0 <= e < 2^32
18402function bnModPowInt(e,m) {
18403 var z;
18404 if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
18405 return this.exp(e,z);
18406}
18407
18408// protected
18409proto.copyTo = bnpCopyTo;
18410proto.fromInt = bnpFromInt;
18411proto.fromString = bnpFromString;
18412proto.clamp = bnpClamp;
18413proto.dlShiftTo = bnpDLShiftTo;
18414proto.drShiftTo = bnpDRShiftTo;
18415proto.lShiftTo = bnpLShiftTo;
18416proto.rShiftTo = bnpRShiftTo;
18417proto.subTo = bnpSubTo;
18418proto.multiplyTo = bnpMultiplyTo;
18419proto.squareTo = bnpSquareTo;
18420proto.divRemTo = bnpDivRemTo;
18421proto.invDigit = bnpInvDigit;
18422proto.isEven = bnpIsEven;
18423proto.exp = bnpExp;
18424
18425// public
18426proto.toString = bnToString;
18427proto.negate = bnNegate;
18428proto.abs = bnAbs;
18429proto.compareTo = bnCompareTo;
18430proto.bitLength = bnBitLength;
18431proto.mod = bnMod;
18432proto.modPowInt = bnModPowInt;
18433
18434//// jsbn2
18435
18436function nbi() { return new BigInteger(null); }
18437
18438// (public)
18439function bnClone() { var r = nbi(); this.copyTo(r); return r; }
18440
18441// (public) return value as integer
18442function bnIntValue() {
18443 if(this.s < 0) {
18444 if(this.t == 1) return this[0]-this.DV;
18445 else if(this.t == 0) return -1;
18446 }
18447 else if(this.t == 1) return this[0];
18448 else if(this.t == 0) return 0;
18449 // assumes 16 < DB < 32
18450 return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];
18451}
18452
18453// (public) return value as byte
18454function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }
18455
18456// (public) return value as short (assumes DB>=16)
18457function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }
18458
18459// (protected) return x s.t. r^x < DV
18460function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
18461
18462// (public) 0 if this == 0, 1 if this > 0
18463function bnSigNum() {
18464 if(this.s < 0) return -1;
18465 else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
18466 else return 1;
18467}
18468
18469// (protected) convert to radix string
18470function bnpToRadix(b) {
18471 if(b == null) b = 10;
18472 if(this.signum() == 0 || b < 2 || b > 36) return "0";
18473 var cs = this.chunkSize(b);
18474 var a = Math.pow(b,cs);
18475 var d = nbv(a), y = nbi(), z = nbi(), r = "";
18476 this.divRemTo(d,y,z);
18477 while(y.signum() > 0) {
18478 r = (a+z.intValue()).toString(b).substr(1) + r;
18479 y.divRemTo(d,y,z);
18480 }
18481 return z.intValue().toString(b) + r;
18482}
18483
18484// (protected) convert from radix string
18485function bnpFromRadix(s,b) {
18486 var self = this;
18487 self.fromInt(0);
18488 if(b == null) b = 10;
18489 var cs = self.chunkSize(b);
18490 var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
18491 for(var i = 0; i < s.length; ++i) {
18492 var x = intAt(s,i);
18493 if(x < 0) {
18494 if(s.charAt(i) == "-" && self.signum() == 0) mi = true;
18495 continue;
18496 }
18497 w = b*w+x;
18498 if(++j >= cs) {
18499 self.dMultiply(d);
18500 self.dAddOffset(w,0);
18501 j = 0;
18502 w = 0;
18503 }
18504 }
18505 if(j > 0) {
18506 self.dMultiply(Math.pow(b,j));
18507 self.dAddOffset(w,0);
18508 }
18509 if(mi) BigInteger.ZERO.subTo(self,self);
18510}
18511
18512// (protected) alternate constructor
18513function bnpFromNumber(a,b,c) {
18514 var self = this;
18515 if("number" == typeof b) {
18516 // new BigInteger(int,int,RNG)
18517 if(a < 2) self.fromInt(1);
18518 else {
18519 self.fromNumber(a,c);
18520 if(!self.testBit(a-1)) // force MSB set
18521 self.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,self);
18522 if(self.isEven()) self.dAddOffset(1,0); // force odd
18523 while(!self.isProbablePrime(b)) {
18524 self.dAddOffset(2,0);
18525 if(self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a-1),self);
18526 }
18527 }
18528 }
18529 else {
18530 // new BigInteger(int,RNG)
18531 var x = new Array(), t = a&7;
18532 x.length = (a>>3)+1;
18533 b.nextBytes(x);
18534 if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
18535 self.fromString(x,256);
18536 }
18537}
18538
18539// (public) convert to bigendian byte array
18540function bnToByteArray() {
18541 var self = this;
18542 var i = self.t, r = new Array();
18543 r[0] = self.s;
18544 var p = self.DB-(i*self.DB)%8, d, k = 0;
18545 if(i-- > 0) {
18546 if(p < self.DB && (d = self[i]>>p) != (self.s&self.DM)>>p)
18547 r[k++] = d|(self.s<<(self.DB-p));
18548 while(i >= 0) {
18549 if(p < 8) {
18550 d = (self[i]&((1<<p)-1))<<(8-p);
18551 d |= self[--i]>>(p+=self.DB-8);
18552 }
18553 else {
18554 d = (self[i]>>(p-=8))&0xff;
18555 if(p <= 0) { p += self.DB; --i; }
18556 }
18557 if((d&0x80) != 0) d |= -256;
18558 if(k === 0 && (self.s&0x80) != (d&0x80)) ++k;
18559 if(k > 0 || d != self.s) r[k++] = d;
18560 }
18561 }
18562 return r;
18563}
18564
18565function bnEquals(a) { return(this.compareTo(a)==0); }
18566function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
18567function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
18568
18569// (protected) r = this op a (bitwise)
18570function bnpBitwiseTo(a,op,r) {
18571 var self = this;
18572 var i, f, m = Math.min(a.t,self.t);
18573 for(i = 0; i < m; ++i) r[i] = op(self[i],a[i]);
18574 if(a.t < self.t) {
18575 f = a.s&self.DM;
18576 for(i = m; i < self.t; ++i) r[i] = op(self[i],f);
18577 r.t = self.t;
18578 }
18579 else {
18580 f = self.s&self.DM;
18581 for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
18582 r.t = a.t;
18583 }
18584 r.s = op(self.s,a.s);
18585 r.clamp();
18586}
18587
18588// (public) this & a
18589function op_and(x,y) { return x&y; }
18590function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
18591
18592// (public) this | a
18593function op_or(x,y) { return x|y; }
18594function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
18595
18596// (public) this ^ a
18597function op_xor(x,y) { return x^y; }
18598function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
18599
18600// (public) this & ~a
18601function op_andnot(x,y) { return x&~y; }
18602function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
18603
18604// (public) ~this
18605function bnNot() {
18606 var r = nbi();
18607 for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
18608 r.t = this.t;
18609 r.s = ~this.s;
18610 return r;
18611}
18612
18613// (public) this << n
18614function bnShiftLeft(n) {
18615 var r = nbi();
18616 if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
18617 return r;
18618}
18619
18620// (public) this >> n
18621function bnShiftRight(n) {
18622 var r = nbi();
18623 if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
18624 return r;
18625}
18626
18627// return index of lowest 1-bit in x, x < 2^31
18628function lbit(x) {
18629 if(x == 0) return -1;
18630 var r = 0;
18631 if((x&0xffff) == 0) { x >>= 16; r += 16; }
18632 if((x&0xff) == 0) { x >>= 8; r += 8; }
18633 if((x&0xf) == 0) { x >>= 4; r += 4; }
18634 if((x&3) == 0) { x >>= 2; r += 2; }
18635 if((x&1) == 0) ++r;
18636 return r;
18637}
18638
18639// (public) returns index of lowest 1-bit (or -1 if none)
18640function bnGetLowestSetBit() {
18641 for(var i = 0; i < this.t; ++i)
18642 if(this[i] != 0) return i*this.DB+lbit(this[i]);
18643 if(this.s < 0) return this.t*this.DB;
18644 return -1;
18645}
18646
18647// return number of 1 bits in x
18648function cbit(x) {
18649 var r = 0;
18650 while(x != 0) { x &= x-1; ++r; }
18651 return r;
18652}
18653
18654// (public) return number of set bits
18655function bnBitCount() {
18656 var r = 0, x = this.s&this.DM;
18657 for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
18658 return r;
18659}
18660
18661// (public) true iff nth bit is set
18662function bnTestBit(n) {
18663 var j = Math.floor(n/this.DB);
18664 if(j >= this.t) return(this.s!=0);
18665 return((this[j]&(1<<(n%this.DB)))!=0);
18666}
18667
18668// (protected) this op (1<<n)
18669function bnpChangeBit(n,op) {
18670 var r = BigInteger.ONE.shiftLeft(n);
18671 this.bitwiseTo(r,op,r);
18672 return r;
18673}
18674
18675// (public) this | (1<<n)
18676function bnSetBit(n) { return this.changeBit(n,op_or); }
18677
18678// (public) this & ~(1<<n)
18679function bnClearBit(n) { return this.changeBit(n,op_andnot); }
18680
18681// (public) this ^ (1<<n)
18682function bnFlipBit(n) { return this.changeBit(n,op_xor); }
18683
18684// (protected) r = this + a
18685function bnpAddTo(a,r) {
18686 var self = this;
18687
18688 var i = 0, c = 0, m = Math.min(a.t,self.t);
18689 while(i < m) {
18690 c += self[i]+a[i];
18691 r[i++] = c&self.DM;
18692 c >>= self.DB;
18693 }
18694 if(a.t < self.t) {
18695 c += a.s;
18696 while(i < self.t) {
18697 c += self[i];
18698 r[i++] = c&self.DM;
18699 c >>= self.DB;
18700 }
18701 c += self.s;
18702 }
18703 else {
18704 c += self.s;
18705 while(i < a.t) {
18706 c += a[i];
18707 r[i++] = c&self.DM;
18708 c >>= self.DB;
18709 }
18710 c += a.s;
18711 }
18712 r.s = (c<0)?-1:0;
18713 if(c > 0) r[i++] = c;
18714 else if(c < -1) r[i++] = self.DV+c;
18715 r.t = i;
18716 r.clamp();
18717}
18718
18719// (public) this + a
18720function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
18721
18722// (public) this - a
18723function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
18724
18725// (public) this * a
18726function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
18727
18728// (public) this^2
18729function bnSquare() { var r = nbi(); this.squareTo(r); return r; }
18730
18731// (public) this / a
18732function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
18733
18734// (public) this % a
18735function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
18736
18737// (public) [this/a,this%a]
18738function bnDivideAndRemainder(a) {
18739 var q = nbi(), r = nbi();
18740 this.divRemTo(a,q,r);
18741 return new Array(q,r);
18742}
18743
18744// (protected) this *= n, this >= 0, 1 < n < DV
18745function bnpDMultiply(n) {
18746 this[this.t] = this.am(0,n-1,this,0,0,this.t);
18747 ++this.t;
18748 this.clamp();
18749}
18750
18751// (protected) this += n << w words, this >= 0
18752function bnpDAddOffset(n,w) {
18753 if(n == 0) return;
18754 while(this.t <= w) this[this.t++] = 0;
18755 this[w] += n;
18756 while(this[w] >= this.DV) {
18757 this[w] -= this.DV;
18758 if(++w >= this.t) this[this.t++] = 0;
18759 ++this[w];
18760 }
18761}
18762
18763// A "null" reducer
18764function NullExp() {}
18765function nNop(x) { return x; }
18766function nMulTo(x,y,r) { x.multiplyTo(y,r); }
18767function nSqrTo(x,r) { x.squareTo(r); }
18768
18769NullExp.prototype.convert = nNop;
18770NullExp.prototype.revert = nNop;
18771NullExp.prototype.mulTo = nMulTo;
18772NullExp.prototype.sqrTo = nSqrTo;
18773
18774// (public) this^e
18775function bnPow(e) { return this.exp(e,new NullExp()); }
18776
18777// (protected) r = lower n words of "this * a", a.t <= n
18778// "this" should be the larger one if appropriate.
18779function bnpMultiplyLowerTo(a,n,r) {
18780 var i = Math.min(this.t+a.t,n);
18781 r.s = 0; // assumes a,this >= 0
18782 r.t = i;
18783 while(i > 0) r[--i] = 0;
18784 var j;
18785 for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);
18786 for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);
18787 r.clamp();
18788}
18789
18790// (protected) r = "this * a" without lower n words, n > 0
18791// "this" should be the larger one if appropriate.
18792function bnpMultiplyUpperTo(a,n,r) {
18793 --n;
18794 var i = r.t = this.t+a.t-n;
18795 r.s = 0; // assumes a,this >= 0
18796 while(--i >= 0) r[i] = 0;
18797 for(i = Math.max(n-this.t,0); i < a.t; ++i)
18798 r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);
18799 r.clamp();
18800 r.drShiftTo(1,r);
18801}
18802
18803// Barrett modular reduction
18804function Barrett(m) {
18805 // setup Barrett
18806 this.r2 = nbi();
18807 this.q3 = nbi();
18808 BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
18809 this.mu = this.r2.divide(m);
18810 this.m = m;
18811}
18812
18813function barrettConvert(x) {
18814 if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
18815 else if(x.compareTo(this.m) < 0) return x;
18816 else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
18817}
18818
18819function barrettRevert(x) { return x; }
18820
18821// x = x mod m (HAC 14.42)
18822function barrettReduce(x) {
18823 var self = this;
18824 x.drShiftTo(self.m.t-1,self.r2);
18825 if(x.t > self.m.t+1) { x.t = self.m.t+1; x.clamp(); }
18826 self.mu.multiplyUpperTo(self.r2,self.m.t+1,self.q3);
18827 self.m.multiplyLowerTo(self.q3,self.m.t+1,self.r2);
18828 while(x.compareTo(self.r2) < 0) x.dAddOffset(1,self.m.t+1);
18829 x.subTo(self.r2,x);
18830 while(x.compareTo(self.m) >= 0) x.subTo(self.m,x);
18831}
18832
18833// r = x^2 mod m; x != r
18834function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
18835
18836// r = x*y mod m; x,y != r
18837function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
18838
18839Barrett.prototype.convert = barrettConvert;
18840Barrett.prototype.revert = barrettRevert;
18841Barrett.prototype.reduce = barrettReduce;
18842Barrett.prototype.mulTo = barrettMulTo;
18843Barrett.prototype.sqrTo = barrettSqrTo;
18844
18845// (public) this^e % m (HAC 14.85)
18846function bnModPow(e,m) {
18847 var i = e.bitLength(), k, r = nbv(1), z;
18848 if(i <= 0) return r;
18849 else if(i < 18) k = 1;
18850 else if(i < 48) k = 3;
18851 else if(i < 144) k = 4;
18852 else if(i < 768) k = 5;
18853 else k = 6;
18854 if(i < 8)
18855 z = new Classic(m);
18856 else if(m.isEven())
18857 z = new Barrett(m);
18858 else
18859 z = new Montgomery(m);
18860
18861 // precomputation
18862 var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
18863 g[1] = z.convert(this);
18864 if(k > 1) {
18865 var g2 = nbi();
18866 z.sqrTo(g[1],g2);
18867 while(n <= km) {
18868 g[n] = nbi();
18869 z.mulTo(g2,g[n-2],g[n]);
18870 n += 2;
18871 }
18872 }
18873
18874 var j = e.t-1, w, is1 = true, r2 = nbi(), t;
18875 i = nbits(e[j])-1;
18876 while(j >= 0) {
18877 if(i >= k1) w = (e[j]>>(i-k1))&km;
18878 else {
18879 w = (e[j]&((1<<(i+1))-1))<<(k1-i);
18880 if(j > 0) w |= e[j-1]>>(this.DB+i-k1);
18881 }
18882
18883 n = k;
18884 while((w&1) == 0) { w >>= 1; --n; }
18885 if((i -= n) < 0) { i += this.DB; --j; }
18886 if(is1) { // ret == 1, don't bother squaring or multiplying it
18887 g[w].copyTo(r);
18888 is1 = false;
18889 }
18890 else {
18891 while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
18892 if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
18893 z.mulTo(r2,g[w],r);
18894 }
18895
18896 while(j >= 0 && (e[j]&(1<<i)) == 0) {
18897 z.sqrTo(r,r2); t = r; r = r2; r2 = t;
18898 if(--i < 0) { i = this.DB-1; --j; }
18899 }
18900 }
18901 return z.revert(r);
18902}
18903
18904// (public) gcd(this,a) (HAC 14.54)
18905function bnGCD(a) {
18906 var x = (this.s<0)?this.negate():this.clone();
18907 var y = (a.s<0)?a.negate():a.clone();
18908 if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
18909 var i = x.getLowestSetBit(), g = y.getLowestSetBit();
18910 if(g < 0) return x;
18911 if(i < g) g = i;
18912 if(g > 0) {
18913 x.rShiftTo(g,x);
18914 y.rShiftTo(g,y);
18915 }
18916 while(x.signum() > 0) {
18917 if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
18918 if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
18919 if(x.compareTo(y) >= 0) {
18920 x.subTo(y,x);
18921 x.rShiftTo(1,x);
18922 }
18923 else {
18924 y.subTo(x,y);
18925 y.rShiftTo(1,y);
18926 }
18927 }
18928 if(g > 0) y.lShiftTo(g,y);
18929 return y;
18930}
18931
18932// (protected) this % n, n < 2^26
18933function bnpModInt(n) {
18934 if(n <= 0) return 0;
18935 var d = this.DV%n, r = (this.s<0)?n-1:0;
18936 if(this.t > 0)
18937 if(d == 0) r = this[0]%n;
18938 else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;
18939 return r;
18940}
18941
18942// (public) 1/this % m (HAC 14.61)
18943function bnModInverse(m) {
18944 var ac = m.isEven();
18945 if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
18946 var u = m.clone(), v = this.clone();
18947 var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
18948 while(u.signum() != 0) {
18949 while(u.isEven()) {
18950 u.rShiftTo(1,u);
18951 if(ac) {
18952 if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
18953 a.rShiftTo(1,a);
18954 }
18955 else if(!b.isEven()) b.subTo(m,b);
18956 b.rShiftTo(1,b);
18957 }
18958 while(v.isEven()) {
18959 v.rShiftTo(1,v);
18960 if(ac) {
18961 if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
18962 c.rShiftTo(1,c);
18963 }
18964 else if(!d.isEven()) d.subTo(m,d);
18965 d.rShiftTo(1,d);
18966 }
18967 if(u.compareTo(v) >= 0) {
18968 u.subTo(v,u);
18969 if(ac) a.subTo(c,a);
18970 b.subTo(d,b);
18971 }
18972 else {
18973 v.subTo(u,v);
18974 if(ac) c.subTo(a,c);
18975 d.subTo(b,d);
18976 }
18977 }
18978 if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
18979 if(d.compareTo(m) >= 0) return d.subtract(m);
18980 if(d.signum() < 0) d.addTo(m,d); else return d;
18981 if(d.signum() < 0) return d.add(m); else return d;
18982}
18983
18984// protected
18985proto.chunkSize = bnpChunkSize;
18986proto.toRadix = bnpToRadix;
18987proto.fromRadix = bnpFromRadix;
18988proto.fromNumber = bnpFromNumber;
18989proto.bitwiseTo = bnpBitwiseTo;
18990proto.changeBit = bnpChangeBit;
18991proto.addTo = bnpAddTo;
18992proto.dMultiply = bnpDMultiply;
18993proto.dAddOffset = bnpDAddOffset;
18994proto.multiplyLowerTo = bnpMultiplyLowerTo;
18995proto.multiplyUpperTo = bnpMultiplyUpperTo;
18996proto.modInt = bnpModInt;
18997
18998// public
18999proto.clone = bnClone;
19000proto.intValue = bnIntValue;
19001proto.byteValue = bnByteValue;
19002proto.shortValue = bnShortValue;
19003proto.signum = bnSigNum;
19004proto.toByteArray = bnToByteArray;
19005proto.equals = bnEquals;
19006proto.min = bnMin;
19007proto.max = bnMax;
19008proto.and = bnAnd;
19009proto.or = bnOr;
19010proto.xor = bnXor;
19011proto.andNot = bnAndNot;
19012proto.not = bnNot;
19013proto.shiftLeft = bnShiftLeft;
19014proto.shiftRight = bnShiftRight;
19015proto.getLowestSetBit = bnGetLowestSetBit;
19016proto.bitCount = bnBitCount;
19017proto.testBit = bnTestBit;
19018proto.setBit = bnSetBit;
19019proto.clearBit = bnClearBit;
19020proto.flipBit = bnFlipBit;
19021proto.add = bnAdd;
19022proto.subtract = bnSubtract;
19023proto.multiply = bnMultiply;
19024proto.divide = bnDivide;
19025proto.remainder = bnRemainder;
19026proto.divideAndRemainder = bnDivideAndRemainder;
19027proto.modPow = bnModPow;
19028proto.modInverse = bnModInverse;
19029proto.pow = bnPow;
19030proto.gcd = bnGCD;
19031
19032// JSBN-specific extension
19033proto.square = bnSquare;
19034
19035// BigInteger interfaces not implemented in jsbn:
19036
19037// BigInteger(int signum, byte[] magnitude)
19038// double doubleValue()
19039// float floatValue()
19040// int hashCode()
19041// long longValue()
19042// static BigInteger valueOf(long val)
19043
19044// "constants"
19045BigInteger.ZERO = nbv(0);
19046BigInteger.ONE = nbv(1);
19047BigInteger.valueOf = nbv;
19048
19049},{"assert":4}],2:[function(_dereq_,module,exports){
19050(function (Buffer){
19051// FIXME: Kind of a weird way to throw exceptions, consider removing
19052var assert = _dereq_('assert')
19053var BigInteger = _dereq_('./bigi')
19054
19055/**
19056 * Turns a byte array into a big integer.
19057 *
19058 * This function will interpret a byte array as a big integer in big
19059 * endian notation.
19060 */
19061BigInteger.fromByteArrayUnsigned = function(byteArray) {
19062 // BigInteger expects a DER integer conformant byte array
19063 if (byteArray[0] & 0x80) {
19064 return new BigInteger([0].concat(byteArray))
19065 }
19066
19067 return new BigInteger(byteArray)
19068}
19069
19070/**
19071 * Returns a byte array representation of the big integer.
19072 *
19073 * This returns the absolute of the contained value in big endian
19074 * form. A value of zero results in an empty array.
19075 */
19076BigInteger.prototype.toByteArrayUnsigned = function() {
19077 var byteArray = this.toByteArray()
19078 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
19079}
19080
19081BigInteger.fromDERInteger = function(byteArray) {
19082 return new BigInteger(byteArray)
19083}
19084
19085/*
19086 * Converts BigInteger to a DER integer representation.
19087 *
19088 * The format for this value uses the most significant bit as a sign
19089 * bit. If the most significant bit is already set and the integer is
19090 * positive, a 0x00 is prepended.
19091 *
19092 * Examples:
19093 *
19094 * 0 => 0x00
19095 * 1 => 0x01
19096 * -1 => 0x81
19097 * 127 => 0x7f
19098 * -127 => 0xff
19099 * 128 => 0x0080
19100 * -128 => 0x80
19101 * 255 => 0x00ff
19102 * -255 => 0xff
19103 * 16300 => 0x3fac
19104 * -16300 => 0xbfac
19105 * 62300 => 0x00f35c
19106 * -62300 => 0xf35c
19107*/
19108BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
19109
19110BigInteger.fromBuffer = function(buffer) {
19111 // BigInteger expects a DER integer conformant byte array
19112 if (buffer[0] & 0x80) {
19113 var byteArray = Array.prototype.slice.call(buffer)
19114
19115 return new BigInteger([0].concat(byteArray))
19116 }
19117
19118 return new BigInteger(buffer)
19119}
19120
19121BigInteger.fromHex = function(hex) {
19122 if (hex === '') return BigInteger.ZERO
19123
19124 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
19125 assert.equal(hex.length % 2, 0, 'Incomplete hex')
19126 return new BigInteger(hex, 16)
19127}
19128
19129BigInteger.prototype.toBuffer = function(size) {
19130 var byteArray = this.toByteArrayUnsigned()
19131 var zeros = []
19132
19133 var padding = size - byteArray.length
19134 while (zeros.length < padding) zeros.push(0)
19135
19136 return new Buffer(zeros.concat(byteArray))
19137}
19138
19139BigInteger.prototype.toHex = function(size) {
19140 return this.toBuffer(size).toString('hex')
19141}
19142
19143}).call(this,_dereq_("buffer").Buffer)
19144},{"./bigi":1,"assert":4,"buffer":8}],3:[function(_dereq_,module,exports){
19145var BigInteger = _dereq_('./bigi')
19146
19147//addons
19148_dereq_('./convert')
19149
19150module.exports = BigInteger
19151},{"./bigi":1,"./convert":2}],4:[function(_dereq_,module,exports){
19152// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
19153//
19154// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
19155//
19156// Originally from narwhal.js (http://narwhaljs.org)
19157// Copyright (c) 2009 Thomas Robinson <280north.com>
19158//
19159// Permission is hereby granted, free of charge, to any person obtaining a copy
19160// of this software and associated documentation files (the 'Software'), to
19161// deal in the Software without restriction, including without limitation the
19162// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
19163// sell copies of the Software, and to permit persons to whom the Software is
19164// furnished to do so, subject to the following conditions:
19165//
19166// The above copyright notice and this permission notice shall be included in
19167// all copies or substantial portions of the Software.
19168//
19169// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19170// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19171// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19172// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19173// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19174// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19175
19176// when used in node, this will actually load the util module we depend on
19177// versus loading the builtin util module as happens otherwise
19178// this is a bug in node module loading as far as I am concerned
19179var util = _dereq_('util/');
19180
19181var pSlice = Array.prototype.slice;
19182var hasOwn = Object.prototype.hasOwnProperty;
19183
19184// 1. The assert module provides functions that throw
19185// AssertionError's when particular conditions are not met. The
19186// assert module must conform to the following interface.
19187
19188var assert = module.exports = ok;
19189
19190// 2. The AssertionError is defined in assert.
19191// new assert.AssertionError({ message: message,
19192// actual: actual,
19193// expected: expected })
19194
19195assert.AssertionError = function AssertionError(options) {
19196 this.name = 'AssertionError';
19197 this.actual = options.actual;
19198 this.expected = options.expected;
19199 this.operator = options.operator;
19200 if (options.message) {
19201 this.message = options.message;
19202 this.generatedMessage = false;
19203 } else {
19204 this.message = getMessage(this);
19205 this.generatedMessage = true;
19206 }
19207 var stackStartFunction = options.stackStartFunction || fail;
19208
19209 if (Error.captureStackTrace) {
19210 Error.captureStackTrace(this, stackStartFunction);
19211 }
19212 else {
19213 // non v8 browsers so we can have a stacktrace
19214 var err = new Error();
19215 if (err.stack) {
19216 var out = err.stack;
19217
19218 // try to strip useless frames
19219 var fn_name = stackStartFunction.name;
19220 var idx = out.indexOf('\n' + fn_name);
19221 if (idx >= 0) {
19222 // once we have located the function frame
19223 // we need to strip out everything before it (and its line)
19224 var next_line = out.indexOf('\n', idx + 1);
19225 out = out.substring(next_line + 1);
19226 }
19227
19228 this.stack = out;
19229 }
19230 }
19231};
19232
19233// assert.AssertionError instanceof Error
19234util.inherits(assert.AssertionError, Error);
19235
19236function replacer(key, value) {
19237 if (util.isUndefined(value)) {
19238 return '' + value;
19239 }
19240 if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {
19241 return value.toString();
19242 }
19243 if (util.isFunction(value) || util.isRegExp(value)) {
19244 return value.toString();
19245 }
19246 return value;
19247}
19248
19249function truncate(s, n) {
19250 if (util.isString(s)) {
19251 return s.length < n ? s : s.slice(0, n);
19252 } else {
19253 return s;
19254 }
19255}
19256
19257function getMessage(self) {
19258 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
19259 self.operator + ' ' +
19260 truncate(JSON.stringify(self.expected, replacer), 128);
19261}
19262
19263// At present only the three keys mentioned above are used and
19264// understood by the spec. Implementations or sub modules can pass
19265// other keys to the AssertionError's constructor - they will be
19266// ignored.
19267
19268// 3. All of the following functions must throw an AssertionError
19269// when a corresponding condition is not met, with a message that
19270// may be undefined if not provided. All assertion methods provide
19271// both the actual and expected values to the assertion error for
19272// display purposes.
19273
19274function fail(actual, expected, message, operator, stackStartFunction) {
19275 throw new assert.AssertionError({
19276 message: message,
19277 actual: actual,
19278 expected: expected,
19279 operator: operator,
19280 stackStartFunction: stackStartFunction
19281 });
19282}
19283
19284// EXTENSION! allows for well behaved errors defined elsewhere.
19285assert.fail = fail;
19286
19287// 4. Pure assertion tests whether a value is truthy, as determined
19288// by !!guard.
19289// assert.ok(guard, message_opt);
19290// This statement is equivalent to assert.equal(true, !!guard,
19291// message_opt);. To test strictly for the value true, use
19292// assert.strictEqual(true, guard, message_opt);.
19293
19294function ok(value, message) {
19295 if (!value) fail(value, true, message, '==', assert.ok);
19296}
19297assert.ok = ok;
19298
19299// 5. The equality assertion tests shallow, coercive equality with
19300// ==.
19301// assert.equal(actual, expected, message_opt);
19302
19303assert.equal = function equal(actual, expected, message) {
19304 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
19305};
19306
19307// 6. The non-equality assertion tests for whether two objects are not equal
19308// with != assert.notEqual(actual, expected, message_opt);
19309
19310assert.notEqual = function notEqual(actual, expected, message) {
19311 if (actual == expected) {
19312 fail(actual, expected, message, '!=', assert.notEqual);
19313 }
19314};
19315
19316// 7. The equivalence assertion tests a deep equality relation.
19317// assert.deepEqual(actual, expected, message_opt);
19318
19319assert.deepEqual = function deepEqual(actual, expected, message) {
19320 if (!_deepEqual(actual, expected)) {
19321 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
19322 }
19323};
19324
19325function _deepEqual(actual, expected) {
19326 // 7.1. All identical values are equivalent, as determined by ===.
19327 if (actual === expected) {
19328 return true;
19329
19330 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
19331 if (actual.length != expected.length) return false;
19332
19333 for (var i = 0; i < actual.length; i++) {
19334 if (actual[i] !== expected[i]) return false;
19335 }
19336
19337 return true;
19338
19339 // 7.2. If the expected value is a Date object, the actual value is
19340 // equivalent if it is also a Date object that refers to the same time.
19341 } else if (util.isDate(actual) && util.isDate(expected)) {
19342 return actual.getTime() === expected.getTime();
19343
19344 // 7.3 If the expected value is a RegExp object, the actual value is
19345 // equivalent if it is also a RegExp object with the same source and
19346 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
19347 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
19348 return actual.source === expected.source &&
19349 actual.global === expected.global &&
19350 actual.multiline === expected.multiline &&
19351 actual.lastIndex === expected.lastIndex &&
19352 actual.ignoreCase === expected.ignoreCase;
19353
19354 // 7.4. Other pairs that do not both pass typeof value == 'object',
19355 // equivalence is determined by ==.
19356 } else if (!util.isObject(actual) && !util.isObject(expected)) {
19357 return actual == expected;
19358
19359 // 7.5 For all other Object pairs, including Array objects, equivalence is
19360 // determined by having the same number of owned properties (as verified
19361 // with Object.prototype.hasOwnProperty.call), the same set of keys
19362 // (although not necessarily the same order), equivalent values for every
19363 // corresponding key, and an identical 'prototype' property. Note: this
19364 // accounts for both named and indexed properties on Arrays.
19365 } else {
19366 return objEquiv(actual, expected);
19367 }
19368}
19369
19370function isArguments(object) {
19371 return Object.prototype.toString.call(object) == '[object Arguments]';
19372}
19373
19374function objEquiv(a, b) {
19375 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
19376 return false;
19377 // an identical 'prototype' property.
19378 if (a.prototype !== b.prototype) return false;
19379 //~~~I've managed to break Object.keys through screwy arguments passing.
19380 // Converting to array solves the problem.
19381 if (isArguments(a)) {
19382 if (!isArguments(b)) {
19383 return false;
19384 }
19385 a = pSlice.call(a);
19386 b = pSlice.call(b);
19387 return _deepEqual(a, b);
19388 }
19389 try {
19390 var ka = objectKeys(a),
19391 kb = objectKeys(b),
19392 key, i;
19393 } catch (e) {//happens when one is a string literal and the other isn't
19394 return false;
19395 }
19396 // having the same number of owned properties (keys incorporates
19397 // hasOwnProperty)
19398 if (ka.length != kb.length)
19399 return false;
19400 //the same set of keys (although not necessarily the same order),
19401 ka.sort();
19402 kb.sort();
19403 //~~~cheap key test
19404 for (i = ka.length - 1; i >= 0; i--) {
19405 if (ka[i] != kb[i])
19406 return false;
19407 }
19408 //equivalent values for every corresponding key, and
19409 //~~~possibly expensive deep test
19410 for (i = ka.length - 1; i >= 0; i--) {
19411 key = ka[i];
19412 if (!_deepEqual(a[key], b[key])) return false;
19413 }
19414 return true;
19415}
19416
19417// 8. The non-equivalence assertion tests for any deep inequality.
19418// assert.notDeepEqual(actual, expected, message_opt);
19419
19420assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
19421 if (_deepEqual(actual, expected)) {
19422 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
19423 }
19424};
19425
19426// 9. The strict equality assertion tests strict equality, as determined by ===.
19427// assert.strictEqual(actual, expected, message_opt);
19428
19429assert.strictEqual = function strictEqual(actual, expected, message) {
19430 if (actual !== expected) {
19431 fail(actual, expected, message, '===', assert.strictEqual);
19432 }
19433};
19434
19435// 10. The strict non-equality assertion tests for strict inequality, as
19436// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
19437
19438assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
19439 if (actual === expected) {
19440 fail(actual, expected, message, '!==', assert.notStrictEqual);
19441 }
19442};
19443
19444function expectedException(actual, expected) {
19445 if (!actual || !expected) {
19446 return false;
19447 }
19448
19449 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
19450 return expected.test(actual);
19451 } else if (actual instanceof expected) {
19452 return true;
19453 } else if (expected.call({}, actual) === true) {
19454 return true;
19455 }
19456
19457 return false;
19458}
19459
19460function _throws(shouldThrow, block, expected, message) {
19461 var actual;
19462
19463 if (util.isString(expected)) {
19464 message = expected;
19465 expected = null;
19466 }
19467
19468 try {
19469 block();
19470 } catch (e) {
19471 actual = e;
19472 }
19473
19474 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
19475 (message ? ' ' + message : '.');
19476
19477 if (shouldThrow && !actual) {
19478 fail(actual, expected, 'Missing expected exception' + message);
19479 }
19480
19481 if (!shouldThrow && expectedException(actual, expected)) {
19482 fail(actual, expected, 'Got unwanted exception' + message);
19483 }
19484
19485 if ((shouldThrow && actual && expected &&
19486 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
19487 throw actual;
19488 }
19489}
19490
19491// 11. Expected to throw an error:
19492// assert.throws(block, Error_opt, message_opt);
19493
19494assert.throws = function(block, /*optional*/error, /*optional*/message) {
19495 _throws.apply(this, [true].concat(pSlice.call(arguments)));
19496};
19497
19498// EXTENSION! This is annoying to write outside this module.
19499assert.doesNotThrow = function(block, /*optional*/message) {
19500 _throws.apply(this, [false].concat(pSlice.call(arguments)));
19501};
19502
19503assert.ifError = function(err) { if (err) {throw err;}};
19504
19505var objectKeys = Object.keys || function (obj) {
19506 var keys = [];
19507 for (var key in obj) {
19508 if (hasOwn.call(obj, key)) keys.push(key);
19509 }
19510 return keys;
19511};
19512
19513},{"util/":6}],5:[function(_dereq_,module,exports){
19514module.exports = function isBuffer(arg) {
19515 return arg && typeof arg === 'object'
19516 && typeof arg.copy === 'function'
19517 && typeof arg.fill === 'function'
19518 && typeof arg.readUInt8 === 'function';
19519}
19520},{}],6:[function(_dereq_,module,exports){
19521(function (process,global){
19522// Copyright Joyent, Inc. and other Node contributors.
19523//
19524// Permission is hereby granted, free of charge, to any person obtaining a
19525// copy of this software and associated documentation files (the
19526// "Software"), to deal in the Software without restriction, including
19527// without limitation the rights to use, copy, modify, merge, publish,
19528// distribute, sublicense, and/or sell copies of the Software, and to permit
19529// persons to whom the Software is furnished to do so, subject to the
19530// following conditions:
19531//
19532// The above copyright notice and this permission notice shall be included
19533// in all copies or substantial portions of the Software.
19534//
19535// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19536// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19537// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19538// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19539// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19540// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19541// USE OR OTHER DEALINGS IN THE SOFTWARE.
19542
19543var formatRegExp = /%[sdj%]/g;
19544exports.format = function(f) {
19545 if (!isString(f)) {
19546 var objects = [];
19547 for (var i = 0; i < arguments.length; i++) {
19548 objects.push(inspect(arguments[i]));
19549 }
19550 return objects.join(' ');
19551 }
19552
19553 var i = 1;
19554 var args = arguments;
19555 var len = args.length;
19556 var str = String(f).replace(formatRegExp, function(x) {
19557 if (x === '%%') return '%';
19558 if (i >= len) return x;
19559 switch (x) {
19560 case '%s': return String(args[i++]);
19561 case '%d': return Number(args[i++]);
19562 case '%j':
19563 try {
19564 return JSON.stringify(args[i++]);
19565 } catch (_) {
19566 return '[Circular]';
19567 }
19568 default:
19569 return x;
19570 }
19571 });
19572 for (var x = args[i]; i < len; x = args[++i]) {
19573 if (isNull(x) || !isObject(x)) {
19574 str += ' ' + x;
19575 } else {
19576 str += ' ' + inspect(x);
19577 }
19578 }
19579 return str;
19580};
19581
19582
19583// Mark that a method should not be used.
19584// Returns a modified function which warns once by default.
19585// If --no-deprecation is set, then it is a no-op.
19586exports.deprecate = function(fn, msg) {
19587 // Allow for deprecating things in the process of starting up.
19588 if (isUndefined(global.process)) {
19589 return function() {
19590 return exports.deprecate(fn, msg).apply(this, arguments);
19591 };
19592 }
19593
19594 if (process.noDeprecation === true) {
19595 return fn;
19596 }
19597
19598 var warned = false;
19599 function deprecated() {
19600 if (!warned) {
19601 if (process.throwDeprecation) {
19602 throw new Error(msg);
19603 } else if (process.traceDeprecation) {
19604 console.trace(msg);
19605 } else {
19606 console.error(msg);
19607 }
19608 warned = true;
19609 }
19610 return fn.apply(this, arguments);
19611 }
19612
19613 return deprecated;
19614};
19615
19616
19617var debugs = {};
19618var debugEnviron;
19619exports.debuglog = function(set) {
19620 if (isUndefined(debugEnviron))
19621 debugEnviron = process.env.NODE_DEBUG || '';
19622 set = set.toUpperCase();
19623 if (!debugs[set]) {
19624 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
19625 var pid = process.pid;
19626 debugs[set] = function() {
19627 var msg = exports.format.apply(exports, arguments);
19628 console.error('%s %d: %s', set, pid, msg);
19629 };
19630 } else {
19631 debugs[set] = function() {};
19632 }
19633 }
19634 return debugs[set];
19635};
19636
19637
19638/**
19639 * Echos the value of a value. Trys to print the value out
19640 * in the best way possible given the different types.
19641 *
19642 * @param {Object} obj The object to print out.
19643 * @param {Object} opts Optional options object that alters the output.
19644 */
19645/* legacy: obj, showHidden, depth, colors*/
19646function inspect(obj, opts) {
19647 // default options
19648 var ctx = {
19649 seen: [],
19650 stylize: stylizeNoColor
19651 };
19652 // legacy...
19653 if (arguments.length >= 3) ctx.depth = arguments[2];
19654 if (arguments.length >= 4) ctx.colors = arguments[3];
19655 if (isBoolean(opts)) {
19656 // legacy...
19657 ctx.showHidden = opts;
19658 } else if (opts) {
19659 // got an "options" object
19660 exports._extend(ctx, opts);
19661 }
19662 // set default options
19663 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
19664 if (isUndefined(ctx.depth)) ctx.depth = 2;
19665 if (isUndefined(ctx.colors)) ctx.colors = false;
19666 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
19667 if (ctx.colors) ctx.stylize = stylizeWithColor;
19668 return formatValue(ctx, obj, ctx.depth);
19669}
19670exports.inspect = inspect;
19671
19672
19673// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
19674inspect.colors = {
19675 'bold' : [1, 22],
19676 'italic' : [3, 23],
19677 'underline' : [4, 24],
19678 'inverse' : [7, 27],
19679 'white' : [37, 39],
19680 'grey' : [90, 39],
19681 'black' : [30, 39],
19682 'blue' : [34, 39],
19683 'cyan' : [36, 39],
19684 'green' : [32, 39],
19685 'magenta' : [35, 39],
19686 'red' : [31, 39],
19687 'yellow' : [33, 39]
19688};
19689
19690// Don't use 'blue' not visible on cmd.exe
19691inspect.styles = {
19692 'special': 'cyan',
19693 'number': 'yellow',
19694 'boolean': 'yellow',
19695 'undefined': 'grey',
19696 'null': 'bold',
19697 'string': 'green',
19698 'date': 'magenta',
19699 // "name": intentionally not styling
19700 'regexp': 'red'
19701};
19702
19703
19704function stylizeWithColor(str, styleType) {
19705 var style = inspect.styles[styleType];
19706
19707 if (style) {
19708 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
19709 '\u001b[' + inspect.colors[style][1] + 'm';
19710 } else {
19711 return str;
19712 }
19713}
19714
19715
19716function stylizeNoColor(str, styleType) {
19717 return str;
19718}
19719
19720
19721function arrayToHash(array) {
19722 var hash = {};
19723
19724 array.forEach(function(val, idx) {
19725 hash[val] = true;
19726 });
19727
19728 return hash;
19729}
19730
19731
19732function formatValue(ctx, value, recurseTimes) {
19733 // Provide a hook for user-specified inspect functions.
19734 // Check that value is an object with an inspect function on it
19735 if (ctx.customInspect &&
19736 value &&
19737 isFunction(value.inspect) &&
19738 // Filter out the util module, it's inspect function is special
19739 value.inspect !== exports.inspect &&
19740 // Also filter out any prototype objects using the circular check.
19741 !(value.constructor && value.constructor.prototype === value)) {
19742 var ret = value.inspect(recurseTimes, ctx);
19743 if (!isString(ret)) {
19744 ret = formatValue(ctx, ret, recurseTimes);
19745 }
19746 return ret;
19747 }
19748
19749 // Primitive types cannot have properties
19750 var primitive = formatPrimitive(ctx, value);
19751 if (primitive) {
19752 return primitive;
19753 }
19754
19755 // Look up the keys of the object.
19756 var keys = Object.keys(value);
19757 var visibleKeys = arrayToHash(keys);
19758
19759 if (ctx.showHidden) {
19760 keys = Object.getOwnPropertyNames(value);
19761 }
19762
19763 // IE doesn't make error fields non-enumerable
19764 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
19765 if (isError(value)
19766 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
19767 return formatError(value);
19768 }
19769
19770 // Some type of object without properties can be shortcutted.
19771 if (keys.length === 0) {
19772 if (isFunction(value)) {
19773 var name = value.name ? ': ' + value.name : '';
19774 return ctx.stylize('[Function' + name + ']', 'special');
19775 }
19776 if (isRegExp(value)) {
19777 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
19778 }
19779 if (isDate(value)) {
19780 return ctx.stylize(Date.prototype.toString.call(value), 'date');
19781 }
19782 if (isError(value)) {
19783 return formatError(value);
19784 }
19785 }
19786
19787 var base = '', array = false, braces = ['{', '}'];
19788
19789 // Make Array say that they are Array
19790 if (isArray(value)) {
19791 array = true;
19792 braces = ['[', ']'];
19793 }
19794
19795 // Make functions say that they are functions
19796 if (isFunction(value)) {
19797 var n = value.name ? ': ' + value.name : '';
19798 base = ' [Function' + n + ']';
19799 }
19800
19801 // Make RegExps say that they are RegExps
19802 if (isRegExp(value)) {
19803 base = ' ' + RegExp.prototype.toString.call(value);
19804 }
19805
19806 // Make dates with properties first say the date
19807 if (isDate(value)) {
19808 base = ' ' + Date.prototype.toUTCString.call(value);
19809 }
19810
19811 // Make error with message first say the error
19812 if (isError(value)) {
19813 base = ' ' + formatError(value);
19814 }
19815
19816 if (keys.length === 0 && (!array || value.length == 0)) {
19817 return braces[0] + base + braces[1];
19818 }
19819
19820 if (recurseTimes < 0) {
19821 if (isRegExp(value)) {
19822 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
19823 } else {
19824 return ctx.stylize('[Object]', 'special');
19825 }
19826 }
19827
19828 ctx.seen.push(value);
19829
19830 var output;
19831 if (array) {
19832 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
19833 } else {
19834 output = keys.map(function(key) {
19835 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
19836 });
19837 }
19838
19839 ctx.seen.pop();
19840
19841 return reduceToSingleString(output, base, braces);
19842}
19843
19844
19845function formatPrimitive(ctx, value) {
19846 if (isUndefined(value))
19847 return ctx.stylize('undefined', 'undefined');
19848 if (isString(value)) {
19849 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
19850 .replace(/'/g, "\\'")
19851 .replace(/\\"/g, '"') + '\'';
19852 return ctx.stylize(simple, 'string');
19853 }
19854 if (isNumber(value))
19855 return ctx.stylize('' + value, 'number');
19856 if (isBoolean(value))
19857 return ctx.stylize('' + value, 'boolean');
19858 // For some reason typeof null is "object", so special case here.
19859 if (isNull(value))
19860 return ctx.stylize('null', 'null');
19861}
19862
19863
19864function formatError(value) {
19865 return '[' + Error.prototype.toString.call(value) + ']';
19866}
19867
19868
19869function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
19870 var output = [];
19871 for (var i = 0, l = value.length; i < l; ++i) {
19872 if (hasOwnProperty(value, String(i))) {
19873 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
19874 String(i), true));
19875 } else {
19876 output.push('');
19877 }
19878 }
19879 keys.forEach(function(key) {
19880 if (!key.match(/^\d+$/)) {
19881 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
19882 key, true));
19883 }
19884 });
19885 return output;
19886}
19887
19888
19889function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
19890 var name, str, desc;
19891 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
19892 if (desc.get) {
19893 if (desc.set) {
19894 str = ctx.stylize('[Getter/Setter]', 'special');
19895 } else {
19896 str = ctx.stylize('[Getter]', 'special');
19897 }
19898 } else {
19899 if (desc.set) {
19900 str = ctx.stylize('[Setter]', 'special');
19901 }
19902 }
19903 if (!hasOwnProperty(visibleKeys, key)) {
19904 name = '[' + key + ']';
19905 }
19906 if (!str) {
19907 if (ctx.seen.indexOf(desc.value) < 0) {
19908 if (isNull(recurseTimes)) {
19909 str = formatValue(ctx, desc.value, null);
19910 } else {
19911 str = formatValue(ctx, desc.value, recurseTimes - 1);
19912 }
19913 if (str.indexOf('\n') > -1) {
19914 if (array) {
19915 str = str.split('\n').map(function(line) {
19916 return ' ' + line;
19917 }).join('\n').substr(2);
19918 } else {
19919 str = '\n' + str.split('\n').map(function(line) {
19920 return ' ' + line;
19921 }).join('\n');
19922 }
19923 }
19924 } else {
19925 str = ctx.stylize('[Circular]', 'special');
19926 }
19927 }
19928 if (isUndefined(name)) {
19929 if (array && key.match(/^\d+$/)) {
19930 return str;
19931 }
19932 name = JSON.stringify('' + key);
19933 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
19934 name = name.substr(1, name.length - 2);
19935 name = ctx.stylize(name, 'name');
19936 } else {
19937 name = name.replace(/'/g, "\\'")
19938 .replace(/\\"/g, '"')
19939 .replace(/(^"|"$)/g, "'");
19940 name = ctx.stylize(name, 'string');
19941 }
19942 }
19943
19944 return name + ': ' + str;
19945}
19946
19947
19948function reduceToSingleString(output, base, braces) {
19949 var numLinesEst = 0;
19950 var length = output.reduce(function(prev, cur) {
19951 numLinesEst++;
19952 if (cur.indexOf('\n') >= 0) numLinesEst++;
19953 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
19954 }, 0);
19955
19956 if (length > 60) {
19957 return braces[0] +
19958 (base === '' ? '' : base + '\n ') +
19959 ' ' +
19960 output.join(',\n ') +
19961 ' ' +
19962 braces[1];
19963 }
19964
19965 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
19966}
19967
19968
19969// NOTE: These type checking functions intentionally don't use `instanceof`
19970// because it is fragile and can be easily faked with `Object.create()`.
19971function isArray(ar) {
19972 return Array.isArray(ar);
19973}
19974exports.isArray = isArray;
19975
19976function isBoolean(arg) {
19977 return typeof arg === 'boolean';
19978}
19979exports.isBoolean = isBoolean;
19980
19981function isNull(arg) {
19982 return arg === null;
19983}
19984exports.isNull = isNull;
19985
19986function isNullOrUndefined(arg) {
19987 return arg == null;
19988}
19989exports.isNullOrUndefined = isNullOrUndefined;
19990
19991function isNumber(arg) {
19992 return typeof arg === 'number';
19993}
19994exports.isNumber = isNumber;
19995
19996function isString(arg) {
19997 return typeof arg === 'string';
19998}
19999exports.isString = isString;
20000
20001function isSymbol(arg) {
20002 return typeof arg === 'symbol';
20003}
20004exports.isSymbol = isSymbol;
20005
20006function isUndefined(arg) {
20007 return arg === void 0;
20008}
20009exports.isUndefined = isUndefined;
20010
20011function isRegExp(re) {
20012 return isObject(re) && objectToString(re) === '[object RegExp]';
20013}
20014exports.isRegExp = isRegExp;
20015
20016function isObject(arg) {
20017 return typeof arg === 'object' && arg !== null;
20018}
20019exports.isObject = isObject;
20020
20021function isDate(d) {
20022 return isObject(d) && objectToString(d) === '[object Date]';
20023}
20024exports.isDate = isDate;
20025
20026function isError(e) {
20027 return isObject(e) &&
20028 (objectToString(e) === '[object Error]' || e instanceof Error);
20029}
20030exports.isError = isError;
20031
20032function isFunction(arg) {
20033 return typeof arg === 'function';
20034}
20035exports.isFunction = isFunction;
20036
20037function isPrimitive(arg) {
20038 return arg === null ||
20039 typeof arg === 'boolean' ||
20040 typeof arg === 'number' ||
20041 typeof arg === 'string' ||
20042 typeof arg === 'symbol' || // ES6 symbol
20043 typeof arg === 'undefined';
20044}
20045exports.isPrimitive = isPrimitive;
20046
20047exports.isBuffer = _dereq_('./support/isBuffer');
20048
20049function objectToString(o) {
20050 return Object.prototype.toString.call(o);
20051}
20052
20053
20054function pad(n) {
20055 return n < 10 ? '0' + n.toString(10) : n.toString(10);
20056}
20057
20058
20059var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
20060 'Oct', 'Nov', 'Dec'];
20061
20062// 26 Feb 16:19:34
20063function timestamp() {
20064 var d = new Date();
20065 var time = [pad(d.getHours()),
20066 pad(d.getMinutes()),
20067 pad(d.getSeconds())].join(':');
20068 return [d.getDate(), months[d.getMonth()], time].join(' ');
20069}
20070
20071
20072// log is just a thin wrapper to console.log that prepends a timestamp
20073exports.log = function() {
20074 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
20075};
20076
20077
20078/**
20079 * Inherit the prototype methods from one constructor into another.
20080 *
20081 * The Function.prototype.inherits from lang.js rewritten as a standalone
20082 * function (not on Function.prototype). NOTE: If this file is to be loaded
20083 * during bootstrapping this function needs to be rewritten using some native
20084 * functions as prototype setup using normal JavaScript does not work as
20085 * expected during bootstrapping (see mirror.js in r114903).
20086 *
20087 * @param {function} ctor Constructor function which needs to inherit the
20088 * prototype.
20089 * @param {function} superCtor Constructor function to inherit prototype from.
20090 */
20091exports.inherits = _dereq_('inherits');
20092
20093exports._extend = function(origin, add) {
20094 // Don't do anything if add isn't an object
20095 if (!add || !isObject(add)) return origin;
20096
20097 var keys = Object.keys(add);
20098 var i = keys.length;
20099 while (i--) {
20100 origin[keys[i]] = add[keys[i]];
20101 }
20102 return origin;
20103};
20104
20105function hasOwnProperty(obj, prop) {
20106 return Object.prototype.hasOwnProperty.call(obj, prop);
20107}
20108
20109}).call(this,_dereq_("FWaASH"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20110},{"./support/isBuffer":5,"FWaASH":12,"inherits":11}],7:[function(_dereq_,module,exports){
20111
20112},{}],8:[function(_dereq_,module,exports){
20113/*!
20114 * The buffer module from node.js, for the browser.
20115 *
20116 * at author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20117 * at license MIT
20118 */
20119
20120var base64 = _dereq_('base64-js')
20121var ieee754 = _dereq_('ieee754')
20122
20123exports.Buffer = Buffer
20124exports.SlowBuffer = Buffer
20125exports.INSPECT_MAX_BYTES = 50
20126Buffer.poolSize = 8192
20127
20128/**
20129 * If `Buffer._useTypedArrays`:
20130 * === true Use Uint8Array implementation (fastest)
20131 * === false Use Object implementation (compatible down to IE6)
20132 */
20133Buffer._useTypedArrays = (function () {
20134 // Detect if browser supports Typed Arrays. Supported browsers are IE 10+, Firefox 4+,
20135 // Chrome 7+, Safari 5.1+, Opera 11.6+, iOS 4.2+. If the browser does not support adding
20136 // properties to `Uint8Array` instances, then that's the same as no `Uint8Array` support
20137 // because we need to be able to add all the node Buffer API methods. This is an issue
20138 // in Firefox 4-29. Now fixed: https://bugzilla.mozilla.org/show_bug.cgi?id=695438
20139 try {
20140 var buf = new ArrayBuffer(0)
20141 var arr = new Uint8Array(buf)
20142 arr.foo = function () { return 42 }
20143 return 42 === arr.foo() &&
20144 typeof arr.subarray === 'function' // Chrome 9-10 lack `subarray`
20145 } catch (e) {
20146 return false
20147 }
20148})()
20149
20150/**
20151 * Class: Buffer
20152 * =============
20153 *
20154 * The Buffer constructor returns instances of `Uint8Array` that are augmented
20155 * with function properties for all the node `Buffer` API functions. We use
20156 * `Uint8Array` so that square bracket notation works as expected -- it returns
20157 * a single octet.
20158 *
20159 * By augmenting the instances, we can avoid modifying the `Uint8Array`
20160 * prototype.
20161 */
20162function Buffer (subject, encoding, noZero) {
20163 if (!(this instanceof Buffer))
20164 return new Buffer(subject, encoding, noZero)
20165
20166 var type = typeof subject
20167
20168 if (encoding === 'base64' && type === 'string') {
20169 subject = base64clean(subject)
20170 }
20171
20172 // Find the length
20173 var length
20174 if (type === 'number')
20175 length = coerce(subject)
20176 else if (type === 'string')
20177 length = Buffer.byteLength(subject, encoding)
20178 else if (type === 'object')
20179 length = coerce(subject.length) // assume that object is array-like
20180 else
20181 throw new Error('First argument needs to be a number, array or string.')
20182
20183 var buf
20184 if (Buffer._useTypedArrays) {
20185 // Preferred: Return an augmented `Uint8Array` instance for best performance
20186 buf = Buffer._augment(new Uint8Array(length))
20187 } else {
20188 // Fallback: Return THIS instance of Buffer (created by `new`)
20189 buf = this
20190 buf.length = length
20191 buf._isBuffer = true
20192 }
20193
20194 var i
20195 if (Buffer._useTypedArrays && typeof subject.byteLength === 'number') {
20196 // Speed optimization -- use set if we're copying from a typed array
20197 buf._set(subject)
20198 } else if (isArrayish(subject)) {
20199 // Treat array-ish objects as a byte array
20200 if (Buffer.isBuffer(subject)) {
20201 for (i = 0; i < length; i++)
20202 buf[i] = subject.readUInt8(i)
20203 } else {
20204 for (i = 0; i < length; i++)
20205 buf[i] = ((subject[i] % 256) + 256) % 256
20206 }
20207 } else if (type === 'string') {
20208 buf.write(subject, 0, encoding)
20209 } else if (type === 'number' && !Buffer._useTypedArrays && !noZero) {
20210 for (i = 0; i < length; i++) {
20211 buf[i] = 0
20212 }
20213 }
20214
20215 return buf
20216}
20217
20218// STATIC METHODS
20219// ==============
20220
20221Buffer.isEncoding = function (encoding) {
20222 switch (String(encoding).toLowerCase()) {
20223 case 'hex':
20224 case 'utf8':
20225 case 'utf-8':
20226 case 'ascii':
20227 case 'binary':
20228 case 'base64':
20229 case 'raw':
20230 case 'ucs2':
20231 case 'ucs-2':
20232 case 'utf16le':
20233 case 'utf-16le':
20234 return true
20235 default:
20236 return false
20237 }
20238}
20239
20240Buffer.isBuffer = function (b) {
20241 return !!(b !== null && b !== undefined && b._isBuffer)
20242}
20243
20244Buffer.byteLength = function (str, encoding) {
20245 var ret
20246 str = str.toString()
20247 switch (encoding || 'utf8') {
20248 case 'hex':
20249 ret = str.length / 2
20250 break
20251 case 'utf8':
20252 case 'utf-8':
20253 ret = utf8ToBytes(str).length
20254 break
20255 case 'ascii':
20256 case 'binary':
20257 case 'raw':
20258 ret = str.length
20259 break
20260 case 'base64':
20261 ret = base64ToBytes(str).length
20262 break
20263 case 'ucs2':
20264 case 'ucs-2':
20265 case 'utf16le':
20266 case 'utf-16le':
20267 ret = str.length * 2
20268 break
20269 default:
20270 throw new Error('Unknown encoding')
20271 }
20272 return ret
20273}
20274
20275Buffer.concat = function (list, totalLength) {
20276 assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
20277
20278 if (list.length === 0) {
20279 return new Buffer(0)
20280 } else if (list.length === 1) {
20281 return list[0]
20282 }
20283
20284 var i
20285 if (totalLength === undefined) {
20286 totalLength = 0
20287 for (i = 0; i < list.length; i++) {
20288 totalLength += list[i].length
20289 }
20290 }
20291
20292 var buf = new Buffer(totalLength)
20293 var pos = 0
20294 for (i = 0; i < list.length; i++) {
20295 var item = list[i]
20296 item.copy(buf, pos)
20297 pos += item.length
20298 }
20299 return buf
20300}
20301
20302Buffer.compare = function (a, b) {
20303 assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
20304 var x = a.length
20305 var y = b.length
20306 for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
20307 if (i !== len) {
20308 x = a[i]
20309 y = b[i]
20310 }
20311 if (x < y) {
20312 return -1
20313 }
20314 if (y < x) {
20315 return 1
20316 }
20317 return 0
20318}
20319
20320// BUFFER INSTANCE METHODS
20321// =======================
20322
20323function hexWrite (buf, string, offset, length) {
20324 offset = Number(offset) || 0
20325 var remaining = buf.length - offset
20326 if (!length) {
20327 length = remaining
20328 } else {
20329 length = Number(length)
20330 if (length > remaining) {
20331 length = remaining
20332 }
20333 }
20334
20335 // must be an even number of digits
20336 var strLen = string.length
20337 assert(strLen % 2 === 0, 'Invalid hex string')
20338
20339 if (length > strLen / 2) {
20340 length = strLen / 2
20341 }
20342 for (var i = 0; i < length; i++) {
20343 var byte = parseInt(string.substr(i * 2, 2), 16)
20344 assert(!isNaN(byte), 'Invalid hex string')
20345 buf[offset + i] = byte
20346 }
20347 return i
20348}
20349
20350function utf8Write (buf, string, offset, length) {
20351 var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length)
20352 return charsWritten
20353}
20354
20355function asciiWrite (buf, string, offset, length) {
20356 var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
20357 return charsWritten
20358}
20359
20360function binaryWrite (buf, string, offset, length) {
20361 return asciiWrite(buf, string, offset, length)
20362}
20363
20364function base64Write (buf, string, offset, length) {
20365 var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
20366 return charsWritten
20367}
20368
20369function utf16leWrite (buf, string, offset, length) {
20370 var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length)
20371 return charsWritten
20372}
20373
20374Buffer.prototype.write = function (string, offset, length, encoding) {
20375 // Support both (string, offset, length, encoding)
20376 // and the legacy (string, encoding, offset, length)
20377 if (isFinite(offset)) {
20378 if (!isFinite(length)) {
20379 encoding = length
20380 length = undefined
20381 }
20382 } else { // legacy
20383 var swap = encoding
20384 encoding = offset
20385 offset = length
20386 length = swap
20387 }
20388
20389 offset = Number(offset) || 0
20390 var remaining = this.length - offset
20391 if (!length) {
20392 length = remaining
20393 } else {
20394 length = Number(length)
20395 if (length > remaining) {
20396 length = remaining
20397 }
20398 }
20399 encoding = String(encoding || 'utf8').toLowerCase()
20400
20401 var ret
20402 switch (encoding) {
20403 case 'hex':
20404 ret = hexWrite(this, string, offset, length)
20405 break
20406 case 'utf8':
20407 case 'utf-8':
20408 ret = utf8Write(this, string, offset, length)
20409 break
20410 case 'ascii':
20411 ret = asciiWrite(this, string, offset, length)
20412 break
20413 case 'binary':
20414 ret = binaryWrite(this, string, offset, length)
20415 break
20416 case 'base64':
20417 ret = base64Write(this, string, offset, length)
20418 break
20419 case 'ucs2':
20420 case 'ucs-2':
20421 case 'utf16le':
20422 case 'utf-16le':
20423 ret = utf16leWrite(this, string, offset, length)
20424 break
20425 default:
20426 throw new Error('Unknown encoding')
20427 }
20428 return ret
20429}
20430
20431Buffer.prototype.toString = function (encoding, start, end) {
20432 var self = this
20433
20434 encoding = String(encoding || 'utf8').toLowerCase()
20435 start = Number(start) || 0
20436 end = (end === undefined) ? self.length : Number(end)
20437
20438 // Fastpath empty strings
20439 if (end === start)
20440 return ''
20441
20442 var ret
20443 switch (encoding) {
20444 case 'hex':
20445 ret = hexSlice(self, start, end)
20446 break
20447 case 'utf8':
20448 case 'utf-8':
20449 ret = utf8Slice(self, start, end)
20450 break
20451 case 'ascii':
20452 ret = asciiSlice(self, start, end)
20453 break
20454 case 'binary':
20455 ret = binarySlice(self, start, end)
20456 break
20457 case 'base64':
20458 ret = base64Slice(self, start, end)
20459 break
20460 case 'ucs2':
20461 case 'ucs-2':
20462 case 'utf16le':
20463 case 'utf-16le':
20464 ret = utf16leSlice(self, start, end)
20465 break
20466 default:
20467 throw new Error('Unknown encoding')
20468 }
20469 return ret
20470}
20471
20472Buffer.prototype.toJSON = function () {
20473 return {
20474 type: 'Buffer',
20475 data: Array.prototype.slice.call(this._arr || this, 0)
20476 }
20477}
20478
20479Buffer.prototype.equals = function (b) {
20480 assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
20481 return Buffer.compare(this, b) === 0
20482}
20483
20484Buffer.prototype.compare = function (b) {
20485 assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
20486 return Buffer.compare(this, b)
20487}
20488
20489// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
20490Buffer.prototype.copy = function (target, target_start, start, end) {
20491 var source = this
20492
20493 if (!start) start = 0
20494 if (!end && end !== 0) end = this.length
20495 if (!target_start) target_start = 0
20496
20497 // Copy 0 bytes; we're done
20498 if (end === start) return
20499 if (target.length === 0 || source.length === 0) return
20500
20501 // Fatal error conditions
20502 assert(end >= start, 'sourceEnd < sourceStart')
20503 assert(target_start >= 0 && target_start < target.length,
20504 'targetStart out of bounds')
20505 assert(start >= 0 && start < source.length, 'sourceStart out of bounds')
20506 assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds')
20507
20508 // Are we oob?
20509 if (end > this.length)
20510 end = this.length
20511 if (target.length - target_start < end - start)
20512 end = target.length - target_start + start
20513
20514 var len = end - start
20515
20516 if (len < 100 || !Buffer._useTypedArrays) {
20517 for (var i = 0; i < len; i++) {
20518 target[i + target_start] = this[i + start]
20519 }
20520 } else {
20521 target._set(this.subarray(start, start + len), target_start)
20522 }
20523}
20524
20525function base64Slice (buf, start, end) {
20526 if (start === 0 && end === buf.length) {
20527 return base64.fromByteArray(buf)
20528 } else {
20529 return base64.fromByteArray(buf.slice(start, end))
20530 }
20531}
20532
20533function utf8Slice (buf, start, end) {
20534 var res = ''
20535 var tmp = ''
20536 end = Math.min(buf.length, end)
20537
20538 for (var i = start; i < end; i++) {
20539 if (buf[i] <= 0x7F) {
20540 res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
20541 tmp = ''
20542 } else {
20543 tmp += '%' + buf[i].toString(16)
20544 }
20545 }
20546
20547 return res + decodeUtf8Char(tmp)
20548}
20549
20550function asciiSlice (buf, start, end) {
20551 var ret = ''
20552 end = Math.min(buf.length, end)
20553
20554 for (var i = start; i < end; i++) {
20555 ret += String.fromCharCode(buf[i])
20556 }
20557 return ret
20558}
20559
20560function binarySlice (buf, start, end) {
20561 return asciiSlice(buf, start, end)
20562}
20563
20564function hexSlice (buf, start, end) {
20565 var len = buf.length
20566
20567 if (!start || start < 0) start = 0
20568 if (!end || end < 0 || end > len) end = len
20569
20570 var out = ''
20571 for (var i = start; i < end; i++) {
20572 out += toHex(buf[i])
20573 }
20574 return out
20575}
20576
20577function utf16leSlice (buf, start, end) {
20578 var bytes = buf.slice(start, end)
20579 var res = ''
20580 for (var i = 0; i < bytes.length; i += 2) {
20581 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
20582 }
20583 return res
20584}
20585
20586Buffer.prototype.slice = function (start, end) {
20587 var len = this.length
20588 start = clamp(start, len, 0)
20589 end = clamp(end, len, len)
20590
20591 if (Buffer._useTypedArrays) {
20592 return Buffer._augment(this.subarray(start, end))
20593 } else {
20594 var sliceLen = end - start
20595 var newBuf = new Buffer(sliceLen, undefined, true)
20596 for (var i = 0; i < sliceLen; i++) {
20597 newBuf[i] = this[i + start]
20598 }
20599 return newBuf
20600 }
20601}
20602
20603// `get` will be removed in Node 0.13+
20604Buffer.prototype.get = function (offset) {
20605 console.log('.get() is deprecated. Access using array indexes instead.')
20606 return this.readUInt8(offset)
20607}
20608
20609// `set` will be removed in Node 0.13+
20610Buffer.prototype.set = function (v, offset) {
20611 console.log('.set() is deprecated. Access using array indexes instead.')
20612 return this.writeUInt8(v, offset)
20613}
20614
20615Buffer.prototype.readUInt8 = function (offset, noAssert) {
20616 if (!noAssert) {
20617 assert(offset !== undefined && offset !== null, 'missing offset')
20618 assert(offset < this.length, 'Trying to read beyond buffer length')
20619 }
20620
20621 if (offset >= this.length)
20622 return
20623
20624 return this[offset]
20625}
20626
20627function readUInt16 (buf, offset, littleEndian, noAssert) {
20628 if (!noAssert) {
20629 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20630 assert(offset !== undefined && offset !== null, 'missing offset')
20631 assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
20632 }
20633
20634 var len = buf.length
20635 if (offset >= len)
20636 return
20637
20638 var val
20639 if (littleEndian) {
20640 val = buf[offset]
20641 if (offset + 1 < len)
20642 val |= buf[offset + 1] << 8
20643 } else {
20644 val = buf[offset] << 8
20645 if (offset + 1 < len)
20646 val |= buf[offset + 1]
20647 }
20648 return val
20649}
20650
20651Buffer.prototype.readUInt16LE = function (offset, noAssert) {
20652 return readUInt16(this, offset, true, noAssert)
20653}
20654
20655Buffer.prototype.readUInt16BE = function (offset, noAssert) {
20656 return readUInt16(this, offset, false, noAssert)
20657}
20658
20659function readUInt32 (buf, offset, littleEndian, noAssert) {
20660 if (!noAssert) {
20661 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20662 assert(offset !== undefined && offset !== null, 'missing offset')
20663 assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
20664 }
20665
20666 var len = buf.length
20667 if (offset >= len)
20668 return
20669
20670 var val
20671 if (littleEndian) {
20672 if (offset + 2 < len)
20673 val = buf[offset + 2] << 16
20674 if (offset + 1 < len)
20675 val |= buf[offset + 1] << 8
20676 val |= buf[offset]
20677 if (offset + 3 < len)
20678 val = val + (buf[offset + 3] << 24 >>> 0)
20679 } else {
20680 if (offset + 1 < len)
20681 val = buf[offset + 1] << 16
20682 if (offset + 2 < len)
20683 val |= buf[offset + 2] << 8
20684 if (offset + 3 < len)
20685 val |= buf[offset + 3]
20686 val = val + (buf[offset] << 24 >>> 0)
20687 }
20688 return val
20689}
20690
20691Buffer.prototype.readUInt32LE = function (offset, noAssert) {
20692 return readUInt32(this, offset, true, noAssert)
20693}
20694
20695Buffer.prototype.readUInt32BE = function (offset, noAssert) {
20696 return readUInt32(this, offset, false, noAssert)
20697}
20698
20699Buffer.prototype.readInt8 = function (offset, noAssert) {
20700 if (!noAssert) {
20701 assert(offset !== undefined && offset !== null,
20702 'missing offset')
20703 assert(offset < this.length, 'Trying to read beyond buffer length')
20704 }
20705
20706 if (offset >= this.length)
20707 return
20708
20709 var neg = this[offset] & 0x80
20710 if (neg)
20711 return (0xff - this[offset] + 1) * -1
20712 else
20713 return this[offset]
20714}
20715
20716function readInt16 (buf, offset, littleEndian, noAssert) {
20717 if (!noAssert) {
20718 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20719 assert(offset !== undefined && offset !== null, 'missing offset')
20720 assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
20721 }
20722
20723 var len = buf.length
20724 if (offset >= len)
20725 return
20726
20727 var val = readUInt16(buf, offset, littleEndian, true)
20728 var neg = val & 0x8000
20729 if (neg)
20730 return (0xffff - val + 1) * -1
20731 else
20732 return val
20733}
20734
20735Buffer.prototype.readInt16LE = function (offset, noAssert) {
20736 return readInt16(this, offset, true, noAssert)
20737}
20738
20739Buffer.prototype.readInt16BE = function (offset, noAssert) {
20740 return readInt16(this, offset, false, noAssert)
20741}
20742
20743function readInt32 (buf, offset, littleEndian, noAssert) {
20744 if (!noAssert) {
20745 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20746 assert(offset !== undefined && offset !== null, 'missing offset')
20747 assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
20748 }
20749
20750 var len = buf.length
20751 if (offset >= len)
20752 return
20753
20754 var val = readUInt32(buf, offset, littleEndian, true)
20755 var neg = val & 0x80000000
20756 if (neg)
20757 return (0xffffffff - val + 1) * -1
20758 else
20759 return val
20760}
20761
20762Buffer.prototype.readInt32LE = function (offset, noAssert) {
20763 return readInt32(this, offset, true, noAssert)
20764}
20765
20766Buffer.prototype.readInt32BE = function (offset, noAssert) {
20767 return readInt32(this, offset, false, noAssert)
20768}
20769
20770function readFloat (buf, offset, littleEndian, noAssert) {
20771 if (!noAssert) {
20772 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20773 assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
20774 }
20775
20776 return ieee754.read(buf, offset, littleEndian, 23, 4)
20777}
20778
20779Buffer.prototype.readFloatLE = function (offset, noAssert) {
20780 return readFloat(this, offset, true, noAssert)
20781}
20782
20783Buffer.prototype.readFloatBE = function (offset, noAssert) {
20784 return readFloat(this, offset, false, noAssert)
20785}
20786
20787function readDouble (buf, offset, littleEndian, noAssert) {
20788 if (!noAssert) {
20789 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20790 assert(offset + 7 < buf.length, 'Trying to read beyond buffer length')
20791 }
20792
20793 return ieee754.read(buf, offset, littleEndian, 52, 8)
20794}
20795
20796Buffer.prototype.readDoubleLE = function (offset, noAssert) {
20797 return readDouble(this, offset, true, noAssert)
20798}
20799
20800Buffer.prototype.readDoubleBE = function (offset, noAssert) {
20801 return readDouble(this, offset, false, noAssert)
20802}
20803
20804Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
20805 if (!noAssert) {
20806 assert(value !== undefined && value !== null, 'missing value')
20807 assert(offset !== undefined && offset !== null, 'missing offset')
20808 assert(offset < this.length, 'trying to write beyond buffer length')
20809 verifuint(value, 0xff)
20810 }
20811
20812 if (offset >= this.length) return
20813
20814 this[offset] = value
20815 return offset + 1
20816}
20817
20818function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
20819 if (!noAssert) {
20820 assert(value !== undefined && value !== null, 'missing value')
20821 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20822 assert(offset !== undefined && offset !== null, 'missing offset')
20823 assert(offset + 1 < buf.length, 'trying to write beyond buffer length')
20824 verifuint(value, 0xffff)
20825 }
20826
20827 var len = buf.length
20828 if (offset >= len)
20829 return
20830
20831 for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) {
20832 buf[offset + i] =
20833 (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
20834 (littleEndian ? i : 1 - i) * 8
20835 }
20836 return offset + 2
20837}
20838
20839Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
20840 return writeUInt16(this, value, offset, true, noAssert)
20841}
20842
20843Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
20844 return writeUInt16(this, value, offset, false, noAssert)
20845}
20846
20847function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
20848 if (!noAssert) {
20849 assert(value !== undefined && value !== null, 'missing value')
20850 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20851 assert(offset !== undefined && offset !== null, 'missing offset')
20852 assert(offset + 3 < buf.length, 'trying to write beyond buffer length')
20853 verifuint(value, 0xffffffff)
20854 }
20855
20856 var len = buf.length
20857 if (offset >= len)
20858 return
20859
20860 for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) {
20861 buf[offset + i] =
20862 (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
20863 }
20864 return offset + 4
20865}
20866
20867Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
20868 return writeUInt32(this, value, offset, true, noAssert)
20869}
20870
20871Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
20872 return writeUInt32(this, value, offset, false, noAssert)
20873}
20874
20875Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
20876 if (!noAssert) {
20877 assert(value !== undefined && value !== null, 'missing value')
20878 assert(offset !== undefined && offset !== null, 'missing offset')
20879 assert(offset < this.length, 'Trying to write beyond buffer length')
20880 verifsint(value, 0x7f, -0x80)
20881 }
20882
20883 if (offset >= this.length)
20884 return
20885
20886 if (value >= 0)
20887 this.writeUInt8(value, offset, noAssert)
20888 else
20889 this.writeUInt8(0xff + value + 1, offset, noAssert)
20890 return offset + 1
20891}
20892
20893function writeInt16 (buf, value, offset, littleEndian, noAssert) {
20894 if (!noAssert) {
20895 assert(value !== undefined && value !== null, 'missing value')
20896 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20897 assert(offset !== undefined && offset !== null, 'missing offset')
20898 assert(offset + 1 < buf.length, 'Trying to write beyond buffer length')
20899 verifsint(value, 0x7fff, -0x8000)
20900 }
20901
20902 var len = buf.length
20903 if (offset >= len)
20904 return
20905
20906 if (value >= 0)
20907 writeUInt16(buf, value, offset, littleEndian, noAssert)
20908 else
20909 writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert)
20910 return offset + 2
20911}
20912
20913Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
20914 return writeInt16(this, value, offset, true, noAssert)
20915}
20916
20917Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
20918 return writeInt16(this, value, offset, false, noAssert)
20919}
20920
20921function writeInt32 (buf, value, offset, littleEndian, noAssert) {
20922 if (!noAssert) {
20923 assert(value !== undefined && value !== null, 'missing value')
20924 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20925 assert(offset !== undefined && offset !== null, 'missing offset')
20926 assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
20927 verifsint(value, 0x7fffffff, -0x80000000)
20928 }
20929
20930 var len = buf.length
20931 if (offset >= len)
20932 return
20933
20934 if (value >= 0)
20935 writeUInt32(buf, value, offset, littleEndian, noAssert)
20936 else
20937 writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert)
20938 return offset + 4
20939}
20940
20941Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
20942 return writeInt32(this, value, offset, true, noAssert)
20943}
20944
20945Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
20946 return writeInt32(this, value, offset, false, noAssert)
20947}
20948
20949function writeFloat (buf, value, offset, littleEndian, noAssert) {
20950 if (!noAssert) {
20951 assert(value !== undefined && value !== null, 'missing value')
20952 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20953 assert(offset !== undefined && offset !== null, 'missing offset')
20954 assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
20955 verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38)
20956 }
20957
20958 var len = buf.length
20959 if (offset >= len)
20960 return
20961
20962 ieee754.write(buf, value, offset, littleEndian, 23, 4)
20963 return offset + 4
20964}
20965
20966Buffer.prototype.writeFloatLE = function (value, offset, noAssert) {
20967 return writeFloat(this, value, offset, true, noAssert)
20968}
20969
20970Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
20971 return writeFloat(this, value, offset, false, noAssert)
20972}
20973
20974function writeDouble (buf, value, offset, littleEndian, noAssert) {
20975 if (!noAssert) {
20976 assert(value !== undefined && value !== null, 'missing value')
20977 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
20978 assert(offset !== undefined && offset !== null, 'missing offset')
20979 assert(offset + 7 < buf.length,
20980 'Trying to write beyond buffer length')
20981 verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308)
20982 }
20983
20984 var len = buf.length
20985 if (offset >= len)
20986 return
20987
20988 ieee754.write(buf, value, offset, littleEndian, 52, 8)
20989 return offset + 8
20990}
20991
20992Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) {
20993 return writeDouble(this, value, offset, true, noAssert)
20994}
20995
20996Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
20997 return writeDouble(this, value, offset, false, noAssert)
20998}
20999
21000// fill(value, start=0, end=buffer.length)
21001Buffer.prototype.fill = function (value, start, end) {
21002 if (!value) value = 0
21003 if (!start) start = 0
21004 if (!end) end = this.length
21005
21006 assert(end >= start, 'end < start')
21007
21008 // Fill 0 bytes; we're done
21009 if (end === start) return
21010 if (this.length === 0) return
21011
21012 assert(start >= 0 && start < this.length, 'start out of bounds')
21013 assert(end >= 0 && end <= this.length, 'end out of bounds')
21014
21015 var i
21016 if (typeof value === 'number') {
21017 for (i = start; i < end; i++) {
21018 this[i] = value
21019 }
21020 } else {
21021 var bytes = utf8ToBytes(value.toString())
21022 var len = bytes.length
21023 for (i = start; i < end; i++) {
21024 this[i] = bytes[i % len]
21025 }
21026 }
21027
21028 return this
21029}
21030
21031Buffer.prototype.inspect = function () {
21032 var out = []
21033 var len = this.length
21034 for (var i = 0; i < len; i++) {
21035 out[i] = toHex(this[i])
21036 if (i === exports.INSPECT_MAX_BYTES) {
21037 out[i + 1] = '...'
21038 break
21039 }
21040 }
21041 return '<Buffer ' + out.join(' ') + '>'
21042}
21043
21044/**
21045 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
21046 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
21047 */
21048Buffer.prototype.toArrayBuffer = function () {
21049 if (typeof Uint8Array !== 'undefined') {
21050 if (Buffer._useTypedArrays) {
21051 return (new Buffer(this)).buffer
21052 } else {
21053 var buf = new Uint8Array(this.length)
21054 for (var i = 0, len = buf.length; i < len; i += 1) {
21055 buf[i] = this[i]
21056 }
21057 return buf.buffer
21058 }
21059 } else {
21060 throw new Error('Buffer.toArrayBuffer not supported in this browser')
21061 }
21062}
21063
21064// HELPER FUNCTIONS
21065// ================
21066
21067var BP = Buffer.prototype
21068
21069/**
21070 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
21071 */
21072Buffer._augment = function (arr) {
21073 arr._isBuffer = true
21074
21075 // save reference to original Uint8Array get/set methods before overwriting
21076 arr._get = arr.get
21077 arr._set = arr.set
21078
21079 // deprecated, will be removed in node 0.13+
21080 arr.get = BP.get
21081 arr.set = BP.set
21082
21083 arr.write = BP.write
21084 arr.toString = BP.toString
21085 arr.toLocaleString = BP.toString
21086 arr.toJSON = BP.toJSON
21087 arr.equals = BP.equals
21088 arr.compare = BP.compare
21089 arr.copy = BP.copy
21090 arr.slice = BP.slice
21091 arr.readUInt8 = BP.readUInt8
21092 arr.readUInt16LE = BP.readUInt16LE
21093 arr.readUInt16BE = BP.readUInt16BE
21094 arr.readUInt32LE = BP.readUInt32LE
21095 arr.readUInt32BE = BP.readUInt32BE
21096 arr.readInt8 = BP.readInt8
21097 arr.readInt16LE = BP.readInt16LE
21098 arr.readInt16BE = BP.readInt16BE
21099 arr.readInt32LE = BP.readInt32LE
21100 arr.readInt32BE = BP.readInt32BE
21101 arr.readFloatLE = BP.readFloatLE
21102 arr.readFloatBE = BP.readFloatBE
21103 arr.readDoubleLE = BP.readDoubleLE
21104 arr.readDoubleBE = BP.readDoubleBE
21105 arr.writeUInt8 = BP.writeUInt8
21106 arr.writeUInt16LE = BP.writeUInt16LE
21107 arr.writeUInt16BE = BP.writeUInt16BE
21108 arr.writeUInt32LE = BP.writeUInt32LE
21109 arr.writeUInt32BE = BP.writeUInt32BE
21110 arr.writeInt8 = BP.writeInt8
21111 arr.writeInt16LE = BP.writeInt16LE
21112 arr.writeInt16BE = BP.writeInt16BE
21113 arr.writeInt32LE = BP.writeInt32LE
21114 arr.writeInt32BE = BP.writeInt32BE
21115 arr.writeFloatLE = BP.writeFloatLE
21116 arr.writeFloatBE = BP.writeFloatBE
21117 arr.writeDoubleLE = BP.writeDoubleLE
21118 arr.writeDoubleBE = BP.writeDoubleBE
21119 arr.fill = BP.fill
21120 arr.inspect = BP.inspect
21121 arr.toArrayBuffer = BP.toArrayBuffer
21122
21123 return arr
21124}
21125
21126var INVALID_BASE64_RE = /[^+\/0-9A-z]/g
21127
21128function base64clean (str) {
21129 // Node strips out invalid characters like \n and \t from the string, base64-js does not
21130 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
21131 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
21132 while (str.length % 4 !== 0) {
21133 str = str + '='
21134 }
21135 return str
21136}
21137
21138function stringtrim (str) {
21139 if (str.trim) return str.trim()
21140 return str.replace(/^\s+|\s+$/g, '')
21141}
21142
21143// slice(start, end)
21144function clamp (index, len, defaultValue) {
21145 if (typeof index !== 'number') return defaultValue
21146 index = ~~index; // Coerce to integer.
21147 if (index >= len) return len
21148 if (index >= 0) return index
21149 index += len
21150 if (index >= 0) return index
21151 return 0
21152}
21153
21154function coerce (length) {
21155 // Coerce length to a number (possibly NaN), round up
21156 // in case it's fractional (e.g. 123.456) then do a
21157 // double negate to coerce a NaN to 0. Easy, right?
21158 length = ~~Math.ceil(+length)
21159 return length < 0 ? 0 : length
21160}
21161
21162function isArray (subject) {
21163 return (Array.isArray || function (subject) {
21164 return Object.prototype.toString.call(subject) === '[object Array]'
21165 })(subject)
21166}
21167
21168function isArrayish (subject) {
21169 return isArray(subject) || Buffer.isBuffer(subject) ||
21170 subject && typeof subject === 'object' &&
21171 typeof subject.length === 'number'
21172}
21173
21174function toHex (n) {
21175 if (n < 16) return '0' + n.toString(16)
21176 return n.toString(16)
21177}
21178
21179function utf8ToBytes (str) {
21180 var byteArray = []
21181 for (var i = 0; i < str.length; i++) {
21182 var b = str.charCodeAt(i)
21183 if (b <= 0x7F) {
21184 byteArray.push(b)
21185 } else {
21186 var start = i
21187 if (b >= 0xD800 && b <= 0xDFFF) i++
21188 var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%')
21189 for (var j = 0; j < h.length; j++) {
21190 byteArray.push(parseInt(h[j], 16))
21191 }
21192 }
21193 }
21194 return byteArray
21195}
21196
21197function asciiToBytes (str) {
21198 var byteArray = []
21199 for (var i = 0; i < str.length; i++) {
21200 // Node's code seems to be doing this and not & 0x7F..
21201 byteArray.push(str.charCodeAt(i) & 0xFF)
21202 }
21203 return byteArray
21204}
21205
21206function utf16leToBytes (str) {
21207 var c, hi, lo
21208 var byteArray = []
21209 for (var i = 0; i < str.length; i++) {
21210 c = str.charCodeAt(i)
21211 hi = c >> 8
21212 lo = c % 256
21213 byteArray.push(lo)
21214 byteArray.push(hi)
21215 }
21216
21217 return byteArray
21218}
21219
21220function base64ToBytes (str) {
21221 return base64.toByteArray(str)
21222}
21223
21224function blitBuffer (src, dst, offset, length) {
21225 for (var i = 0; i < length; i++) {
21226 if ((i + offset >= dst.length) || (i >= src.length))
21227 break
21228 dst[i + offset] = src[i]
21229 }
21230 return i
21231}
21232
21233function decodeUtf8Char (str) {
21234 try {
21235 return decodeURIComponent(str)
21236 } catch (err) {
21237 return String.fromCharCode(0xFFFD) // UTF 8 invalid char
21238 }
21239}
21240
21241/*
21242 * We have to make sure that the value is a valid integer. This means that it
21243 * is non-negative. It has no fractional component and that it does not
21244 * exceed the maximum allowed value.
21245 */
21246function verifuint (value, max) {
21247 assert(typeof value === 'number', 'cannot write a non-number as a number')
21248 assert(value >= 0, 'specified a negative value for writing an unsigned value')
21249 assert(value <= max, 'value is larger than maximum value for type')
21250 assert(Math.floor(value) === value, 'value has a fractional component')
21251}
21252
21253function verifsint (value, max, min) {
21254 assert(typeof value === 'number', 'cannot write a non-number as a number')
21255 assert(value <= max, 'value larger than maximum allowed value')
21256 assert(value >= min, 'value smaller than minimum allowed value')
21257 assert(Math.floor(value) === value, 'value has a fractional component')
21258}
21259
21260function verifIEEE754 (value, max, min) {
21261 assert(typeof value === 'number', 'cannot write a non-number as a number')
21262 assert(value <= max, 'value larger than maximum allowed value')
21263 assert(value >= min, 'value smaller than minimum allowed value')
21264}
21265
21266function assert (test, message) {
21267 if (!test) throw new Error(message || 'Failed assertion')
21268}
21269
21270},{"base64-js":9,"ieee754":10}],9:[function(_dereq_,module,exports){
21271var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
21272
21273;(function (exports) {
21274 'use strict';
21275
21276 var Arr = (typeof Uint8Array !== 'undefined')
21277 ? Uint8Array
21278 : Array
21279
21280 var PLUS = '+'.charCodeAt(0)
21281 var SLASH = '/'.charCodeAt(0)
21282 var NUMBER = '0'.charCodeAt(0)
21283 var LOWER = 'a'.charCodeAt(0)
21284 var UPPER = 'A'.charCodeAt(0)
21285
21286 function decode (elt) {
21287 var code = elt.charCodeAt(0)
21288 if (code === PLUS)
21289 return 62 // '+'
21290 if (code === SLASH)
21291 return 63 // '/'
21292 if (code < NUMBER)
21293 return -1 //no match
21294 if (code < NUMBER + 10)
21295 return code - NUMBER + 26 + 26
21296 if (code < UPPER + 26)
21297 return code - UPPER
21298 if (code < LOWER + 26)
21299 return code - LOWER + 26
21300 }
21301
21302 function b64ToByteArray (b64) {
21303 var i, j, l, tmp, placeHolders, arr
21304
21305 if (b64.length % 4 > 0) {
21306 throw new Error('Invalid string. Length must be a multiple of 4')
21307 }
21308
21309 // the number of equal signs (place holders)
21310 // if there are two placeholders, than the two characters before it
21311 // represent one byte
21312 // if there is only one, then the three characters before it represent 2 bytes
21313 // this is just a cheap hack to not do indexOf twice
21314 var len = b64.length
21315 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
21316
21317 // base64 is 4/3 + up to two characters of the original data
21318 arr = new Arr(b64.length * 3 / 4 - placeHolders)
21319
21320 // if there are placeholders, only get up to the last complete 4 chars
21321 l = placeHolders > 0 ? b64.length - 4 : b64.length
21322
21323 var L = 0
21324
21325 function push (v) {
21326 arr[L++] = v
21327 }
21328
21329 for (i = 0, j = 0; i < l; i += 4, j += 3) {
21330 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
21331 push((tmp & 0xFF0000) >> 16)
21332 push((tmp & 0xFF00) >> 8)
21333 push(tmp & 0xFF)
21334 }
21335
21336 if (placeHolders === 2) {
21337 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
21338 push(tmp & 0xFF)
21339 } else if (placeHolders === 1) {
21340 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
21341 push((tmp >> 8) & 0xFF)
21342 push(tmp & 0xFF)
21343 }
21344
21345 return arr
21346 }
21347
21348 function uint8ToBase64 (uint8) {
21349 var i,
21350 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
21351 output = "",
21352 temp, length
21353
21354 function encode (num) {
21355 return lookup.charAt(num)
21356 }
21357
21358 function tripletToBase64 (num) {
21359 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
21360 }
21361
21362 // go through the array every three bytes, we'll deal with trailing stuff later
21363 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
21364 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
21365 output += tripletToBase64(temp)
21366 }
21367
21368 // pad the end with zeros, but make sure to not forget the extra bytes
21369 switch (extraBytes) {
21370 case 1:
21371 temp = uint8[uint8.length - 1]
21372 output += encode(temp >> 2)
21373 output += encode((temp << 4) & 0x3F)
21374 output += '=='
21375 break
21376 case 2:
21377 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
21378 output += encode(temp >> 10)
21379 output += encode((temp >> 4) & 0x3F)
21380 output += encode((temp << 2) & 0x3F)
21381 output += '='
21382 break
21383 }
21384
21385 return output
21386 }
21387
21388 exports.toByteArray = b64ToByteArray
21389 exports.fromByteArray = uint8ToBase64
21390}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
21391
21392},{}],10:[function(_dereq_,module,exports){
21393exports.read = function(buffer, offset, isLE, mLen, nBytes) {
21394 var e, m,
21395 eLen = nBytes * 8 - mLen - 1,
21396 eMax = (1 << eLen) - 1,
21397 eBias = eMax >> 1,
21398 nBits = -7,
21399 i = isLE ? (nBytes - 1) : 0,
21400 d = isLE ? -1 : 1,
21401 s = buffer[offset + i];
21402
21403 i += d;
21404
21405 e = s & ((1 << (-nBits)) - 1);
21406 s >>= (-nBits);
21407 nBits += eLen;
21408 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8){};
21409
21410 m = e & ((1 << (-nBits)) - 1);
21411 e >>= (-nBits);
21412 nBits += mLen;
21413 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8){};
21414
21415 if (e === 0) {
21416 e = 1 - eBias;
21417 } else if (e === eMax) {
21418 return m ? NaN : ((s ? -1 : 1) * Infinity);
21419 } else {
21420 m = m + Math.pow(2, mLen);
21421 e = e - eBias;
21422 }
21423 return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
21424};
21425
21426exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
21427 var e, m, c,
21428 eLen = nBytes * 8 - mLen - 1,
21429 eMax = (1 << eLen) - 1,
21430 eBias = eMax >> 1,
21431 rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
21432 i = isLE ? 0 : (nBytes - 1),
21433 d = isLE ? 1 : -1,
21434 s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
21435
21436 value = Math.abs(value);
21437
21438 if (isNaN(value) || value === Infinity) {
21439 m = isNaN(value) ? 1 : 0;
21440 e = eMax;
21441 } else {
21442 e = Math.floor(Math.log(value) / Math.LN2);
21443 if (value * (c = Math.pow(2, -e)) < 1) {
21444 e--;
21445 c *= 2;
21446 }
21447 if (e + eBias >= 1) {
21448 value += rt / c;
21449 } else {
21450 value += rt * Math.pow(2, 1 - eBias);
21451 }
21452 if (value * c >= 2) {
21453 e++;
21454 c /= 2;
21455 }
21456
21457 if (e + eBias >= eMax) {
21458 m = 0;
21459 e = eMax;
21460 } else if (e + eBias >= 1) {
21461 m = (value * c - 1) * Math.pow(2, mLen);
21462 e = e + eBias;
21463 } else {
21464 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
21465 e = 0;
21466 }
21467 }
21468
21469 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8){};
21470
21471 e = (e << mLen) | m;
21472 eLen += mLen;
21473 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8){};
21474
21475 buffer[offset + i - d] |= s * 128;
21476};
21477
21478},{}],11:[function(_dereq_,module,exports){
21479if (typeof Object.create === 'function') {
21480 // implementation from standard node.js 'util' module
21481 module.exports = function inherits(ctor, superCtor) {
21482 ctor.super_ = superCtor
21483 ctor.prototype = Object.create(superCtor.prototype, {
21484 constructor: {
21485 value: ctor,
21486 enumerable: false,
21487 writable: true,
21488 configurable: true
21489 }
21490 });
21491 };
21492} else {
21493 // old school shim for old browsers
21494 module.exports = function inherits(ctor, superCtor) {
21495 ctor.super_ = superCtor
21496 var TempCtor = function () {}
21497 TempCtor.prototype = superCtor.prototype
21498 ctor.prototype = new TempCtor()
21499 ctor.prototype.constructor = ctor
21500 }
21501}
21502
21503},{}],12:[function(_dereq_,module,exports){
21504// shim for using process in browser
21505
21506var process = module.exports = {};
21507
21508process.nextTick = (function () {
21509 var canSetImmediate = typeof window !== 'undefined'
21510 && window.setImmediate;
21511 var canPost = typeof window !== 'undefined'
21512 && window.postMessage && window.addEventListener
21513 ;
21514
21515 if (canSetImmediate) {
21516 return function (f) { return window.setImmediate(f) };
21517 }
21518
21519 if (canPost) {
21520 var queue = [];
21521 window.addEventListener('message', function (ev) {
21522 var source = ev.source;
21523 if ((source === window || source === null) && ev.data === 'process-tick') {
21524 ev.stopPropagation();
21525 if (queue.length > 0) {
21526 var fn = queue.shift();
21527 fn();
21528 }
21529 }
21530 }, true);
21531
21532 return function nextTick(fn) {
21533 queue.push(fn);
21534 window.postMessage('process-tick', '*');
21535 };
21536 }
21537
21538 return function nextTick(fn) {
21539 setTimeout(fn, 0);
21540 };
21541})();
21542
21543process.title = 'browser';
21544process.browser = true;
21545process.env = {};
21546process.argv = [];
21547
21548function noop() {}
21549
21550process.on = noop;
21551process.addListener = noop;
21552process.once = noop;
21553process.off = noop;
21554process.removeListener = noop;
21555process.removeAllListeners = noop;
21556process.emit = noop;
21557
21558process.binding = function (name) {
21559 throw new Error('process.binding is not supported');
21560}
21561
21562// TODO(shtylman)
21563process.cwd = function () { return '/' };
21564process.chdir = function (dir) {
21565 throw new Error('process.chdir is not supported');
21566};
21567
21568},{}],13:[function(_dereq_,module,exports){
21569module.exports=_dereq_(5)
21570},{}],14:[function(_dereq_,module,exports){
21571module.exports=_dereq_(6)
21572},{"./support/isBuffer":13,"FWaASH":12,"inherits":11}],15:[function(_dereq_,module,exports){
21573(function (Buffer){
21574// Base58 encoding/decoding
21575// Originally written by Mike Hearn for BitcoinJ
21576// Copyright (c) 2011 Google Inc
21577// Ported to JavaScript by Stefan Thomas
21578// Merged Buffer refactorings from base58-native by Stephen Pair
21579// Copyright (c) 2013 BitPay Inc
21580
21581var assert = _dereq_('assert')
21582var BigInteger = _dereq_('bigi')
21583
21584var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
21585var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii')
21586var ALPHABET_MAP = {}
21587for(var i = 0; i < ALPHABET.length; i++) {
21588 ALPHABET_MAP[ALPHABET.charAt(i)] = BigInteger.valueOf(i)
21589}
21590var BASE = new BigInteger('58')
21591
21592function encode(buffer) {
21593 var bi = BigInteger.fromBuffer(buffer)
21594 var result = new Buffer(buffer.length << 1)
21595
21596 var i = result.length - 1
21597 while (bi.signum() > 0) {
21598 var remainder = bi.mod(BASE)
21599 bi = bi.divide(BASE)
21600
21601 result[i] = ALPHABET_BUF[remainder.intValue()]
21602 i--
21603 }
21604
21605 // deal with leading zeros
21606 var j = 0
21607 while (buffer[j] === 0) {
21608 result[i] = ALPHABET_BUF[0]
21609 j++
21610 i--
21611 }
21612
21613 return result.slice(i + 1, result.length).toString('ascii')
21614}
21615
21616function decode(string) {
21617 if (string.length === 0) return new Buffer(0)
21618
21619 var num = BigInteger.ZERO
21620
21621 for (var i = 0; i < string.length; i++) {
21622 num = num.multiply(BASE)
21623
21624 var figure = ALPHABET_MAP[string.charAt(i)]
21625 assert.notEqual(figure, undefined, 'Non-base58 character')
21626
21627 num = num.add(figure)
21628 }
21629
21630 // deal with leading zeros
21631 var j = 0
21632 while ((j < string.length) && (string[j] === ALPHABET[0])) {
21633 j++
21634 }
21635
21636 var buffer = num.toBuffer()
21637 var leadingZeros = new Buffer(j)
21638 leadingZeros.fill(0)
21639
21640 return Buffer.concat([leadingZeros, buffer])
21641}
21642
21643module.exports = {
21644 encode: encode,
21645 decode: decode
21646}
21647
21648}).call(this,_dereq_("buffer").Buffer)
21649},{"assert":4,"bigi":3,"buffer":8}],16:[function(_dereq_,module,exports){
21650(function (Buffer){
21651var createHash = _dereq_('sha.js')
21652
21653var md5 = toConstructor(_dereq_('./md5'))
21654var rmd160 = toConstructor(_dereq_('ripemd160'))
21655
21656function toConstructor (fn) {
21657 return function () {
21658 var buffers = []
21659 var m= {
21660 update: function (data, enc) {
21661 if(!Buffer.isBuffer(data)) data = new Buffer(data, enc)
21662 buffers.push(data)
21663 return this
21664 },
21665 digest: function (enc) {
21666 var buf = Buffer.concat(buffers)
21667 var r = fn(buf)
21668 buffers = null
21669 return enc ? r.toString(enc) : r
21670 }
21671 }
21672 return m
21673 }
21674}
21675
21676module.exports = function (alg) {
21677 if('md5' === alg) return new md5()
21678 if('rmd160' === alg) return new rmd160()
21679 return createHash(alg)
21680}
21681
21682}).call(this,_dereq_("buffer").Buffer)
21683},{"./md5":20,"buffer":8,"ripemd160":21,"sha.js":23}],17:[function(_dereq_,module,exports){
21684(function (Buffer){
21685var createHash = _dereq_('./create-hash')
21686
21687var blocksize = 64
21688var zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(0)
21689
21690module.exports = Hmac
21691
21692function Hmac (alg, key) {
21693 if(!(this instanceof Hmac)) return new Hmac(alg, key)
21694 this._opad = opad
21695 this._alg = alg
21696
21697 key = this._key = !Buffer.isBuffer(key) ? new Buffer(key) : key
21698
21699 if(key.length > blocksize) {
21700 key = createHash(alg).update(key).digest()
21701 } else if(key.length < blocksize) {
21702 key = Buffer.concat([key, zeroBuffer], blocksize)
21703 }
21704
21705 var ipad = this._ipad = new Buffer(blocksize)
21706 var opad = this._opad = new Buffer(blocksize)
21707
21708 for(var i = 0; i < blocksize; i++) {
21709 ipad[i] = key[i] ^ 0x36
21710 opad[i] = key[i] ^ 0x5C
21711 }
21712
21713 this._hash = createHash(alg).update(ipad)
21714}
21715
21716Hmac.prototype.update = function (data, enc) {
21717 this._hash.update(data, enc)
21718 return this
21719}
21720
21721Hmac.prototype.digest = function (enc) {
21722 var h = this._hash.digest()
21723 return createHash(this._alg).update(this._opad).update(h).digest(enc)
21724}
21725
21726
21727}).call(this,_dereq_("buffer").Buffer)
21728},{"./create-hash":16,"buffer":8}],18:[function(_dereq_,module,exports){
21729(function (Buffer){
21730var intSize = 4;
21731var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
21732var chrsz = 8;
21733
21734function toArray(buf, bigEndian) {
21735 if ((buf.length % intSize) !== 0) {
21736 var len = buf.length + (intSize - (buf.length % intSize));
21737 buf = Buffer.concat([buf, zeroBuffer], len);
21738 }
21739
21740 var arr = [];
21741 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
21742 for (var i = 0; i < buf.length; i += intSize) {
21743 arr.push(fn.call(buf, i));
21744 }
21745 return arr;
21746}
21747
21748function toBuffer(arr, size, bigEndian) {
21749 var buf = new Buffer(size);
21750 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
21751 for (var i = 0; i < arr.length; i++) {
21752 fn.call(buf, arr[i], i * 4, true);
21753 }
21754 return buf;
21755}
21756
21757function hash(buf, fn, hashSize, bigEndian) {
21758 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
21759 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
21760 return toBuffer(arr, hashSize, bigEndian);
21761}
21762
21763module.exports = { hash: hash };
21764
21765}).call(this,_dereq_("buffer").Buffer)
21766},{"buffer":8}],19:[function(_dereq_,module,exports){
21767(function (Buffer){
21768var rng = _dereq_('./rng')
21769
21770function error () {
21771 var m = [].slice.call(arguments).join(' ')
21772 throw new Error([
21773 m,
21774 'we accept pull requests',
21775 'http://github.com/dominictarr/crypto-browserify'
21776 ].join('\n'))
21777}
21778
21779exports.createHash = _dereq_('./create-hash')
21780
21781exports.createHmac = _dereq_('./create-hmac')
21782
21783exports.randomBytes = function(size, callback) {
21784 if (callback && callback.call) {
21785 try {
21786 callback.call(this, undefined, new Buffer(rng(size)))
21787 } catch (err) { callback(err) }
21788 } else {
21789 return new Buffer(rng(size))
21790 }
21791}
21792
21793function each(a, f) {
21794 for(var i in a)
21795 f(a[i], i)
21796}
21797
21798exports.getHashes = function () {
21799 return ['sha1', 'sha256', 'md5', 'rmd160']
21800
21801}
21802
21803var p = _dereq_('./pbkdf2')(exports.createHmac)
21804exports.pbkdf2 = p.pbkdf2
21805exports.pbkdf2Sync = p.pbkdf2Sync
21806
21807
21808// the least I can do is make error messages for the rest of the node.js/crypto api.
21809each(['createCredentials'
21810, 'createCipher'
21811, 'createCipheriv'
21812, 'createDecipher'
21813, 'createDecipheriv'
21814, 'createSign'
21815, 'createVerify'
21816, 'createDiffieHellman'
21817], function (name) {
21818 exports[name] = function () {
21819 error('sorry,', name, 'is not implemented yet')
21820 }
21821})
21822
21823}).call(this,_dereq_("buffer").Buffer)
21824},{"./create-hash":16,"./create-hmac":17,"./pbkdf2":27,"./rng":28,"buffer":8}],20:[function(_dereq_,module,exports){
21825/*
21826 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
21827 * Digest Algorithm, as defined in RFC 1321.
21828 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
21829 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21830 * Distributed under the BSD License
21831 * See http://pajhome.org.uk/crypt/md5 for more info.
21832 */
21833
21834var helpers = _dereq_('./helpers');
21835
21836/*
21837 * Calculate the MD5 of an array of little-endian words, and a bit length
21838 */
21839function core_md5(x, len)
21840{
21841 /* append padding */
21842 x[len >> 5] |= 0x80 << ((len) % 32);
21843 x[(((len + 64) >>> 9) << 4) + 14] = len;
21844
21845 var a = 1732584193;
21846 var b = -271733879;
21847 var c = -1732584194;
21848 var d = 271733878;
21849
21850 for(var i = 0; i < x.length; i += 16)
21851 {
21852 var olda = a;
21853 var oldb = b;
21854 var oldc = c;
21855 var oldd = d;
21856
21857 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
21858 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
21859 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
21860 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
21861 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
21862 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
21863 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
21864 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
21865 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
21866 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
21867 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
21868 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
21869 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
21870 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
21871 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
21872 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
21873
21874 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
21875 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
21876 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
21877 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
21878 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
21879 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
21880 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
21881 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
21882 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
21883 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
21884 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
21885 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
21886 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
21887 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
21888 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
21889 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
21890
21891 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
21892 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
21893 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
21894 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
21895 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
21896 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
21897 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
21898 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
21899 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
21900 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
21901 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
21902 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
21903 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
21904 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
21905 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
21906 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
21907
21908 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
21909 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
21910 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
21911 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
21912 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
21913 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
21914 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
21915 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
21916 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
21917 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
21918 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
21919 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
21920 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
21921 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
21922 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
21923 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
21924
21925 a = safe_add(a, olda);
21926 b = safe_add(b, oldb);
21927 c = safe_add(c, oldc);
21928 d = safe_add(d, oldd);
21929 }
21930 return Array(a, b, c, d);
21931
21932}
21933
21934/*
21935 * These functions implement the four basic operations the algorithm uses.
21936 */
21937function md5_cmn(q, a, b, x, s, t)
21938{
21939 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
21940}
21941function md5_ff(a, b, c, d, x, s, t)
21942{
21943 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
21944}
21945function md5_gg(a, b, c, d, x, s, t)
21946{
21947 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
21948}
21949function md5_hh(a, b, c, d, x, s, t)
21950{
21951 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
21952}
21953function md5_ii(a, b, c, d, x, s, t)
21954{
21955 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
21956}
21957
21958/*
21959 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
21960 * to work around bugs in some JS interpreters.
21961 */
21962function safe_add(x, y)
21963{
21964 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
21965 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
21966 return (msw << 16) | (lsw & 0xFFFF);
21967}
21968
21969/*
21970 * Bitwise rotate a 32-bit number to the left.
21971 */
21972function bit_rol(num, cnt)
21973{
21974 return (num << cnt) | (num >>> (32 - cnt));
21975}
21976
21977module.exports = function md5(buf) {
21978 return helpers.hash(buf, core_md5, 16);
21979};
21980
21981},{"./helpers":18}],21:[function(_dereq_,module,exports){
21982(function (Buffer){
21983
21984module.exports = ripemd160
21985
21986
21987
21988/*
21989CryptoJS v3.1.2
21990code.google.com/p/crypto-js
21991(c) 2009-2013 by Jeff Mott. All rights reserved.
21992code.google.com/p/crypto-js/wiki/License
21993*/
21994/** @preserve
21995(c) 2012 by Cédric Mesnil. All rights reserved.
21996
21997Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
21998
21999 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
22000 - 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.
22001
22002THIS 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.
22003*/
22004
22005// Constants table
22006var zl = [
22007 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
22008 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
22009 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
22010 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
22011 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];
22012var zr = [
22013 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
22014 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
22015 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
22016 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
22017 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];
22018var sl = [
22019 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
22020 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
22021 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
22022 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
22023 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ];
22024var sr = [
22025 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
22026 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
22027 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
22028 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
22029 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ];
22030
22031var hl = [ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E];
22032var hr = [ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000];
22033
22034var bytesToWords = function (bytes) {
22035 var words = [];
22036 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
22037 words[b >>> 5] |= bytes[i] << (24 - b % 32);
22038 }
22039 return words;
22040};
22041
22042var wordsToBytes = function (words) {
22043 var bytes = [];
22044 for (var b = 0; b < words.length * 32; b += 8) {
22045 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);
22046 }
22047 return bytes;
22048};
22049
22050var processBlock = function (H, M, offset) {
22051
22052 // Swap endian
22053 for (var i = 0; i < 16; i++) {
22054 var offset_i = offset + i;
22055 var M_offset_i = M[offset_i];
22056
22057 // Swap
22058 M[offset_i] = (
22059 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
22060 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
22061 );
22062 }
22063
22064 // Working variables
22065 var al, bl, cl, dl, el;
22066 var ar, br, cr, dr, er;
22067
22068 ar = al = H[0];
22069 br = bl = H[1];
22070 cr = cl = H[2];
22071 dr = dl = H[3];
22072 er = el = H[4];
22073 // Computation
22074 var t;
22075 for (var i = 0; i < 80; i += 1) {
22076 t = (al + M[offset+zl[i]])|0;
22077 if (i<16){
22078 t += f1(bl,cl,dl) + hl[0];
22079 } else if (i<32) {
22080 t += f2(bl,cl,dl) + hl[1];
22081 } else if (i<48) {
22082 t += f3(bl,cl,dl) + hl[2];
22083 } else if (i<64) {
22084 t += f4(bl,cl,dl) + hl[3];
22085 } else {// if (i<80) {
22086 t += f5(bl,cl,dl) + hl[4];
22087 }
22088 t = t|0;
22089 t = rotl(t,sl[i]);
22090 t = (t+el)|0;
22091 al = el;
22092 el = dl;
22093 dl = rotl(cl, 10);
22094 cl = bl;
22095 bl = t;
22096
22097 t = (ar + M[offset+zr[i]])|0;
22098 if (i<16){
22099 t += f5(br,cr,dr) + hr[0];
22100 } else if (i<32) {
22101 t += f4(br,cr,dr) + hr[1];
22102 } else if (i<48) {
22103 t += f3(br,cr,dr) + hr[2];
22104 } else if (i<64) {
22105 t += f2(br,cr,dr) + hr[3];
22106 } else {// if (i<80) {
22107 t += f1(br,cr,dr) + hr[4];
22108 }
22109 t = t|0;
22110 t = rotl(t,sr[i]) ;
22111 t = (t+er)|0;
22112 ar = er;
22113 er = dr;
22114 dr = rotl(cr, 10);
22115 cr = br;
22116 br = t;
22117 }
22118 // Intermediate hash value
22119 t = (H[1] + cl + dr)|0;
22120 H[1] = (H[2] + dl + er)|0;
22121 H[2] = (H[3] + el + ar)|0;
22122 H[3] = (H[4] + al + br)|0;
22123 H[4] = (H[0] + bl + cr)|0;
22124 H[0] = t;
22125};
22126
22127function f1(x, y, z) {
22128 return ((x) ^ (y) ^ (z));
22129}
22130
22131function f2(x, y, z) {
22132 return (((x)&(y)) | ((~x)&(z)));
22133}
22134
22135function f3(x, y, z) {
22136 return (((x) | (~(y))) ^ (z));
22137}
22138
22139function f4(x, y, z) {
22140 return (((x) & (z)) | ((y)&(~(z))));
22141}
22142
22143function f5(x, y, z) {
22144 return ((x) ^ ((y) |(~(z))));
22145}
22146
22147function rotl(x,n) {
22148 return (x<<n) | (x>>>(32-n));
22149}
22150
22151function ripemd160(message) {
22152 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];
22153
22154 if (typeof message == 'string')
22155 message = new Buffer(message, 'utf8');
22156
22157 var m = bytesToWords(message);
22158
22159 var nBitsLeft = message.length * 8;
22160 var nBitsTotal = message.length * 8;
22161
22162 // Add padding
22163 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
22164 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
22165 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
22166 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
22167 );
22168
22169 for (var i=0 ; i<m.length; i += 16) {
22170 processBlock(H, m, i);
22171 }
22172
22173 // Swap endian
22174 for (var i = 0; i < 5; i++) {
22175 // Shortcut
22176 var H_i = H[i];
22177
22178 // Swap
22179 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
22180 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
22181 }
22182
22183 var digestbytes = wordsToBytes(H);
22184 return new Buffer(digestbytes);
22185}
22186
22187
22188
22189}).call(this,_dereq_("buffer").Buffer)
22190},{"buffer":8}],22:[function(_dereq_,module,exports){
22191var u = _dereq_('./util')
22192var write = u.write
22193var fill = u.zeroFill
22194
22195module.exports = function (Buffer) {
22196
22197 //prototype class for hash functions
22198 function Hash (blockSize, finalSize) {
22199 this._block = new Buffer(blockSize) //new Uint32Array(blockSize/4)
22200 this._finalSize = finalSize
22201 this._blockSize = blockSize
22202 this._len = 0
22203 this._s = 0
22204 }
22205
22206 Hash.prototype.init = function () {
22207 this._s = 0
22208 this._len = 0
22209 }
22210
22211 function lengthOf(data, enc) {
22212 if(enc == null) return data.byteLength || data.length
22213 if(enc == 'ascii' || enc == 'binary') return data.length
22214 if(enc == 'hex') return data.length/2
22215 if(enc == 'base64') return data.length/3
22216 }
22217
22218 Hash.prototype.update = function (data, enc) {
22219 var bl = this._blockSize
22220
22221 //I'd rather do this with a streaming encoder, like the opposite of
22222 //http://nodejs.org/api/string_decoder.html
22223 var length
22224 if(!enc && 'string' === typeof data)
22225 enc = 'utf8'
22226
22227 if(enc) {
22228 if(enc === 'utf-8')
22229 enc = 'utf8'
22230
22231 if(enc === 'base64' || enc === 'utf8')
22232 data = new Buffer(data, enc), enc = null
22233
22234 length = lengthOf(data, enc)
22235 } else
22236 length = data.byteLength || data.length
22237
22238 var l = this._len += length
22239 var s = this._s = (this._s || 0)
22240 var f = 0
22241 var buffer = this._block
22242 while(s < l) {
22243 var t = Math.min(length, f + bl)
22244 write(buffer, data, enc, s%bl, f, t)
22245 var ch = (t - f);
22246 s += ch; f += ch
22247
22248 if(!(s%bl))
22249 this._update(buffer)
22250 }
22251 this._s = s
22252
22253 return this
22254
22255 }
22256
22257 Hash.prototype.digest = function (enc) {
22258 var bl = this._blockSize
22259 var fl = this._finalSize
22260 var len = this._len*8
22261
22262 var x = this._block
22263
22264 var bits = len % (bl*8)
22265
22266 //add end marker, so that appending 0's creats a different hash.
22267 x[this._len % bl] = 0x80
22268 fill(this._block, this._len % bl + 1)
22269
22270 if(bits >= fl*8) {
22271 this._update(this._block)
22272 u.zeroFill(this._block, 0)
22273 }
22274
22275 //TODO: handle case where the bit length is > Math.pow(2, 29)
22276 x.writeInt32BE(len, fl + 4) //big endian
22277
22278 var hash = this._update(this._block) || this._hash()
22279 if(enc == null) return hash
22280 return hash.toString(enc)
22281 }
22282
22283 Hash.prototype._update = function () {
22284 throw new Error('_update must be implemented by subclass')
22285 }
22286
22287 return Hash
22288}
22289
22290},{"./util":26}],23:[function(_dereq_,module,exports){
22291var exports = module.exports = function (alg) {
22292 var Alg = exports[alg]
22293 if(!Alg) throw new Error(alg + ' is not supported (we accept pull requests)')
22294 return new Alg()
22295}
22296
22297var Buffer = _dereq_('buffer').Buffer
22298var Hash = _dereq_('./hash')(Buffer)
22299
22300exports.sha =
22301exports.sha1 = _dereq_('./sha1')(Buffer, Hash)
22302exports.sha256 = _dereq_('./sha256')(Buffer, Hash)
22303
22304},{"./hash":22,"./sha1":24,"./sha256":25,"buffer":8}],24:[function(_dereq_,module,exports){
22305/*
22306 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
22307 * in FIPS PUB 180-1
22308 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
22309 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
22310 * Distributed under the BSD License
22311 * See http://pajhome.org.uk/crypt/md5 for details.
22312 */
22313module.exports = function (Buffer, Hash) {
22314
22315 var inherits = _dereq_('util').inherits
22316
22317 inherits(Sha1, Hash)
22318
22319 var A = 0|0
22320 var B = 4|0
22321 var C = 8|0
22322 var D = 12|0
22323 var E = 16|0
22324
22325 var BE = false
22326 var LE = true
22327
22328 var W = new Int32Array(80)
22329
22330 var POOL = []
22331
22332 function Sha1 () {
22333 if(POOL.length)
22334 return POOL.pop().init()
22335
22336 if(!(this instanceof Sha1)) return new Sha1()
22337 this._w = W
22338 Hash.call(this, 16*4, 14*4)
22339
22340 this._h = null
22341 this.init()
22342 }
22343
22344 Sha1.prototype.init = function () {
22345 this._a = 0x67452301
22346 this._b = 0xefcdab89
22347 this._c = 0x98badcfe
22348 this._d = 0x10325476
22349 this._e = 0xc3d2e1f0
22350
22351 Hash.prototype.init.call(this)
22352 return this
22353 }
22354
22355 Sha1.prototype._POOL = POOL
22356
22357 // assume that array is a Uint32Array with length=16,
22358 // and that if it is the last block, it already has the length and the 1 bit appended.
22359
22360
22361 var isDV = new Buffer(1) instanceof DataView
22362 function readInt32BE (X, i) {
22363 return isDV
22364 ? X.getInt32(i, false)
22365 : X.readInt32BE(i)
22366 }
22367
22368 Sha1.prototype._update = function (array) {
22369
22370 var X = this._block
22371 var h = this._h
22372 var a, b, c, d, e, _a, _b, _c, _d, _e
22373
22374 a = _a = this._a
22375 b = _b = this._b
22376 c = _c = this._c
22377 d = _d = this._d
22378 e = _e = this._e
22379
22380 var w = this._w
22381
22382 for(var j = 0; j < 80; j++) {
22383 var W = w[j]
22384 = j < 16
22385 //? X.getInt32(j*4, false)
22386 //? readInt32BE(X, j*4) //*/ X.readInt32BE(j*4) //*/
22387 ? X.readInt32BE(j*4)
22388 : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1)
22389
22390 var t =
22391 add(
22392 add(rol(a, 5), sha1_ft(j, b, c, d)),
22393 add(add(e, W), sha1_kt(j))
22394 );
22395
22396 e = d
22397 d = c
22398 c = rol(b, 30)
22399 b = a
22400 a = t
22401 }
22402
22403 this._a = add(a, _a)
22404 this._b = add(b, _b)
22405 this._c = add(c, _c)
22406 this._d = add(d, _d)
22407 this._e = add(e, _e)
22408 }
22409
22410 Sha1.prototype._hash = function () {
22411 if(POOL.length < 100) POOL.push(this)
22412 var H = new Buffer(20)
22413 //console.log(this._a|0, this._b|0, this._c|0, this._d|0, this._e|0)
22414 H.writeInt32BE(this._a|0, A)
22415 H.writeInt32BE(this._b|0, B)
22416 H.writeInt32BE(this._c|0, C)
22417 H.writeInt32BE(this._d|0, D)
22418 H.writeInt32BE(this._e|0, E)
22419 return H
22420 }
22421
22422 /*
22423 * Perform the appropriate triplet combination function for the current
22424 * iteration
22425 */
22426 function sha1_ft(t, b, c, d) {
22427 if(t < 20) return (b & c) | ((~b) & d);
22428 if(t < 40) return b ^ c ^ d;
22429 if(t < 60) return (b & c) | (b & d) | (c & d);
22430 return b ^ c ^ d;
22431 }
22432
22433 /*
22434 * Determine the appropriate additive constant for the current iteration
22435 */
22436 function sha1_kt(t) {
22437 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
22438 (t < 60) ? -1894007588 : -899497514;
22439 }
22440
22441 /*
22442 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
22443 * to work around bugs in some JS interpreters.
22444 * //dominictarr: this is 10 years old, so maybe this can be dropped?)
22445 *
22446 */
22447 function add(x, y) {
22448 return (x + y ) | 0
22449 //lets see how this goes on testling.
22450 // var lsw = (x & 0xFFFF) + (y & 0xFFFF);
22451 // var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
22452 // return (msw << 16) | (lsw & 0xFFFF);
22453 }
22454
22455 /*
22456 * Bitwise rotate a 32-bit number to the left.
22457 */
22458 function rol(num, cnt) {
22459 return (num << cnt) | (num >>> (32 - cnt));
22460 }
22461
22462 return Sha1
22463}
22464
22465},{"util":14}],25:[function(_dereq_,module,exports){
22466
22467/**
22468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
22469 * in FIPS 180-2
22470 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
22471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
22472 *
22473 */
22474
22475var inherits = _dereq_('util').inherits
22476var BE = false
22477var LE = true
22478var u = _dereq_('./util')
22479
22480module.exports = function (Buffer, Hash) {
22481
22482 var K = [
22483 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
22484 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
22485 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
22486 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
22487 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
22488 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
22489 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
22490 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
22491 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
22492 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
22493 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
22494 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
22495 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
22496 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
22497 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
22498 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
22499 ]
22500
22501 inherits(Sha256, Hash)
22502 var W = new Array(64)
22503 var POOL = []
22504 function Sha256() {
22505 // Closure compiler warning - this code lacks side effects - thus commented out
22506 // if(POOL.length) {
22507 // return POOL.shift().init()
22508 // }
22509 //this._data = new Buffer(32)
22510
22511 this.init()
22512
22513 this._w = W //new Array(64)
22514
22515 Hash.call(this, 16*4, 14*4)
22516 };
22517
22518 Sha256.prototype.init = function () {
22519
22520 this._a = 0x6a09e667|0
22521 this._b = 0xbb67ae85|0
22522 this._c = 0x3c6ef372|0
22523 this._d = 0xa54ff53a|0
22524 this._e = 0x510e527f|0
22525 this._f = 0x9b05688c|0
22526 this._g = 0x1f83d9ab|0
22527 this._h = 0x5be0cd19|0
22528
22529 this._len = this._s = 0
22530
22531 return this
22532 }
22533
22534 var safe_add = function(x, y) {
22535 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
22536 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
22537 return (msw << 16) | (lsw & 0xFFFF);
22538 }
22539
22540 function S (X, n) {
22541 return (X >>> n) | (X << (32 - n));
22542 }
22543
22544 function R (X, n) {
22545 return (X >>> n);
22546 }
22547
22548 function Ch (x, y, z) {
22549 return ((x & y) ^ ((~x) & z));
22550 }
22551
22552 function Maj (x, y, z) {
22553 return ((x & y) ^ (x & z) ^ (y & z));
22554 }
22555
22556 function Sigma0256 (x) {
22557 return (S(x, 2) ^ S(x, 13) ^ S(x, 22));
22558 }
22559
22560 function Sigma1256 (x) {
22561 return (S(x, 6) ^ S(x, 11) ^ S(x, 25));
22562 }
22563
22564 function Gamma0256 (x) {
22565 return (S(x, 7) ^ S(x, 18) ^ R(x, 3));
22566 }
22567
22568 function Gamma1256 (x) {
22569 return (S(x, 17) ^ S(x, 19) ^ R(x, 10));
22570 }
22571
22572 Sha256.prototype._update = function(m) {
22573 var M = this._block
22574 var W = this._w
22575 var a, b, c, d, e, f, g, h
22576 var T1, T2
22577
22578 a = this._a | 0
22579 b = this._b | 0
22580 c = this._c | 0
22581 d = this._d | 0
22582 e = this._e | 0
22583 f = this._f | 0
22584 g = this._g | 0
22585 h = this._h | 0
22586
22587 for (var j = 0; j < 64; j++) {
22588 var w = W[j] = j < 16
22589 ? M.readInt32BE(j * 4)
22590 : Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16]
22591
22592 T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
22593
22594 T2 = Sigma0256(a) + Maj(a, b, c);
22595 h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2;
22596 }
22597
22598 this._a = (a + this._a) | 0
22599 this._b = (b + this._b) | 0
22600 this._c = (c + this._c) | 0
22601 this._d = (d + this._d) | 0
22602 this._e = (e + this._e) | 0
22603 this._f = (f + this._f) | 0
22604 this._g = (g + this._g) | 0
22605 this._h = (h + this._h) | 0
22606
22607 };
22608
22609 Sha256.prototype._hash = function () {
22610 if(POOL.length < 10)
22611 POOL.push(this)
22612
22613 var H = new Buffer(32)
22614
22615 H.writeInt32BE(this._a, 0)
22616 H.writeInt32BE(this._b, 4)
22617 H.writeInt32BE(this._c, 8)
22618 H.writeInt32BE(this._d, 12)
22619 H.writeInt32BE(this._e, 16)
22620 H.writeInt32BE(this._f, 20)
22621 H.writeInt32BE(this._g, 24)
22622 H.writeInt32BE(this._h, 28)
22623
22624 return H
22625 }
22626
22627 return Sha256
22628
22629}
22630
22631},{"./util":26,"util":14}],26:[function(_dereq_,module,exports){
22632exports.write = write
22633exports.zeroFill = zeroFill
22634
22635exports.toString = toString
22636
22637function write (buffer, string, enc, start, from, to, LE) {
22638 var l = (to - from)
22639 if(enc === 'ascii' || enc === 'binary') {
22640 for( var i = 0; i < l; i++) {
22641 buffer[start + i] = string.charCodeAt(i + from)
22642 }
22643 }
22644 else if(enc == null) {
22645 for( var i = 0; i < l; i++) {
22646 buffer[start + i] = string[i + from]
22647 }
22648 }
22649 else if(enc === 'hex') {
22650 for(var i = 0; i < l; i++) {
22651 var j = from + i
22652 buffer[start + i] = parseInt(string[j*2] + string[(j*2)+1], 16)
22653 }
22654 }
22655 else if(enc === 'base64') {
22656 throw new Error('base64 encoding not yet supported')
22657 }
22658 else
22659 throw new Error(enc +' encoding not yet supported')
22660}
22661
22662//always fill to the end!
22663function zeroFill(buf, from) {
22664 for(var i = from; i < buf.length; i++)
22665 buf[i] = 0
22666}
22667
22668
22669},{}],27:[function(_dereq_,module,exports){
22670(function (Buffer){
22671// JavaScript PBKDF2 Implementation
22672// Based on http://git.io/qsv2zw
22673// Licensed under LGPL v3
22674// Copyright (c) 2013 jduncanator
22675
22676var blocksize = 64
22677var zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(0)
22678
22679module.exports = function (createHmac, exports) {
22680 exports = exports || {}
22681
22682 exports.pbkdf2 = function(password, salt, iterations, keylen, cb) {
22683 if('function' !== typeof cb)
22684 throw new Error('No callback provided to pbkdf2');
22685 setTimeout(function () {
22686 cb(null, exports.pbkdf2Sync(password, salt, iterations, keylen))
22687 })
22688 }
22689
22690 exports.pbkdf2Sync = function(key, salt, iterations, keylen) {
22691 if('number' !== typeof iterations)
22692 throw new TypeError('Iterations not a number')
22693 if(iterations < 0)
22694 throw new TypeError('Bad iterations')
22695 if('number' !== typeof keylen)
22696 throw new TypeError('Key length not a number')
22697 if(keylen < 0)
22698 throw new TypeError('Bad key length')
22699
22700 //stretch key to the correct length that hmac wants it,
22701 //otherwise this will happen every time hmac is called
22702 //twice per iteration.
22703 var key = !Buffer.isBuffer(key) ? new Buffer(key) : key
22704
22705 if(key.length > blocksize) {
22706 key = createHash(alg).update(key).digest()
22707 } else if(key.length < blocksize) {
22708 key = Buffer.concat([key, zeroBuffer], blocksize)
22709 }
22710
22711 var HMAC;
22712 var cplen, p = 0, i = 1, itmp = new Buffer(4), digtmp;
22713 var out = new Buffer(keylen);
22714 out.fill(0);
22715 while(keylen) {
22716 if(keylen > 20)
22717 cplen = 20;
22718 else
22719 cplen = keylen;
22720
22721 /* We are unlikely to ever use more than 256 blocks (5120 bits!)
22722 * but just in case...
22723 */
22724 itmp[0] = (i >> 24) & 0xff;
22725 itmp[1] = (i >> 16) & 0xff;
22726 itmp[2] = (i >> 8) & 0xff;
22727 itmp[3] = i & 0xff;
22728
22729 HMAC = createHmac('sha1', key);
22730 HMAC.update(salt)
22731 HMAC.update(itmp);
22732 digtmp = HMAC.digest();
22733 digtmp.copy(out, p, 0, cplen);
22734
22735 for(var j = 1; j < iterations; j++) {
22736 HMAC = createHmac('sha1', key);
22737 HMAC.update(digtmp);
22738 digtmp = HMAC.digest();
22739 for(var k = 0; k < cplen; k++) {
22740 out[k] ^= digtmp[k];
22741 }
22742 }
22743 keylen -= cplen;
22744 i++;
22745 p += cplen;
22746 }
22747
22748 return out;
22749 }
22750
22751 return exports
22752}
22753
22754}).call(this,_dereq_("buffer").Buffer)
22755},{"buffer":8}],28:[function(_dereq_,module,exports){
22756(function (Buffer){
22757// Original code adapted from Robert Kieffer.
22758// details at https://github.com/broofa/node-uuid
22759
22760
22761(function() {
22762 var _global = this;
22763
22764 var mathRNG, whatwgRNG;
22765
22766 // NOTE: Math.random() does not guarantee "cryptographic quality"
22767 mathRNG = function(size) {
22768 var bytes = new Buffer(size);
22769 var r;
22770
22771 for (var i = 0, r; i < size; i++) {
22772 if ((i & 0x03) == 0) r = Math.random() * 0x100000000;
22773 bytes[i] = r >>> ((i & 0x03) << 3) & 0xff;
22774 }
22775
22776 return bytes;
22777 }
22778
22779 if (_global.crypto && crypto.getRandomValues) {
22780 whatwgRNG = function(size) {
22781 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
22782 crypto.getRandomValues(bytes);
22783 return bytes;
22784 }
22785 }
22786
22787 module.exports = whatwgRNG || mathRNG;
22788
22789}())
22790
22791}).call(this,_dereq_("buffer").Buffer)
22792},{"buffer":8}],29:[function(_dereq_,module,exports){
22793;(function (root, factory, undef) {
22794 if (typeof exports === "object") {
22795 // CommonJS
22796 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
22797 }
22798 else if (typeof define === "function" && define.amd) {
22799 // AMD
22800 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
22801 }
22802 else {
22803 // Global (browser)
22804 factory(root.CryptoJS);
22805 }
22806}(this, function (CryptoJS) {
22807
22808 (function () {
22809 // Shortcuts
22810 var C = CryptoJS;
22811 var C_lib = C.lib;
22812 var BlockCipher = C_lib.BlockCipher;
22813 var C_algo = C.algo;
22814
22815 // Lookup tables
22816 var SBOX = [];
22817 var INV_SBOX = [];
22818 var SUB_MIX_0 = [];
22819 var SUB_MIX_1 = [];
22820 var SUB_MIX_2 = [];
22821 var SUB_MIX_3 = [];
22822 var INV_SUB_MIX_0 = [];
22823 var INV_SUB_MIX_1 = [];
22824 var INV_SUB_MIX_2 = [];
22825 var INV_SUB_MIX_3 = [];
22826
22827 // Compute lookup tables
22828 (function () {
22829 // Compute double table
22830 var d = [];
22831 for (var i = 0; i < 256; i++) {
22832 if (i < 128) {
22833 d[i] = i << 1;
22834 } else {
22835 d[i] = (i << 1) ^ 0x11b;
22836 }
22837 }
22838
22839 // Walk GF(2^8)
22840 var x = 0;
22841 var xi = 0;
22842 for (var i = 0; i < 256; i++) {
22843 // Compute sbox
22844 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
22845 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
22846 SBOX[x] = sx;
22847 INV_SBOX[sx] = x;
22848
22849 // Compute multiplication
22850 var x2 = d[x];
22851 var x4 = d[x2];
22852 var x8 = d[x4];
22853
22854 // Compute sub bytes, mix columns tables
22855 var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
22856 SUB_MIX_0[x] = (t << 24) | (t >>> 8);
22857 SUB_MIX_1[x] = (t << 16) | (t >>> 16);
22858 SUB_MIX_2[x] = (t << 8) | (t >>> 24);
22859 SUB_MIX_3[x] = t;
22860
22861 // Compute inv sub bytes, inv mix columns tables
22862 var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
22863 INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
22864 INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
22865 INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
22866 INV_SUB_MIX_3[sx] = t;
22867
22868 // Compute next counter
22869 if (!x) {
22870 x = xi = 1;
22871 } else {
22872 x = x2 ^ d[d[d[x8 ^ x2]]];
22873 xi ^= d[d[xi]];
22874 }
22875 }
22876 }());
22877
22878 // Precomputed Rcon lookup
22879 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
22880
22881 /**
22882 * AES block cipher algorithm.
22883 */
22884 var AES = C_algo.AES = BlockCipher.extend({
22885 _doReset: function () {
22886 // Shortcuts
22887 var key = this._key;
22888 var keyWords = key.words;
22889 var keySize = key.sigBytes / 4;
22890
22891 // Compute number of rounds
22892 var nRounds = this._nRounds = keySize + 6
22893
22894 // Compute number of key schedule rows
22895 var ksRows = (nRounds + 1) * 4;
22896
22897 // Compute key schedule
22898 var keySchedule = this._keySchedule = [];
22899 for (var ksRow = 0; ksRow < ksRows; ksRow++) {
22900 if (ksRow < keySize) {
22901 keySchedule[ksRow] = keyWords[ksRow];
22902 } else {
22903 var t = keySchedule[ksRow - 1];
22904
22905 if (!(ksRow % keySize)) {
22906 // Rot word
22907 t = (t << 8) | (t >>> 24);
22908
22909 // Sub word
22910 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
22911
22912 // Mix Rcon
22913 t ^= RCON[(ksRow / keySize) | 0] << 24;
22914 } else if (keySize > 6 && ksRow % keySize == 4) {
22915 // Sub word
22916 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
22917 }
22918
22919 keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
22920 }
22921 }
22922
22923 // Compute inv key schedule
22924 var invKeySchedule = this._invKeySchedule = [];
22925 for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
22926 var ksRow = ksRows - invKsRow;
22927
22928 if (invKsRow % 4) {
22929 var t = keySchedule[ksRow];
22930 } else {
22931 var t = keySchedule[ksRow - 4];
22932 }
22933
22934 if (invKsRow < 4 || ksRow <= 4) {
22935 invKeySchedule[invKsRow] = t;
22936 } else {
22937 invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
22938 INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
22939 }
22940 }
22941 },
22942
22943 encryptBlock: function (M, offset) {
22944 this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
22945 },
22946
22947 decryptBlock: function (M, offset) {
22948 // Swap 2nd and 4th rows
22949 var t = M[offset + 1];
22950 M[offset + 1] = M[offset + 3];
22951 M[offset + 3] = t;
22952
22953 this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
22954
22955 // Inv swap 2nd and 4th rows
22956 var t = M[offset + 1];
22957 M[offset + 1] = M[offset + 3];
22958 M[offset + 3] = t;
22959 },
22960
22961 _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
22962 // Shortcut
22963 var nRounds = this._nRounds;
22964
22965 // Get input, add round key
22966 var s0 = M[offset] ^ keySchedule[0];
22967 var s1 = M[offset + 1] ^ keySchedule[1];
22968 var s2 = M[offset + 2] ^ keySchedule[2];
22969 var s3 = M[offset + 3] ^ keySchedule[3];
22970
22971 // Key schedule row counter
22972 var ksRow = 4;
22973
22974 // Rounds
22975 for (var round = 1; round < nRounds; round++) {
22976 // Shift rows, sub bytes, mix columns, add round key
22977 var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
22978 var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
22979 var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
22980 var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
22981
22982 // Update state
22983 s0 = t0;
22984 s1 = t1;
22985 s2 = t2;
22986 s3 = t3;
22987 }
22988
22989 // Shift rows, sub bytes, add round key
22990 var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
22991 var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
22992 var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
22993 var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
22994
22995 // Set output
22996 M[offset] = t0;
22997 M[offset + 1] = t1;
22998 M[offset + 2] = t2;
22999 M[offset + 3] = t3;
23000 },
23001
23002 keySize: 256/32
23003 });
23004
23005 /**
23006 * Shortcut functions to the cipher's object interface.
23007 *
23008 * @example
23009 *
23010 * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
23011 * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
23012 */
23013 C.AES = BlockCipher._createHelper(AES);
23014 }());
23015
23016
23017 return CryptoJS.AES;
23018
23019}));
23020},{"./cipher-core":30,"./core":31,"./enc-base64":32,"./evpkdf":34,"./md5":39}],30:[function(_dereq_,module,exports){
23021;(function (root, factory) {
23022 if (typeof exports === "object") {
23023 // CommonJS
23024 module.exports = exports = factory(_dereq_("./core"));
23025 }
23026 else if (typeof define === "function" && define.amd) {
23027 // AMD
23028 define(["./core"], factory);
23029 }
23030 else {
23031 // Global (browser)
23032 factory(root.CryptoJS);
23033 }
23034}(this, function (CryptoJS) {
23035
23036 /**
23037 * Cipher core components.
23038 */
23039 CryptoJS.lib.Cipher || (function (undefined) {
23040 // Shortcuts
23041 var C = CryptoJS;
23042 var C_lib = C.lib;
23043 var Base = C_lib.Base;
23044 var WordArray = C_lib.WordArray;
23045 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
23046 var C_enc = C.enc;
23047 var Utf8 = C_enc.Utf8;
23048 var Base64 = C_enc.Base64;
23049 var C_algo = C.algo;
23050 var EvpKDF = C_algo.EvpKDF;
23051
23052 /**
23053 * Abstract base cipher template.
23054 *
23055 * @property {number} keySize This cipher's key size. Default: 4 (128 bits)
23056 * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)
23057 * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
23058 * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
23059 */
23060 var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
23061 /**
23062 * Configuration options.
23063 *
23064 * @property {WordArray} iv The IV to use for this operation.
23065 */
23066 cfg: Base.extend(),
23067
23068 /**
23069 * Creates this cipher in encryption mode.
23070 *
23071 * @param {WordArray} key The key.
23072 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23073 *
23074 * @return {Cipher} A cipher instance.
23075 *
23076 * @static
23077 *
23078 * @example
23079 *
23080 * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
23081 */
23082 createEncryptor: function (key, cfg) {
23083 return this.create(this._ENC_XFORM_MODE, key, cfg);
23084 },
23085
23086 /**
23087 * Creates this cipher in decryption mode.
23088 *
23089 * @param {WordArray} key The key.
23090 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23091 *
23092 * @return {Cipher} A cipher instance.
23093 *
23094 * @static
23095 *
23096 * @example
23097 *
23098 * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
23099 */
23100 createDecryptor: function (key, cfg) {
23101 return this.create(this._DEC_XFORM_MODE, key, cfg);
23102 },
23103
23104 /**
23105 * Initializes a newly created cipher.
23106 *
23107 * @param {number} xformMode Either the encryption or decryption transormation mode constant.
23108 * @param {WordArray} key The key.
23109 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23110 *
23111 * @example
23112 *
23113 * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
23114 */
23115 init: function (xformMode, key, cfg) {
23116 // Apply config defaults
23117 this.cfg = this.cfg.extend(cfg);
23118
23119 // Store transform mode and key
23120 this._xformMode = xformMode;
23121 this._key = key;
23122
23123 // Set initial values
23124 this.reset();
23125 },
23126
23127 /**
23128 * Resets this cipher to its initial state.
23129 *
23130 * @example
23131 *
23132 * cipher.reset();
23133 */
23134 reset: function () {
23135 // Reset data buffer
23136 BufferedBlockAlgorithm.reset.call(this);
23137
23138 // Perform concrete-cipher logic
23139 this._doReset();
23140 },
23141
23142 /**
23143 * Adds data to be encrypted or decrypted.
23144 *
23145 * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
23146 *
23147 * @return {WordArray} The data after processing.
23148 *
23149 * @example
23150 *
23151 * var encrypted = cipher.process('data');
23152 * var encrypted = cipher.process(wordArray);
23153 */
23154 process: function (dataUpdate) {
23155 // Append
23156 this._append(dataUpdate);
23157
23158 // Process available blocks
23159 return this._process();
23160 },
23161
23162 /**
23163 * Finalizes the encryption or decryption process.
23164 * Note that the finalize operation is effectively a destructive, read-once operation.
23165 *
23166 * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
23167 *
23168 * @return {WordArray} The data after final processing.
23169 *
23170 * @example
23171 *
23172 * var encrypted = cipher.finalize();
23173 * var encrypted = cipher.finalize('data');
23174 * var encrypted = cipher.finalize(wordArray);
23175 */
23176 finalize: function (dataUpdate) {
23177 // Final data update
23178 if (dataUpdate) {
23179 this._append(dataUpdate);
23180 }
23181
23182 // Perform concrete-cipher logic
23183 var finalProcessedData = this._doFinalize();
23184
23185 return finalProcessedData;
23186 },
23187
23188 keySize: 128/32,
23189
23190 ivSize: 128/32,
23191
23192 _ENC_XFORM_MODE: 1,
23193
23194 _DEC_XFORM_MODE: 2,
23195
23196 /**
23197 * Creates shortcut functions to a cipher's object interface.
23198 *
23199 * @param {Cipher} cipher The cipher to create a helper for.
23200 *
23201 * @return {Object} An object with encrypt and decrypt shortcut functions.
23202 *
23203 * @static
23204 *
23205 * @example
23206 *
23207 * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
23208 */
23209 _createHelper: (function () {
23210 function selectCipherStrategy(key) {
23211 if (typeof key == 'string') {
23212 return PasswordBasedCipher;
23213 } else {
23214 return SerializableCipher;
23215 }
23216 }
23217
23218 return function (cipher) {
23219 return {
23220 encrypt: function (message, key, cfg) {
23221 return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
23222 },
23223
23224 decrypt: function (ciphertext, key, cfg) {
23225 return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
23226 }
23227 };
23228 };
23229 }())
23230 });
23231
23232 /**
23233 * Abstract base stream cipher template.
23234 *
23235 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)
23236 */
23237 var StreamCipher = C_lib.StreamCipher = Cipher.extend({
23238 _doFinalize: function () {
23239 // Process partial blocks
23240 var finalProcessedBlocks = this._process(!!'flush');
23241
23242 return finalProcessedBlocks;
23243 },
23244
23245 blockSize: 1
23246 });
23247
23248 /**
23249 * Mode namespace.
23250 */
23251 var C_mode = C.mode = {};
23252
23253 /**
23254 * Abstract base block cipher mode template.
23255 */
23256 var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
23257 /**
23258 * Creates this mode for encryption.
23259 *
23260 * @param {Cipher} cipher A block cipher instance.
23261 * @param {Array} iv The IV words.
23262 *
23263 * @static
23264 *
23265 * @example
23266 *
23267 * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
23268 */
23269 createEncryptor: function (cipher, iv) {
23270 return this.Encryptor.create(cipher, iv);
23271 },
23272
23273 /**
23274 * Creates this mode for decryption.
23275 *
23276 * @param {Cipher} cipher A block cipher instance.
23277 * @param {Array} iv The IV words.
23278 *
23279 * @static
23280 *
23281 * @example
23282 *
23283 * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
23284 */
23285 createDecryptor: function (cipher, iv) {
23286 return this.Decryptor.create(cipher, iv);
23287 },
23288
23289 /**
23290 * Initializes a newly created mode.
23291 *
23292 * @param {Cipher} cipher A block cipher instance.
23293 * @param {Array} iv The IV words.
23294 *
23295 * @example
23296 *
23297 * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
23298 */
23299 init: function (cipher, iv) {
23300 this._cipher = cipher;
23301 this._iv = iv;
23302 }
23303 });
23304
23305 /**
23306 * Cipher Block Chaining mode.
23307 */
23308 var CBC = C_mode.CBC = (function () {
23309 /**
23310 * Abstract base CBC mode.
23311 */
23312 var CBC = BlockCipherMode.extend();
23313
23314 /**
23315 * CBC encryptor.
23316 */
23317 CBC.Encryptor = CBC.extend({
23318 /**
23319 * Processes the data block at offset.
23320 *
23321 * @param {Array} words The data words to operate on.
23322 * @param {number} offset The offset where the block starts.
23323 *
23324 * @example
23325 *
23326 * mode.processBlock(data.words, offset);
23327 */
23328 processBlock: function (words, offset) {
23329 // Shortcuts
23330 var cipher = this._cipher;
23331 var blockSize = cipher.blockSize;
23332
23333 // XOR and encrypt
23334 xorBlock.call(this, words, offset, blockSize);
23335 cipher.encryptBlock(words, offset);
23336
23337 // Remember this block to use with next block
23338 this._prevBlock = words.slice(offset, offset + blockSize);
23339 }
23340 });
23341
23342 /**
23343 * CBC decryptor.
23344 */
23345 CBC.Decryptor = CBC.extend({
23346 /**
23347 * Processes the data block at offset.
23348 *
23349 * @param {Array} words The data words to operate on.
23350 * @param {number} offset The offset where the block starts.
23351 *
23352 * @example
23353 *
23354 * mode.processBlock(data.words, offset);
23355 */
23356 processBlock: function (words, offset) {
23357 // Shortcuts
23358 var cipher = this._cipher;
23359 var blockSize = cipher.blockSize;
23360
23361 // Remember this block to use with next block
23362 var thisBlock = words.slice(offset, offset + blockSize);
23363
23364 // Decrypt and XOR
23365 cipher.decryptBlock(words, offset);
23366 xorBlock.call(this, words, offset, blockSize);
23367
23368 // This block becomes the previous block
23369 this._prevBlock = thisBlock;
23370 }
23371 });
23372
23373 function xorBlock(words, offset, blockSize) {
23374 // Shortcut
23375 var iv = this._iv;
23376
23377 // Choose mixing block
23378 if (iv) {
23379 var block = iv;
23380
23381 // Remove IV for subsequent blocks
23382 this._iv = undefined;
23383 } else {
23384 var block = this._prevBlock;
23385 }
23386
23387 // XOR blocks
23388 for (var i = 0; i < blockSize; i++) {
23389 words[offset + i] ^= block[i];
23390 }
23391 }
23392
23393 return CBC;
23394 }());
23395
23396 /**
23397 * Padding namespace.
23398 */
23399 var C_pad = C.pad = {};
23400
23401 /**
23402 * PKCS #5/7 padding strategy.
23403 */
23404 var Pkcs7 = C_pad.Pkcs7 = {
23405 /**
23406 * Pads data using the algorithm defined in PKCS #5/7.
23407 *
23408 * @param {WordArray} data The data to pad.
23409 * @param {number} blockSize The multiple that the data should be padded to.
23410 *
23411 * @static
23412 *
23413 * @example
23414 *
23415 * CryptoJS.pad.Pkcs7.pad(wordArray, 4);
23416 */
23417 pad: function (data, blockSize) {
23418 // Shortcut
23419 var blockSizeBytes = blockSize * 4;
23420
23421 // Count padding bytes
23422 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
23423
23424 // Create padding word
23425 var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;
23426
23427 // Create padding
23428 var paddingWords = [];
23429 for (var i = 0; i < nPaddingBytes; i += 4) {
23430 paddingWords.push(paddingWord);
23431 }
23432 var padding = WordArray.create(paddingWords, nPaddingBytes);
23433
23434 // Add padding
23435 data.concat(padding);
23436 },
23437
23438 /**
23439 * Unpads data that had been padded using the algorithm defined in PKCS #5/7.
23440 *
23441 * @param {WordArray} data The data to unpad.
23442 *
23443 * @static
23444 *
23445 * @example
23446 *
23447 * CryptoJS.pad.Pkcs7.unpad(wordArray);
23448 */
23449 unpad: function (data) {
23450 // Get number of padding bytes from last byte
23451 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
23452
23453 // Remove padding
23454 data.sigBytes -= nPaddingBytes;
23455 }
23456 };
23457
23458 /**
23459 * Abstract base block cipher template.
23460 *
23461 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)
23462 */
23463 var BlockCipher = C_lib.BlockCipher = Cipher.extend({
23464 /**
23465 * Configuration options.
23466 *
23467 * @property {Mode} mode The block mode to use. Default: CBC
23468 * @property {Padding} padding The padding strategy to use. Default: Pkcs7
23469 */
23470 cfg: Cipher.cfg.extend({
23471 mode: CBC,
23472 padding: Pkcs7
23473 }),
23474
23475 reset: function () {
23476 // Reset cipher
23477 Cipher.reset.call(this);
23478
23479 // Shortcuts
23480 var cfg = this.cfg;
23481 var iv = cfg.iv;
23482 var mode = cfg.mode;
23483
23484 // Reset block mode
23485 if (this._xformMode == this._ENC_XFORM_MODE) {
23486 var modeCreator = mode.createEncryptor;
23487 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
23488 var modeCreator = mode.createDecryptor;
23489
23490 // Keep at least one block in the buffer for unpadding
23491 this._minBufferSize = 1;
23492 }
23493 this._mode = modeCreator.call(mode, this, iv && iv.words);
23494 },
23495
23496 _doProcessBlock: function (words, offset) {
23497 this._mode.processBlock(words, offset);
23498 },
23499
23500 _doFinalize: function () {
23501 // Shortcut
23502 var padding = this.cfg.padding;
23503
23504 // Finalize
23505 if (this._xformMode == this._ENC_XFORM_MODE) {
23506 // Pad data
23507 padding.pad(this._data, this.blockSize);
23508
23509 // Process final blocks
23510 var finalProcessedBlocks = this._process(!!'flush');
23511 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
23512 // Process final blocks
23513 var finalProcessedBlocks = this._process(!!'flush');
23514
23515 // Unpad data
23516 padding.unpad(finalProcessedBlocks);
23517 }
23518
23519 return finalProcessedBlocks;
23520 },
23521
23522 blockSize: 128/32
23523 });
23524
23525 /**
23526 * A collection of cipher parameters.
23527 *
23528 * @property {WordArray} ciphertext The raw ciphertext.
23529 * @property {WordArray} key The key to this ciphertext.
23530 * @property {WordArray} iv The IV used in the ciphering operation.
23531 * @property {WordArray} salt The salt used with a key derivation function.
23532 * @property {Cipher} algorithm The cipher algorithm.
23533 * @property {Mode} mode The block mode used in the ciphering operation.
23534 * @property {Padding} padding The padding scheme used in the ciphering operation.
23535 * @property {number} blockSize The block size of the cipher.
23536 * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
23537 */
23538 var CipherParams = C_lib.CipherParams = Base.extend({
23539 /**
23540 * Initializes a newly created cipher params object.
23541 *
23542 * @param {Object} cipherParams An object with any of the possible cipher parameters.
23543 *
23544 * @example
23545 *
23546 * var cipherParams = CryptoJS.lib.CipherParams.create({
23547 * ciphertext: ciphertextWordArray,
23548 * key: keyWordArray,
23549 * iv: ivWordArray,
23550 * salt: saltWordArray,
23551 * algorithm: CryptoJS.algo.AES,
23552 * mode: CryptoJS.mode.CBC,
23553 * padding: CryptoJS.pad.PKCS7,
23554 * blockSize: 4,
23555 * formatter: CryptoJS.format.OpenSSL
23556 * });
23557 */
23558 init: function (cipherParams) {
23559 this.mixIn(cipherParams);
23560 },
23561
23562 /**
23563 * Converts this cipher params object to a string.
23564 *
23565 * @param {Format} formatter (Optional) The formatting strategy to use.
23566 *
23567 * @return {string} The stringified cipher params.
23568 *
23569 * @throws Error If neither the formatter nor the default formatter is set.
23570 *
23571 * @example
23572 *
23573 * var string = cipherParams + '';
23574 * var string = cipherParams.toString();
23575 * var string = cipherParams.toString(CryptoJS.format.OpenSSL);
23576 */
23577 toString: function (formatter) {
23578 return (formatter || this.formatter).stringify(this);
23579 }
23580 });
23581
23582 /**
23583 * Format namespace.
23584 */
23585 var C_format = C.format = {};
23586
23587 /**
23588 * OpenSSL formatting strategy.
23589 */
23590 var OpenSSLFormatter = C_format.OpenSSL = {
23591 /**
23592 * Converts a cipher params object to an OpenSSL-compatible string.
23593 *
23594 * @param {CipherParams} cipherParams The cipher params object.
23595 *
23596 * @return {string} The OpenSSL-compatible string.
23597 *
23598 * @static
23599 *
23600 * @example
23601 *
23602 * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
23603 */
23604 stringify: function (cipherParams) {
23605 // Shortcuts
23606 var ciphertext = cipherParams.ciphertext;
23607 var salt = cipherParams.salt;
23608
23609 // Format
23610 if (salt) {
23611 var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);
23612 } else {
23613 var wordArray = ciphertext;
23614 }
23615
23616 return wordArray.toString(Base64);
23617 },
23618
23619 /**
23620 * Converts an OpenSSL-compatible string to a cipher params object.
23621 *
23622 * @param {string} openSSLStr The OpenSSL-compatible string.
23623 *
23624 * @return {CipherParams} The cipher params object.
23625 *
23626 * @static
23627 *
23628 * @example
23629 *
23630 * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
23631 */
23632 parse: function (openSSLStr) {
23633 // Parse base64
23634 var ciphertext = Base64.parse(openSSLStr);
23635
23636 // Shortcut
23637 var ciphertextWords = ciphertext.words;
23638
23639 // Test for salt
23640 if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {
23641 // Extract salt
23642 var salt = WordArray.create(ciphertextWords.slice(2, 4));
23643
23644 // Remove salt from ciphertext
23645 ciphertextWords.splice(0, 4);
23646 ciphertext.sigBytes -= 16;
23647 }
23648
23649 return CipherParams.create({ ciphertext: ciphertext, salt: salt });
23650 }
23651 };
23652
23653 /**
23654 * A cipher wrapper that returns ciphertext as a serializable cipher params object.
23655 */
23656 var SerializableCipher = C_lib.SerializableCipher = Base.extend({
23657 /**
23658 * Configuration options.
23659 *
23660 * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
23661 */
23662 cfg: Base.extend({
23663 format: OpenSSLFormatter
23664 }),
23665
23666 /**
23667 * Encrypts a message.
23668 *
23669 * @param {Cipher} cipher The cipher algorithm to use.
23670 * @param {WordArray|string} message The message to encrypt.
23671 * @param {WordArray} key The key.
23672 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23673 *
23674 * @return {CipherParams} A cipher params object.
23675 *
23676 * @static
23677 *
23678 * @example
23679 *
23680 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
23681 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
23682 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
23683 */
23684 encrypt: function (cipher, message, key, cfg) {
23685 // Apply config defaults
23686 cfg = this.cfg.extend(cfg);
23687
23688 // Encrypt
23689 var encryptor = cipher.createEncryptor(key, cfg);
23690 var ciphertext = encryptor.finalize(message);
23691
23692 // Shortcut
23693 var cipherCfg = encryptor.cfg;
23694
23695 // Create and return serializable cipher params
23696 return CipherParams.create({
23697 ciphertext: ciphertext,
23698 key: key,
23699 iv: cipherCfg.iv,
23700 algorithm: cipher,
23701 mode: cipherCfg.mode,
23702 padding: cipherCfg.padding,
23703 blockSize: cipher.blockSize,
23704 formatter: cfg.format
23705 });
23706 },
23707
23708 /**
23709 * Decrypts serialized ciphertext.
23710 *
23711 * @param {Cipher} cipher The cipher algorithm to use.
23712 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
23713 * @param {WordArray} key The key.
23714 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23715 *
23716 * @return {WordArray} The plaintext.
23717 *
23718 * @static
23719 *
23720 * @example
23721 *
23722 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
23723 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
23724 */
23725 decrypt: function (cipher, ciphertext, key, cfg) {
23726 // Apply config defaults
23727 cfg = this.cfg.extend(cfg);
23728
23729 // Convert string to CipherParams
23730 ciphertext = this._parse(ciphertext, cfg.format);
23731
23732 // Decrypt
23733 var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);
23734
23735 return plaintext;
23736 },
23737
23738 /**
23739 * Converts serialized ciphertext to CipherParams,
23740 * else assumed CipherParams already and returns ciphertext unchanged.
23741 *
23742 * @param {CipherParams|string} ciphertext The ciphertext.
23743 * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
23744 *
23745 * @return {CipherParams} The unserialized ciphertext.
23746 *
23747 * @static
23748 *
23749 * @example
23750 *
23751 * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
23752 */
23753 _parse: function (ciphertext, format) {
23754 if (typeof ciphertext == 'string') {
23755 return format.parse(ciphertext, this);
23756 } else {
23757 return ciphertext;
23758 }
23759 }
23760 });
23761
23762 /**
23763 * Key derivation function namespace.
23764 */
23765 var C_kdf = C.kdf = {};
23766
23767 /**
23768 * OpenSSL key derivation function.
23769 */
23770 var OpenSSLKdf = C_kdf.OpenSSL = {
23771 /**
23772 * Derives a key and IV from a password.
23773 *
23774 * @param {string} password The password to derive from.
23775 * @param {number} keySize The size in words of the key to generate.
23776 * @param {number} ivSize The size in words of the IV to generate.
23777 * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
23778 *
23779 * @return {CipherParams} A cipher params object with the key, IV, and salt.
23780 *
23781 * @static
23782 *
23783 * @example
23784 *
23785 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
23786 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
23787 */
23788 execute: function (password, keySize, ivSize, salt) {
23789 // Generate random salt
23790 if (!salt) {
23791 salt = WordArray.random(64/8);
23792 }
23793
23794 // Derive key and IV
23795 var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
23796
23797 // Separate key and IV
23798 var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
23799 key.sigBytes = keySize * 4;
23800
23801 // Return params
23802 return CipherParams.create({ key: key, iv: iv, salt: salt });
23803 }
23804 };
23805
23806 /**
23807 * A serializable cipher wrapper that derives the key from a password,
23808 * and returns ciphertext as a serializable cipher params object.
23809 */
23810 var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
23811 /**
23812 * Configuration options.
23813 *
23814 * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
23815 */
23816 cfg: SerializableCipher.cfg.extend({
23817 kdf: OpenSSLKdf
23818 }),
23819
23820 /**
23821 * Encrypts a message using a password.
23822 *
23823 * @param {Cipher} cipher The cipher algorithm to use.
23824 * @param {WordArray|string} message The message to encrypt.
23825 * @param {string} password The password.
23826 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23827 *
23828 * @return {CipherParams} A cipher params object.
23829 *
23830 * @static
23831 *
23832 * @example
23833 *
23834 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
23835 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
23836 */
23837 encrypt: function (cipher, message, password, cfg) {
23838 // Apply config defaults
23839 cfg = this.cfg.extend(cfg);
23840
23841 // Derive key and other params
23842 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
23843
23844 // Add IV to config
23845 cfg.iv = derivedParams.iv;
23846
23847 // Encrypt
23848 var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
23849
23850 // Mix in derived params
23851 ciphertext.mixIn(derivedParams);
23852
23853 return ciphertext;
23854 },
23855
23856 /**
23857 * Decrypts serialized ciphertext using a password.
23858 *
23859 * @param {Cipher} cipher The cipher algorithm to use.
23860 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
23861 * @param {string} password The password.
23862 * @param {Object} cfg (Optional) The configuration options to use for this operation.
23863 *
23864 * @return {WordArray} The plaintext.
23865 *
23866 * @static
23867 *
23868 * @example
23869 *
23870 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
23871 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
23872 */
23873 decrypt: function (cipher, ciphertext, password, cfg) {
23874 // Apply config defaults
23875 cfg = this.cfg.extend(cfg);
23876
23877 // Convert string to CipherParams
23878 ciphertext = this._parse(ciphertext, cfg.format);
23879
23880 // Derive key and other params
23881 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
23882
23883 // Add IV to config
23884 cfg.iv = derivedParams.iv;
23885
23886 // Decrypt
23887 var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
23888
23889 return plaintext;
23890 }
23891 });
23892 }());
23893
23894
23895}));
23896},{"./core":31}],31:[function(_dereq_,module,exports){
23897;(function (root, factory) {
23898 if (typeof exports === "object") {
23899 // CommonJS
23900 module.exports = exports = factory();
23901 }
23902 else if (typeof define === "function" && define.amd) {
23903 // AMD
23904 define([], factory);
23905 }
23906 else {
23907 // Global (browser)
23908 root.CryptoJS = factory();
23909 }
23910}(this, function () {
23911
23912 /**
23913 * CryptoJS core components.
23914 */
23915 var CryptoJS = CryptoJS || (function (Math, undefined) {
23916 /**
23917 * CryptoJS namespace.
23918 */
23919 var C = {};
23920
23921 /**
23922 * Library namespace.
23923 */
23924 var C_lib = C.lib = {};
23925
23926 /**
23927 * Base object for prototypal inheritance.
23928 */
23929 var Base = C_lib.Base = (function () {
23930 function F() {}
23931
23932 return {
23933 /**
23934 * Creates a new object that inherits from this object.
23935 *
23936 * @param {Object} overrides Properties to copy into the new object.
23937 *
23938 * @return {Object} The new object.
23939 *
23940 * @static
23941 *
23942 * @example
23943 *
23944 * var MyType = CryptoJS.lib.Base.extend({
23945 * field: 'value',
23946 *
23947 * method: function () {
23948 * }
23949 * });
23950 */
23951 extend: function (overrides) {
23952 // Spawn
23953 F.prototype = this;
23954 var subtype = new F();
23955
23956 // Augment
23957 if (overrides) {
23958 subtype.mixIn(overrides);
23959 }
23960
23961 // Create default initializer
23962 if (!subtype.hasOwnProperty('init')) {
23963 subtype.init = function () {
23964 subtype.$super.init.apply(this, arguments);
23965 };
23966 }
23967
23968 // Initializer's prototype is the subtype object
23969 subtype.init.prototype = subtype;
23970
23971 // Reference supertype
23972 subtype.$super = this;
23973
23974 return subtype;
23975 },
23976
23977 /**
23978 * Extends this object and runs the init method.
23979 * Arguments to create() will be passed to init().
23980 *
23981 * @return {Object} The new object.
23982 *
23983 * @static
23984 *
23985 * @example
23986 *
23987 * var instance = MyType.create();
23988 */
23989 create: function () {
23990 var instance = this.extend();
23991 instance.init.apply(instance, arguments);
23992
23993 return instance;
23994 },
23995
23996 /**
23997 * Initializes a newly created object.
23998 * Override this method to add some logic when your objects are created.
23999 *
24000 * @example
24001 *
24002 * var MyType = CryptoJS.lib.Base.extend({
24003 * init: function () {
24004 * // ...
24005 * }
24006 * });
24007 */
24008 init: function () {
24009 },
24010
24011 /**
24012 * Copies properties into this object.
24013 *
24014 * @param {Object} properties The properties to mix in.
24015 *
24016 * @example
24017 *
24018 * MyType.mixIn({
24019 * field: 'value'
24020 * });
24021 */
24022 mixIn: function (properties) {
24023 for (var propertyName in properties) {
24024 if (properties.hasOwnProperty(propertyName)) {
24025 this[propertyName] = properties[propertyName];
24026 }
24027 }
24028
24029 // IE won't copy toString using the loop above
24030 if (properties.hasOwnProperty('toString')) {
24031 this.toString = properties.toString;
24032 }
24033 },
24034
24035 /**
24036 * Creates a copy of this object.
24037 *
24038 * @return {Object} The clone.
24039 *
24040 * @example
24041 *
24042 * var clone = instance.clone();
24043 */
24044 clone: function () {
24045 return this.init.prototype.extend(this);
24046 }
24047 };
24048 }());
24049
24050 /**
24051 * An array of 32-bit words.
24052 *
24053 * @property {Array} words The array of 32-bit words.
24054 * @property {number} sigBytes The number of significant bytes in this word array.
24055 */
24056 var WordArray = C_lib.WordArray = Base.extend({
24057 /**
24058 * Initializes a newly created word array.
24059 *
24060 * @param {Array} words (Optional) An array of 32-bit words.
24061 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
24062 *
24063 * @example
24064 *
24065 * var wordArray = CryptoJS.lib.WordArray.create();
24066 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
24067 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
24068 */
24069 init: function (words, sigBytes) {
24070 words = this.words = words || [];
24071
24072 if (sigBytes != undefined) {
24073 this.sigBytes = sigBytes;
24074 } else {
24075 this.sigBytes = words.length * 4;
24076 }
24077 },
24078
24079 /**
24080 * Converts this word array to a string.
24081 *
24082 * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
24083 *
24084 * @return {string} The stringified word array.
24085 *
24086 * @example
24087 *
24088 * var string = wordArray + '';
24089 * var string = wordArray.toString();
24090 * var string = wordArray.toString(CryptoJS.enc.Utf8);
24091 */
24092 toString: function (encoder) {
24093 return (encoder || Hex).stringify(this);
24094 },
24095
24096 /**
24097 * Concatenates a word array to this word array.
24098 *
24099 * @param {WordArray} wordArray The word array to append.
24100 *
24101 * @return {WordArray} This word array.
24102 *
24103 * @example
24104 *
24105 * wordArray1.concat(wordArray2);
24106 */
24107 concat: function (wordArray) {
24108 // Shortcuts
24109 var thisWords = this.words;
24110 var thatWords = wordArray.words;
24111 var thisSigBytes = this.sigBytes;
24112 var thatSigBytes = wordArray.sigBytes;
24113
24114 // Clamp excess bits
24115 this.clamp();
24116
24117 // Concat
24118 if (thisSigBytes % 4) {
24119 // Copy one byte at a time
24120 for (var i = 0; i < thatSigBytes; i++) {
24121 var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
24122 thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
24123 }
24124 } else if (thatWords.length > 0xffff) {
24125 // Copy one word at a time
24126 for (var i = 0; i < thatSigBytes; i += 4) {
24127 thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];
24128 }
24129 } else {
24130 // Copy all words at once
24131 thisWords.push.apply(thisWords, thatWords);
24132 }
24133 this.sigBytes += thatSigBytes;
24134
24135 // Chainable
24136 return this;
24137 },
24138
24139 /**
24140 * Removes insignificant bits.
24141 *
24142 * @example
24143 *
24144 * wordArray.clamp();
24145 */
24146 clamp: function () {
24147 // Shortcuts
24148 var words = this.words;
24149 var sigBytes = this.sigBytes;
24150
24151 // Clamp
24152 words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
24153 words.length = Math.ceil(sigBytes / 4);
24154 },
24155
24156 /**
24157 * Creates a copy of this word array.
24158 *
24159 * @return {WordArray} The clone.
24160 *
24161 * @example
24162 *
24163 * var clone = wordArray.clone();
24164 */
24165 clone: function () {
24166 var clone = Base.clone.call(this);
24167 clone.words = this.words.slice(0);
24168
24169 return clone;
24170 },
24171
24172 /**
24173 * Creates a word array filled with random bytes.
24174 *
24175 * @param {number} nBytes The number of random bytes to generate.
24176 *
24177 * @return {WordArray} The random word array.
24178 *
24179 * @static
24180 *
24181 * @example
24182 *
24183 * var wordArray = CryptoJS.lib.WordArray.random(16);
24184 */
24185 random: function (nBytes) {
24186 var words = [];
24187 for (var i = 0; i < nBytes; i += 4) {
24188 words.push((Math.random() * 0x100000000) | 0);
24189 }
24190
24191 return new WordArray.init(words, nBytes);
24192 }
24193 });
24194
24195 /**
24196 * Encoder namespace.
24197 */
24198 var C_enc = C.enc = {};
24199
24200 /**
24201 * Hex encoding strategy.
24202 */
24203 var Hex = C_enc.Hex = {
24204 /**
24205 * Converts a word array to a hex string.
24206 *
24207 * @param {WordArray} wordArray The word array.
24208 *
24209 * @return {string} The hex string.
24210 *
24211 * @static
24212 *
24213 * @example
24214 *
24215 * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
24216 */
24217 stringify: function (wordArray) {
24218 // Shortcuts
24219 var words = wordArray.words;
24220 var sigBytes = wordArray.sigBytes;
24221
24222 // Convert
24223 var hexChars = [];
24224 for (var i = 0; i < sigBytes; i++) {
24225 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
24226 hexChars.push((bite >>> 4).toString(16));
24227 hexChars.push((bite & 0x0f).toString(16));
24228 }
24229
24230 return hexChars.join('');
24231 },
24232
24233 /**
24234 * Converts a hex string to a word array.
24235 *
24236 * @param {string} hexStr The hex string.
24237 *
24238 * @return {WordArray} The word array.
24239 *
24240 * @static
24241 *
24242 * @example
24243 *
24244 * var wordArray = CryptoJS.enc.Hex.parse(hexString);
24245 */
24246 parse: function (hexStr) {
24247 // Shortcut
24248 var hexStrLength = hexStr.length;
24249
24250 // Convert
24251 var words = [];
24252 for (var i = 0; i < hexStrLength; i += 2) {
24253 words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
24254 }
24255
24256 return new WordArray.init(words, hexStrLength / 2);
24257 }
24258 };
24259
24260 /**
24261 * Latin1 encoding strategy.
24262 */
24263 var Latin1 = C_enc.Latin1 = {
24264 /**
24265 * Converts a word array to a Latin1 string.
24266 *
24267 * @param {WordArray} wordArray The word array.
24268 *
24269 * @return {string} The Latin1 string.
24270 *
24271 * @static
24272 *
24273 * @example
24274 *
24275 * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
24276 */
24277 stringify: function (wordArray) {
24278 // Shortcuts
24279 var words = wordArray.words;
24280 var sigBytes = wordArray.sigBytes;
24281
24282 // Convert
24283 var latin1Chars = [];
24284 for (var i = 0; i < sigBytes; i++) {
24285 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
24286 latin1Chars.push(String.fromCharCode(bite));
24287 }
24288
24289 return latin1Chars.join('');
24290 },
24291
24292 /**
24293 * Converts a Latin1 string to a word array.
24294 *
24295 * @param {string} latin1Str The Latin1 string.
24296 *
24297 * @return {WordArray} The word array.
24298 *
24299 * @static
24300 *
24301 * @example
24302 *
24303 * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
24304 */
24305 parse: function (latin1Str) {
24306 // Shortcut
24307 var latin1StrLength = latin1Str.length;
24308
24309 // Convert
24310 var words = [];
24311 for (var i = 0; i < latin1StrLength; i++) {
24312 words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
24313 }
24314
24315 return new WordArray.init(words, latin1StrLength);
24316 }
24317 };
24318
24319 /**
24320 * UTF-8 encoding strategy.
24321 */
24322 var Utf8 = C_enc.Utf8 = {
24323 /**
24324 * Converts a word array to a UTF-8 string.
24325 *
24326 * @param {WordArray} wordArray The word array.
24327 *
24328 * @return {string} The UTF-8 string.
24329 *
24330 * @static
24331 *
24332 * @example
24333 *
24334 * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
24335 */
24336 stringify: function (wordArray) {
24337 try {
24338 return decodeURIComponent(escape(Latin1.stringify(wordArray)));
24339 } catch (e) {
24340 throw new Error('Malformed UTF-8 data');
24341 }
24342 },
24343
24344 /**
24345 * Converts a UTF-8 string to a word array.
24346 *
24347 * @param {string} utf8Str The UTF-8 string.
24348 *
24349 * @return {WordArray} The word array.
24350 *
24351 * @static
24352 *
24353 * @example
24354 *
24355 * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
24356 */
24357 parse: function (utf8Str) {
24358 return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
24359 }
24360 };
24361
24362 /**
24363 * Abstract buffered block algorithm template.
24364 *
24365 * The property blockSize must be implemented in a concrete subtype.
24366 *
24367 * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
24368 */
24369 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
24370 /**
24371 * Resets this block algorithm's data buffer to its initial state.
24372 *
24373 * @example
24374 *
24375 * bufferedBlockAlgorithm.reset();
24376 */
24377 reset: function () {
24378 // Initial values
24379 this._data = new WordArray.init();
24380 this._nDataBytes = 0;
24381 },
24382
24383 /**
24384 * Adds new data to this block algorithm's buffer.
24385 *
24386 * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
24387 *
24388 * @example
24389 *
24390 * bufferedBlockAlgorithm._append('data');
24391 * bufferedBlockAlgorithm._append(wordArray);
24392 */
24393 _append: function (data) {
24394 // Convert string to WordArray, else assume WordArray already
24395 if (typeof data == 'string') {
24396 data = Utf8.parse(data);
24397 }
24398
24399 // Append
24400 this._data.concat(data);
24401 this._nDataBytes += data.sigBytes;
24402 },
24403
24404 /**
24405 * Processes available data blocks.
24406 *
24407 * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
24408 *
24409 * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
24410 *
24411 * @return {WordArray} The processed data.
24412 *
24413 * @example
24414 *
24415 * var processedData = bufferedBlockAlgorithm._process();
24416 * var processedData = bufferedBlockAlgorithm._process(!!'flush');
24417 */
24418 _process: function (doFlush) {
24419 // Shortcuts
24420 var data = this._data;
24421 var dataWords = data.words;
24422 var dataSigBytes = data.sigBytes;
24423 var blockSize = this.blockSize;
24424 var blockSizeBytes = blockSize * 4;
24425
24426 // Count blocks ready
24427 var nBlocksReady = dataSigBytes / blockSizeBytes;
24428 if (doFlush) {
24429 // Round up to include partial blocks
24430 nBlocksReady = Math.ceil(nBlocksReady);
24431 } else {
24432 // Round down to include only full blocks,
24433 // less the number of blocks that must remain in the buffer
24434 nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
24435 }
24436
24437 // Count words ready
24438 var nWordsReady = nBlocksReady * blockSize;
24439
24440 // Count bytes ready
24441 var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
24442
24443 // Process blocks
24444 if (nWordsReady) {
24445 for (var offset = 0; offset < nWordsReady; offset += blockSize) {
24446 // Perform concrete-algorithm logic
24447 this._doProcessBlock(dataWords, offset);
24448 }
24449
24450 // Remove processed words
24451 var processedWords = dataWords.splice(0, nWordsReady);
24452 data.sigBytes -= nBytesReady;
24453 }
24454
24455 // Return processed words
24456 return new WordArray.init(processedWords, nBytesReady);
24457 },
24458
24459 /**
24460 * Creates a copy of this object.
24461 *
24462 * @return {Object} The clone.
24463 *
24464 * @example
24465 *
24466 * var clone = bufferedBlockAlgorithm.clone();
24467 */
24468 clone: function () {
24469 var clone = Base.clone.call(this);
24470 clone._data = this._data.clone();
24471
24472 return clone;
24473 },
24474
24475 _minBufferSize: 0
24476 });
24477
24478 /**
24479 * Abstract hasher template.
24480 *
24481 * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
24482 */
24483 var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
24484 /**
24485 * Configuration options.
24486 */
24487 cfg: Base.extend(),
24488
24489 /**
24490 * Initializes a newly created hasher.
24491 *
24492 * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
24493 *
24494 * @example
24495 *
24496 * var hasher = CryptoJS.algo.SHA256.create();
24497 */
24498 init: function (cfg) {
24499 // Apply config defaults
24500 this.cfg = this.cfg.extend(cfg);
24501
24502 // Set initial values
24503 this.reset();
24504 },
24505
24506 /**
24507 * Resets this hasher to its initial state.
24508 *
24509 * @example
24510 *
24511 * hasher.reset();
24512 */
24513 reset: function () {
24514 // Reset data buffer
24515 BufferedBlockAlgorithm.reset.call(this);
24516
24517 // Perform concrete-hasher logic
24518 this._doReset();
24519 },
24520
24521 /**
24522 * Updates this hasher with a message.
24523 *
24524 * @param {WordArray|string} messageUpdate The message to append.
24525 *
24526 * @return {Hasher} This hasher.
24527 *
24528 * @example
24529 *
24530 * hasher.update('message');
24531 * hasher.update(wordArray);
24532 */
24533 update: function (messageUpdate) {
24534 // Append
24535 this._append(messageUpdate);
24536
24537 // Update the hash
24538 this._process();
24539
24540 // Chainable
24541 return this;
24542 },
24543
24544 /**
24545 * Finalizes the hash computation.
24546 * Note that the finalize operation is effectively a destructive, read-once operation.
24547 *
24548 * @param {WordArray|string} messageUpdate (Optional) A final message update.
24549 *
24550 * @return {WordArray} The hash.
24551 *
24552 * @example
24553 *
24554 * var hash = hasher.finalize();
24555 * var hash = hasher.finalize('message');
24556 * var hash = hasher.finalize(wordArray);
24557 */
24558 finalize: function (messageUpdate) {
24559 // Final message update
24560 if (messageUpdate) {
24561 this._append(messageUpdate);
24562 }
24563
24564 // Perform concrete-hasher logic
24565 var hash = this._doFinalize();
24566
24567 return hash;
24568 },
24569
24570 blockSize: 512/32,
24571
24572 /**
24573 * Creates a shortcut function to a hasher's object interface.
24574 *
24575 * @param {Hasher} hasher The hasher to create a helper for.
24576 *
24577 * @return {Function} The shortcut function.
24578 *
24579 * @static
24580 *
24581 * @example
24582 *
24583 * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
24584 */
24585 _createHelper: function (hasher) {
24586 return function (message, cfg) {
24587 return new hasher.init(cfg).finalize(message);
24588 };
24589 },
24590
24591 /**
24592 * Creates a shortcut function to the HMAC's object interface.
24593 *
24594 * @param {Hasher} hasher The hasher to use in this HMAC helper.
24595 *
24596 * @return {Function} The shortcut function.
24597 *
24598 * @static
24599 *
24600 * @example
24601 *
24602 * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
24603 */
24604 _createHmacHelper: function (hasher) {
24605 return function (message, key) {
24606 return new C_algo.HMAC.init(hasher, key).finalize(message);
24607 };
24608 }
24609 });
24610
24611 /**
24612 * Algorithm namespace.
24613 */
24614 var C_algo = C.algo = {};
24615
24616 return C;
24617 }(Math));
24618
24619
24620 return CryptoJS;
24621
24622}));
24623},{}],32:[function(_dereq_,module,exports){
24624;(function (root, factory) {
24625 if (typeof exports === "object") {
24626 // CommonJS
24627 module.exports = exports = factory(_dereq_("./core"));
24628 }
24629 else if (typeof define === "function" && define.amd) {
24630 // AMD
24631 define(["./core"], factory);
24632 }
24633 else {
24634 // Global (browser)
24635 factory(root.CryptoJS);
24636 }
24637}(this, function (CryptoJS) {
24638
24639 (function () {
24640 // Shortcuts
24641 var C = CryptoJS;
24642 var C_lib = C.lib;
24643 var WordArray = C_lib.WordArray;
24644 var C_enc = C.enc;
24645
24646 /**
24647 * Base64 encoding strategy.
24648 */
24649 var Base64 = C_enc.Base64 = {
24650 /**
24651 * Converts a word array to a Base64 string.
24652 *
24653 * @param {WordArray} wordArray The word array.
24654 *
24655 * @return {string} The Base64 string.
24656 *
24657 * @static
24658 *
24659 * @example
24660 *
24661 * var base64String = CryptoJS.enc.Base64.stringify(wordArray);
24662 */
24663 stringify: function (wordArray) {
24664 // Shortcuts
24665 var words = wordArray.words;
24666 var sigBytes = wordArray.sigBytes;
24667 var map = this._map;
24668
24669 // Clamp excess bits
24670 wordArray.clamp();
24671
24672 // Convert
24673 var base64Chars = [];
24674 for (var i = 0; i < sigBytes; i += 3) {
24675 var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
24676 var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
24677 var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
24678
24679 var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
24680
24681 for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
24682 base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
24683 }
24684 }
24685
24686 // Add padding
24687 var paddingChar = map.charAt(64);
24688 if (paddingChar) {
24689 while (base64Chars.length % 4) {
24690 base64Chars.push(paddingChar);
24691 }
24692 }
24693
24694 return base64Chars.join('');
24695 },
24696
24697 /**
24698 * Converts a Base64 string to a word array.
24699 *
24700 * @param {string} base64Str The Base64 string.
24701 *
24702 * @return {WordArray} The word array.
24703 *
24704 * @static
24705 *
24706 * @example
24707 *
24708 * var wordArray = CryptoJS.enc.Base64.parse(base64String);
24709 */
24710 parse: function (base64Str) {
24711 // Shortcuts
24712 var base64StrLength = base64Str.length;
24713 var map = this._map;
24714
24715 // Ignore padding
24716 var paddingChar = map.charAt(64);
24717 if (paddingChar) {
24718 var paddingIndex = base64Str.indexOf(paddingChar);
24719 if (paddingIndex != -1) {
24720 base64StrLength = paddingIndex;
24721 }
24722 }
24723
24724 // Convert
24725 var words = [];
24726 var nBytes = 0;
24727 for (var i = 0; i < base64StrLength; i++) {
24728 if (i % 4) {
24729 var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);
24730 var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);
24731 words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);
24732 nBytes++;
24733 }
24734 }
24735
24736 return WordArray.create(words, nBytes);
24737 },
24738
24739 _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
24740 };
24741 }());
24742
24743
24744 return CryptoJS.enc.Base64;
24745
24746}));
24747},{"./core":31}],33:[function(_dereq_,module,exports){
24748;(function (root, factory) {
24749 if (typeof exports === "object") {
24750 // CommonJS
24751 module.exports = exports = factory(_dereq_("./core"));
24752 }
24753 else if (typeof define === "function" && define.amd) {
24754 // AMD
24755 define(["./core"], factory);
24756 }
24757 else {
24758 // Global (browser)
24759 factory(root.CryptoJS);
24760 }
24761}(this, function (CryptoJS) {
24762
24763 (function () {
24764 // Shortcuts
24765 var C = CryptoJS;
24766 var C_lib = C.lib;
24767 var WordArray = C_lib.WordArray;
24768 var C_enc = C.enc;
24769
24770 /**
24771 * UTF-16 BE encoding strategy.
24772 */
24773 var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
24774 /**
24775 * Converts a word array to a UTF-16 BE string.
24776 *
24777 * @param {WordArray} wordArray The word array.
24778 *
24779 * @return {string} The UTF-16 BE string.
24780 *
24781 * @static
24782 *
24783 * @example
24784 *
24785 * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
24786 */
24787 stringify: function (wordArray) {
24788 // Shortcuts
24789 var words = wordArray.words;
24790 var sigBytes = wordArray.sigBytes;
24791
24792 // Convert
24793 var utf16Chars = [];
24794 for (var i = 0; i < sigBytes; i += 2) {
24795 var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
24796 utf16Chars.push(String.fromCharCode(codePoint));
24797 }
24798
24799 return utf16Chars.join('');
24800 },
24801
24802 /**
24803 * Converts a UTF-16 BE string to a word array.
24804 *
24805 * @param {string} utf16Str The UTF-16 BE string.
24806 *
24807 * @return {WordArray} The word array.
24808 *
24809 * @static
24810 *
24811 * @example
24812 *
24813 * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
24814 */
24815 parse: function (utf16Str) {
24816 // Shortcut
24817 var utf16StrLength = utf16Str.length;
24818
24819 // Convert
24820 var words = [];
24821 for (var i = 0; i < utf16StrLength; i++) {
24822 words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
24823 }
24824
24825 return WordArray.create(words, utf16StrLength * 2);
24826 }
24827 };
24828
24829 /**
24830 * UTF-16 LE encoding strategy.
24831 */
24832 C_enc.Utf16LE = {
24833 /**
24834 * Converts a word array to a UTF-16 LE string.
24835 *
24836 * @param {WordArray} wordArray The word array.
24837 *
24838 * @return {string} The UTF-16 LE string.
24839 *
24840 * @static
24841 *
24842 * @example
24843 *
24844 * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
24845 */
24846 stringify: function (wordArray) {
24847 // Shortcuts
24848 var words = wordArray.words;
24849 var sigBytes = wordArray.sigBytes;
24850
24851 // Convert
24852 var utf16Chars = [];
24853 for (var i = 0; i < sigBytes; i += 2) {
24854 var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
24855 utf16Chars.push(String.fromCharCode(codePoint));
24856 }
24857
24858 return utf16Chars.join('');
24859 },
24860
24861 /**
24862 * Converts a UTF-16 LE string to a word array.
24863 *
24864 * @param {string} utf16Str The UTF-16 LE string.
24865 *
24866 * @return {WordArray} The word array.
24867 *
24868 * @static
24869 *
24870 * @example
24871 *
24872 * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
24873 */
24874 parse: function (utf16Str) {
24875 // Shortcut
24876 var utf16StrLength = utf16Str.length;
24877
24878 // Convert
24879 var words = [];
24880 for (var i = 0; i < utf16StrLength; i++) {
24881 words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
24882 }
24883
24884 return WordArray.create(words, utf16StrLength * 2);
24885 }
24886 };
24887
24888 function swapEndian(word) {
24889 return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
24890 }
24891 }());
24892
24893
24894 return CryptoJS.enc.Utf16;
24895
24896}));
24897},{"./core":31}],34:[function(_dereq_,module,exports){
24898;(function (root, factory, undef) {
24899 if (typeof exports === "object") {
24900 // CommonJS
24901 module.exports = exports = factory(_dereq_("./core"), _dereq_("./sha1"), _dereq_("./hmac"));
24902 }
24903 else if (typeof define === "function" && define.amd) {
24904 // AMD
24905 define(["./core", "./sha1", "./hmac"], factory);
24906 }
24907 else {
24908 // Global (browser)
24909 factory(root.CryptoJS);
24910 }
24911}(this, function (CryptoJS) {
24912
24913 (function () {
24914 // Shortcuts
24915 var C = CryptoJS;
24916 var C_lib = C.lib;
24917 var Base = C_lib.Base;
24918 var WordArray = C_lib.WordArray;
24919 var C_algo = C.algo;
24920 var MD5 = C_algo.MD5;
24921
24922 /**
24923 * This key derivation function is meant to conform with EVP_BytesToKey.
24924 * www.openssl.org/docs/crypto/EVP_BytesToKey.html
24925 */
24926 var EvpKDF = C_algo.EvpKDF = Base.extend({
24927 /**
24928 * Configuration options.
24929 *
24930 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
24931 * @property {Hasher} hasher The hash algorithm to use. Default: MD5
24932 * @property {number} iterations The number of iterations to perform. Default: 1
24933 */
24934 cfg: Base.extend({
24935 keySize: 128/32,
24936 hasher: MD5,
24937 iterations: 1
24938 }),
24939
24940 /**
24941 * Initializes a newly created key derivation function.
24942 *
24943 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
24944 *
24945 * @example
24946 *
24947 * var kdf = CryptoJS.algo.EvpKDF.create();
24948 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
24949 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
24950 */
24951 init: function (cfg) {
24952 this.cfg = this.cfg.extend(cfg);
24953 },
24954
24955 /**
24956 * Derives a key from a password.
24957 *
24958 * @param {WordArray|string} password The password.
24959 * @param {WordArray|string} salt A salt.
24960 *
24961 * @return {WordArray} The derived key.
24962 *
24963 * @example
24964 *
24965 * var key = kdf.compute(password, salt);
24966 */
24967 compute: function (password, salt) {
24968 // Shortcut
24969 var cfg = this.cfg;
24970
24971 // Init hasher
24972 var hasher = cfg.hasher.create();
24973
24974 // Initial values
24975 var derivedKey = WordArray.create();
24976
24977 // Shortcuts
24978 var derivedKeyWords = derivedKey.words;
24979 var keySize = cfg.keySize;
24980 var iterations = cfg.iterations;
24981
24982 // Generate key
24983 while (derivedKeyWords.length < keySize) {
24984 if (block) {
24985 hasher.update(block);
24986 }
24987 var block = hasher.update(password).finalize(salt);
24988 hasher.reset();
24989
24990 // Iterations
24991 for (var i = 1; i < iterations; i++) {
24992 block = hasher.finalize(block);
24993 hasher.reset();
24994 }
24995
24996 derivedKey.concat(block);
24997 }
24998 derivedKey.sigBytes = keySize * 4;
24999
25000 return derivedKey;
25001 }
25002 });
25003
25004 /**
25005 * Derives a key from a password.
25006 *
25007 * @param {WordArray|string} password The password.
25008 * @param {WordArray|string} salt A salt.
25009 * @param {Object} cfg (Optional) The configuration options to use for this computation.
25010 *
25011 * @return {WordArray} The derived key.
25012 *
25013 * @static
25014 *
25015 * @example
25016 *
25017 * var key = CryptoJS.EvpKDF(password, salt);
25018 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
25019 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
25020 */
25021 C.EvpKDF = function (password, salt, cfg) {
25022 return EvpKDF.create(cfg).compute(password, salt);
25023 };
25024 }());
25025
25026
25027 return CryptoJS.EvpKDF;
25028
25029}));
25030},{"./core":31,"./hmac":36,"./sha1":55}],35:[function(_dereq_,module,exports){
25031;(function (root, factory, undef) {
25032 if (typeof exports === "object") {
25033 // CommonJS
25034 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25035 }
25036 else if (typeof define === "function" && define.amd) {
25037 // AMD
25038 define(["./core", "./cipher-core"], factory);
25039 }
25040 else {
25041 // Global (browser)
25042 factory(root.CryptoJS);
25043 }
25044}(this, function (CryptoJS) {
25045
25046 (function (undefined) {
25047 // Shortcuts
25048 var C = CryptoJS;
25049 var C_lib = C.lib;
25050 var CipherParams = C_lib.CipherParams;
25051 var C_enc = C.enc;
25052 var Hex = C_enc.Hex;
25053 var C_format = C.format;
25054
25055 var HexFormatter = C_format.Hex = {
25056 /**
25057 * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
25058 *
25059 * @param {CipherParams} cipherParams The cipher params object.
25060 *
25061 * @return {string} The hexadecimally encoded string.
25062 *
25063 * @static
25064 *
25065 * @example
25066 *
25067 * var hexString = CryptoJS.format.Hex.stringify(cipherParams);
25068 */
25069 stringify: function (cipherParams) {
25070 return cipherParams.ciphertext.toString(Hex);
25071 },
25072
25073 /**
25074 * Converts a hexadecimally encoded ciphertext string to a cipher params object.
25075 *
25076 * @param {string} input The hexadecimally encoded string.
25077 *
25078 * @return {CipherParams} The cipher params object.
25079 *
25080 * @static
25081 *
25082 * @example
25083 *
25084 * var cipherParams = CryptoJS.format.Hex.parse(hexString);
25085 */
25086 parse: function (input) {
25087 var ciphertext = Hex.parse(input);
25088 return CipherParams.create({ ciphertext: ciphertext });
25089 }
25090 };
25091 }());
25092
25093
25094 return CryptoJS.format.Hex;
25095
25096}));
25097},{"./cipher-core":30,"./core":31}],36:[function(_dereq_,module,exports){
25098;(function (root, factory) {
25099 if (typeof exports === "object") {
25100 // CommonJS
25101 module.exports = exports = factory(_dereq_("./core"));
25102 }
25103 else if (typeof define === "function" && define.amd) {
25104 // AMD
25105 define(["./core"], factory);
25106 }
25107 else {
25108 // Global (browser)
25109 factory(root.CryptoJS);
25110 }
25111}(this, function (CryptoJS) {
25112
25113 (function () {
25114 // Shortcuts
25115 var C = CryptoJS;
25116 var C_lib = C.lib;
25117 var Base = C_lib.Base;
25118 var C_enc = C.enc;
25119 var Utf8 = C_enc.Utf8;
25120 var C_algo = C.algo;
25121
25122 /**
25123 * HMAC algorithm.
25124 */
25125 var HMAC = C_algo.HMAC = Base.extend({
25126 /**
25127 * Initializes a newly created HMAC.
25128 *
25129 * @param {Hasher} hasher The hash algorithm to use.
25130 * @param {WordArray|string} key The secret key.
25131 *
25132 * @example
25133 *
25134 * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
25135 */
25136 init: function (hasher, key) {
25137 // Init hasher
25138 hasher = this._hasher = new hasher.init();
25139
25140 // Convert string to WordArray, else assume WordArray already
25141 if (typeof key == 'string') {
25142 key = Utf8.parse(key);
25143 }
25144
25145 // Shortcuts
25146 var hasherBlockSize = hasher.blockSize;
25147 var hasherBlockSizeBytes = hasherBlockSize * 4;
25148
25149 // Allow arbitrary length keys
25150 if (key.sigBytes > hasherBlockSizeBytes) {
25151 key = hasher.finalize(key);
25152 }
25153
25154 // Clamp excess bits
25155 key.clamp();
25156
25157 // Clone key for inner and outer pads
25158 var oKey = this._oKey = key.clone();
25159 var iKey = this._iKey = key.clone();
25160
25161 // Shortcuts
25162 var oKeyWords = oKey.words;
25163 var iKeyWords = iKey.words;
25164
25165 // XOR keys with pad constants
25166 for (var i = 0; i < hasherBlockSize; i++) {
25167 oKeyWords[i] ^= 0x5c5c5c5c;
25168 iKeyWords[i] ^= 0x36363636;
25169 }
25170 oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
25171
25172 // Set initial values
25173 this.reset();
25174 },
25175
25176 /**
25177 * Resets this HMAC to its initial state.
25178 *
25179 * @example
25180 *
25181 * hmacHasher.reset();
25182 */
25183 reset: function () {
25184 // Shortcut
25185 var hasher = this._hasher;
25186
25187 // Reset
25188 hasher.reset();
25189 hasher.update(this._iKey);
25190 },
25191
25192 /**
25193 * Updates this HMAC with a message.
25194 *
25195 * @param {WordArray|string} messageUpdate The message to append.
25196 *
25197 * @return {HMAC} This HMAC instance.
25198 *
25199 * @example
25200 *
25201 * hmacHasher.update('message');
25202 * hmacHasher.update(wordArray);
25203 */
25204 update: function (messageUpdate) {
25205 this._hasher.update(messageUpdate);
25206
25207 // Chainable
25208 return this;
25209 },
25210
25211 /**
25212 * Finalizes the HMAC computation.
25213 * Note that the finalize operation is effectively a destructive, read-once operation.
25214 *
25215 * @param {WordArray|string} messageUpdate (Optional) A final message update.
25216 *
25217 * @return {WordArray} The HMAC.
25218 *
25219 * @example
25220 *
25221 * var hmac = hmacHasher.finalize();
25222 * var hmac = hmacHasher.finalize('message');
25223 * var hmac = hmacHasher.finalize(wordArray);
25224 */
25225 finalize: function (messageUpdate) {
25226 // Shortcut
25227 var hasher = this._hasher;
25228
25229 // Compute HMAC
25230 var innerHash = hasher.finalize(messageUpdate);
25231 hasher.reset();
25232 var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
25233
25234 return hmac;
25235 }
25236 });
25237 }());
25238
25239
25240}));
25241},{"./core":31}],37:[function(_dereq_,module,exports){
25242;(function (root, factory, undef) {
25243 if (typeof exports === "object") {
25244 // CommonJS
25245 module.exports = exports = factory(_dereq_("./core"), _dereq_("./x64-core"), _dereq_("./lib-typedarrays"), _dereq_("./enc-utf16"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./sha1"), _dereq_("./sha256"), _dereq_("./sha224"), _dereq_("./sha512"), _dereq_("./sha384"), _dereq_("./sha3"), _dereq_("./ripemd160"), _dereq_("./hmac"), _dereq_("./pbkdf2"), _dereq_("./evpkdf"), _dereq_("./cipher-core"), _dereq_("./mode-cfb"), _dereq_("./mode-ctr"), _dereq_("./mode-ctr-gladman"), _dereq_("./mode-ofb"), _dereq_("./mode-ecb"), _dereq_("./pad-ansix923"), _dereq_("./pad-iso10126"), _dereq_("./pad-iso97971"), _dereq_("./pad-zeropadding"), _dereq_("./pad-nopadding"), _dereq_("./format-hex"), _dereq_("./aes"), _dereq_("./tripledes"), _dereq_("./rc4"), _dereq_("./rabbit"), _dereq_("./rabbit-legacy"));
25246 }
25247 else if (typeof define === "function" && define.amd) {
25248 // AMD
25249 define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory);
25250 }
25251 else {
25252 // Global (browser)
25253 factory(root.CryptoJS);
25254 }
25255}(this, function (CryptoJS) {
25256
25257 return CryptoJS;
25258
25259}));
25260},{"./aes":29,"./cipher-core":30,"./core":31,"./enc-base64":32,"./enc-utf16":33,"./evpkdf":34,"./format-hex":35,"./hmac":36,"./lib-typedarrays":38,"./md5":39,"./mode-cfb":40,"./mode-ctr":42,"./mode-ctr-gladman":41,"./mode-ecb":43,"./mode-ofb":44,"./pad-ansix923":45,"./pad-iso10126":46,"./pad-iso97971":47,"./pad-nopadding":48,"./pad-zeropadding":49,"./pbkdf2":50,"./rabbit":52,"./rabbit-legacy":51,"./rc4":53,"./ripemd160":54,"./sha1":55,"./sha224":56,"./sha256":57,"./sha3":58,"./sha384":59,"./sha512":60,"./tripledes":61,"./x64-core":62}],38:[function(_dereq_,module,exports){
25261;(function (root, factory) {
25262 if (typeof exports === "object") {
25263 // CommonJS
25264 module.exports = exports = factory(_dereq_("./core"));
25265 }
25266 else if (typeof define === "function" && define.amd) {
25267 // AMD
25268 define(["./core"], factory);
25269 }
25270 else {
25271 // Global (browser)
25272 factory(root.CryptoJS);
25273 }
25274}(this, function (CryptoJS) {
25275
25276 (function () {
25277 // Check if typed arrays are supported
25278 if (typeof ArrayBuffer != 'function') {
25279 return;
25280 }
25281
25282 // Shortcuts
25283 var C = CryptoJS;
25284 var C_lib = C.lib;
25285 var WordArray = C_lib.WordArray;
25286
25287 // Reference original init
25288 var superInit = WordArray.init;
25289
25290 // Augment WordArray.init to handle typed arrays
25291 var subInit = WordArray.init = function (typedArray) {
25292 // Convert buffers to uint8
25293 if (typedArray instanceof ArrayBuffer) {
25294 typedArray = new Uint8Array(typedArray);
25295 }
25296
25297 // Convert other array views to uint8
25298 if (
25299 typedArray instanceof Int8Array ||
25300 typedArray instanceof Uint8ClampedArray ||
25301 typedArray instanceof Int16Array ||
25302 typedArray instanceof Uint16Array ||
25303 typedArray instanceof Int32Array ||
25304 typedArray instanceof Uint32Array ||
25305 typedArray instanceof Float32Array ||
25306 typedArray instanceof Float64Array
25307 ) {
25308 typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
25309 }
25310
25311 // Handle Uint8Array
25312 if (typedArray instanceof Uint8Array) {
25313 // Shortcut
25314 var typedArrayByteLength = typedArray.byteLength;
25315
25316 // Extract bytes
25317 var words = [];
25318 for (var i = 0; i < typedArrayByteLength; i++) {
25319 words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
25320 }
25321
25322 // Initialize this word array
25323 superInit.call(this, words, typedArrayByteLength);
25324 } else {
25325 // Else call normal init
25326 superInit.apply(this, arguments);
25327 }
25328 };
25329
25330 subInit.prototype = WordArray;
25331 }());
25332
25333
25334 return CryptoJS.lib.WordArray;
25335
25336}));
25337},{"./core":31}],39:[function(_dereq_,module,exports){
25338;(function (root, factory) {
25339 if (typeof exports === "object") {
25340 // CommonJS
25341 module.exports = exports = factory(_dereq_("./core"));
25342 }
25343 else if (typeof define === "function" && define.amd) {
25344 // AMD
25345 define(["./core"], factory);
25346 }
25347 else {
25348 // Global (browser)
25349 factory(root.CryptoJS);
25350 }
25351}(this, function (CryptoJS) {
25352
25353 (function (Math) {
25354 // Shortcuts
25355 var C = CryptoJS;
25356 var C_lib = C.lib;
25357 var WordArray = C_lib.WordArray;
25358 var Hasher = C_lib.Hasher;
25359 var C_algo = C.algo;
25360
25361 // Constants table
25362 var T = [];
25363
25364 // Compute constants
25365 (function () {
25366 for (var i = 0; i < 64; i++) {
25367 T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
25368 }
25369 }());
25370
25371 /**
25372 * MD5 hash algorithm.
25373 */
25374 var MD5 = C_algo.MD5 = Hasher.extend({
25375 _doReset: function () {
25376 this._hash = new WordArray.init([
25377 0x67452301, 0xefcdab89,
25378 0x98badcfe, 0x10325476
25379 ]);
25380 },
25381
25382 _doProcessBlock: function (M, offset) {
25383 // Swap endian
25384 for (var i = 0; i < 16; i++) {
25385 // Shortcuts
25386 var offset_i = offset + i;
25387 var M_offset_i = M[offset_i];
25388
25389 M[offset_i] = (
25390 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
25391 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
25392 );
25393 }
25394
25395 // Shortcuts
25396 var H = this._hash.words;
25397
25398 var M_offset_0 = M[offset + 0];
25399 var M_offset_1 = M[offset + 1];
25400 var M_offset_2 = M[offset + 2];
25401 var M_offset_3 = M[offset + 3];
25402 var M_offset_4 = M[offset + 4];
25403 var M_offset_5 = M[offset + 5];
25404 var M_offset_6 = M[offset + 6];
25405 var M_offset_7 = M[offset + 7];
25406 var M_offset_8 = M[offset + 8];
25407 var M_offset_9 = M[offset + 9];
25408 var M_offset_10 = M[offset + 10];
25409 var M_offset_11 = M[offset + 11];
25410 var M_offset_12 = M[offset + 12];
25411 var M_offset_13 = M[offset + 13];
25412 var M_offset_14 = M[offset + 14];
25413 var M_offset_15 = M[offset + 15];
25414
25415 // Working varialbes
25416 var a = H[0];
25417 var b = H[1];
25418 var c = H[2];
25419 var d = H[3];
25420
25421 // Computation
25422 a = FF(a, b, c, d, M_offset_0, 7, T[0]);
25423 d = FF(d, a, b, c, M_offset_1, 12, T[1]);
25424 c = FF(c, d, a, b, M_offset_2, 17, T[2]);
25425 b = FF(b, c, d, a, M_offset_3, 22, T[3]);
25426 a = FF(a, b, c, d, M_offset_4, 7, T[4]);
25427 d = FF(d, a, b, c, M_offset_5, 12, T[5]);
25428 c = FF(c, d, a, b, M_offset_6, 17, T[6]);
25429 b = FF(b, c, d, a, M_offset_7, 22, T[7]);
25430 a = FF(a, b, c, d, M_offset_8, 7, T[8]);
25431 d = FF(d, a, b, c, M_offset_9, 12, T[9]);
25432 c = FF(c, d, a, b, M_offset_10, 17, T[10]);
25433 b = FF(b, c, d, a, M_offset_11, 22, T[11]);
25434 a = FF(a, b, c, d, M_offset_12, 7, T[12]);
25435 d = FF(d, a, b, c, M_offset_13, 12, T[13]);
25436 c = FF(c, d, a, b, M_offset_14, 17, T[14]);
25437 b = FF(b, c, d, a, M_offset_15, 22, T[15]);
25438
25439 a = GG(a, b, c, d, M_offset_1, 5, T[16]);
25440 d = GG(d, a, b, c, M_offset_6, 9, T[17]);
25441 c = GG(c, d, a, b, M_offset_11, 14, T[18]);
25442 b = GG(b, c, d, a, M_offset_0, 20, T[19]);
25443 a = GG(a, b, c, d, M_offset_5, 5, T[20]);
25444 d = GG(d, a, b, c, M_offset_10, 9, T[21]);
25445 c = GG(c, d, a, b, M_offset_15, 14, T[22]);
25446 b = GG(b, c, d, a, M_offset_4, 20, T[23]);
25447 a = GG(a, b, c, d, M_offset_9, 5, T[24]);
25448 d = GG(d, a, b, c, M_offset_14, 9, T[25]);
25449 c = GG(c, d, a, b, M_offset_3, 14, T[26]);
25450 b = GG(b, c, d, a, M_offset_8, 20, T[27]);
25451 a = GG(a, b, c, d, M_offset_13, 5, T[28]);
25452 d = GG(d, a, b, c, M_offset_2, 9, T[29]);
25453 c = GG(c, d, a, b, M_offset_7, 14, T[30]);
25454 b = GG(b, c, d, a, M_offset_12, 20, T[31]);
25455
25456 a = HH(a, b, c, d, M_offset_5, 4, T[32]);
25457 d = HH(d, a, b, c, M_offset_8, 11, T[33]);
25458 c = HH(c, d, a, b, M_offset_11, 16, T[34]);
25459 b = HH(b, c, d, a, M_offset_14, 23, T[35]);
25460 a = HH(a, b, c, d, M_offset_1, 4, T[36]);
25461 d = HH(d, a, b, c, M_offset_4, 11, T[37]);
25462 c = HH(c, d, a, b, M_offset_7, 16, T[38]);
25463 b = HH(b, c, d, a, M_offset_10, 23, T[39]);
25464 a = HH(a, b, c, d, M_offset_13, 4, T[40]);
25465 d = HH(d, a, b, c, M_offset_0, 11, T[41]);
25466 c = HH(c, d, a, b, M_offset_3, 16, T[42]);
25467 b = HH(b, c, d, a, M_offset_6, 23, T[43]);
25468 a = HH(a, b, c, d, M_offset_9, 4, T[44]);
25469 d = HH(d, a, b, c, M_offset_12, 11, T[45]);
25470 c = HH(c, d, a, b, M_offset_15, 16, T[46]);
25471 b = HH(b, c, d, a, M_offset_2, 23, T[47]);
25472
25473 a = II(a, b, c, d, M_offset_0, 6, T[48]);
25474 d = II(d, a, b, c, M_offset_7, 10, T[49]);
25475 c = II(c, d, a, b, M_offset_14, 15, T[50]);
25476 b = II(b, c, d, a, M_offset_5, 21, T[51]);
25477 a = II(a, b, c, d, M_offset_12, 6, T[52]);
25478 d = II(d, a, b, c, M_offset_3, 10, T[53]);
25479 c = II(c, d, a, b, M_offset_10, 15, T[54]);
25480 b = II(b, c, d, a, M_offset_1, 21, T[55]);
25481 a = II(a, b, c, d, M_offset_8, 6, T[56]);
25482 d = II(d, a, b, c, M_offset_15, 10, T[57]);
25483 c = II(c, d, a, b, M_offset_6, 15, T[58]);
25484 b = II(b, c, d, a, M_offset_13, 21, T[59]);
25485 a = II(a, b, c, d, M_offset_4, 6, T[60]);
25486 d = II(d, a, b, c, M_offset_11, 10, T[61]);
25487 c = II(c, d, a, b, M_offset_2, 15, T[62]);
25488 b = II(b, c, d, a, M_offset_9, 21, T[63]);
25489
25490 // Intermediate hash value
25491 H[0] = (H[0] + a) | 0;
25492 H[1] = (H[1] + b) | 0;
25493 H[2] = (H[2] + c) | 0;
25494 H[3] = (H[3] + d) | 0;
25495 },
25496
25497 _doFinalize: function () {
25498 // Shortcuts
25499 var data = this._data;
25500 var dataWords = data.words;
25501
25502 var nBitsTotal = this._nDataBytes * 8;
25503 var nBitsLeft = data.sigBytes * 8;
25504
25505 // Add padding
25506 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
25507
25508 var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
25509 var nBitsTotalL = nBitsTotal;
25510 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
25511 (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
25512 (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
25513 );
25514 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
25515 (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
25516 (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
25517 );
25518
25519 data.sigBytes = (dataWords.length + 1) * 4;
25520
25521 // Hash final blocks
25522 this._process();
25523
25524 // Shortcuts
25525 var hash = this._hash;
25526 var H = hash.words;
25527
25528 // Swap endian
25529 for (var i = 0; i < 4; i++) {
25530 // Shortcut
25531 var H_i = H[i];
25532
25533 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
25534 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
25535 }
25536
25537 // Return final computed hash
25538 return hash;
25539 },
25540
25541 clone: function () {
25542 var clone = Hasher.clone.call(this);
25543 clone._hash = this._hash.clone();
25544
25545 return clone;
25546 }
25547 });
25548
25549 function FF(a, b, c, d, x, s, t) {
25550 var n = a + ((b & c) | (~b & d)) + x + t;
25551 return ((n << s) | (n >>> (32 - s))) + b;
25552 }
25553
25554 function GG(a, b, c, d, x, s, t) {
25555 var n = a + ((b & d) | (c & ~d)) + x + t;
25556 return ((n << s) | (n >>> (32 - s))) + b;
25557 }
25558
25559 function HH(a, b, c, d, x, s, t) {
25560 var n = a + (b ^ c ^ d) + x + t;
25561 return ((n << s) | (n >>> (32 - s))) + b;
25562 }
25563
25564 function II(a, b, c, d, x, s, t) {
25565 var n = a + (c ^ (b | ~d)) + x + t;
25566 return ((n << s) | (n >>> (32 - s))) + b;
25567 }
25568
25569 /**
25570 * Shortcut function to the hasher's object interface.
25571 *
25572 * @param {WordArray|string} message The message to hash.
25573 *
25574 * @return {WordArray} The hash.
25575 *
25576 * @static
25577 *
25578 * @example
25579 *
25580 * var hash = CryptoJS.MD5('message');
25581 * var hash = CryptoJS.MD5(wordArray);
25582 */
25583 C.MD5 = Hasher._createHelper(MD5);
25584
25585 /**
25586 * Shortcut function to the HMAC's object interface.
25587 *
25588 * @param {WordArray|string} message The message to hash.
25589 * @param {WordArray|string} key The secret key.
25590 *
25591 * @return {WordArray} The HMAC.
25592 *
25593 * @static
25594 *
25595 * @example
25596 *
25597 * var hmac = CryptoJS.HmacMD5(message, key);
25598 */
25599 C.HmacMD5 = Hasher._createHmacHelper(MD5);
25600 }(Math));
25601
25602
25603 return CryptoJS.MD5;
25604
25605}));
25606},{"./core":31}],40:[function(_dereq_,module,exports){
25607;(function (root, factory, undef) {
25608 if (typeof exports === "object") {
25609 // CommonJS
25610 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25611 }
25612 else if (typeof define === "function" && define.amd) {
25613 // AMD
25614 define(["./core", "./cipher-core"], factory);
25615 }
25616 else {
25617 // Global (browser)
25618 factory(root.CryptoJS);
25619 }
25620}(this, function (CryptoJS) {
25621
25622 /**
25623 * Cipher Feedback block mode.
25624 */
25625 CryptoJS.mode.CFB = (function () {
25626 var CFB = CryptoJS.lib.BlockCipherMode.extend();
25627
25628 CFB.Encryptor = CFB.extend({
25629 processBlock: function (words, offset) {
25630 // Shortcuts
25631 var cipher = this._cipher;
25632 var blockSize = cipher.blockSize;
25633
25634 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
25635
25636 // Remember this block to use with next block
25637 this._prevBlock = words.slice(offset, offset + blockSize);
25638 }
25639 });
25640
25641 CFB.Decryptor = CFB.extend({
25642 processBlock: function (words, offset) {
25643 // Shortcuts
25644 var cipher = this._cipher;
25645 var blockSize = cipher.blockSize;
25646
25647 // Remember this block to use with next block
25648 var thisBlock = words.slice(offset, offset + blockSize);
25649
25650 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
25651
25652 // This block becomes the previous block
25653 this._prevBlock = thisBlock;
25654 }
25655 });
25656
25657 function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
25658 // Shortcut
25659 var iv = this._iv;
25660
25661 // Generate keystream
25662 if (iv) {
25663 var keystream = iv.slice(0);
25664
25665 // Remove IV for subsequent blocks
25666 this._iv = undefined;
25667 } else {
25668 var keystream = this._prevBlock;
25669 }
25670 cipher.encryptBlock(keystream, 0);
25671
25672 // Encrypt
25673 for (var i = 0; i < blockSize; i++) {
25674 words[offset + i] ^= keystream[i];
25675 }
25676 }
25677
25678 return CFB;
25679 }());
25680
25681
25682 return CryptoJS.mode.CFB;
25683
25684}));
25685},{"./cipher-core":30,"./core":31}],41:[function(_dereq_,module,exports){
25686;(function (root, factory, undef) {
25687 if (typeof exports === "object") {
25688 // CommonJS
25689 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25690 }
25691 else if (typeof define === "function" && define.amd) {
25692 // AMD
25693 define(["./core", "./cipher-core"], factory);
25694 }
25695 else {
25696 // Global (browser)
25697 factory(root.CryptoJS);
25698 }
25699}(this, function (CryptoJS) {
25700
25701 /** @preserve
25702 * Counter block mode compatible with Dr Brian Gladman fileenc.c
25703 * derived from CryptoJS.mode.CTR
25704 * Jan Hruby jhruby.web@gmail.com
25705 */
25706 CryptoJS.mode.CTRGladman = (function () {
25707 var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
25708
25709 function incWord(word)
25710 {
25711 if (((word >> 24) & 0xff) === 0xff) { //overflow
25712 var b1 = (word >> 16)&0xff;
25713 var b2 = (word >> 8)&0xff;
25714 var b3 = word & 0xff;
25715
25716 if (b1 === 0xff) // overflow b1
25717 {
25718 b1 = 0;
25719 if (b2 === 0xff)
25720 {
25721 b2 = 0;
25722 if (b3 === 0xff)
25723 {
25724 b3 = 0;
25725 }
25726 else
25727 {
25728 ++b3;
25729 }
25730 }
25731 else
25732 {
25733 ++b2;
25734 }
25735 }
25736 else
25737 {
25738 ++b1;
25739 }
25740
25741 word = 0;
25742 word += (b1 << 16);
25743 word += (b2 << 8);
25744 word += b3;
25745 }
25746 else
25747 {
25748 word += (0x01 << 24);
25749 }
25750 return word;
25751 }
25752
25753 function incCounter(counter)
25754 {
25755 if ((counter[0] = incWord(counter[0])) === 0)
25756 {
25757 // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
25758 counter[1] = incWord(counter[1]);
25759 }
25760 return counter;
25761 }
25762
25763 var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
25764 processBlock: function (words, offset) {
25765 // Shortcuts
25766 var cipher = this._cipher
25767 var blockSize = cipher.blockSize;
25768 var iv = this._iv;
25769 var counter = this._counter;
25770
25771 // Generate keystream
25772 if (iv) {
25773 counter = this._counter = iv.slice(0);
25774
25775 // Remove IV for subsequent blocks
25776 this._iv = undefined;
25777 }
25778
25779 incCounter(counter);
25780
25781 var keystream = counter.slice(0);
25782 cipher.encryptBlock(keystream, 0);
25783
25784 // Encrypt
25785 for (var i = 0; i < blockSize; i++) {
25786 words[offset + i] ^= keystream[i];
25787 }
25788 }
25789 });
25790
25791 CTRGladman.Decryptor = Encryptor;
25792
25793 return CTRGladman;
25794 }());
25795
25796
25797
25798
25799 return CryptoJS.mode.CTRGladman;
25800
25801}));
25802},{"./cipher-core":30,"./core":31}],42:[function(_dereq_,module,exports){
25803;(function (root, factory, undef) {
25804 if (typeof exports === "object") {
25805 // CommonJS
25806 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25807 }
25808 else if (typeof define === "function" && define.amd) {
25809 // AMD
25810 define(["./core", "./cipher-core"], factory);
25811 }
25812 else {
25813 // Global (browser)
25814 factory(root.CryptoJS);
25815 }
25816}(this, function (CryptoJS) {
25817
25818 /**
25819 * Counter block mode.
25820 */
25821 CryptoJS.mode.CTR = (function () {
25822 var CTR = CryptoJS.lib.BlockCipherMode.extend();
25823
25824 var Encryptor = CTR.Encryptor = CTR.extend({
25825 processBlock: function (words, offset) {
25826 // Shortcuts
25827 var cipher = this._cipher
25828 var blockSize = cipher.blockSize;
25829 var iv = this._iv;
25830 var counter = this._counter;
25831
25832 // Generate keystream
25833 if (iv) {
25834 counter = this._counter = iv.slice(0);
25835
25836 // Remove IV for subsequent blocks
25837 this._iv = undefined;
25838 }
25839 var keystream = counter.slice(0);
25840 cipher.encryptBlock(keystream, 0);
25841
25842 // Increment counter
25843 counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0
25844
25845 // Encrypt
25846 for (var i = 0; i < blockSize; i++) {
25847 words[offset + i] ^= keystream[i];
25848 }
25849 }
25850 });
25851
25852 CTR.Decryptor = Encryptor;
25853
25854 return CTR;
25855 }());
25856
25857
25858 return CryptoJS.mode.CTR;
25859
25860}));
25861},{"./cipher-core":30,"./core":31}],43:[function(_dereq_,module,exports){
25862;(function (root, factory, undef) {
25863 if (typeof exports === "object") {
25864 // CommonJS
25865 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25866 }
25867 else if (typeof define === "function" && define.amd) {
25868 // AMD
25869 define(["./core", "./cipher-core"], factory);
25870 }
25871 else {
25872 // Global (browser)
25873 factory(root.CryptoJS);
25874 }
25875}(this, function (CryptoJS) {
25876
25877 /**
25878 * Electronic Codebook block mode.
25879 */
25880 CryptoJS.mode.ECB = (function () {
25881 var ECB = CryptoJS.lib.BlockCipherMode.extend();
25882
25883 ECB.Encryptor = ECB.extend({
25884 processBlock: function (words, offset) {
25885 this._cipher.encryptBlock(words, offset);
25886 }
25887 });
25888
25889 ECB.Decryptor = ECB.extend({
25890 processBlock: function (words, offset) {
25891 this._cipher.decryptBlock(words, offset);
25892 }
25893 });
25894
25895 return ECB;
25896 }());
25897
25898
25899 return CryptoJS.mode.ECB;
25900
25901}));
25902},{"./cipher-core":30,"./core":31}],44:[function(_dereq_,module,exports){
25903;(function (root, factory, undef) {
25904 if (typeof exports === "object") {
25905 // CommonJS
25906 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25907 }
25908 else if (typeof define === "function" && define.amd) {
25909 // AMD
25910 define(["./core", "./cipher-core"], factory);
25911 }
25912 else {
25913 // Global (browser)
25914 factory(root.CryptoJS);
25915 }
25916}(this, function (CryptoJS) {
25917
25918 /**
25919 * Output Feedback block mode.
25920 */
25921 CryptoJS.mode.OFB = (function () {
25922 var OFB = CryptoJS.lib.BlockCipherMode.extend();
25923
25924 var Encryptor = OFB.Encryptor = OFB.extend({
25925 processBlock: function (words, offset) {
25926 // Shortcuts
25927 var cipher = this._cipher
25928 var blockSize = cipher.blockSize;
25929 var iv = this._iv;
25930 var keystream = this._keystream;
25931
25932 // Generate keystream
25933 if (iv) {
25934 keystream = this._keystream = iv.slice(0);
25935
25936 // Remove IV for subsequent blocks
25937 this._iv = undefined;
25938 }
25939 cipher.encryptBlock(keystream, 0);
25940
25941 // Encrypt
25942 for (var i = 0; i < blockSize; i++) {
25943 words[offset + i] ^= keystream[i];
25944 }
25945 }
25946 });
25947
25948 OFB.Decryptor = Encryptor;
25949
25950 return OFB;
25951 }());
25952
25953
25954 return CryptoJS.mode.OFB;
25955
25956}));
25957},{"./cipher-core":30,"./core":31}],45:[function(_dereq_,module,exports){
25958;(function (root, factory, undef) {
25959 if (typeof exports === "object") {
25960 // CommonJS
25961 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
25962 }
25963 else if (typeof define === "function" && define.amd) {
25964 // AMD
25965 define(["./core", "./cipher-core"], factory);
25966 }
25967 else {
25968 // Global (browser)
25969 factory(root.CryptoJS);
25970 }
25971}(this, function (CryptoJS) {
25972
25973 /**
25974 * ANSI X.923 padding strategy.
25975 */
25976 CryptoJS.pad.AnsiX923 = {
25977 pad: function (data, blockSize) {
25978 // Shortcuts
25979 var dataSigBytes = data.sigBytes;
25980 var blockSizeBytes = blockSize * 4;
25981
25982 // Count padding bytes
25983 var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
25984
25985 // Compute last byte position
25986 var lastBytePos = dataSigBytes + nPaddingBytes - 1;
25987
25988 // Pad
25989 data.clamp();
25990 data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
25991 data.sigBytes += nPaddingBytes;
25992 },
25993
25994 unpad: function (data) {
25995 // Get number of padding bytes from last byte
25996 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
25997
25998 // Remove padding
25999 data.sigBytes -= nPaddingBytes;
26000 }
26001 };
26002
26003
26004 return CryptoJS.pad.Ansix923;
26005
26006}));
26007},{"./cipher-core":30,"./core":31}],46:[function(_dereq_,module,exports){
26008;(function (root, factory, undef) {
26009 if (typeof exports === "object") {
26010 // CommonJS
26011 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
26012 }
26013 else if (typeof define === "function" && define.amd) {
26014 // AMD
26015 define(["./core", "./cipher-core"], factory);
26016 }
26017 else {
26018 // Global (browser)
26019 factory(root.CryptoJS);
26020 }
26021}(this, function (CryptoJS) {
26022
26023 /**
26024 * ISO 10126 padding strategy.
26025 */
26026 CryptoJS.pad.Iso10126 = {
26027 pad: function (data, blockSize) {
26028 // Shortcut
26029 var blockSizeBytes = blockSize * 4;
26030
26031 // Count padding bytes
26032 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
26033
26034 // Pad
26035 data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
26036 concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
26037 },
26038
26039 unpad: function (data) {
26040 // Get number of padding bytes from last byte
26041 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
26042
26043 // Remove padding
26044 data.sigBytes -= nPaddingBytes;
26045 }
26046 };
26047
26048
26049 return CryptoJS.pad.Iso10126;
26050
26051}));
26052},{"./cipher-core":30,"./core":31}],47:[function(_dereq_,module,exports){
26053;(function (root, factory, undef) {
26054 if (typeof exports === "object") {
26055 // CommonJS
26056 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
26057 }
26058 else if (typeof define === "function" && define.amd) {
26059 // AMD
26060 define(["./core", "./cipher-core"], factory);
26061 }
26062 else {
26063 // Global (browser)
26064 factory(root.CryptoJS);
26065 }
26066}(this, function (CryptoJS) {
26067
26068 /**
26069 * ISO/IEC 9797-1 Padding Method 2.
26070 */
26071 CryptoJS.pad.Iso97971 = {
26072 pad: function (data, blockSize) {
26073 // Add 0x80 byte
26074 data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));
26075
26076 // Zero pad the rest
26077 CryptoJS.pad.ZeroPadding.pad(data, blockSize);
26078 },
26079
26080 unpad: function (data) {
26081 // Remove zero padding
26082 CryptoJS.pad.ZeroPadding.unpad(data);
26083
26084 // Remove one more byte -- the 0x80 byte
26085 data.sigBytes--;
26086 }
26087 };
26088
26089
26090 return CryptoJS.pad.Iso97971;
26091
26092}));
26093},{"./cipher-core":30,"./core":31}],48:[function(_dereq_,module,exports){
26094;(function (root, factory, undef) {
26095 if (typeof exports === "object") {
26096 // CommonJS
26097 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
26098 }
26099 else if (typeof define === "function" && define.amd) {
26100 // AMD
26101 define(["./core", "./cipher-core"], factory);
26102 }
26103 else {
26104 // Global (browser)
26105 factory(root.CryptoJS);
26106 }
26107}(this, function (CryptoJS) {
26108
26109 /**
26110 * A noop padding strategy.
26111 */
26112 CryptoJS.pad.NoPadding = {
26113 pad: function () {
26114 },
26115
26116 unpad: function () {
26117 }
26118 };
26119
26120
26121 return CryptoJS.pad.NoPadding;
26122
26123}));
26124},{"./cipher-core":30,"./core":31}],49:[function(_dereq_,module,exports){
26125;(function (root, factory, undef) {
26126 if (typeof exports === "object") {
26127 // CommonJS
26128 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
26129 }
26130 else if (typeof define === "function" && define.amd) {
26131 // AMD
26132 define(["./core", "./cipher-core"], factory);
26133 }
26134 else {
26135 // Global (browser)
26136 factory(root.CryptoJS);
26137 }
26138}(this, function (CryptoJS) {
26139
26140 /**
26141 * Zero padding strategy.
26142 */
26143 CryptoJS.pad.ZeroPadding = {
26144 pad: function (data, blockSize) {
26145 // Shortcut
26146 var blockSizeBytes = blockSize * 4;
26147
26148 // Pad
26149 data.clamp();
26150 data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
26151 },
26152
26153 unpad: function (data) {
26154 // Shortcut
26155 var dataWords = data.words;
26156
26157 // Unpad
26158 var i = data.sigBytes - 1;
26159 while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
26160 i--;
26161 }
26162 data.sigBytes = i + 1;
26163 }
26164 };
26165
26166
26167 return CryptoJS.pad.ZeroPadding;
26168
26169}));
26170},{"./cipher-core":30,"./core":31}],50:[function(_dereq_,module,exports){
26171;(function (root, factory, undef) {
26172 if (typeof exports === "object") {
26173 // CommonJS
26174 module.exports = exports = factory(_dereq_("./core"), _dereq_("./sha1"), _dereq_("./hmac"));
26175 }
26176 else if (typeof define === "function" && define.amd) {
26177 // AMD
26178 define(["./core", "./sha1", "./hmac"], factory);
26179 }
26180 else {
26181 // Global (browser)
26182 factory(root.CryptoJS);
26183 }
26184}(this, function (CryptoJS) {
26185
26186 (function () {
26187 // Shortcuts
26188 var C = CryptoJS;
26189 var C_lib = C.lib;
26190 var Base = C_lib.Base;
26191 var WordArray = C_lib.WordArray;
26192 var C_algo = C.algo;
26193 var SHA1 = C_algo.SHA1;
26194 var HMAC = C_algo.HMAC;
26195
26196 /**
26197 * Password-Based Key Derivation Function 2 algorithm.
26198 */
26199 var PBKDF2 = C_algo.PBKDF2 = Base.extend({
26200 /**
26201 * Configuration options.
26202 *
26203 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
26204 * @property {Hasher} hasher The hasher to use. Default: SHA1
26205 * @property {number} iterations The number of iterations to perform. Default: 1
26206 */
26207 cfg: Base.extend({
26208 keySize: 128/32,
26209 hasher: SHA1,
26210 iterations: 1
26211 }),
26212
26213 /**
26214 * Initializes a newly created key derivation function.
26215 *
26216 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
26217 *
26218 * @example
26219 *
26220 * var kdf = CryptoJS.algo.PBKDF2.create();
26221 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
26222 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
26223 */
26224 init: function (cfg) {
26225 this.cfg = this.cfg.extend(cfg);
26226 },
26227
26228 /**
26229 * Computes the Password-Based Key Derivation Function 2.
26230 *
26231 * @param {WordArray|string} password The password.
26232 * @param {WordArray|string} salt A salt.
26233 *
26234 * @return {WordArray} The derived key.
26235 *
26236 * @example
26237 *
26238 * var key = kdf.compute(password, salt);
26239 */
26240 compute: function (password, salt) {
26241 // Shortcut
26242 var cfg = this.cfg;
26243
26244 // Init HMAC
26245 var hmac = HMAC.create(cfg.hasher, password);
26246
26247 // Initial values
26248 var derivedKey = WordArray.create();
26249 var blockIndex = WordArray.create([0x00000001]);
26250
26251 // Shortcuts
26252 var derivedKeyWords = derivedKey.words;
26253 var blockIndexWords = blockIndex.words;
26254 var keySize = cfg.keySize;
26255 var iterations = cfg.iterations;
26256
26257 // Generate key
26258 while (derivedKeyWords.length < keySize) {
26259 var block = hmac.update(salt).finalize(blockIndex);
26260 hmac.reset();
26261
26262 // Shortcuts
26263 var blockWords = block.words;
26264 var blockWordsLength = blockWords.length;
26265
26266 // Iterations
26267 var intermediate = block;
26268 for (var i = 1; i < iterations; i++) {
26269 intermediate = hmac.finalize(intermediate);
26270 hmac.reset();
26271
26272 // Shortcut
26273 var intermediateWords = intermediate.words;
26274
26275 // XOR intermediate with block
26276 for (var j = 0; j < blockWordsLength; j++) {
26277 blockWords[j] ^= intermediateWords[j];
26278 }
26279 }
26280
26281 derivedKey.concat(block);
26282 blockIndexWords[0]++;
26283 }
26284 derivedKey.sigBytes = keySize * 4;
26285
26286 return derivedKey;
26287 }
26288 });
26289
26290 /**
26291 * Computes the Password-Based Key Derivation Function 2.
26292 *
26293 * @param {WordArray|string} password The password.
26294 * @param {WordArray|string} salt A salt.
26295 * @param {Object} cfg (Optional) The configuration options to use for this computation.
26296 *
26297 * @return {WordArray} The derived key.
26298 *
26299 * @static
26300 *
26301 * @example
26302 *
26303 * var key = CryptoJS.PBKDF2(password, salt);
26304 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
26305 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
26306 */
26307 C.PBKDF2 = function (password, salt, cfg) {
26308 return PBKDF2.create(cfg).compute(password, salt);
26309 };
26310 }());
26311
26312
26313 return CryptoJS.PBKDF2;
26314
26315}));
26316},{"./core":31,"./hmac":36,"./sha1":55}],51:[function(_dereq_,module,exports){
26317;(function (root, factory, undef) {
26318 if (typeof exports === "object") {
26319 // CommonJS
26320 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
26321 }
26322 else if (typeof define === "function" && define.amd) {
26323 // AMD
26324 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
26325 }
26326 else {
26327 // Global (browser)
26328 factory(root.CryptoJS);
26329 }
26330}(this, function (CryptoJS) {
26331
26332 (function () {
26333 // Shortcuts
26334 var C = CryptoJS;
26335 var C_lib = C.lib;
26336 var StreamCipher = C_lib.StreamCipher;
26337 var C_algo = C.algo;
26338
26339 // Reusable objects
26340 var S = [];
26341 var C_ = [];
26342 var G = [];
26343
26344 /**
26345 * Rabbit stream cipher algorithm.
26346 *
26347 * This is a legacy version that neglected to convert the key to little-endian.
26348 * This error doesn't affect the cipher's security,
26349 * but it does affect its compatibility with other implementations.
26350 */
26351 var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
26352 _doReset: function () {
26353 // Shortcuts
26354 var K = this._key.words;
26355 var iv = this.cfg.iv;
26356
26357 // Generate initial state values
26358 var X = this._X = [
26359 K[0], (K[3] << 16) | (K[2] >>> 16),
26360 K[1], (K[0] << 16) | (K[3] >>> 16),
26361 K[2], (K[1] << 16) | (K[0] >>> 16),
26362 K[3], (K[2] << 16) | (K[1] >>> 16)
26363 ];
26364
26365 // Generate initial counter values
26366 var C = this._C = [
26367 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
26368 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
26369 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
26370 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
26371 ];
26372
26373 // Carry bit
26374 this._b = 0;
26375
26376 // Iterate the system four times
26377 for (var i = 0; i < 4; i++) {
26378 nextState.call(this);
26379 }
26380
26381 // Modify the counters
26382 for (var i = 0; i < 8; i++) {
26383 C[i] ^= X[(i + 4) & 7];
26384 }
26385
26386 // IV setup
26387 if (iv) {
26388 // Shortcuts
26389 var IV = iv.words;
26390 var IV_0 = IV[0];
26391 var IV_1 = IV[1];
26392
26393 // Generate four subvectors
26394 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
26395 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
26396 var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
26397 var i3 = (i2 << 16) | (i0 & 0x0000ffff);
26398
26399 // Modify counter values
26400 C[0] ^= i0;
26401 C[1] ^= i1;
26402 C[2] ^= i2;
26403 C[3] ^= i3;
26404 C[4] ^= i0;
26405 C[5] ^= i1;
26406 C[6] ^= i2;
26407 C[7] ^= i3;
26408
26409 // Iterate the system four times
26410 for (var i = 0; i < 4; i++) {
26411 nextState.call(this);
26412 }
26413 }
26414 },
26415
26416 _doProcessBlock: function (M, offset) {
26417 // Shortcut
26418 var X = this._X;
26419
26420 // Iterate the system
26421 nextState.call(this);
26422
26423 // Generate four keystream words
26424 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
26425 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
26426 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
26427 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
26428
26429 for (var i = 0; i < 4; i++) {
26430 // Swap endian
26431 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
26432 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
26433
26434 // Encrypt
26435 M[offset + i] ^= S[i];
26436 }
26437 },
26438
26439 blockSize: 128/32,
26440
26441 ivSize: 64/32
26442 });
26443
26444 function nextState() {
26445 // Shortcuts
26446 var X = this._X;
26447 var C = this._C;
26448
26449 // Save old counter values
26450 for (var i = 0; i < 8; i++) {
26451 C_[i] = C[i];
26452 }
26453
26454 // Calculate new counter values
26455 C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
26456 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
26457 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
26458 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
26459 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
26460 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
26461 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
26462 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
26463 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
26464
26465 // Calculate the g-values
26466 for (var i = 0; i < 8; i++) {
26467 var gx = X[i] + C[i];
26468
26469 // Construct high and low argument for squaring
26470 var ga = gx & 0xffff;
26471 var gb = gx >>> 16;
26472
26473 // Calculate high and low result of squaring
26474 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
26475 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
26476
26477 // High XOR low
26478 G[i] = gh ^ gl;
26479 }
26480
26481 // Calculate new state values
26482 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
26483 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
26484 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
26485 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
26486 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
26487 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
26488 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
26489 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
26490 }
26491
26492 /**
26493 * Shortcut functions to the cipher's object interface.
26494 *
26495 * @example
26496 *
26497 * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
26498 * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
26499 */
26500 C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
26501 }());
26502
26503
26504 return CryptoJS.RabbitLegacy;
26505
26506}));
26507},{"./cipher-core":30,"./core":31,"./enc-base64":32,"./evpkdf":34,"./md5":39}],52:[function(_dereq_,module,exports){
26508;(function (root, factory, undef) {
26509 if (typeof exports === "object") {
26510 // CommonJS
26511 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
26512 }
26513 else if (typeof define === "function" && define.amd) {
26514 // AMD
26515 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
26516 }
26517 else {
26518 // Global (browser)
26519 factory(root.CryptoJS);
26520 }
26521}(this, function (CryptoJS) {
26522
26523 (function () {
26524 // Shortcuts
26525 var C = CryptoJS;
26526 var C_lib = C.lib;
26527 var StreamCipher = C_lib.StreamCipher;
26528 var C_algo = C.algo;
26529
26530 // Reusable objects
26531 var S = [];
26532 var C_ = [];
26533 var G = [];
26534
26535 /**
26536 * Rabbit stream cipher algorithm
26537 */
26538 var Rabbit = C_algo.Rabbit = StreamCipher.extend({
26539 _doReset: function () {
26540 // Shortcuts
26541 var K = this._key.words;
26542 var iv = this.cfg.iv;
26543
26544 // Swap endian
26545 for (var i = 0; i < 4; i++) {
26546 K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |
26547 (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);
26548 }
26549
26550 // Generate initial state values
26551 var X = this._X = [
26552 K[0], (K[3] << 16) | (K[2] >>> 16),
26553 K[1], (K[0] << 16) | (K[3] >>> 16),
26554 K[2], (K[1] << 16) | (K[0] >>> 16),
26555 K[3], (K[2] << 16) | (K[1] >>> 16)
26556 ];
26557
26558 // Generate initial counter values
26559 var C = this._C = [
26560 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
26561 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
26562 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
26563 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
26564 ];
26565
26566 // Carry bit
26567 this._b = 0;
26568
26569 // Iterate the system four times
26570 for (var i = 0; i < 4; i++) {
26571 nextState.call(this);
26572 }
26573
26574 // Modify the counters
26575 for (var i = 0; i < 8; i++) {
26576 C[i] ^= X[(i + 4) & 7];
26577 }
26578
26579 // IV setup
26580 if (iv) {
26581 // Shortcuts
26582 var IV = iv.words;
26583 var IV_0 = IV[0];
26584 var IV_1 = IV[1];
26585
26586 // Generate four subvectors
26587 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
26588 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
26589 var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
26590 var i3 = (i2 << 16) | (i0 & 0x0000ffff);
26591
26592 // Modify counter values
26593 C[0] ^= i0;
26594 C[1] ^= i1;
26595 C[2] ^= i2;
26596 C[3] ^= i3;
26597 C[4] ^= i0;
26598 C[5] ^= i1;
26599 C[6] ^= i2;
26600 C[7] ^= i3;
26601
26602 // Iterate the system four times
26603 for (var i = 0; i < 4; i++) {
26604 nextState.call(this);
26605 }
26606 }
26607 },
26608
26609 _doProcessBlock: function (M, offset) {
26610 // Shortcut
26611 var X = this._X;
26612
26613 // Iterate the system
26614 nextState.call(this);
26615
26616 // Generate four keystream words
26617 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
26618 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
26619 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
26620 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
26621
26622 for (var i = 0; i < 4; i++) {
26623 // Swap endian
26624 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
26625 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
26626
26627 // Encrypt
26628 M[offset + i] ^= S[i];
26629 }
26630 },
26631
26632 blockSize: 128/32,
26633
26634 ivSize: 64/32
26635 });
26636
26637 function nextState() {
26638 // Shortcuts
26639 var X = this._X;
26640 var C = this._C;
26641
26642 // Save old counter values
26643 for (var i = 0; i < 8; i++) {
26644 C_[i] = C[i];
26645 }
26646
26647 // Calculate new counter values
26648 C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
26649 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
26650 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
26651 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
26652 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
26653 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
26654 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
26655 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
26656 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
26657
26658 // Calculate the g-values
26659 for (var i = 0; i < 8; i++) {
26660 var gx = X[i] + C[i];
26661
26662 // Construct high and low argument for squaring
26663 var ga = gx & 0xffff;
26664 var gb = gx >>> 16;
26665
26666 // Calculate high and low result of squaring
26667 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
26668 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
26669
26670 // High XOR low
26671 G[i] = gh ^ gl;
26672 }
26673
26674 // Calculate new state values
26675 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
26676 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
26677 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
26678 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
26679 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
26680 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
26681 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
26682 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
26683 }
26684
26685 /**
26686 * Shortcut functions to the cipher's object interface.
26687 *
26688 * @example
26689 *
26690 * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
26691 * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
26692 */
26693 C.Rabbit = StreamCipher._createHelper(Rabbit);
26694 }());
26695
26696
26697 return CryptoJS.Rabbit;
26698
26699}));
26700},{"./cipher-core":30,"./core":31,"./enc-base64":32,"./evpkdf":34,"./md5":39}],53:[function(_dereq_,module,exports){
26701;(function (root, factory, undef) {
26702 if (typeof exports === "object") {
26703 // CommonJS
26704 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
26705 }
26706 else if (typeof define === "function" && define.amd) {
26707 // AMD
26708 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
26709 }
26710 else {
26711 // Global (browser)
26712 factory(root.CryptoJS);
26713 }
26714}(this, function (CryptoJS) {
26715
26716 (function () {
26717 // Shortcuts
26718 var C = CryptoJS;
26719 var C_lib = C.lib;
26720 var StreamCipher = C_lib.StreamCipher;
26721 var C_algo = C.algo;
26722
26723 /**
26724 * RC4 stream cipher algorithm.
26725 */
26726 var RC4 = C_algo.RC4 = StreamCipher.extend({
26727 _doReset: function () {
26728 // Shortcuts
26729 var key = this._key;
26730 var keyWords = key.words;
26731 var keySigBytes = key.sigBytes;
26732
26733 // Init sbox
26734 var S = this._S = [];
26735 for (var i = 0; i < 256; i++) {
26736 S[i] = i;
26737 }
26738
26739 // Key setup
26740 for (var i = 0, j = 0; i < 256; i++) {
26741 var keyByteIndex = i % keySigBytes;
26742 var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;
26743
26744 j = (j + S[i] + keyByte) % 256;
26745
26746 // Swap
26747 var t = S[i];
26748 S[i] = S[j];
26749 S[j] = t;
26750 }
26751
26752 // Counters
26753 this._i = this._j = 0;
26754 },
26755
26756 _doProcessBlock: function (M, offset) {
26757 M[offset] ^= generateKeystreamWord.call(this);
26758 },
26759
26760 keySize: 256/32,
26761
26762 ivSize: 0
26763 });
26764
26765 function generateKeystreamWord() {
26766 // Shortcuts
26767 var S = this._S;
26768 var i = this._i;
26769 var j = this._j;
26770
26771 // Generate keystream word
26772 var keystreamWord = 0;
26773 for (var n = 0; n < 4; n++) {
26774 i = (i + 1) % 256;
26775 j = (j + S[i]) % 256;
26776
26777 // Swap
26778 var t = S[i];
26779 S[i] = S[j];
26780 S[j] = t;
26781
26782 keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);
26783 }
26784
26785 // Update counters
26786 this._i = i;
26787 this._j = j;
26788
26789 return keystreamWord;
26790 }
26791
26792 /**
26793 * Shortcut functions to the cipher's object interface.
26794 *
26795 * @example
26796 *
26797 * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
26798 * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
26799 */
26800 C.RC4 = StreamCipher._createHelper(RC4);
26801
26802 /**
26803 * Modified RC4 stream cipher algorithm.
26804 */
26805 var RC4Drop = C_algo.RC4Drop = RC4.extend({
26806 /**
26807 * Configuration options.
26808 *
26809 * @property {number} drop The number of keystream words to drop. Default 192
26810 */
26811 cfg: RC4.cfg.extend({
26812 drop: 192
26813 }),
26814
26815 _doReset: function () {
26816 RC4._doReset.call(this);
26817
26818 // Drop
26819 for (var i = this.cfg.drop; i > 0; i--) {
26820 generateKeystreamWord.call(this);
26821 }
26822 }
26823 });
26824
26825 /**
26826 * Shortcut functions to the cipher's object interface.
26827 *
26828 * @example
26829 *
26830 * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
26831 * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
26832 */
26833 C.RC4Drop = StreamCipher._createHelper(RC4Drop);
26834 }());
26835
26836
26837 return CryptoJS.RC4;
26838
26839}));
26840},{"./cipher-core":30,"./core":31,"./enc-base64":32,"./evpkdf":34,"./md5":39}],54:[function(_dereq_,module,exports){
26841;(function (root, factory) {
26842 if (typeof exports === "object") {
26843 // CommonJS
26844 module.exports = exports = factory(_dereq_("./core"));
26845 }
26846 else if (typeof define === "function" && define.amd) {
26847 // AMD
26848 define(["./core"], factory);
26849 }
26850 else {
26851 // Global (browser)
26852 factory(root.CryptoJS);
26853 }
26854}(this, function (CryptoJS) {
26855
26856 /** @preserve
26857 (c) 2012 by Cédric Mesnil. All rights reserved.
26858
26859 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
26860
26861 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
26862 - 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.
26863
26864 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26865 */
26866
26867 (function (Math) {
26868 // Shortcuts
26869 var C = CryptoJS;
26870 var C_lib = C.lib;
26871 var WordArray = C_lib.WordArray;
26872 var Hasher = C_lib.Hasher;
26873 var C_algo = C.algo;
26874
26875 // Constants table
26876 var _zl = WordArray.create([
26877 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
26878 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
26879 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
26880 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
26881 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);
26882 var _zr = WordArray.create([
26883 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
26884 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
26885 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
26886 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
26887 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);
26888 var _sl = WordArray.create([
26889 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
26890 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
26891 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
26892 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
26893 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);
26894 var _sr = WordArray.create([
26895 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
26896 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
26897 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
26898 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
26899 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);
26900
26901 var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
26902 var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);
26903
26904 /**
26905 * RIPEMD160 hash algorithm.
26906 */
26907 var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
26908 _doReset: function () {
26909 this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
26910 },
26911
26912 _doProcessBlock: function (M, offset) {
26913
26914 // Swap endian
26915 for (var i = 0; i < 16; i++) {
26916 // Shortcuts
26917 var offset_i = offset + i;
26918 var M_offset_i = M[offset_i];
26919
26920 // Swap
26921 M[offset_i] = (
26922 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
26923 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
26924 );
26925 }
26926 // Shortcut
26927 var H = this._hash.words;
26928 var hl = _hl.words;
26929 var hr = _hr.words;
26930 var zl = _zl.words;
26931 var zr = _zr.words;
26932 var sl = _sl.words;
26933 var sr = _sr.words;
26934
26935 // Working variables
26936 var al, bl, cl, dl, el;
26937 var ar, br, cr, dr, er;
26938
26939 ar = al = H[0];
26940 br = bl = H[1];
26941 cr = cl = H[2];
26942 dr = dl = H[3];
26943 er = el = H[4];
26944 // Computation
26945 var t;
26946 for (var i = 0; i < 80; i += 1) {
26947 t = (al + M[offset+zl[i]])|0;
26948 if (i<16){
26949 t += f1(bl,cl,dl) + hl[0];
26950 } else if (i<32) {
26951 t += f2(bl,cl,dl) + hl[1];
26952 } else if (i<48) {
26953 t += f3(bl,cl,dl) + hl[2];
26954 } else if (i<64) {
26955 t += f4(bl,cl,dl) + hl[3];
26956 } else {// if (i<80) {
26957 t += f5(bl,cl,dl) + hl[4];
26958 }
26959 t = t|0;
26960 t = rotl(t,sl[i]);
26961 t = (t+el)|0;
26962 al = el;
26963 el = dl;
26964 dl = rotl(cl, 10);
26965 cl = bl;
26966 bl = t;
26967
26968 t = (ar + M[offset+zr[i]])|0;
26969 if (i<16){
26970 t += f5(br,cr,dr) + hr[0];
26971 } else if (i<32) {
26972 t += f4(br,cr,dr) + hr[1];
26973 } else if (i<48) {
26974 t += f3(br,cr,dr) + hr[2];
26975 } else if (i<64) {
26976 t += f2(br,cr,dr) + hr[3];
26977 } else {// if (i<80) {
26978 t += f1(br,cr,dr) + hr[4];
26979 }
26980 t = t|0;
26981 t = rotl(t,sr[i]) ;
26982 t = (t+er)|0;
26983 ar = er;
26984 er = dr;
26985 dr = rotl(cr, 10);
26986 cr = br;
26987 br = t;
26988 }
26989 // Intermediate hash value
26990 t = (H[1] + cl + dr)|0;
26991 H[1] = (H[2] + dl + er)|0;
26992 H[2] = (H[3] + el + ar)|0;
26993 H[3] = (H[4] + al + br)|0;
26994 H[4] = (H[0] + bl + cr)|0;
26995 H[0] = t;
26996 },
26997
26998 _doFinalize: function () {
26999 // Shortcuts
27000 var data = this._data;
27001 var dataWords = data.words;
27002
27003 var nBitsTotal = this._nDataBytes * 8;
27004 var nBitsLeft = data.sigBytes * 8;
27005
27006 // Add padding
27007 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
27008 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
27009 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
27010 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
27011 );
27012 data.sigBytes = (dataWords.length + 1) * 4;
27013
27014 // Hash final blocks
27015 this._process();
27016
27017 // Shortcuts
27018 var hash = this._hash;
27019 var H = hash.words;
27020
27021 // Swap endian
27022 for (var i = 0; i < 5; i++) {
27023 // Shortcut
27024 var H_i = H[i];
27025
27026 // Swap
27027 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
27028 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
27029 }
27030
27031 // Return final computed hash
27032 return hash;
27033 },
27034
27035 clone: function () {
27036 var clone = Hasher.clone.call(this);
27037 clone._hash = this._hash.clone();
27038
27039 return clone;
27040 }
27041 });
27042
27043
27044 function f1(x, y, z) {
27045 return ((x) ^ (y) ^ (z));
27046
27047 }
27048
27049 function f2(x, y, z) {
27050 return (((x)&(y)) | ((~x)&(z)));
27051 }
27052
27053 function f3(x, y, z) {
27054 return (((x) | (~(y))) ^ (z));
27055 }
27056
27057 function f4(x, y, z) {
27058 return (((x) & (z)) | ((y)&(~(z))));
27059 }
27060
27061 function f5(x, y, z) {
27062 return ((x) ^ ((y) |(~(z))));
27063
27064 }
27065
27066 function rotl(x,n) {
27067 return (x<<n) | (x>>>(32-n));
27068 }
27069
27070
27071 /**
27072 * Shortcut function to the hasher's object interface.
27073 *
27074 * @param {WordArray|string} message The message to hash.
27075 *
27076 * @return {WordArray} The hash.
27077 *
27078 * @static
27079 *
27080 * @example
27081 *
27082 * var hash = CryptoJS.RIPEMD160('message');
27083 * var hash = CryptoJS.RIPEMD160(wordArray);
27084 */
27085 C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
27086
27087 /**
27088 * Shortcut function to the HMAC's object interface.
27089 *
27090 * @param {WordArray|string} message The message to hash.
27091 * @param {WordArray|string} key The secret key.
27092 *
27093 * @return {WordArray} The HMAC.
27094 *
27095 * @static
27096 *
27097 * @example
27098 *
27099 * var hmac = CryptoJS.HmacRIPEMD160(message, key);
27100 */
27101 C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
27102 }(Math));
27103
27104
27105 return CryptoJS.RIPEMD160;
27106
27107}));
27108},{"./core":31}],55:[function(_dereq_,module,exports){
27109;(function (root, factory) {
27110 if (typeof exports === "object") {
27111 // CommonJS
27112 module.exports = exports = factory(_dereq_("./core"));
27113 }
27114 else if (typeof define === "function" && define.amd) {
27115 // AMD
27116 define(["./core"], factory);
27117 }
27118 else {
27119 // Global (browser)
27120 factory(root.CryptoJS);
27121 }
27122}(this, function (CryptoJS) {
27123
27124 (function () {
27125 // Shortcuts
27126 var C = CryptoJS;
27127 var C_lib = C.lib;
27128 var WordArray = C_lib.WordArray;
27129 var Hasher = C_lib.Hasher;
27130 var C_algo = C.algo;
27131
27132 // Reusable object
27133 var W = [];
27134
27135 /**
27136 * SHA-1 hash algorithm.
27137 */
27138 var SHA1 = C_algo.SHA1 = Hasher.extend({
27139 _doReset: function () {
27140 this._hash = new WordArray.init([
27141 0x67452301, 0xefcdab89,
27142 0x98badcfe, 0x10325476,
27143 0xc3d2e1f0
27144 ]);
27145 },
27146
27147 _doProcessBlock: function (M, offset) {
27148 // Shortcut
27149 var H = this._hash.words;
27150
27151 // Working variables
27152 var a = H[0];
27153 var b = H[1];
27154 var c = H[2];
27155 var d = H[3];
27156 var e = H[4];
27157
27158 // Computation
27159 for (var i = 0; i < 80; i++) {
27160 if (i < 16) {
27161 W[i] = M[offset + i] | 0;
27162 } else {
27163 var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
27164 W[i] = (n << 1) | (n >>> 31);
27165 }
27166
27167 var t = ((a << 5) | (a >>> 27)) + e + W[i];
27168 if (i < 20) {
27169 t += ((b & c) | (~b & d)) + 0x5a827999;
27170 } else if (i < 40) {
27171 t += (b ^ c ^ d) + 0x6ed9eba1;
27172 } else if (i < 60) {
27173 t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
27174 } else /* if (i < 80) */ {
27175 t += (b ^ c ^ d) - 0x359d3e2a;
27176 }
27177
27178 e = d;
27179 d = c;
27180 c = (b << 30) | (b >>> 2);
27181 b = a;
27182 a = t;
27183 }
27184
27185 // Intermediate hash value
27186 H[0] = (H[0] + a) | 0;
27187 H[1] = (H[1] + b) | 0;
27188 H[2] = (H[2] + c) | 0;
27189 H[3] = (H[3] + d) | 0;
27190 H[4] = (H[4] + e) | 0;
27191 },
27192
27193 _doFinalize: function () {
27194 // Shortcuts
27195 var data = this._data;
27196 var dataWords = data.words;
27197
27198 var nBitsTotal = this._nDataBytes * 8;
27199 var nBitsLeft = data.sigBytes * 8;
27200
27201 // Add padding
27202 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
27203 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
27204 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
27205 data.sigBytes = dataWords.length * 4;
27206
27207 // Hash final blocks
27208 this._process();
27209
27210 // Return final computed hash
27211 return this._hash;
27212 },
27213
27214 clone: function () {
27215 var clone = Hasher.clone.call(this);
27216 clone._hash = this._hash.clone();
27217
27218 return clone;
27219 }
27220 });
27221
27222 /**
27223 * Shortcut function to the hasher's object interface.
27224 *
27225 * @param {WordArray|string} message The message to hash.
27226 *
27227 * @return {WordArray} The hash.
27228 *
27229 * @static
27230 *
27231 * @example
27232 *
27233 * var hash = CryptoJS.SHA1('message');
27234 * var hash = CryptoJS.SHA1(wordArray);
27235 */
27236 C.SHA1 = Hasher._createHelper(SHA1);
27237
27238 /**
27239 * Shortcut function to the HMAC's object interface.
27240 *
27241 * @param {WordArray|string} message The message to hash.
27242 * @param {WordArray|string} key The secret key.
27243 *
27244 * @return {WordArray} The HMAC.
27245 *
27246 * @static
27247 *
27248 * @example
27249 *
27250 * var hmac = CryptoJS.HmacSHA1(message, key);
27251 */
27252 C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
27253 }());
27254
27255
27256 return CryptoJS.SHA1;
27257
27258}));
27259},{"./core":31}],56:[function(_dereq_,module,exports){
27260;(function (root, factory, undef) {
27261 if (typeof exports === "object") {
27262 // CommonJS
27263 module.exports = exports = factory(_dereq_("./core"), _dereq_("./sha256"));
27264 }
27265 else if (typeof define === "function" && define.amd) {
27266 // AMD
27267 define(["./core", "./sha256"], factory);
27268 }
27269 else {
27270 // Global (browser)
27271 factory(root.CryptoJS);
27272 }
27273}(this, function (CryptoJS) {
27274
27275 (function () {
27276 // Shortcuts
27277 var C = CryptoJS;
27278 var C_lib = C.lib;
27279 var WordArray = C_lib.WordArray;
27280 var C_algo = C.algo;
27281 var SHA256 = C_algo.SHA256;
27282
27283 /**
27284 * SHA-224 hash algorithm.
27285 */
27286 var SHA224 = C_algo.SHA224 = SHA256.extend({
27287 _doReset: function () {
27288 this._hash = new WordArray.init([
27289 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
27290 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
27291 ]);
27292 },
27293
27294 _doFinalize: function () {
27295 var hash = SHA256._doFinalize.call(this);
27296
27297 hash.sigBytes -= 4;
27298
27299 return hash;
27300 }
27301 });
27302
27303 /**
27304 * Shortcut function to the hasher's object interface.
27305 *
27306 * @param {WordArray|string} message The message to hash.
27307 *
27308 * @return {WordArray} The hash.
27309 *
27310 * @static
27311 *
27312 * @example
27313 *
27314 * var hash = CryptoJS.SHA224('message');
27315 * var hash = CryptoJS.SHA224(wordArray);
27316 */
27317 C.SHA224 = SHA256._createHelper(SHA224);
27318
27319 /**
27320 * Shortcut function to the HMAC's object interface.
27321 *
27322 * @param {WordArray|string} message The message to hash.
27323 * @param {WordArray|string} key The secret key.
27324 *
27325 * @return {WordArray} The HMAC.
27326 *
27327 * @static
27328 *
27329 * @example
27330 *
27331 * var hmac = CryptoJS.HmacSHA224(message, key);
27332 */
27333 C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
27334 }());
27335
27336
27337 return CryptoJS.SHA224;
27338
27339}));
27340},{"./core":31,"./sha256":57}],57:[function(_dereq_,module,exports){
27341;(function (root, factory) {
27342 if (typeof exports === "object") {
27343 // CommonJS
27344 module.exports = exports = factory(_dereq_("./core"));
27345 }
27346 else if (typeof define === "function" && define.amd) {
27347 // AMD
27348 define(["./core"], factory);
27349 }
27350 else {
27351 // Global (browser)
27352 factory(root.CryptoJS);
27353 }
27354}(this, function (CryptoJS) {
27355
27356 (function (Math) {
27357 // Shortcuts
27358 var C = CryptoJS;
27359 var C_lib = C.lib;
27360 var WordArray = C_lib.WordArray;
27361 var Hasher = C_lib.Hasher;
27362 var C_algo = C.algo;
27363
27364 // Initialization and round constants tables
27365 var H = [];
27366 var K = [];
27367
27368 // Compute constants
27369 (function () {
27370 function isPrime(n) {
27371 var sqrtN = Math.sqrt(n);
27372 for (var factor = 2; factor <= sqrtN; factor++) {
27373 if (!(n % factor)) {
27374 return false;
27375 }
27376 }
27377
27378 return true;
27379 }
27380
27381 function getFractionalBits(n) {
27382 return ((n - (n | 0)) * 0x100000000) | 0;
27383 }
27384
27385 var n = 2;
27386 var nPrime = 0;
27387 while (nPrime < 64) {
27388 if (isPrime(n)) {
27389 if (nPrime < 8) {
27390 H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
27391 }
27392 K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
27393
27394 nPrime++;
27395 }
27396
27397 n++;
27398 }
27399 }());
27400
27401 // Reusable object
27402 var W = [];
27403
27404 /**
27405 * SHA-256 hash algorithm.
27406 */
27407 var SHA256 = C_algo.SHA256 = Hasher.extend({
27408 _doReset: function () {
27409 this._hash = new WordArray.init(H.slice(0));
27410 },
27411
27412 _doProcessBlock: function (M, offset) {
27413 // Shortcut
27414 var H = this._hash.words;
27415
27416 // Working variables
27417 var a = H[0];
27418 var b = H[1];
27419 var c = H[2];
27420 var d = H[3];
27421 var e = H[4];
27422 var f = H[5];
27423 var g = H[6];
27424 var h = H[7];
27425
27426 // Computation
27427 for (var i = 0; i < 64; i++) {
27428 if (i < 16) {
27429 W[i] = M[offset + i] | 0;
27430 } else {
27431 var gamma0x = W[i - 15];
27432 var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
27433 ((gamma0x << 14) | (gamma0x >>> 18)) ^
27434 (gamma0x >>> 3);
27435
27436 var gamma1x = W[i - 2];
27437 var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
27438 ((gamma1x << 13) | (gamma1x >>> 19)) ^
27439 (gamma1x >>> 10);
27440
27441 W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
27442 }
27443
27444 var ch = (e & f) ^ (~e & g);
27445 var maj = (a & b) ^ (a & c) ^ (b & c);
27446
27447 var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
27448 var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
27449
27450 var t1 = h + sigma1 + ch + K[i] + W[i];
27451 var t2 = sigma0 + maj;
27452
27453 h = g;
27454 g = f;
27455 f = e;
27456 e = (d + t1) | 0;
27457 d = c;
27458 c = b;
27459 b = a;
27460 a = (t1 + t2) | 0;
27461 }
27462
27463 // Intermediate hash value
27464 H[0] = (H[0] + a) | 0;
27465 H[1] = (H[1] + b) | 0;
27466 H[2] = (H[2] + c) | 0;
27467 H[3] = (H[3] + d) | 0;
27468 H[4] = (H[4] + e) | 0;
27469 H[5] = (H[5] + f) | 0;
27470 H[6] = (H[6] + g) | 0;
27471 H[7] = (H[7] + h) | 0;
27472 },
27473
27474 _doFinalize: function () {
27475 // Shortcuts
27476 var data = this._data;
27477 var dataWords = data.words;
27478
27479 var nBitsTotal = this._nDataBytes * 8;
27480 var nBitsLeft = data.sigBytes * 8;
27481
27482 // Add padding
27483 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
27484 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
27485 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
27486 data.sigBytes = dataWords.length * 4;
27487
27488 // Hash final blocks
27489 this._process();
27490
27491 // Return final computed hash
27492 return this._hash;
27493 },
27494
27495 clone: function () {
27496 var clone = Hasher.clone.call(this);
27497 clone._hash = this._hash.clone();
27498
27499 return clone;
27500 }
27501 });
27502
27503 /**
27504 * Shortcut function to the hasher's object interface.
27505 *
27506 * @param {WordArray|string} message The message to hash.
27507 *
27508 * @return {WordArray} The hash.
27509 *
27510 * @static
27511 *
27512 * @example
27513 *
27514 * var hash = CryptoJS.SHA256('message');
27515 * var hash = CryptoJS.SHA256(wordArray);
27516 */
27517 C.SHA256 = Hasher._createHelper(SHA256);
27518
27519 /**
27520 * Shortcut function to the HMAC's object interface.
27521 *
27522 * @param {WordArray|string} message The message to hash.
27523 * @param {WordArray|string} key The secret key.
27524 *
27525 * @return {WordArray} The HMAC.
27526 *
27527 * @static
27528 *
27529 * @example
27530 *
27531 * var hmac = CryptoJS.HmacSHA256(message, key);
27532 */
27533 C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
27534 }(Math));
27535
27536
27537 return CryptoJS.SHA256;
27538
27539}));
27540},{"./core":31}],58:[function(_dereq_,module,exports){
27541;(function (root, factory, undef) {
27542 if (typeof exports === "object") {
27543 // CommonJS
27544 module.exports = exports = factory(_dereq_("./core"), _dereq_("./x64-core"));
27545 }
27546 else if (typeof define === "function" && define.amd) {
27547 // AMD
27548 define(["./core", "./x64-core"], factory);
27549 }
27550 else {
27551 // Global (browser)
27552 factory(root.CryptoJS);
27553 }
27554}(this, function (CryptoJS) {
27555
27556 (function (Math) {
27557 // Shortcuts
27558 var C = CryptoJS;
27559 var C_lib = C.lib;
27560 var WordArray = C_lib.WordArray;
27561 var Hasher = C_lib.Hasher;
27562 var C_x64 = C.x64;
27563 var X64Word = C_x64.Word;
27564 var C_algo = C.algo;
27565
27566 // Constants tables
27567 var RHO_OFFSETS = [];
27568 var PI_INDEXES = [];
27569 var ROUND_CONSTANTS = [];
27570
27571 // Compute Constants
27572 (function () {
27573 // Compute rho offset constants
27574 var x = 1, y = 0;
27575 for (var t = 0; t < 24; t++) {
27576 RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
27577
27578 var newX = y % 5;
27579 var newY = (2 * x + 3 * y) % 5;
27580 x = newX;
27581 y = newY;
27582 }
27583
27584 // Compute pi index constants
27585 for (var x = 0; x < 5; x++) {
27586 for (var y = 0; y < 5; y++) {
27587 PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
27588 }
27589 }
27590
27591 // Compute round constants
27592 var LFSR = 0x01;
27593 for (var i = 0; i < 24; i++) {
27594 var roundConstantMsw = 0;
27595 var roundConstantLsw = 0;
27596
27597 for (var j = 0; j < 7; j++) {
27598 if (LFSR & 0x01) {
27599 var bitPosition = (1 << j) - 1;
27600 if (bitPosition < 32) {
27601 roundConstantLsw ^= 1 << bitPosition;
27602 } else /* if (bitPosition >= 32) */ {
27603 roundConstantMsw ^= 1 << (bitPosition - 32);
27604 }
27605 }
27606
27607 // Compute next LFSR
27608 if (LFSR & 0x80) {
27609 // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
27610 LFSR = (LFSR << 1) ^ 0x71;
27611 } else {
27612 LFSR <<= 1;
27613 }
27614 }
27615
27616 ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
27617 }
27618 }());
27619
27620 // Reusable objects for temporary values
27621 var T = [];
27622 (function () {
27623 for (var i = 0; i < 25; i++) {
27624 T[i] = X64Word.create();
27625 }
27626 }());
27627
27628 /**
27629 * SHA-3 hash algorithm.
27630 */
27631 var SHA3 = C_algo.SHA3 = Hasher.extend({
27632 /**
27633 * Configuration options.
27634 *
27635 * @property {number} outputLength
27636 * The desired number of bits in the output hash.
27637 * Only values permitted are: 224, 256, 384, 512.
27638 * Default: 512
27639 */
27640 cfg: Hasher.cfg.extend({
27641 outputLength: 512
27642 }),
27643
27644 _doReset: function () {
27645 var state = this._state = []
27646 for (var i = 0; i < 25; i++) {
27647 state[i] = new X64Word.init();
27648 }
27649
27650 this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
27651 },
27652
27653 _doProcessBlock: function (M, offset) {
27654 // Shortcuts
27655 var state = this._state;
27656 var nBlockSizeLanes = this.blockSize / 2;
27657
27658 // Absorb
27659 for (var i = 0; i < nBlockSizeLanes; i++) {
27660 // Shortcuts
27661 var M2i = M[offset + 2 * i];
27662 var M2i1 = M[offset + 2 * i + 1];
27663
27664 // Swap endian
27665 M2i = (
27666 (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
27667 (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
27668 );
27669 M2i1 = (
27670 (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
27671 (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
27672 );
27673
27674 // Absorb message into state
27675 var lane = state[i];
27676 lane.high ^= M2i1;
27677 lane.low ^= M2i;
27678 }
27679
27680 // Rounds
27681 for (var round = 0; round < 24; round++) {
27682 // Theta
27683 for (var x = 0; x < 5; x++) {
27684 // Mix column lanes
27685 var tMsw = 0, tLsw = 0;
27686 for (var y = 0; y < 5; y++) {
27687 var lane = state[x + 5 * y];
27688 tMsw ^= lane.high;
27689 tLsw ^= lane.low;
27690 }
27691
27692 // Temporary values
27693 var Tx = T[x];
27694 Tx.high = tMsw;
27695 Tx.low = tLsw;
27696 }
27697 for (var x = 0; x < 5; x++) {
27698 // Shortcuts
27699 var Tx4 = T[(x + 4) % 5];
27700 var Tx1 = T[(x + 1) % 5];
27701 var Tx1Msw = Tx1.high;
27702 var Tx1Lsw = Tx1.low;
27703
27704 // Mix surrounding columns
27705 var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
27706 var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
27707 for (var y = 0; y < 5; y++) {
27708 var lane = state[x + 5 * y];
27709 lane.high ^= tMsw;
27710 lane.low ^= tLsw;
27711 }
27712 }
27713
27714 // Rho Pi
27715 for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
27716 // Shortcuts
27717 var lane = state[laneIndex];
27718 var laneMsw = lane.high;
27719 var laneLsw = lane.low;
27720 var rhoOffset = RHO_OFFSETS[laneIndex];
27721
27722 // Rotate lanes
27723 if (rhoOffset < 32) {
27724 var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
27725 var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
27726 } else /* if (rhoOffset >= 32) */ {
27727 var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
27728 var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
27729 }
27730
27731 // Transpose lanes
27732 var TPiLane = T[PI_INDEXES[laneIndex]];
27733 TPiLane.high = tMsw;
27734 TPiLane.low = tLsw;
27735 }
27736
27737 // Rho pi at x = y = 0
27738 var T0 = T[0];
27739 var state0 = state[0];
27740 T0.high = state0.high;
27741 T0.low = state0.low;
27742
27743 // Chi
27744 for (var x = 0; x < 5; x++) {
27745 for (var y = 0; y < 5; y++) {
27746 // Shortcuts
27747 var laneIndex = x + 5 * y;
27748 var lane = state[laneIndex];
27749 var TLane = T[laneIndex];
27750 var Tx1Lane = T[((x + 1) % 5) + 5 * y];
27751 var Tx2Lane = T[((x + 2) % 5) + 5 * y];
27752
27753 // Mix rows
27754 lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
27755 lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
27756 }
27757 }
27758
27759 // Iota
27760 var lane = state[0];
27761 var roundConstant = ROUND_CONSTANTS[round];
27762 lane.high ^= roundConstant.high;
27763 lane.low ^= roundConstant.low;;
27764 }
27765 },
27766
27767 _doFinalize: function () {
27768 // Shortcuts
27769 var data = this._data;
27770 var dataWords = data.words;
27771 var nBitsTotal = this._nDataBytes * 8;
27772 var nBitsLeft = data.sigBytes * 8;
27773 var blockSizeBits = this.blockSize * 32;
27774
27775 // Add padding
27776 dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
27777 dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
27778 data.sigBytes = dataWords.length * 4;
27779
27780 // Hash final blocks
27781 this._process();
27782
27783 // Shortcuts
27784 var state = this._state;
27785 var outputLengthBytes = this.cfg.outputLength / 8;
27786 var outputLengthLanes = outputLengthBytes / 8;
27787
27788 // Squeeze
27789 var hashWords = [];
27790 for (var i = 0; i < outputLengthLanes; i++) {
27791 // Shortcuts
27792 var lane = state[i];
27793 var laneMsw = lane.high;
27794 var laneLsw = lane.low;
27795
27796 // Swap endian
27797 laneMsw = (
27798 (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
27799 (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
27800 );
27801 laneLsw = (
27802 (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
27803 (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
27804 );
27805
27806 // Squeeze state to retrieve hash
27807 hashWords.push(laneLsw);
27808 hashWords.push(laneMsw);
27809 }
27810
27811 // Return final computed hash
27812 return new WordArray.init(hashWords, outputLengthBytes);
27813 },
27814
27815 clone: function () {
27816 var clone = Hasher.clone.call(this);
27817
27818 var state = clone._state = this._state.slice(0);
27819 for (var i = 0; i < 25; i++) {
27820 state[i] = state[i].clone();
27821 }
27822
27823 return clone;
27824 }
27825 });
27826
27827 /**
27828 * Shortcut function to the hasher's object interface.
27829 *
27830 * @param {WordArray|string} message The message to hash.
27831 *
27832 * @return {WordArray} The hash.
27833 *
27834 * @static
27835 *
27836 * @example
27837 *
27838 * var hash = CryptoJS.SHA3('message');
27839 * var hash = CryptoJS.SHA3(wordArray);
27840 */
27841 C.SHA3 = Hasher._createHelper(SHA3);
27842
27843 /**
27844 * Shortcut function to the HMAC's object interface.
27845 *
27846 * @param {WordArray|string} message The message to hash.
27847 * @param {WordArray|string} key The secret key.
27848 *
27849 * @return {WordArray} The HMAC.
27850 *
27851 * @static
27852 *
27853 * @example
27854 *
27855 * var hmac = CryptoJS.HmacSHA3(message, key);
27856 */
27857 C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
27858 }(Math));
27859
27860
27861 return CryptoJS.SHA3;
27862
27863}));
27864},{"./core":31,"./x64-core":62}],59:[function(_dereq_,module,exports){
27865;(function (root, factory, undef) {
27866 if (typeof exports === "object") {
27867 // CommonJS
27868 module.exports = exports = factory(_dereq_("./core"), _dereq_("./x64-core"), _dereq_("./sha512"));
27869 }
27870 else if (typeof define === "function" && define.amd) {
27871 // AMD
27872 define(["./core", "./x64-core", "./sha512"], factory);
27873 }
27874 else {
27875 // Global (browser)
27876 factory(root.CryptoJS);
27877 }
27878}(this, function (CryptoJS) {
27879
27880 (function () {
27881 // Shortcuts
27882 var C = CryptoJS;
27883 var C_x64 = C.x64;
27884 var X64Word = C_x64.Word;
27885 var X64WordArray = C_x64.WordArray;
27886 var C_algo = C.algo;
27887 var SHA512 = C_algo.SHA512;
27888
27889 /**
27890 * SHA-384 hash algorithm.
27891 */
27892 var SHA384 = C_algo.SHA384 = SHA512.extend({
27893 _doReset: function () {
27894 this._hash = new X64WordArray.init([
27895 new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
27896 new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
27897 new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
27898 new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
27899 ]);
27900 },
27901
27902 _doFinalize: function () {
27903 var hash = SHA512._doFinalize.call(this);
27904
27905 hash.sigBytes -= 16;
27906
27907 return hash;
27908 }
27909 });
27910
27911 /**
27912 * Shortcut function to the hasher's object interface.
27913 *
27914 * @param {WordArray|string} message The message to hash.
27915 *
27916 * @return {WordArray} The hash.
27917 *
27918 * @static
27919 *
27920 * @example
27921 *
27922 * var hash = CryptoJS.SHA384('message');
27923 * var hash = CryptoJS.SHA384(wordArray);
27924 */
27925 C.SHA384 = SHA512._createHelper(SHA384);
27926
27927 /**
27928 * Shortcut function to the HMAC's object interface.
27929 *
27930 * @param {WordArray|string} message The message to hash.
27931 * @param {WordArray|string} key The secret key.
27932 *
27933 * @return {WordArray} The HMAC.
27934 *
27935 * @static
27936 *
27937 * @example
27938 *
27939 * var hmac = CryptoJS.HmacSHA384(message, key);
27940 */
27941 C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
27942 }());
27943
27944
27945 return CryptoJS.SHA384;
27946
27947}));
27948},{"./core":31,"./sha512":60,"./x64-core":62}],60:[function(_dereq_,module,exports){
27949;(function (root, factory, undef) {
27950 if (typeof exports === "object") {
27951 // CommonJS
27952 module.exports = exports = factory(_dereq_("./core"), _dereq_("./x64-core"));
27953 }
27954 else if (typeof define === "function" && define.amd) {
27955 // AMD
27956 define(["./core", "./x64-core"], factory);
27957 }
27958 else {
27959 // Global (browser)
27960 factory(root.CryptoJS);
27961 }
27962}(this, function (CryptoJS) {
27963
27964 (function () {
27965 // Shortcuts
27966 var C = CryptoJS;
27967 var C_lib = C.lib;
27968 var Hasher = C_lib.Hasher;
27969 var C_x64 = C.x64;
27970 var X64Word = C_x64.Word;
27971 var X64WordArray = C_x64.WordArray;
27972 var C_algo = C.algo;
27973
27974 function X64Word_create() {
27975 return X64Word.create.apply(X64Word, arguments);
27976 }
27977
27978 // Constants
27979 var K = [
27980 X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
27981 X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
27982 X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
27983 X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
27984 X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
27985 X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
27986 X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
27987 X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
27988 X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
27989 X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
27990 X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
27991 X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
27992 X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
27993 X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
27994 X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
27995 X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
27996 X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
27997 X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
27998 X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
27999 X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
28000 X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
28001 X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
28002 X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
28003 X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
28004 X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
28005 X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
28006 X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
28007 X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
28008 X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
28009 X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
28010 X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
28011 X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
28012 X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
28013 X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
28014 X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
28015 X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
28016 X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
28017 X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
28018 X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
28019 X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
28020 ];
28021
28022 // Reusable objects
28023 var W = [];
28024 (function () {
28025 for (var i = 0; i < 80; i++) {
28026 W[i] = X64Word_create();
28027 }
28028 }());
28029
28030 /**
28031 * SHA-512 hash algorithm.
28032 */
28033 var SHA512 = C_algo.SHA512 = Hasher.extend({
28034 _doReset: function () {
28035 this._hash = new X64WordArray.init([
28036 new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
28037 new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
28038 new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
28039 new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
28040 ]);
28041 },
28042
28043 _doProcessBlock: function (M, offset) {
28044 // Shortcuts
28045 var H = this._hash.words;
28046
28047 var H0 = H[0];
28048 var H1 = H[1];
28049 var H2 = H[2];
28050 var H3 = H[3];
28051 var H4 = H[4];
28052 var H5 = H[5];
28053 var H6 = H[6];
28054 var H7 = H[7];
28055
28056 var H0h = H0.high;
28057 var H0l = H0.low;
28058 var H1h = H1.high;
28059 var H1l = H1.low;
28060 var H2h = H2.high;
28061 var H2l = H2.low;
28062 var H3h = H3.high;
28063 var H3l = H3.low;
28064 var H4h = H4.high;
28065 var H4l = H4.low;
28066 var H5h = H5.high;
28067 var H5l = H5.low;
28068 var H6h = H6.high;
28069 var H6l = H6.low;
28070 var H7h = H7.high;
28071 var H7l = H7.low;
28072
28073 // Working variables
28074 var ah = H0h;
28075 var al = H0l;
28076 var bh = H1h;
28077 var bl = H1l;
28078 var ch = H2h;
28079 var cl = H2l;
28080 var dh = H3h;
28081 var dl = H3l;
28082 var eh = H4h;
28083 var el = H4l;
28084 var fh = H5h;
28085 var fl = H5l;
28086 var gh = H6h;
28087 var gl = H6l;
28088 var hh = H7h;
28089 var hl = H7l;
28090
28091 // Rounds
28092 for (var i = 0; i < 80; i++) {
28093 // Shortcut
28094 var Wi = W[i];
28095
28096 // Extend message
28097 if (i < 16) {
28098 var Wih = Wi.high = M[offset + i * 2] | 0;
28099 var Wil = Wi.low = M[offset + i * 2 + 1] | 0;
28100 } else {
28101 // Gamma0
28102 var gamma0x = W[i - 15];
28103 var gamma0xh = gamma0x.high;
28104 var gamma0xl = gamma0x.low;
28105 var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
28106 var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));
28107
28108 // Gamma1
28109 var gamma1x = W[i - 2];
28110 var gamma1xh = gamma1x.high;
28111 var gamma1xl = gamma1x.low;
28112 var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
28113 var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));
28114
28115 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
28116 var Wi7 = W[i - 7];
28117 var Wi7h = Wi7.high;
28118 var Wi7l = Wi7.low;
28119
28120 var Wi16 = W[i - 16];
28121 var Wi16h = Wi16.high;
28122 var Wi16l = Wi16.low;
28123
28124 var Wil = gamma0l + Wi7l;
28125 var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
28126 var Wil = Wil + gamma1l;
28127 var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
28128 var Wil = Wil + Wi16l;
28129 var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);
28130
28131 Wi.high = Wih;
28132 Wi.low = Wil;
28133 }
28134
28135 var chh = (eh & fh) ^ (~eh & gh);
28136 var chl = (el & fl) ^ (~el & gl);
28137 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
28138 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
28139
28140 var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
28141 var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
28142 var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
28143 var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));
28144
28145 // t1 = h + sigma1 + ch + K[i] + W[i]
28146 var Ki = K[i];
28147 var Kih = Ki.high;
28148 var Kil = Ki.low;
28149
28150 var t1l = hl + sigma1l;
28151 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
28152 var t1l = t1l + chl;
28153 var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
28154 var t1l = t1l + Kil;
28155 var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
28156 var t1l = t1l + Wil;
28157 var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);
28158
28159 // t2 = sigma0 + maj
28160 var t2l = sigma0l + majl;
28161 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
28162
28163 // Update working variables
28164 hh = gh;
28165 hl = gl;
28166 gh = fh;
28167 gl = fl;
28168 fh = eh;
28169 fl = el;
28170 el = (dl + t1l) | 0;
28171 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
28172 dh = ch;
28173 dl = cl;
28174 ch = bh;
28175 cl = bl;
28176 bh = ah;
28177 bl = al;
28178 al = (t1l + t2l) | 0;
28179 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
28180 }
28181
28182 // Intermediate hash value
28183 H0l = H0.low = (H0l + al);
28184 H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
28185 H1l = H1.low = (H1l + bl);
28186 H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
28187 H2l = H2.low = (H2l + cl);
28188 H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
28189 H3l = H3.low = (H3l + dl);
28190 H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
28191 H4l = H4.low = (H4l + el);
28192 H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
28193 H5l = H5.low = (H5l + fl);
28194 H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
28195 H6l = H6.low = (H6l + gl);
28196 H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
28197 H7l = H7.low = (H7l + hl);
28198 H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
28199 },
28200
28201 _doFinalize: function () {
28202 // Shortcuts
28203 var data = this._data;
28204 var dataWords = data.words;
28205
28206 var nBitsTotal = this._nDataBytes * 8;
28207 var nBitsLeft = data.sigBytes * 8;
28208
28209 // Add padding
28210 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
28211 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
28212 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
28213 data.sigBytes = dataWords.length * 4;
28214
28215 // Hash final blocks
28216 this._process();
28217
28218 // Convert hash to 32-bit word array before returning
28219 var hash = this._hash.toX32();
28220
28221 // Return final computed hash
28222 return hash;
28223 },
28224
28225 clone: function () {
28226 var clone = Hasher.clone.call(this);
28227 clone._hash = this._hash.clone();
28228
28229 return clone;
28230 },
28231
28232 blockSize: 1024/32
28233 });
28234
28235 /**
28236 * Shortcut function to the hasher's object interface.
28237 *
28238 * @param {WordArray|string} message The message to hash.
28239 *
28240 * @return {WordArray} The hash.
28241 *
28242 * @static
28243 *
28244 * @example
28245 *
28246 * var hash = CryptoJS.SHA512('message');
28247 * var hash = CryptoJS.SHA512(wordArray);
28248 */
28249 C.SHA512 = Hasher._createHelper(SHA512);
28250
28251 /**
28252 * Shortcut function to the HMAC's object interface.
28253 *
28254 * @param {WordArray|string} message The message to hash.
28255 * @param {WordArray|string} key The secret key.
28256 *
28257 * @return {WordArray} The HMAC.
28258 *
28259 * @static
28260 *
28261 * @example
28262 *
28263 * var hmac = CryptoJS.HmacSHA512(message, key);
28264 */
28265 C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
28266 }());
28267
28268
28269 return CryptoJS.SHA512;
28270
28271}));
28272},{"./core":31,"./x64-core":62}],61:[function(_dereq_,module,exports){
28273;(function (root, factory, undef) {
28274 if (typeof exports === "object") {
28275 // CommonJS
28276 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
28277 }
28278 else if (typeof define === "function" && define.amd) {
28279 // AMD
28280 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
28281 }
28282 else {
28283 // Global (browser)
28284 factory(root.CryptoJS);
28285 }
28286}(this, function (CryptoJS) {
28287
28288 (function () {
28289 // Shortcuts
28290 var C = CryptoJS;
28291 var C_lib = C.lib;
28292 var WordArray = C_lib.WordArray;
28293 var BlockCipher = C_lib.BlockCipher;
28294 var C_algo = C.algo;
28295
28296 // Permuted Choice 1 constants
28297 var PC1 = [
28298 57, 49, 41, 33, 25, 17, 9, 1,
28299 58, 50, 42, 34, 26, 18, 10, 2,
28300 59, 51, 43, 35, 27, 19, 11, 3,
28301 60, 52, 44, 36, 63, 55, 47, 39,
28302 31, 23, 15, 7, 62, 54, 46, 38,
28303 30, 22, 14, 6, 61, 53, 45, 37,
28304 29, 21, 13, 5, 28, 20, 12, 4
28305 ];
28306
28307 // Permuted Choice 2 constants
28308 var PC2 = [
28309 14, 17, 11, 24, 1, 5,
28310 3, 28, 15, 6, 21, 10,
28311 23, 19, 12, 4, 26, 8,
28312 16, 7, 27, 20, 13, 2,
28313 41, 52, 31, 37, 47, 55,
28314 30, 40, 51, 45, 33, 48,
28315 44, 49, 39, 56, 34, 53,
28316 46, 42, 50, 36, 29, 32
28317 ];
28318
28319 // Cumulative bit shift constants
28320 var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];
28321
28322 // SBOXes and round permutation constants
28323 var SBOX_P = [
28324 {
28325 0x0: 0x808200,
28326 0x10000000: 0x8000,
28327 0x20000000: 0x808002,
28328 0x30000000: 0x2,
28329 0x40000000: 0x200,
28330 0x50000000: 0x808202,
28331 0x60000000: 0x800202,
28332 0x70000000: 0x800000,
28333 0x80000000: 0x202,
28334 0x90000000: 0x800200,
28335 0xa0000000: 0x8200,
28336 0xb0000000: 0x808000,
28337 0xc0000000: 0x8002,
28338 0xd0000000: 0x800002,
28339 0xe0000000: 0x0,
28340 0xf0000000: 0x8202,
28341 0x8000000: 0x0,
28342 0x18000000: 0x808202,
28343 0x28000000: 0x8202,
28344 0x38000000: 0x8000,
28345 0x48000000: 0x808200,
28346 0x58000000: 0x200,
28347 0x68000000: 0x808002,
28348 0x78000000: 0x2,
28349 0x88000000: 0x800200,
28350 0x98000000: 0x8200,
28351 0xa8000000: 0x808000,
28352 0xb8000000: 0x800202,
28353 0xc8000000: 0x800002,
28354 0xd8000000: 0x8002,
28355 0xe8000000: 0x202,
28356 0xf8000000: 0x800000,
28357 0x1: 0x8000,
28358 0x10000001: 0x2,
28359 0x20000001: 0x808200,
28360 0x30000001: 0x800000,
28361 0x40000001: 0x808002,
28362 0x50000001: 0x8200,
28363 0x60000001: 0x200,
28364 0x70000001: 0x800202,
28365 0x80000001: 0x808202,
28366 0x90000001: 0x808000,
28367 0xa0000001: 0x800002,
28368 0xb0000001: 0x8202,
28369 0xc0000001: 0x202,
28370 0xd0000001: 0x800200,
28371 0xe0000001: 0x8002,
28372 0xf0000001: 0x0,
28373 0x8000001: 0x808202,
28374 0x18000001: 0x808000,
28375 0x28000001: 0x800000,
28376 0x38000001: 0x200,
28377 0x48000001: 0x8000,
28378 0x58000001: 0x800002,
28379 0x68000001: 0x2,
28380 0x78000001: 0x8202,
28381 0x88000001: 0x8002,
28382 0x98000001: 0x800202,
28383 0xa8000001: 0x202,
28384 0xb8000001: 0x808200,
28385 0xc8000001: 0x800200,
28386 0xd8000001: 0x0,
28387 0xe8000001: 0x8200,
28388 0xf8000001: 0x808002
28389 },
28390 {
28391 0x0: 0x40084010,
28392 0x1000000: 0x4000,
28393 0x2000000: 0x80000,
28394 0x3000000: 0x40080010,
28395 0x4000000: 0x40000010,
28396 0x5000000: 0x40084000,
28397 0x6000000: 0x40004000,
28398 0x7000000: 0x10,
28399 0x8000000: 0x84000,
28400 0x9000000: 0x40004010,
28401 0xa000000: 0x40000000,
28402 0xb000000: 0x84010,
28403 0xc000000: 0x80010,
28404 0xd000000: 0x0,
28405 0xe000000: 0x4010,
28406 0xf000000: 0x40080000,
28407 0x800000: 0x40004000,
28408 0x1800000: 0x84010,
28409 0x2800000: 0x10,
28410 0x3800000: 0x40004010,
28411 0x4800000: 0x40084010,
28412 0x5800000: 0x40000000,
28413 0x6800000: 0x80000,
28414 0x7800000: 0x40080010,
28415 0x8800000: 0x80010,
28416 0x9800000: 0x0,
28417 0xa800000: 0x4000,
28418 0xb800000: 0x40080000,
28419 0xc800000: 0x40000010,
28420 0xd800000: 0x84000,
28421 0xe800000: 0x40084000,
28422 0xf800000: 0x4010,
28423 0x10000000: 0x0,
28424 0x11000000: 0x40080010,
28425 0x12000000: 0x40004010,
28426 0x13000000: 0x40084000,
28427 0x14000000: 0x40080000,
28428 0x15000000: 0x10,
28429 0x16000000: 0x84010,
28430 0x17000000: 0x4000,
28431 0x18000000: 0x4010,
28432 0x19000000: 0x80000,
28433 0x1a000000: 0x80010,
28434 0x1b000000: 0x40000010,
28435 0x1c000000: 0x84000,
28436 0x1d000000: 0x40004000,
28437 0x1e000000: 0x40000000,
28438 0x1f000000: 0x40084010,
28439 0x10800000: 0x84010,
28440 0x11800000: 0x80000,
28441 0x12800000: 0x40080000,
28442 0x13800000: 0x4000,
28443 0x14800000: 0x40004000,
28444 0x15800000: 0x40084010,
28445 0x16800000: 0x10,
28446 0x17800000: 0x40000000,
28447 0x18800000: 0x40084000,
28448 0x19800000: 0x40000010,
28449 0x1a800000: 0x40004010,
28450 0x1b800000: 0x80010,
28451 0x1c800000: 0x0,
28452 0x1d800000: 0x4010,
28453 0x1e800000: 0x40080010,
28454 0x1f800000: 0x84000
28455 },
28456 {
28457 0x0: 0x104,
28458 0x100000: 0x0,
28459 0x200000: 0x4000100,
28460 0x300000: 0x10104,
28461 0x400000: 0x10004,
28462 0x500000: 0x4000004,
28463 0x600000: 0x4010104,
28464 0x700000: 0x4010000,
28465 0x800000: 0x4000000,
28466 0x900000: 0x4010100,
28467 0xa00000: 0x10100,
28468 0xb00000: 0x4010004,
28469 0xc00000: 0x4000104,
28470 0xd00000: 0x10000,
28471 0xe00000: 0x4,
28472 0xf00000: 0x100,
28473 0x80000: 0x4010100,
28474 0x180000: 0x4010004,
28475 0x280000: 0x0,
28476 0x380000: 0x4000100,
28477 0x480000: 0x4000004,
28478 0x580000: 0x10000,
28479 0x680000: 0x10004,
28480 0x780000: 0x104,
28481 0x880000: 0x4,
28482 0x980000: 0x100,
28483 0xa80000: 0x4010000,
28484 0xb80000: 0x10104,
28485 0xc80000: 0x10100,
28486 0xd80000: 0x4000104,
28487 0xe80000: 0x4010104,
28488 0xf80000: 0x4000000,
28489 0x1000000: 0x4010100,
28490 0x1100000: 0x10004,
28491 0x1200000: 0x10000,
28492 0x1300000: 0x4000100,
28493 0x1400000: 0x100,
28494 0x1500000: 0x4010104,
28495 0x1600000: 0x4000004,
28496 0x1700000: 0x0,
28497 0x1800000: 0x4000104,
28498 0x1900000: 0x4000000,
28499 0x1a00000: 0x4,
28500 0x1b00000: 0x10100,
28501 0x1c00000: 0x4010000,
28502 0x1d00000: 0x104,
28503 0x1e00000: 0x10104,
28504 0x1f00000: 0x4010004,
28505 0x1080000: 0x4000000,
28506 0x1180000: 0x104,
28507 0x1280000: 0x4010100,
28508 0x1380000: 0x0,
28509 0x1480000: 0x10004,
28510 0x1580000: 0x4000100,
28511 0x1680000: 0x100,
28512 0x1780000: 0x4010004,
28513 0x1880000: 0x10000,
28514 0x1980000: 0x4010104,
28515 0x1a80000: 0x10104,
28516 0x1b80000: 0x4000004,
28517 0x1c80000: 0x4000104,
28518 0x1d80000: 0x4010000,
28519 0x1e80000: 0x4,
28520 0x1f80000: 0x10100
28521 },
28522 {
28523 0x0: 0x80401000,
28524 0x10000: 0x80001040,
28525 0x20000: 0x401040,
28526 0x30000: 0x80400000,
28527 0x40000: 0x0,
28528 0x50000: 0x401000,
28529 0x60000: 0x80000040,
28530 0x70000: 0x400040,
28531 0x80000: 0x80000000,
28532 0x90000: 0x400000,
28533 0xa0000: 0x40,
28534 0xb0000: 0x80001000,
28535 0xc0000: 0x80400040,
28536 0xd0000: 0x1040,
28537 0xe0000: 0x1000,
28538 0xf0000: 0x80401040,
28539 0x8000: 0x80001040,
28540 0x18000: 0x40,
28541 0x28000: 0x80400040,
28542 0x38000: 0x80001000,
28543 0x48000: 0x401000,
28544 0x58000: 0x80401040,
28545 0x68000: 0x0,
28546 0x78000: 0x80400000,
28547 0x88000: 0x1000,
28548 0x98000: 0x80401000,
28549 0xa8000: 0x400000,
28550 0xb8000: 0x1040,
28551 0xc8000: 0x80000000,
28552 0xd8000: 0x400040,
28553 0xe8000: 0x401040,
28554 0xf8000: 0x80000040,
28555 0x100000: 0x400040,
28556 0x110000: 0x401000,
28557 0x120000: 0x80000040,
28558 0x130000: 0x0,
28559 0x140000: 0x1040,
28560 0x150000: 0x80400040,
28561 0x160000: 0x80401000,
28562 0x170000: 0x80001040,
28563 0x180000: 0x80401040,
28564 0x190000: 0x80000000,
28565 0x1a0000: 0x80400000,
28566 0x1b0000: 0x401040,
28567 0x1c0000: 0x80001000,
28568 0x1d0000: 0x400000,
28569 0x1e0000: 0x40,
28570 0x1f0000: 0x1000,
28571 0x108000: 0x80400000,
28572 0x118000: 0x80401040,
28573 0x128000: 0x0,
28574 0x138000: 0x401000,
28575 0x148000: 0x400040,
28576 0x158000: 0x80000000,
28577 0x168000: 0x80001040,
28578 0x178000: 0x40,
28579 0x188000: 0x80000040,
28580 0x198000: 0x1000,
28581 0x1a8000: 0x80001000,
28582 0x1b8000: 0x80400040,
28583 0x1c8000: 0x1040,
28584 0x1d8000: 0x80401000,
28585 0x1e8000: 0x400000,
28586 0x1f8000: 0x401040
28587 },
28588 {
28589 0x0: 0x80,
28590 0x1000: 0x1040000,
28591 0x2000: 0x40000,
28592 0x3000: 0x20000000,
28593 0x4000: 0x20040080,
28594 0x5000: 0x1000080,
28595 0x6000: 0x21000080,
28596 0x7000: 0x40080,
28597 0x8000: 0x1000000,
28598 0x9000: 0x20040000,
28599 0xa000: 0x20000080,
28600 0xb000: 0x21040080,
28601 0xc000: 0x21040000,
28602 0xd000: 0x0,
28603 0xe000: 0x1040080,
28604 0xf000: 0x21000000,
28605 0x800: 0x1040080,
28606 0x1800: 0x21000080,
28607 0x2800: 0x80,
28608 0x3800: 0x1040000,
28609 0x4800: 0x40000,
28610 0x5800: 0x20040080,
28611 0x6800: 0x21040000,
28612 0x7800: 0x20000000,
28613 0x8800: 0x20040000,
28614 0x9800: 0x0,
28615 0xa800: 0x21040080,
28616 0xb800: 0x1000080,
28617 0xc800: 0x20000080,
28618 0xd800: 0x21000000,
28619 0xe800: 0x1000000,
28620 0xf800: 0x40080,
28621 0x10000: 0x40000,
28622 0x11000: 0x80,
28623 0x12000: 0x20000000,
28624 0x13000: 0x21000080,
28625 0x14000: 0x1000080,
28626 0x15000: 0x21040000,
28627 0x16000: 0x20040080,
28628 0x17000: 0x1000000,
28629 0x18000: 0x21040080,
28630 0x19000: 0x21000000,
28631 0x1a000: 0x1040000,
28632 0x1b000: 0x20040000,
28633 0x1c000: 0x40080,
28634 0x1d000: 0x20000080,
28635 0x1e000: 0x0,
28636 0x1f000: 0x1040080,
28637 0x10800: 0x21000080,
28638 0x11800: 0x1000000,
28639 0x12800: 0x1040000,
28640 0x13800: 0x20040080,
28641 0x14800: 0x20000000,
28642 0x15800: 0x1040080,
28643 0x16800: 0x80,
28644 0x17800: 0x21040000,
28645 0x18800: 0x40080,
28646 0x19800: 0x21040080,
28647 0x1a800: 0x0,
28648 0x1b800: 0x21000000,
28649 0x1c800: 0x1000080,
28650 0x1d800: 0x40000,
28651 0x1e800: 0x20040000,
28652 0x1f800: 0x20000080
28653 },
28654 {
28655 0x0: 0x10000008,
28656 0x100: 0x2000,
28657 0x200: 0x10200000,
28658 0x300: 0x10202008,
28659 0x400: 0x10002000,
28660 0x500: 0x200000,
28661 0x600: 0x200008,
28662 0x700: 0x10000000,
28663 0x800: 0x0,
28664 0x900: 0x10002008,
28665 0xa00: 0x202000,
28666 0xb00: 0x8,
28667 0xc00: 0x10200008,
28668 0xd00: 0x202008,
28669 0xe00: 0x2008,
28670 0xf00: 0x10202000,
28671 0x80: 0x10200000,
28672 0x180: 0x10202008,
28673 0x280: 0x8,
28674 0x380: 0x200000,
28675 0x480: 0x202008,
28676 0x580: 0x10000008,
28677 0x680: 0x10002000,
28678 0x780: 0x2008,
28679 0x880: 0x200008,
28680 0x980: 0x2000,
28681 0xa80: 0x10002008,
28682 0xb80: 0x10200008,
28683 0xc80: 0x0,
28684 0xd80: 0x10202000,
28685 0xe80: 0x202000,
28686 0xf80: 0x10000000,
28687 0x1000: 0x10002000,
28688 0x1100: 0x10200008,
28689 0x1200: 0x10202008,
28690 0x1300: 0x2008,
28691 0x1400: 0x200000,
28692 0x1500: 0x10000000,
28693 0x1600: 0x10000008,
28694 0x1700: 0x202000,
28695 0x1800: 0x202008,
28696 0x1900: 0x0,
28697 0x1a00: 0x8,
28698 0x1b00: 0x10200000,
28699 0x1c00: 0x2000,
28700 0x1d00: 0x10002008,
28701 0x1e00: 0x10202000,
28702 0x1f00: 0x200008,
28703 0x1080: 0x8,
28704 0x1180: 0x202000,
28705 0x1280: 0x200000,
28706 0x1380: 0x10000008,
28707 0x1480: 0x10002000,
28708 0x1580: 0x2008,
28709 0x1680: 0x10202008,
28710 0x1780: 0x10200000,
28711 0x1880: 0x10202000,
28712 0x1980: 0x10200008,
28713 0x1a80: 0x2000,
28714 0x1b80: 0x202008,
28715 0x1c80: 0x200008,
28716 0x1d80: 0x0,
28717 0x1e80: 0x10000000,
28718 0x1f80: 0x10002008
28719 },
28720 {
28721 0x0: 0x100000,
28722 0x10: 0x2000401,
28723 0x20: 0x400,
28724 0x30: 0x100401,
28725 0x40: 0x2100401,
28726 0x50: 0x0,
28727 0x60: 0x1,
28728 0x70: 0x2100001,
28729 0x80: 0x2000400,
28730 0x90: 0x100001,
28731 0xa0: 0x2000001,
28732 0xb0: 0x2100400,
28733 0xc0: 0x2100000,
28734 0xd0: 0x401,
28735 0xe0: 0x100400,
28736 0xf0: 0x2000000,
28737 0x8: 0x2100001,
28738 0x18: 0x0,
28739 0x28: 0x2000401,
28740 0x38: 0x2100400,
28741 0x48: 0x100000,
28742 0x58: 0x2000001,
28743 0x68: 0x2000000,
28744 0x78: 0x401,
28745 0x88: 0x100401,
28746 0x98: 0x2000400,
28747 0xa8: 0x2100000,
28748 0xb8: 0x100001,
28749 0xc8: 0x400,
28750 0xd8: 0x2100401,
28751 0xe8: 0x1,
28752 0xf8: 0x100400,
28753 0x100: 0x2000000,
28754 0x110: 0x100000,
28755 0x120: 0x2000401,
28756 0x130: 0x2100001,
28757 0x140: 0x100001,
28758 0x150: 0x2000400,
28759 0x160: 0x2100400,
28760 0x170: 0x100401,
28761 0x180: 0x401,
28762 0x190: 0x2100401,
28763 0x1a0: 0x100400,
28764 0x1b0: 0x1,
28765 0x1c0: 0x0,
28766 0x1d0: 0x2100000,
28767 0x1e0: 0x2000001,
28768 0x1f0: 0x400,
28769 0x108: 0x100400,
28770 0x118: 0x2000401,
28771 0x128: 0x2100001,
28772 0x138: 0x1,
28773 0x148: 0x2000000,
28774 0x158: 0x100000,
28775 0x168: 0x401,
28776 0x178: 0x2100400,
28777 0x188: 0x2000001,
28778 0x198: 0x2100000,
28779 0x1a8: 0x0,
28780 0x1b8: 0x2100401,
28781 0x1c8: 0x100401,
28782 0x1d8: 0x400,
28783 0x1e8: 0x2000400,
28784 0x1f8: 0x100001
28785 },
28786 {
28787 0x0: 0x8000820,
28788 0x1: 0x20000,
28789 0x2: 0x8000000,
28790 0x3: 0x20,
28791 0x4: 0x20020,
28792 0x5: 0x8020820,
28793 0x6: 0x8020800,
28794 0x7: 0x800,
28795 0x8: 0x8020000,
28796 0x9: 0x8000800,
28797 0xa: 0x20800,
28798 0xb: 0x8020020,
28799 0xc: 0x820,
28800 0xd: 0x0,
28801 0xe: 0x8000020,
28802 0xf: 0x20820,
28803 0x80000000: 0x800,
28804 0x80000001: 0x8020820,
28805 0x80000002: 0x8000820,
28806 0x80000003: 0x8000000,
28807 0x80000004: 0x8020000,
28808 0x80000005: 0x20800,
28809 0x80000006: 0x20820,
28810 0x80000007: 0x20,
28811 0x80000008: 0x8000020,
28812 0x80000009: 0x820,
28813 0x8000000a: 0x20020,
28814 0x8000000b: 0x8020800,
28815 0x8000000c: 0x0,
28816 0x8000000d: 0x8020020,
28817 0x8000000e: 0x8000800,
28818 0x8000000f: 0x20000,
28819 0x10: 0x20820,
28820 0x11: 0x8020800,
28821 0x12: 0x20,
28822 0x13: 0x800,
28823 0x14: 0x8000800,
28824 0x15: 0x8000020,
28825 0x16: 0x8020020,
28826 0x17: 0x20000,
28827 0x18: 0x0,
28828 0x19: 0x20020,
28829 0x1a: 0x8020000,
28830 0x1b: 0x8000820,
28831 0x1c: 0x8020820,
28832 0x1d: 0x20800,
28833 0x1e: 0x820,
28834 0x1f: 0x8000000,
28835 0x80000010: 0x20000,
28836 0x80000011: 0x800,
28837 0x80000012: 0x8020020,
28838 0x80000013: 0x20820,
28839 0x80000014: 0x20,
28840 0x80000015: 0x8020000,
28841 0x80000016: 0x8000000,
28842 0x80000017: 0x8000820,
28843 0x80000018: 0x8020820,
28844 0x80000019: 0x8000020,
28845 0x8000001a: 0x8000800,
28846 0x8000001b: 0x0,
28847 0x8000001c: 0x20800,
28848 0x8000001d: 0x820,
28849 0x8000001e: 0x20020,
28850 0x8000001f: 0x8020800
28851 }
28852 ];
28853
28854 // Masks that select the SBOX input
28855 var SBOX_MASK = [
28856 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,
28857 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f
28858 ];
28859
28860 /**
28861 * DES block cipher algorithm.
28862 */
28863 var DES = C_algo.DES = BlockCipher.extend({
28864 _doReset: function () {
28865 // Shortcuts
28866 var key = this._key;
28867 var keyWords = key.words;
28868
28869 // Select 56 bits according to PC1
28870 var keyBits = [];
28871 for (var i = 0; i < 56; i++) {
28872 var keyBitPos = PC1[i] - 1;
28873 keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;
28874 }
28875
28876 // Assemble 16 subkeys
28877 var subKeys = this._subKeys = [];
28878 for (var nSubKey = 0; nSubKey < 16; nSubKey++) {
28879 // Create subkey
28880 var subKey = subKeys[nSubKey] = [];
28881
28882 // Shortcut
28883 var bitShift = BIT_SHIFTS[nSubKey];
28884
28885 // Select 48 bits according to PC2
28886 for (var i = 0; i < 24; i++) {
28887 // Select from the left 28 key bits
28888 subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);
28889
28890 // Select from the right 28 key bits
28891 subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);
28892 }
28893
28894 // Since each subkey is applied to an expanded 32-bit input,
28895 // the subkey can be broken into 8 values scaled to 32-bits,
28896 // which allows the key to be used without expansion
28897 subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);
28898 for (var i = 1; i < 7; i++) {
28899 subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);
28900 }
28901 subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);
28902 }
28903
28904 // Compute inverse subkeys
28905 var invSubKeys = this._invSubKeys = [];
28906 for (var i = 0; i < 16; i++) {
28907 invSubKeys[i] = subKeys[15 - i];
28908 }
28909 },
28910
28911 encryptBlock: function (M, offset) {
28912 this._doCryptBlock(M, offset, this._subKeys);
28913 },
28914
28915 decryptBlock: function (M, offset) {
28916 this._doCryptBlock(M, offset, this._invSubKeys);
28917 },
28918
28919 _doCryptBlock: function (M, offset, subKeys) {
28920 // Get input
28921 this._lBlock = M[offset];
28922 this._rBlock = M[offset + 1];
28923
28924 // Initial permutation
28925 exchangeLR.call(this, 4, 0x0f0f0f0f);
28926 exchangeLR.call(this, 16, 0x0000ffff);
28927 exchangeRL.call(this, 2, 0x33333333);
28928 exchangeRL.call(this, 8, 0x00ff00ff);
28929 exchangeLR.call(this, 1, 0x55555555);
28930
28931 // Rounds
28932 for (var round = 0; round < 16; round++) {
28933 // Shortcuts
28934 var subKey = subKeys[round];
28935 var lBlock = this._lBlock;
28936 var rBlock = this._rBlock;
28937
28938 // Feistel function
28939 var f = 0;
28940 for (var i = 0; i < 8; i++) {
28941 f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];
28942 }
28943 this._lBlock = rBlock;
28944 this._rBlock = lBlock ^ f;
28945 }
28946
28947 // Undo swap from last round
28948 var t = this._lBlock;
28949 this._lBlock = this._rBlock;
28950 this._rBlock = t;
28951
28952 // Final permutation
28953 exchangeLR.call(this, 1, 0x55555555);
28954 exchangeRL.call(this, 8, 0x00ff00ff);
28955 exchangeRL.call(this, 2, 0x33333333);
28956 exchangeLR.call(this, 16, 0x0000ffff);
28957 exchangeLR.call(this, 4, 0x0f0f0f0f);
28958
28959 // Set output
28960 M[offset] = this._lBlock;
28961 M[offset + 1] = this._rBlock;
28962 },
28963
28964 keySize: 64/32,
28965
28966 ivSize: 64/32,
28967
28968 blockSize: 64/32
28969 });
28970
28971 // Swap bits across the left and right words
28972 function exchangeLR(offset, mask) {
28973 var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;
28974 this._rBlock ^= t;
28975 this._lBlock ^= t << offset;
28976 }
28977
28978 function exchangeRL(offset, mask) {
28979 var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;
28980 this._lBlock ^= t;
28981 this._rBlock ^= t << offset;
28982 }
28983
28984 /**
28985 * Shortcut functions to the cipher's object interface.
28986 *
28987 * @example
28988 *
28989 * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
28990 * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);
28991 */
28992 C.DES = BlockCipher._createHelper(DES);
28993
28994 /**
28995 * Triple-DES block cipher algorithm.
28996 */
28997 var TripleDES = C_algo.TripleDES = BlockCipher.extend({
28998 _doReset: function () {
28999 // Shortcuts
29000 var key = this._key;
29001 var keyWords = key.words;
29002
29003 // Create DES instances
29004 this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));
29005 this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));
29006 this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));
29007 },
29008
29009 encryptBlock: function (M, offset) {
29010 this._des1.encryptBlock(M, offset);
29011 this._des2.decryptBlock(M, offset);
29012 this._des3.encryptBlock(M, offset);
29013 },
29014
29015 decryptBlock: function (M, offset) {
29016 this._des3.decryptBlock(M, offset);
29017 this._des2.encryptBlock(M, offset);
29018 this._des1.decryptBlock(M, offset);
29019 },
29020
29021 keySize: 192/32,
29022
29023 ivSize: 64/32,
29024
29025 blockSize: 64/32
29026 });
29027
29028 /**
29029 * Shortcut functions to the cipher's object interface.
29030 *
29031 * @example
29032 *
29033 * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
29034 * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
29035 */
29036 C.TripleDES = BlockCipher._createHelper(TripleDES);
29037 }());
29038
29039
29040 return CryptoJS.TripleDES;
29041
29042}));
29043},{"./cipher-core":30,"./core":31,"./enc-base64":32,"./evpkdf":34,"./md5":39}],62:[function(_dereq_,module,exports){
29044;(function (root, factory) {
29045 if (typeof exports === "object") {
29046 // CommonJS
29047 module.exports = exports = factory(_dereq_("./core"));
29048 }
29049 else if (typeof define === "function" && define.amd) {
29050 // AMD
29051 define(["./core"], factory);
29052 }
29053 else {
29054 // Global (browser)
29055 factory(root.CryptoJS);
29056 }
29057}(this, function (CryptoJS) {
29058
29059 (function (undefined) {
29060 // Shortcuts
29061 var C = CryptoJS;
29062 var C_lib = C.lib;
29063 var Base = C_lib.Base;
29064 var X32WordArray = C_lib.WordArray;
29065
29066 /**
29067 * x64 namespace.
29068 */
29069 var C_x64 = C.x64 = {};
29070
29071 /**
29072 * A 64-bit word.
29073 */
29074 var X64Word = C_x64.Word = Base.extend({
29075 /**
29076 * Initializes a newly created 64-bit word.
29077 *
29078 * @param {number} high The high 32 bits.
29079 * @param {number} low The low 32 bits.
29080 *
29081 * @example
29082 *
29083 * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
29084 */
29085 init: function (high, low) {
29086 this.high = high;
29087 this.low = low;
29088 }
29089
29090 /**
29091 * Bitwise NOTs this word.
29092 *
29093 * @return {X64Word} A new x64-Word object after negating.
29094 *
29095 * @example
29096 *
29097 * var negated = x64Word.not();
29098 */
29099 // not: function () {
29100 // var high = ~this.high;
29101 // var low = ~this.low;
29102
29103 // return X64Word.create(high, low);
29104 // },
29105
29106 /**
29107 * Bitwise ANDs this word with the passed word.
29108 *
29109 * @param {X64Word} word The x64-Word to AND with this word.
29110 *
29111 * @return {X64Word} A new x64-Word object after ANDing.
29112 *
29113 * @example
29114 *
29115 * var anded = x64Word.and(anotherX64Word);
29116 */
29117 // and: function (word) {
29118 // var high = this.high & word.high;
29119 // var low = this.low & word.low;
29120
29121 // return X64Word.create(high, low);
29122 // },
29123
29124 /**
29125 * Bitwise ORs this word with the passed word.
29126 *
29127 * @param {X64Word} word The x64-Word to OR with this word.
29128 *
29129 * @return {X64Word} A new x64-Word object after ORing.
29130 *
29131 * @example
29132 *
29133 * var ored = x64Word.or(anotherX64Word);
29134 */
29135 // or: function (word) {
29136 // var high = this.high | word.high;
29137 // var low = this.low | word.low;
29138
29139 // return X64Word.create(high, low);
29140 // },
29141
29142 /**
29143 * Bitwise XORs this word with the passed word.
29144 *
29145 * @param {X64Word} word The x64-Word to XOR with this word.
29146 *
29147 * @return {X64Word} A new x64-Word object after XORing.
29148 *
29149 * @example
29150 *
29151 * var xored = x64Word.xor(anotherX64Word);
29152 */
29153 // xor: function (word) {
29154 // var high = this.high ^ word.high;
29155 // var low = this.low ^ word.low;
29156
29157 // return X64Word.create(high, low);
29158 // },
29159
29160 /**
29161 * Shifts this word n bits to the left.
29162 *
29163 * @param {number} n The number of bits to shift.
29164 *
29165 * @return {X64Word} A new x64-Word object after shifting.
29166 *
29167 * @example
29168 *
29169 * var shifted = x64Word.shiftL(25);
29170 */
29171 // shiftL: function (n) {
29172 // if (n < 32) {
29173 // var high = (this.high << n) | (this.low >>> (32 - n));
29174 // var low = this.low << n;
29175 // } else {
29176 // var high = this.low << (n - 32);
29177 // var low = 0;
29178 // }
29179
29180 // return X64Word.create(high, low);
29181 // },
29182
29183 /**
29184 * Shifts this word n bits to the right.
29185 *
29186 * @param {number} n The number of bits to shift.
29187 *
29188 * @return {X64Word} A new x64-Word object after shifting.
29189 *
29190 * @example
29191 *
29192 * var shifted = x64Word.shiftR(7);
29193 */
29194 // shiftR: function (n) {
29195 // if (n < 32) {
29196 // var low = (this.low >>> n) | (this.high << (32 - n));
29197 // var high = this.high >>> n;
29198 // } else {
29199 // var low = this.high >>> (n - 32);
29200 // var high = 0;
29201 // }
29202
29203 // return X64Word.create(high, low);
29204 // },
29205
29206 /**
29207 * Rotates this word n bits to the left.
29208 *
29209 * @param {number} n The number of bits to rotate.
29210 *
29211 * @return {X64Word} A new x64-Word object after rotating.
29212 *
29213 * @example
29214 *
29215 * var rotated = x64Word.rotL(25);
29216 */
29217 // rotL: function (n) {
29218 // return this.shiftL(n).or(this.shiftR(64 - n));
29219 // },
29220
29221 /**
29222 * Rotates this word n bits to the right.
29223 *
29224 * @param {number} n The number of bits to rotate.
29225 *
29226 * @return {X64Word} A new x64-Word object after rotating.
29227 *
29228 * @example
29229 *
29230 * var rotated = x64Word.rotR(7);
29231 */
29232 // rotR: function (n) {
29233 // return this.shiftR(n).or(this.shiftL(64 - n));
29234 // },
29235
29236 /**
29237 * Adds this word with the passed word.
29238 *
29239 * @param {X64Word} word The x64-Word to add with this word.
29240 *
29241 * @return {X64Word} A new x64-Word object after adding.
29242 *
29243 * @example
29244 *
29245 * var added = x64Word.add(anotherX64Word);
29246 */
29247 // add: function (word) {
29248 // var low = (this.low + word.low) | 0;
29249 // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
29250 // var high = (this.high + word.high + carry) | 0;
29251
29252 // return X64Word.create(high, low);
29253 // }
29254 });
29255
29256 /**
29257 * An array of 64-bit words.
29258 *
29259 * @property {Array} words The array of CryptoJS.x64.Word objects.
29260 * @property {number} sigBytes The number of significant bytes in this word array.
29261 */
29262 var X64WordArray = C_x64.WordArray = Base.extend({
29263 /**
29264 * Initializes a newly created word array.
29265 *
29266 * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
29267 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
29268 *
29269 * @example
29270 *
29271 * var wordArray = CryptoJS.x64.WordArray.create();
29272 *
29273 * var wordArray = CryptoJS.x64.WordArray.create([
29274 * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
29275 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
29276 * ]);
29277 *
29278 * var wordArray = CryptoJS.x64.WordArray.create([
29279 * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
29280 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
29281 * ], 10);
29282 */
29283 init: function (words, sigBytes) {
29284 words = this.words = words || [];
29285
29286 if (sigBytes != undefined) {
29287 this.sigBytes = sigBytes;
29288 } else {
29289 this.sigBytes = words.length * 8;
29290 }
29291 },
29292
29293 /**
29294 * Converts this 64-bit word array to a 32-bit word array.
29295 *
29296 * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
29297 *
29298 * @example
29299 *
29300 * var x32WordArray = x64WordArray.toX32();
29301 */
29302 toX32: function () {
29303 // Shortcuts
29304 var x64Words = this.words;
29305 var x64WordsLength = x64Words.length;
29306
29307 // Convert
29308 var x32Words = [];
29309 for (var i = 0; i < x64WordsLength; i++) {
29310 var x64Word = x64Words[i];
29311 x32Words.push(x64Word.high);
29312 x32Words.push(x64Word.low);
29313 }
29314
29315 return X32WordArray.create(x32Words, this.sigBytes);
29316 },
29317
29318 /**
29319 * Creates a copy of this word array.
29320 *
29321 * @return {X64WordArray} The clone.
29322 *
29323 * @example
29324 *
29325 * var clone = x64WordArray.clone();
29326 */
29327 clone: function () {
29328 var clone = Base.clone.call(this);
29329
29330 // Clone "words" array
29331 var words = clone.words = this.words.slice(0);
29332
29333 // Clone each X64Word object
29334 var wordsLength = words.length;
29335 for (var i = 0; i < wordsLength; i++) {
29336 words[i] = words[i].clone();
29337 }
29338
29339 return clone;
29340 }
29341 });
29342 }());
29343
29344
29345 return CryptoJS;
29346
29347}));
29348},{"./core":31}],63:[function(_dereq_,module,exports){
29349var assert = _dereq_('assert')
29350var BigInteger = _dereq_('bigi')
29351
29352var Point = _dereq_('./point')
29353
29354function Curve(p, a, b, Gx, Gy, n, h) {
29355 this.p = p
29356 this.a = a
29357 this.b = b
29358 this.G = Point.fromAffine(this, Gx, Gy)
29359 this.n = n
29360 this.h = h
29361
29362 this.infinity = new Point(this, null, null, BigInteger.ZERO)
29363
29364 // result caching
29365 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
29366}
29367
29368Curve.prototype.pointFromX = function(isOdd, x) {
29369 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
29370 var beta = alpha.modPow(this.pOverFour, this.p)
29371
29372 var y = beta
29373 if (beta.isEven() ^ !isOdd) {
29374 y = this.p.subtract(y) // -y % p
29375 }
29376
29377 return Point.fromAffine(this, x, y)
29378}
29379
29380Curve.prototype.isInfinity = function(Q) {
29381 if (Q === this.infinity) return true
29382
29383 return Q.z.signum() === 0 && Q.y.signum() !== 0
29384}
29385
29386Curve.prototype.isOnCurve = function(Q) {
29387 if (this.isInfinity(Q)) return true
29388
29389 var x = Q.affineX
29390 var y = Q.affineY
29391 var a = this.a
29392 var b = this.b
29393 var p = this.p
29394
29395 // Check that xQ and yQ are integers in the interval [0, p - 1]
29396 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
29397 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
29398
29399 // and check that y^2 = x^3 + ax + b (mod p)
29400 var lhs = y.square().mod(p)
29401 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
29402 return lhs.equals(rhs)
29403}
29404
29405/**
29406 * Validate an elliptic curve point.
29407 *
29408 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
29409 */
29410Curve.prototype.validate = function(Q) {
29411 // Check Q != O
29412 assert(!this.isInfinity(Q), 'Point is at infinity')
29413 assert(this.isOnCurve(Q), 'Point is not on the curve')
29414
29415 // Check nQ = O (where Q is a scalar multiple of G)
29416 var nQ = Q.multiply(this.n)
29417 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
29418
29419 return true
29420}
29421
29422module.exports = Curve
29423
29424},{"./point":67,"assert":4,"bigi":3}],64:[function(_dereq_,module,exports){
29425module.exports={
29426 "secp128r1": {
29427 "p": "fffffffdffffffffffffffffffffffff",
29428 "a": "fffffffdfffffffffffffffffffffffc",
29429 "b": "e87579c11079f43dd824993c2cee5ed3",
29430 "n": "fffffffe0000000075a30d1b9038a115",
29431 "h": "01",
29432 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
29433 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
29434 },
29435 "secp160k1": {
29436 "p": "fffffffffffffffffffffffffffffffeffffac73",
29437 "a": "00",
29438 "b": "07",
29439 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
29440 "h": "01",
29441 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
29442 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
29443 },
29444 "secp160r1": {
29445 "p": "ffffffffffffffffffffffffffffffff7fffffff",
29446 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
29447 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
29448 "n": "0100000000000000000001f4c8f927aed3ca752257",
29449 "h": "01",
29450 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
29451 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
29452 },
29453 "secp192k1": {
29454 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
29455 "a": "00",
29456 "b": "03",
29457 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
29458 "h": "01",
29459 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
29460 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
29461 },
29462 "secp192r1": {
29463 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
29464 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
29465 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
29466 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
29467 "h": "01",
29468 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
29469 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
29470 },
29471 "secp224r1": {
29472 "p": "ffffffffffffffffffffffffffffffff000000000000000000000001",
29473 "a": "fffffffffffffffffffffffffffffffefffffffffffffffffffffffe",
29474 "b": "b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4",
29475 "n": "ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d",
29476 "h": "01",
29477 "Gx": "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21",
29478 "Gy": "bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34"
29479 },
29480 "secp256k1": {
29481 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
29482 "a": "00",
29483 "b": "07",
29484 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
29485 "h": "01",
29486 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
29487 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
29488 },
29489 "secp256r1": {
29490 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
29491 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
29492 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
29493 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
29494 "h": "01",
29495 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
29496 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
29497 }
29498}
29499
29500},{}],65:[function(_dereq_,module,exports){
29501var Point = _dereq_('./point')
29502var Curve = _dereq_('./curve')
29503
29504var getCurveByName = _dereq_('./names')
29505
29506module.exports = {
29507 Curve: Curve,
29508 Point: Point,
29509 getCurveByName: getCurveByName
29510}
29511
29512},{"./curve":63,"./names":66,"./point":67}],66:[function(_dereq_,module,exports){
29513var BigInteger = _dereq_('bigi')
29514
29515var curves = _dereq_('./curves')
29516var Curve = _dereq_('./curve')
29517
29518function getCurveByName(name) {
29519 var curve = curves[name]
29520 if (!curve) return null
29521
29522 var p = new BigInteger(curve.p, 16)
29523 var a = new BigInteger(curve.a, 16)
29524 var b = new BigInteger(curve.b, 16)
29525 var n = new BigInteger(curve.n, 16)
29526 var h = new BigInteger(curve.h, 16)
29527 var Gx = new BigInteger(curve.Gx, 16)
29528 var Gy = new BigInteger(curve.Gy, 16)
29529
29530 return new Curve(p, a, b, Gx, Gy, n, h)
29531}
29532
29533module.exports = getCurveByName
29534
29535},{"./curve":63,"./curves":64,"bigi":3}],67:[function(_dereq_,module,exports){
29536(function (Buffer){
29537var assert = _dereq_('assert')
29538var BigInteger = _dereq_('bigi')
29539
29540var THREE = BigInteger.valueOf(3)
29541
29542function Point(curve, x, y, z) {
29543 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
29544
29545 this.curve = curve
29546 this.x = x
29547 this.y = y
29548 this.z = z
29549 this._zInv = null
29550
29551 this.compressed = true
29552}
29553
29554Object.defineProperty(Point.prototype, 'zInv', {
29555 get: function() {
29556 if (this._zInv === null) {
29557 this._zInv = this.z.modInverse(this.curve.p)
29558 }
29559
29560 return this._zInv
29561 }
29562})
29563
29564Object.defineProperty(Point.prototype, 'affineX', {
29565 get: function() {
29566 return this.x.multiply(this.zInv).mod(this.curve.p)
29567 }
29568})
29569
29570Object.defineProperty(Point.prototype, 'affineY', {
29571 get: function() {
29572 return this.y.multiply(this.zInv).mod(this.curve.p)
29573 }
29574})
29575
29576Point.fromAffine = function(curve, x, y) {
29577 return new Point(curve, x, y, BigInteger.ONE)
29578}
29579
29580Point.prototype.equals = function(other) {
29581 if (other === this) return true
29582 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
29583 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
29584
29585 // u = Y2 * Z1 - Y1 * Z2
29586 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
29587
29588 if (u.signum() !== 0) return false
29589
29590 // v = X2 * Z1 - X1 * Z2
29591 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
29592
29593 return v.signum() === 0
29594}
29595
29596Point.prototype.negate = function() {
29597 var y = this.curve.p.subtract(this.y)
29598
29599 return new Point(this.curve, this.x, y, this.z)
29600}
29601
29602Point.prototype.add = function(b) {
29603 if (this.curve.isInfinity(this)) return b
29604 if (this.curve.isInfinity(b)) return this
29605
29606 var x1 = this.x
29607 var y1 = this.y
29608 var x2 = b.x
29609 var y2 = b.y
29610
29611 // u = Y2 * Z1 - Y1 * Z2
29612 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
29613 // v = X2 * Z1 - X1 * Z2
29614 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
29615
29616 if (v.signum() === 0) {
29617 if (u.signum() === 0) {
29618 return this.twice() // this == b, so double
29619 }
29620
29621 return this.curve.infinity // this = -b, so infinity
29622 }
29623
29624 var v2 = v.square()
29625 var v3 = v2.multiply(v)
29626 var x1v2 = x1.multiply(v2)
29627 var zu2 = u.square().multiply(this.z)
29628
29629 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
29630 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
29631 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
29632 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)
29633 // z3 = v^3 * z1 * z2
29634 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
29635
29636 return new Point(this.curve, x3, y3, z3)
29637}
29638
29639Point.prototype.twice = function() {
29640 if (this.curve.isInfinity(this)) return this
29641 if (this.y.signum() === 0) return this.curve.infinity
29642
29643 var x1 = this.x
29644 var y1 = this.y
29645
29646 var y1z1 = y1.multiply(this.z)
29647 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
29648 var a = this.curve.a
29649
29650 // w = 3 * x1^2 + a * z1^2
29651 var w = x1.square().multiply(THREE)
29652
29653 if (a.signum() !== 0) {
29654 w = w.add(this.z.square().multiply(a))
29655 }
29656
29657 w = w.mod(this.curve.p)
29658 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
29659 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
29660 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
29661 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
29662 // z3 = 8 * (y1 * z1)^3
29663 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
29664
29665 return new Point(this.curve, x3, y3, z3)
29666}
29667
29668// Simple NAF (Non-Adjacent Form) multiplication algorithm
29669// TODO: modularize the multiplication algorithm
29670Point.prototype.multiply = function(k) {
29671 if (this.curve.isInfinity(this)) return this
29672 if (k.signum() === 0) return this.curve.infinity
29673
29674 var e = k
29675 var h = e.multiply(THREE)
29676
29677 var neg = this.negate()
29678 var R = this
29679
29680 for (var i = h.bitLength() - 2; i > 0; --i) {
29681 R = R.twice()
29682
29683 var hBit = h.testBit(i)
29684 var eBit = e.testBit(i)
29685
29686 if (hBit != eBit) {
29687 R = R.add(hBit ? this : neg)
29688 }
29689 }
29690
29691 return R
29692}
29693
29694// Compute this*j + x*k (simultaneous multiplication)
29695Point.prototype.multiplyTwo = function(j, x, k) {
29696 var i
29697
29698 if (j.bitLength() > k.bitLength())
29699 i = j.bitLength() - 1
29700 else
29701 i = k.bitLength() - 1
29702
29703 var R = this.curve.infinity
29704 var both = this.add(x)
29705
29706 while (i >= 0) {
29707 R = R.twice()
29708
29709 var jBit = j.testBit(i)
29710 var kBit = k.testBit(i)
29711
29712 if (jBit) {
29713 if (kBit) {
29714 R = R.add(both)
29715
29716 } else {
29717 R = R.add(this)
29718 }
29719
29720 } else {
29721 if (kBit) {
29722 R = R.add(x)
29723 }
29724 }
29725 --i
29726 }
29727
29728 return R
29729}
29730
29731Point.prototype.getEncoded = function(compressed) {
29732 if (compressed == undefined) compressed = this.compressed
29733 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
29734
29735 var x = this.affineX
29736 var y = this.affineY
29737
29738 var buffer
29739
29740 // Determine size of q in bytes
29741 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
29742
29743 // 0x02/0x03 | X
29744 if (compressed) {
29745 buffer = new Buffer(1 + byteLength)
29746 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
29747
29748 // 0x04 | X | Y
29749 } else {
29750 buffer = new Buffer(1 + byteLength + byteLength)
29751 buffer.writeUInt8(0x04, 0)
29752
29753 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
29754 }
29755
29756 x.toBuffer(byteLength).copy(buffer, 1)
29757
29758 return buffer
29759}
29760
29761Point.decodeFrom = function(curve, buffer) {
29762 var type = buffer.readUInt8(0)
29763 var compressed = (type !== 4)
29764
29765 var x = BigInteger.fromBuffer(buffer.slice(1, 33))
29766 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
29767
29768 var Q
29769 if (compressed) {
29770 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
29771 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
29772
29773 var isOdd = (type === 0x03)
29774 Q = curve.pointFromX(isOdd, x)
29775
29776 } else {
29777 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
29778
29779 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
29780 Q = Point.fromAffine(curve, x, y)
29781 }
29782
29783 Q.compressed = compressed
29784 return Q
29785}
29786
29787Point.prototype.toString = function () {
29788 if (this.curve.isInfinity(this)) return '(INFINITY)'
29789
29790 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
29791}
29792
29793module.exports = Point
29794
29795}).call(this,_dereq_("buffer").Buffer)
29796},{"assert":4,"bigi":3,"buffer":8}],68:[function(_dereq_,module,exports){
29797(function (process,Buffer){
29798// Closure compiler error - result of 'not' operator not being used
29799//!function(globals){
29800(function(globals){
29801'use strict'
29802
29803//*** UMD BEGIN
29804if (typeof define !== 'undefined' && define.amd) { //require.js / AMD
29805 define([], function() {
29806 return secureRandom
29807 })
29808} else if (typeof module !== 'undefined' && module.exports) { //CommonJS
29809 module.exports = secureRandom
29810} else { //script / browser
29811 globals.secureRandom = secureRandom
29812}
29813//*** UMD END
29814
29815//options.type is the only valid option
29816function secureRandom(count, options) {
29817 options = options || {type: 'Array'}
29818 //we check for process.pid to prevent browserify from tricking us
29819 if (typeof process != 'undefined' && typeof process.pid == 'number') {
29820 return nodeRandom(count, options)
29821 } else {
29822 var crypto = window.crypto || window.msCrypto
29823 if (!crypto) throw new Error("Your browser does not support window.crypto.")
29824 return browserRandom(count, options)
29825 }
29826}
29827
29828function nodeRandom(count, options) {
29829 var crypto = _dereq_('crypto')
29830 var buf = crypto.randomBytes(count)
29831
29832 switch (options.type) {
29833 case 'Array':
29834 return [].slice.call(buf)
29835 case 'Buffer':
29836 return buf
29837 case 'Uint8Array':
29838 var arr = new Uint8Array(count)
29839 for (var i = 0; i < count; ++i) { arr[i] = buf.readUInt8(i) }
29840 return arr
29841 default:
29842 throw new Error(options.type + " is unsupported.")
29843 }
29844}
29845
29846function browserRandom(count, options) {
29847 var nativeArr = new Uint8Array(count)
29848 var crypto = window.crypto || window.msCrypto
29849 crypto.getRandomValues(nativeArr)
29850
29851 switch (options.type) {
29852 case 'Array':
29853 return [].slice.call(nativeArr)
29854 case 'Buffer':
29855 try { var b = new Buffer(1) } catch(e) { throw new Error('Buffer not supported in this environment. Use Node.js or Browserify for browser support.')}
29856 return new Buffer(nativeArr)
29857 case 'Uint8Array':
29858 return nativeArr
29859 default:
29860 throw new Error(options.type + " is unsupported.")
29861 }
29862}
29863
29864secureRandom.randomArray = function(byteCount) {
29865 return secureRandom(byteCount, {type: 'Array'})
29866}
29867
29868secureRandom.randomUint8Array = function(byteCount) {
29869 return secureRandom(byteCount, {type: 'Uint8Array'})
29870}
29871
29872secureRandom.randomBuffer = function(byteCount) {
29873 return secureRandom(byteCount, {type: 'Buffer'})
29874}
29875
29876
29877})(this);
29878
29879}).call(this,_dereq_("FWaASH"),_dereq_("buffer").Buffer)
29880},{"FWaASH":12,"buffer":8,"crypto":7}],69:[function(_dereq_,module,exports){
29881(function (Buffer){
29882var assert = _dereq_('assert')
29883var base58check = _dereq_('./base58check')
29884var networks = _dereq_('./networks')
29885var scripts = _dereq_('./scripts')
29886
29887function findScriptTypeByVersion(version) {
29888 for (var networkName in networks) {
29889 var network = networks[networkName]
29890
29891 if (version === network.pubKeyHash) return 'pubkeyhash'
29892 if (version === network.scriptHash) return 'scripthash'
29893 }
29894}
29895
29896function Address(hash, version) {
29897 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
29898 assert.strictEqual(hash.length, 20, 'Invalid hash length')
29899 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
29900
29901 this.hash = hash
29902 this.version = version
29903}
29904
29905// Import functions
29906Address.fromBase58Check = function(string) {
29907 var payload = base58check.decode(string)
29908 var version = payload.readUInt8(0)
29909 var hash = payload.slice(1)
29910
29911 return new Address(hash, version)
29912}
29913
29914Address.fromOutputScript = function(script, network) {
29915 network = network || networks.bitcoin
29916
29917 var type = scripts.classifyOutput(script)
29918
29919 if (type === 'pubkeyhash') return new Address(script.chunks[2], network.pubKeyHash)
29920 if (type === 'scripthash') return new Address(script.chunks[1], network.scriptHash)
29921
29922 assert(false, type + ' has no matching Address')
29923}
29924
29925// Export functions
29926Address.prototype.toBase58Check = function () {
29927 var payload = new Buffer(21)
29928 payload.writeUInt8(this.version, 0)
29929 this.hash.copy(payload, 1)
29930
29931 return base58check.encode(payload)
29932}
29933
29934Address.prototype.toOutputScript = function() {
29935 var scriptType = findScriptTypeByVersion(this.version)
29936
29937 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
29938 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
29939
29940 assert(false, this.toString() + ' has no matching Script')
29941}
29942
29943Address.prototype.toString = Address.prototype.toBase58Check
29944
29945module.exports = Address
29946
29947}).call(this,_dereq_("buffer").Buffer)
29948},{"./base58check":70,"./networks":81,"./scripts":84,"assert":4,"buffer":8}],70:[function(_dereq_,module,exports){
29949(function (Buffer){
29950// https://en.bitcoin.it/wiki/Base58Check_encoding
29951var assert = _dereq_('assert')
29952var base58 = _dereq_('bs58')
29953var crypto = _dereq_('./crypto')
29954
29955// Encode a buffer as a base58-check-encoded string
29956function encode(payload) {
29957 var checksum = crypto.hash256(payload).slice(0, 4)
29958
29959 return base58.encode(Buffer.concat([
29960 payload,
29961 checksum
29962 ]))
29963}
29964
29965// Decode a base58-check-encoded string to a buffer
29966function decode(string) {
29967 var buffer = base58.decode(string)
29968
29969 var payload = buffer.slice(0, -4)
29970 var checksum = buffer.slice(-4)
29971 var newChecksum = crypto.hash256(payload).slice(0, 4)
29972
29973 assert.deepEqual(newChecksum, checksum, 'Invalid checksum')
29974
29975 return payload
29976}
29977
29978module.exports = {
29979 encode: encode,
29980 decode: decode
29981}
29982
29983}).call(this,_dereq_("buffer").Buffer)
29984},{"./crypto":73,"assert":4,"bs58":15,"buffer":8}],71:[function(_dereq_,module,exports){
29985var assert = _dereq_('assert')
29986var opcodes = _dereq_('./opcodes')
29987
29988// https://github.com/feross/buffer/blob/master/index.js#L1127
29989function verifuint(value, max) {
29990 assert(typeof value === 'number', 'cannot write a non-number as a number')
29991 assert(value >= 0, 'specified a negative value for writing an unsigned value')
29992 assert(value <= max, 'value is larger than maximum value for type')
29993 assert(Math.floor(value) === value, 'value has a fractional component')
29994}
29995
29996function pushDataSize(i) {
29997 return i < opcodes.OP_PUSHDATA1 ? 1
29998 : i < 0xff ? 2
29999 : i < 0xffff ? 3
30000 : 5
30001}
30002
30003function readPushDataInt(buffer, offset) {
30004 var opcode = buffer.readUInt8(offset)
30005 var number, size
30006
30007 // ~6 bit
30008 if (opcode < opcodes.OP_PUSHDATA1) {
30009 number = opcode
30010 size = 1
30011
30012 // 8 bit
30013 } else if (opcode === opcodes.OP_PUSHDATA1) {
30014 number = buffer.readUInt8(offset + 1)
30015 size = 2
30016
30017 // 16 bit
30018 } else if (opcode === opcodes.OP_PUSHDATA2) {
30019 number = buffer.readUInt16LE(offset + 1)
30020 size = 3
30021
30022 // 32 bit
30023 } else {
30024 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
30025
30026 number = buffer.readUInt32LE(offset + 1)
30027 size = 5
30028
30029 }
30030
30031 return {
30032 opcode: opcode,
30033 number: number,
30034 size: size
30035 }
30036}
30037
30038function readUInt64LE(buffer, offset) {
30039 var a = buffer.readUInt32LE(offset)
30040 var b = buffer.readUInt32LE(offset + 4)
30041 b *= 0x100000000
30042
30043 verifuint(b + a, 0x001fffffffffffff)
30044
30045 return b + a
30046}
30047
30048function readVarInt(buffer, offset) {
30049 var t = buffer.readUInt8(offset)
30050 var number, size
30051
30052 // 8 bit
30053 if (t < 253) {
30054 number = t
30055 size = 1
30056
30057 // 16 bit
30058 } else if (t < 254) {
30059 number = buffer.readUInt16LE(offset + 1)
30060 size = 3
30061
30062 // 32 bit
30063 } else if (t < 255) {
30064 number = buffer.readUInt32LE(offset + 1)
30065 size = 5
30066
30067 // 64 bit
30068 } else {
30069 number = readUInt64LE(buffer, offset + 1)
30070 size = 9
30071 }
30072
30073 return {
30074 number: number,
30075 size: size
30076 }
30077}
30078
30079function writePushDataInt(buffer, number, offset) {
30080 var size = pushDataSize(number)
30081
30082 // ~6 bit
30083 if (size === 1) {
30084 buffer.writeUInt8(number, offset)
30085
30086 // 8 bit
30087 } else if (size === 2) {
30088 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
30089 buffer.writeUInt8(number, offset + 1)
30090
30091 // 16 bit
30092 } else if (size === 3) {
30093 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
30094 buffer.writeUInt16LE(number, offset + 1)
30095
30096 // 32 bit
30097 } else {
30098 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
30099 buffer.writeUInt32LE(number, offset + 1)
30100
30101 }
30102
30103 return size
30104}
30105
30106function writeUInt64LE(buffer, value, offset) {
30107 verifuint(value, 0x001fffffffffffff)
30108
30109 buffer.writeInt32LE(value & -1, offset)
30110 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
30111}
30112
30113function varIntSize(i) {
30114 return i < 253 ? 1
30115 : i < 0x10000 ? 3
30116 : i < 0x100000000 ? 5
30117 : 9
30118}
30119
30120function writeVarInt(buffer, number, offset) {
30121 var size = varIntSize(number)
30122
30123 // 8 bit
30124 if (size === 1) {
30125 buffer.writeUInt8(number, offset)
30126
30127 // 16 bit
30128 } else if (size === 3) {
30129 buffer.writeUInt8(253, offset)
30130 buffer.writeUInt16LE(number, offset + 1)
30131
30132 // 32 bit
30133 } else if (size === 5) {
30134 buffer.writeUInt8(254, offset)
30135 buffer.writeUInt32LE(number, offset + 1)
30136
30137 // 64 bit
30138 } else {
30139 buffer.writeUInt8(255, offset)
30140 writeUInt64LE(buffer, number, offset + 1)
30141 }
30142
30143 return size
30144}
30145
30146module.exports = {
30147 pushDataSize: pushDataSize,
30148 readPushDataInt: readPushDataInt,
30149 readUInt64LE: readUInt64LE,
30150 readVarInt: readVarInt,
30151 varIntSize: varIntSize,
30152 writePushDataInt: writePushDataInt,
30153 writeUInt64LE: writeUInt64LE,
30154 writeVarInt: writeVarInt
30155}
30156
30157},{"./opcodes":82,"assert":4}],72:[function(_dereq_,module,exports){
30158(function (Buffer){
30159var assert = _dereq_('assert')
30160var Crypto = _dereq_('crypto-js')
30161var WordArray = Crypto.lib.WordArray
30162
30163function bufferToWordArray(buffer) {
30164 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got', buffer)
30165
30166 var words = []
30167 for (var i = 0, b = 0; i < buffer.length; i++, b += 8) {
30168 words[b >>> 5] |= buffer[i] << (24 - b % 32)
30169 }
30170
30171 return new WordArray.init(words, buffer.length)
30172}
30173
30174function wordArrayToBuffer(wordArray) {
30175 assert(Array.isArray(wordArray.words), 'Expected WordArray, got' + wordArray)
30176
30177 var words = wordArray.words
30178 var buffer = new Buffer(words.length * 4)
30179
30180 words.forEach(function(value, i) {
30181 buffer.writeInt32BE(value & -1, i * 4)
30182 })
30183
30184 return buffer
30185}
30186
30187module.exports = {
30188 bufferToWordArray: bufferToWordArray,
30189 wordArrayToBuffer: wordArrayToBuffer
30190}
30191
30192}).call(this,_dereq_("buffer").Buffer)
30193},{"assert":4,"buffer":8,"crypto-js":37}],73:[function(_dereq_,module,exports){
30194(function (Buffer){
30195// Crypto, crypto, where art thou crypto
30196var assert = _dereq_('assert')
30197var CryptoJS = _dereq_('crypto-js')
30198var crypto = _dereq_('crypto')
30199var convert = _dereq_('./convert')
30200
30201function hash160(buffer) {
30202 return ripemd160(sha256(buffer))
30203}
30204
30205function hash256(buffer) {
30206 return sha256(sha256(buffer))
30207}
30208
30209function ripemd160(buffer) {
30210 return crypto.createHash('rmd160').update(buffer).digest()
30211}
30212
30213function sha1(buffer) {
30214 return crypto.createHash('sha1').update(buffer).digest()
30215}
30216
30217function sha256(buffer) {
30218 return crypto.createHash('sha256').update(buffer).digest()
30219}
30220
30221// FIXME: Name not consistent with others
30222function HmacSHA256(buffer, secret) {
30223 return crypto.createHmac('sha256', secret).update(buffer).digest()
30224}
30225
30226function HmacSHA512(data, secret) {
30227 assert(Buffer.isBuffer(data), 'Expected Buffer for data, got ' + data)
30228 assert(Buffer.isBuffer(secret), 'Expected Buffer for secret, got ' + secret)
30229
30230 var dataWords = convert.bufferToWordArray(data)
30231 var secretWords = convert.bufferToWordArray(secret)
30232
30233 var hash = CryptoJS.HmacSHA512(dataWords, secretWords)
30234
30235 return convert.wordArrayToBuffer(hash)
30236}
30237
30238module.exports = {
30239 ripemd160: ripemd160,
30240 sha1: sha1,
30241 sha256: sha256,
30242 hash160: hash160,
30243 hash256: hash256,
30244 HmacSHA256: HmacSHA256,
30245 HmacSHA512: HmacSHA512
30246}
30247
30248}).call(this,_dereq_("buffer").Buffer)
30249},{"./convert":72,"assert":4,"buffer":8,"crypto":19,"crypto-js":37}],74:[function(_dereq_,module,exports){
30250(function (Buffer){
30251var assert = _dereq_('assert')
30252var crypto = _dereq_('./crypto')
30253
30254var BigInteger = _dereq_('bigi')
30255var ECSignature = _dereq_('./ecsignature')
30256var Point = _dereq_('ecurve').Point
30257
30258// https://tools.ietf.org/html/rfc6979#section-3.2
30259function deterministicGenerateK(curve, hash, d) {
30260 assert(Buffer.isBuffer(hash), 'Hash must be a Buffer, not ' + hash)
30261 assert.equal(hash.length, 32, 'Hash must be 256 bit')
30262 assert(d instanceof BigInteger, 'Private key must be a BigInteger')
30263
30264 var x = d.toBuffer(32)
30265 var k = new Buffer(32)
30266 var v = new Buffer(32)
30267
30268 // Step B
30269 v.fill(1)
30270
30271 // Step C
30272 k.fill(0)
30273
30274 // Step D
30275 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([0]), x, hash]), k)
30276
30277 // Step E
30278 v = crypto.HmacSHA256(v, k)
30279
30280 // Step F
30281 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([1]), x, hash]), k)
30282
30283 // Step G
30284 v = crypto.HmacSHA256(v, k)
30285
30286 // Step H1/H2a, ignored as tlen === qlen (256 bit)
30287 // Step H2b
30288 v = crypto.HmacSHA256(v, k)
30289
30290 var T = BigInteger.fromBuffer(v)
30291
30292 // Step H3, repeat until T is within the interval [1, n - 1]
30293 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0)) {
30294 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([0])]), k)
30295 v = crypto.HmacSHA256(v, k)
30296
30297 T = BigInteger.fromBuffer(v)
30298 }
30299
30300 return T
30301}
30302
30303function sign(curve, hash, d) {
30304 var k = deterministicGenerateK(curve, hash, d)
30305
30306 var n = curve.n
30307 var G = curve.G
30308 var Q = G.multiply(k)
30309 var e = BigInteger.fromBuffer(hash)
30310
30311 var r = Q.affineX.mod(n)
30312 assert.notEqual(r.signum(), 0, 'Invalid R value')
30313
30314 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
30315 assert.notEqual(s.signum(), 0, 'Invalid S value')
30316
30317 var N_OVER_TWO = n.shiftRight(1)
30318
30319 // enforce low S values, see bip62: 'low s values in signatures'
30320 if (s.compareTo(N_OVER_TWO) > 0) {
30321 s = n.subtract(s)
30322 }
30323
30324 return new ECSignature(r, s)
30325}
30326
30327function verify(curve, hash, signature, Q) {
30328 var e = BigInteger.fromBuffer(hash)
30329
30330 return verifyRaw(curve, e, signature, Q)
30331}
30332
30333function verifyRaw(curve, e, signature, Q) {
30334 var n = curve.n
30335 var G = curve.G
30336
30337 var r = signature.r
30338 var s = signature.s
30339
30340 if (r.signum() === 0 || r.compareTo(n) >= 0) return false
30341 if (s.signum() === 0 || s.compareTo(n) >= 0) return false
30342
30343 var c = s.modInverse(n)
30344
30345 var u1 = e.multiply(c).mod(n)
30346 var u2 = r.multiply(c).mod(n)
30347
30348 var point = G.multiplyTwo(u1, Q, u2)
30349 var v = point.affineX.mod(n)
30350
30351 return v.equals(r)
30352}
30353
30354/**
30355 * Recover a public key from a signature.
30356 *
30357 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
30358 * Key Recovery Operation".
30359 *
30360 * http://www.secg.org/download/aid-780/sec1-v2.pdf
30361 */
30362function recoverPubKey(curve, e, signature, i) {
30363 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
30364
30365 var r = signature.r
30366 var s = signature.s
30367
30368 // A set LSB signifies that the y-coordinate is odd
30369 var isYOdd = i & 1
30370
30371 // The more significant bit specifies whether we should use the
30372 // first or second candidate key.
30373 var isSecondKey = i >> 1
30374
30375 var n = curve.n
30376 var G = curve.G
30377
30378 // 1.1 Let x = r + jn
30379 var x = isSecondKey ? r.add(n) : r
30380 var R = curve.pointFromX(isYOdd, x)
30381
30382 // 1.4 Check that nR is at infinity
30383 var nR = R.multiply(n)
30384 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
30385
30386 // Compute -e from e
30387 var eNeg = e.negate().mod(n)
30388
30389 // 1.6.1 Compute Q = r^-1 (sR - eG)
30390 // Q = r^-1 (sR + -eG)
30391 var rInv = r.modInverse(n)
30392
30393 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
30394 curve.validate(Q)
30395
30396 return Q
30397}
30398
30399/**
30400 * Calculate pubkey extraction parameter.
30401 *
30402 * When extracting a pubkey from a signature, we have to
30403 * distinguish four different cases. Rather than putting this
30404 * burden on the verifier, Bitcoin includes a 2-bit value with the
30405 * signature.
30406 *
30407 * This function simply tries all four cases and returns the value
30408 * that resulted in a successful pubkey recovery.
30409 */
30410function calcPubKeyRecoveryParam(curve, e, signature, Q) {
30411 for (var i = 0; i < 4; i++) {
30412 var Qprime = recoverPubKey(curve, e, signature, i)
30413
30414 // 1.6.2 Verify Q
30415 if (Qprime.equals(Q)) {
30416 return i
30417 }
30418 }
30419
30420 throw new Error('Unable to find valid recovery factor')
30421}
30422
30423module.exports = {
30424 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
30425 deterministicGenerateK: deterministicGenerateK,
30426 recoverPubKey: recoverPubKey,
30427 sign: sign,
30428 verify: verify,
30429 verifyRaw: verifyRaw
30430}
30431
30432}).call(this,_dereq_("buffer").Buffer)
30433},{"./crypto":73,"./ecsignature":77,"assert":4,"bigi":3,"buffer":8,"ecurve":65}],75:[function(_dereq_,module,exports){
30434(function (Buffer){
30435var assert = _dereq_('assert')
30436var base58check = _dereq_('./base58check')
30437var ecdsa = _dereq_('./ecdsa')
30438var networks = _dereq_('./networks')
30439var secureRandom = _dereq_('secure-random')
30440
30441var BigInteger = _dereq_('bigi')
30442var ECPubKey = _dereq_('./ecpubkey')
30443
30444var ecurve = _dereq_('ecurve')
30445var curve = ecurve.getCurveByName('secp256k1')
30446
30447function ECKey(d, compressed) {
30448 assert(d.signum() > 0, 'Private key must be greater than 0')
30449 assert(d.compareTo(curve.n) < 0, 'Private key must be less than the curve order')
30450
30451 var Q = curve.G.multiply(d)
30452
30453 this.d = d
30454 this.pub = new ECPubKey(Q, compressed)
30455}
30456
30457// Static constructors
30458ECKey.fromWIF = function(string) {
30459 var payload = base58check.decode(string)
30460 var compressed = false
30461
30462 // Ignore the version byte
30463 payload = payload.slice(1)
30464
30465 if (payload.length === 33) {
30466 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
30467
30468 // Truncate the compression flag
30469 payload = payload.slice(0, -1)
30470 compressed = true
30471 }
30472
30473 assert.equal(payload.length, 32, 'Invalid WIF payload length')
30474
30475 var d = BigInteger.fromBuffer(payload)
30476 return new ECKey(d, compressed)
30477}
30478
30479ECKey.makeRandom = function(compressed, rng) {
30480 rng = rng || secureRandom.randomBuffer
30481
30482 var buffer = rng(32)
30483 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got ' + buffer)
30484
30485 var d = BigInteger.fromBuffer(buffer)
30486 d = d.mod(curve.n)
30487
30488 return new ECKey(d, compressed)
30489}
30490
30491// Export functions
30492ECKey.prototype.toWIF = function(network) {
30493 network = network || networks.bitcoin
30494
30495 var bufferLen = this.pub.compressed ? 34 : 33
30496 var buffer = new Buffer(bufferLen)
30497
30498 buffer.writeUInt8(network.wif, 0)
30499 this.d.toBuffer(32).copy(buffer, 1)
30500
30501 if (this.pub.compressed) {
30502 buffer.writeUInt8(0x01, 33)
30503 }
30504
30505 return base58check.encode(buffer)
30506}
30507
30508// Operations
30509ECKey.prototype.sign = function(hash) {
30510 return ecdsa.sign(curve, hash, this.d)
30511}
30512
30513module.exports = ECKey
30514
30515}).call(this,_dereq_("buffer").Buffer)
30516},{"./base58check":70,"./ecdsa":74,"./ecpubkey":76,"./networks":81,"assert":4,"bigi":3,"buffer":8,"ecurve":65,"secure-random":68}],76:[function(_dereq_,module,exports){
30517(function (Buffer){
30518var assert = _dereq_('assert')
30519var crypto = _dereq_('./crypto')
30520var ecdsa = _dereq_('./ecdsa')
30521var networks = _dereq_('./networks')
30522
30523var Address = _dereq_('./address')
30524
30525var ecurve = _dereq_('ecurve')
30526var curve = ecurve.getCurveByName('secp256k1')
30527
30528function ECPubKey(Q, compressed) {
30529 assert(Q instanceof ecurve.Point, 'Expected Point, got ' + Q)
30530
30531 if (compressed == undefined) compressed = true
30532 assert.strictEqual(typeof compressed, 'boolean', 'Expected boolean, got ' + compressed)
30533
30534 this.compressed = compressed
30535 this.Q = Q
30536}
30537
30538// Static constructors
30539ECPubKey.fromBuffer = function(buffer) {
30540 var Q = ecurve.Point.decodeFrom(curve, buffer)
30541 return new ECPubKey(Q, Q.compressed)
30542}
30543
30544ECPubKey.fromHex = function(hex) {
30545 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
30546}
30547
30548// Operations
30549ECPubKey.prototype.getAddress = function(network) {
30550 network = network || networks.bitcoin
30551
30552 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
30553}
30554
30555ECPubKey.prototype.verify = function(hash, signature) {
30556 return ecdsa.verify(curve, hash, signature, this.Q)
30557}
30558
30559// Export functions
30560ECPubKey.prototype.toBuffer = function() {
30561 return this.Q.getEncoded(this.compressed)
30562}
30563
30564ECPubKey.prototype.toHex = function() {
30565 return this.toBuffer().toString('hex')
30566}
30567
30568module.exports = ECPubKey
30569
30570}).call(this,_dereq_("buffer").Buffer)
30571},{"./address":69,"./crypto":73,"./ecdsa":74,"./networks":81,"assert":4,"buffer":8,"ecurve":65}],77:[function(_dereq_,module,exports){
30572(function (Buffer){
30573var assert = _dereq_('assert')
30574var BigInteger = _dereq_('bigi')
30575
30576function ECSignature(r, s) {
30577 assert(r instanceof BigInteger, 'Expected BigInteger, got ' + r)
30578 assert(s instanceof BigInteger, 'Expected BigInteger, got ' + s)
30579 this.r = r
30580 this.s = s
30581}
30582
30583// Import operations
30584ECSignature.parseCompact = function(buffer) {
30585 assert.equal(buffer.length, 65, 'Invalid signature length')
30586 var i = buffer.readUInt8(0) - 27
30587
30588 // At most 3 bits
30589 assert.equal(i, i & 7, 'Invalid signature parameter')
30590 var compressed = !!(i & 4)
30591
30592 // Recovery param only
30593 i = i & 3
30594
30595 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
30596 var s = BigInteger.fromBuffer(buffer.slice(33))
30597
30598 return {
30599 compressed: compressed,
30600 i: i,
30601 signature: new ECSignature(r, s)
30602 }
30603}
30604
30605ECSignature.fromDER = function(buffer) {
30606 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
30607 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
30608 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
30609
30610 var rLen = buffer.readUInt8(3)
30611 assert(rLen > 0, 'R length is zero')
30612
30613 var offset = 4 + rLen
30614 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
30615
30616 var sLen = buffer.readUInt8(offset + 1)
30617 assert(sLen > 0, 'S length is zero')
30618
30619 var rB = buffer.slice(4, offset)
30620 var sB = buffer.slice(offset + 2)
30621 offset += 2 + sLen
30622
30623 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
30624 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
30625 }
30626
30627 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
30628 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
30629 }
30630
30631 assert.equal(offset, buffer.length, 'Invalid DER encoding')
30632 var r = BigInteger.fromDERInteger(rB)
30633 var s = BigInteger.fromDERInteger(sB)
30634
30635 assert(r.signum() >= 0, 'R value is negative')
30636 assert(s.signum() >= 0, 'S value is negative')
30637
30638 return new ECSignature(r, s)
30639}
30640
30641// FIXME: 0x00, 0x04, 0x80 are SIGHASH_* boundary constants, importing Transaction causes a circular dependency
30642ECSignature.parseScriptSignature = function(buffer) {
30643 var hashType = buffer.readUInt8(buffer.length - 1)
30644 var hashTypeMod = hashType & ~0x80
30645
30646 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType')
30647
30648 return {
30649 signature: ECSignature.fromDER(buffer.slice(0, -1)),
30650 hashType: hashType
30651 }
30652}
30653
30654// Export operations
30655ECSignature.prototype.toCompact = function(i, compressed) {
30656 if (compressed) i += 4
30657 i += 27
30658
30659 var buffer = new Buffer(65)
30660 buffer.writeUInt8(i, 0)
30661
30662 this.r.toBuffer(32).copy(buffer, 1)
30663 this.s.toBuffer(32).copy(buffer, 33)
30664
30665 return buffer
30666}
30667
30668ECSignature.prototype.toDER = function() {
30669 var rBa = this.r.toDERInteger()
30670 var sBa = this.s.toDERInteger()
30671
30672 var sequence = []
30673 sequence.push(0x02) // INTEGER
30674 sequence.push(rBa.length)
30675 sequence = sequence.concat(rBa)
30676
30677 sequence.push(0x02) // INTEGER
30678 sequence.push(sBa.length)
30679 sequence = sequence.concat(sBa)
30680
30681 sequence.unshift(sequence.length)
30682 sequence.unshift(0x30) // SEQUENCE
30683
30684 return new Buffer(sequence)
30685}
30686
30687ECSignature.prototype.toScriptSignature = function(hashType) {
30688 var hashTypeBuffer = new Buffer(1)
30689 hashTypeBuffer.writeUInt8(hashType, 0)
30690
30691 return Buffer.concat([this.toDER(), hashTypeBuffer])
30692}
30693
30694module.exports = ECSignature
30695
30696}).call(this,_dereq_("buffer").Buffer)
30697},{"assert":4,"bigi":3,"buffer":8}],78:[function(_dereq_,module,exports){
30698(function (Buffer){
30699var assert = _dereq_('assert')
30700var base58check = _dereq_('./base58check')
30701var crypto = _dereq_('./crypto')
30702var networks = _dereq_('./networks')
30703
30704var BigInteger = _dereq_('bigi')
30705var ECKey = _dereq_('./eckey')
30706var ECPubKey = _dereq_('./ecpubkey')
30707
30708var ecurve = _dereq_('ecurve')
30709var curve = ecurve.getCurveByName('secp256k1')
30710
30711function findBIP32ParamsByVersion(version) {
30712 for (var name in networks) {
30713 var network = networks[name]
30714
30715 for (var type in network.bip32) {
30716 if (version != network.bip32[type]) continue
30717
30718 return {
30719 isPrivate: (type === 'private'),
30720 network: network
30721 }
30722 }
30723 }
30724
30725 assert(false, 'Could not find version ' + version.toString(16))
30726}
30727
30728function HDNode(K, chainCode, network) {
30729 network = network || networks.bitcoin
30730
30731 assert(Buffer.isBuffer(chainCode), 'Expected Buffer, got ' + chainCode)
30732 assert(network.bip32, 'Unknown BIP32 constants for network')
30733
30734 this.chainCode = chainCode
30735 this.depth = 0
30736 this.index = 0
30737 this.network = network
30738
30739 if (K instanceof BigInteger) {
30740 this.privKey = new ECKey(K, true)
30741 this.pubKey = this.privKey.pub
30742 } else {
30743 this.pubKey = new ECPubKey(K, true)
30744 }
30745}
30746
30747HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
30748HDNode.HIGHEST_BIT = 0x80000000
30749HDNode.LENGTH = 78
30750
30751HDNode.fromSeedBuffer = function(seed, network) {
30752 var I = crypto.HmacSHA512(seed, HDNode.MASTER_SECRET)
30753 var IL = I.slice(0, 32)
30754 var IR = I.slice(32)
30755
30756 // In case IL is 0 or >= n, the master key is invalid
30757 // This is handled by `new ECKey` in the HDNode constructor
30758 var pIL = BigInteger.fromBuffer(IL)
30759
30760 return new HDNode(pIL, IR, network)
30761}
30762
30763HDNode.fromSeedHex = function(hex, network) {
30764 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
30765}
30766
30767HDNode.fromBase58 = function(string) {
30768 return HDNode.fromBuffer(base58check.decode(string))
30769}
30770
30771HDNode.fromBuffer = function(buffer) {
30772 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
30773
30774 // 4 byte: version bytes
30775 var version = buffer.readUInt32BE(0)
30776 var params = findBIP32ParamsByVersion(version)
30777
30778 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
30779 var depth = buffer.readUInt8(4)
30780
30781 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
30782 var parentFingerprint = buffer.readUInt32BE(5)
30783 if (depth === 0) {
30784 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
30785 }
30786
30787 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
30788 // This is encoded in MSB order. (0x00000000 if master key)
30789 var index = buffer.readUInt32BE(9)
30790 assert(depth > 0 || index === 0, 'Invalid index')
30791
30792 // 32 bytes: the chain code
30793 var chainCode = buffer.slice(13, 45)
30794 var hd
30795
30796 // 33 bytes: private key data (0x00 + k)
30797 if (params.isPrivate) {
30798 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
30799 var data = buffer.slice(46, 78)
30800 var d = BigInteger.fromBuffer(data)
30801 hd = new HDNode(d, chainCode, params.network)
30802
30803 // 33 bytes: public key data (0x02 + X or 0x03 + X)
30804 } else {
30805 var data = buffer.slice(45, 78)
30806 var Q = ecurve.Point.decodeFrom(curve, data)
30807 assert.equal(Q.compressed, true, 'Invalid public key')
30808
30809 // Verify that the X coordinate in the public point corresponds to a point on the curve.
30810 // If not, the extended public key is invalid.
30811 curve.validate(Q)
30812
30813 hd = new HDNode(Q, chainCode, params.network)
30814 }
30815
30816 hd.depth = depth
30817 hd.index = index
30818 hd.parentFingerprint = parentFingerprint
30819
30820 return hd
30821}
30822
30823HDNode.fromHex = function(hex) {
30824 return HDNode.fromBuffer(new Buffer(hex, 'hex'))
30825}
30826
30827HDNode.prototype.getIdentifier = function() {
30828 return crypto.hash160(this.pubKey.toBuffer())
30829}
30830
30831HDNode.prototype.getFingerprint = function() {
30832 return this.getIdentifier().slice(0, 4)
30833}
30834
30835HDNode.prototype.getAddress = function() {
30836 return this.pubKey.getAddress(this.network)
30837}
30838
30839HDNode.prototype.toBase58 = function(isPrivate) {
30840 return base58check.encode(this.toBuffer(isPrivate))
30841}
30842
30843HDNode.prototype.toBuffer = function(isPrivate) {
30844 if (isPrivate == undefined) isPrivate = !!this.privKey
30845
30846 // Version
30847 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
30848 var buffer = new Buffer(HDNode.LENGTH)
30849
30850 // 4 bytes: version bytes
30851 buffer.writeUInt32BE(version, 0)
30852
30853 // Depth
30854 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
30855 buffer.writeUInt8(this.depth, 4)
30856
30857 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
30858 var fingerprint = (this.depth === 0) ? 0x00000000 : this.parentFingerprint
30859 buffer.writeUInt32BE(fingerprint, 5)
30860
30861 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
30862 // This is encoded in Big endian. (0x00000000 if master key)
30863 buffer.writeUInt32BE(this.index, 9)
30864
30865 // 32 bytes: the chain code
30866 this.chainCode.copy(buffer, 13)
30867
30868 // 33 bytes: the public key or private key data
30869 if (isPrivate) {
30870 assert(this.privKey, 'Missing private key')
30871
30872 // 0x00 + k for private keys
30873 buffer.writeUInt8(0, 45)
30874 this.privKey.d.toBuffer(32).copy(buffer, 46)
30875 } else {
30876
30877 // X9.62 encoding for public keys
30878 this.pubKey.toBuffer().copy(buffer, 45)
30879 }
30880
30881 return buffer
30882}
30883
30884HDNode.prototype.toHex = function(isPrivate) {
30885 return this.toBuffer(isPrivate).toString('hex')
30886}
30887
30888// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
30889HDNode.prototype.derive = function(index) {
30890 var isHardened = index >= HDNode.HIGHEST_BIT
30891 var indexBuffer = new Buffer(4)
30892 indexBuffer.writeUInt32BE(index, 0)
30893
30894 var data
30895
30896 // Hardened child
30897 if (isHardened) {
30898 assert(this.privKey, 'Could not derive hardened child key')
30899
30900 // data = 0x00 || ser256(kpar) || ser32(index)
30901 data = Buffer.concat([
30902 this.privKey.d.toBuffer(33),
30903 indexBuffer
30904 ])
30905
30906 // Normal child
30907 } else {
30908 // data = serP(point(kpar)) || ser32(index)
30909 // = serP(Kpar) || ser32(index)
30910 data = Buffer.concat([
30911 this.pubKey.toBuffer(),
30912 indexBuffer
30913 ])
30914 }
30915
30916 var I = crypto.HmacSHA512(data, this.chainCode)
30917 var IL = I.slice(0, 32)
30918 var IR = I.slice(32)
30919
30920 var pIL = BigInteger.fromBuffer(IL)
30921
30922 // In case parse256(IL) >= n, proceed with the next value for i
30923 if (pIL.compareTo(curve.n) >= 0) {
30924 return this.derive(index + 1)
30925 }
30926
30927 // Private parent key -> private child key
30928 var hd
30929 if (this.privKey) {
30930 // ki = parse256(IL) + kpar (mod n)
30931 var ki = pIL.add(this.privKey.d).mod(curve.n)
30932
30933 // In case ki == 0, proceed with the next value for i
30934 if (ki.signum() === 0) {
30935 return this.derive(index + 1)
30936 }
30937
30938 hd = new HDNode(ki, IR, this.network)
30939
30940 // Public parent key -> public child key
30941 } else {
30942 // Ki = point(parse256(IL)) + Kpar
30943 // = G*IL + Kpar
30944 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
30945
30946 // In case Ki is the point at infinity, proceed with the next value for i
30947 if (curve.isInfinity(Ki)) {
30948 return this.derive(index + 1)
30949 }
30950
30951 hd = new HDNode(Ki, IR, this.network)
30952 }
30953
30954 hd.depth = this.depth + 1
30955 hd.index = index
30956 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
30957
30958 return hd
30959}
30960
30961HDNode.prototype.deriveHardened = function(index) {
30962 // Only derives hardened private keys by default
30963 return this.derive(index + HDNode.HIGHEST_BIT)
30964}
30965
30966HDNode.prototype.toString = HDNode.prototype.toBase58
30967
30968module.exports = HDNode
30969
30970}).call(this,_dereq_("buffer").Buffer)
30971},{"./base58check":70,"./crypto":73,"./eckey":75,"./ecpubkey":76,"./networks":81,"assert":4,"bigi":3,"buffer":8,"ecurve":65}],79:[function(_dereq_,module,exports){
30972module.exports = {
30973 Address: _dereq_('./address'),
30974 base58check: _dereq_('./base58check'),
30975 bufferutils: _dereq_('./bufferutils'),
30976 convert: _dereq_('./convert'),
30977 crypto: _dereq_('./crypto'),
30978 ecdsa: _dereq_('./ecdsa'),
30979 ECKey: _dereq_('./eckey'),
30980 ECPubKey: _dereq_('./ecpubkey'),
30981 ECSignature: _dereq_('./ecsignature'),
30982 Message: _dereq_('./message'),
30983 opcodes: _dereq_('./opcodes'),
30984 HDNode: _dereq_('./hdnode'),
30985 Script: _dereq_('./script'),
30986 scripts: _dereq_('./scripts'),
30987 Transaction: _dereq_('./transaction'),
30988 networks: _dereq_('./networks'),
30989 Wallet: _dereq_('./wallet')
30990}
30991
30992},{"./address":69,"./base58check":70,"./bufferutils":71,"./convert":72,"./crypto":73,"./ecdsa":74,"./eckey":75,"./ecpubkey":76,"./ecsignature":77,"./hdnode":78,"./message":80,"./networks":81,"./opcodes":82,"./script":83,"./scripts":84,"./transaction":85,"./wallet":86}],80:[function(_dereq_,module,exports){
30993(function (Buffer){
30994/// Implements Bitcoin's feature for signing arbitrary messages.
30995var Address = _dereq_('./address')
30996var BigInteger = _dereq_('bigi')
30997var bufferutils = _dereq_('./bufferutils')
30998var crypto = _dereq_('./crypto')
30999var ecdsa = _dereq_('./ecdsa')
31000var networks = _dereq_('./networks')
31001
31002var Address = _dereq_('./address')
31003var ECPubKey = _dereq_('./ecpubkey')
31004var ECSignature = _dereq_('./ecsignature')
31005
31006var ecurve = _dereq_('ecurve')
31007var ecparams = ecurve.getCurveByName('secp256k1')
31008
31009function magicHash(message, network) {
31010 var magicPrefix = new Buffer(network.magicPrefix)
31011 var messageBuffer = new Buffer(message)
31012 var lengthBuffer = new Buffer(bufferutils.varIntSize(messageBuffer.length))
31013 bufferutils.writeVarInt(lengthBuffer, messageBuffer.length, 0)
31014
31015 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
31016 return crypto.hash256(buffer)
31017}
31018
31019function sign(privKey, message, network) {
31020 network = network || networks.bitcoin
31021
31022 var hash = magicHash(message, network)
31023 var signature = privKey.sign(hash)
31024 var e = BigInteger.fromBuffer(hash)
31025 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
31026
31027 return signature.toCompact(i, privKey.pub.compressed)
31028}
31029
31030// TODO: network could be implied from address
31031function verify(address, signatureBuffer, message, network) {
31032 if (address instanceof Address) {
31033 address = address.toString()
31034 }
31035 network = network || networks.bitcoin
31036
31037 var hash = magicHash(message, network)
31038 var parsed = ECSignature.parseCompact(signatureBuffer)
31039 var e = BigInteger.fromBuffer(hash)
31040 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
31041
31042 var pubKey = new ECPubKey(Q, parsed.compressed)
31043 return pubKey.getAddress(network).toString() === address
31044}
31045
31046module.exports = {
31047 magicHash: magicHash,
31048 sign: sign,
31049 verify: verify
31050}
31051
31052}).call(this,_dereq_("buffer").Buffer)
31053},{"./address":69,"./bufferutils":71,"./crypto":73,"./ecdsa":74,"./ecpubkey":76,"./ecsignature":77,"./networks":81,"bigi":3,"buffer":8,"ecurve":65}],81:[function(_dereq_,module,exports){
31054// https://en.bitcoin.it/wiki/List_of_address_prefixes
31055// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
31056
31057var networks = {
31058 bitcoin: {
31059 magicPrefix: '\x18Bitcoin Signed Message:\n',
31060 bip32: {
31061 public: 0x0488b21e,
31062 private: 0x0488ade4
31063 },
31064 pubKeyHash: 0x00,
31065 scriptHash: 0x05,
31066 wif: 0x80,
31067 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
31068 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
31069 estimateFee: estimateFee('bitcoin')
31070 },
31071 dogecoin: {
31072 magicPrefix: '\x19Dogecoin Signed Message:\n',
31073 bip32: {
31074 public: 0x02facafd,
31075 private: 0x02fac398
31076 },
31077 pubKeyHash: 0x1e,
31078 scriptHash: 0x16,
31079 wif: 0x9e,
31080 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
31081 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
31082 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
31083 estimateFee: estimateFee('dogecoin')
31084 },
31085 litecoin: {
31086 magicPrefix: '\x19Litecoin Signed Message:\n',
31087 bip32: {
31088 public: 0x019da462,
31089 private: 0x019d9cfe
31090 },
31091 pubKeyHash: 0x30,
31092 scriptHash: 0x05,
31093 wif: 0xb0,
31094 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
31095 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
31096 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
31097 estimateFee: estimateFee('litecoin')
31098 },
31099 testnet: {
31100 magicPrefix: '\x18Bitcoin Signed Message:\n',
31101 bip32: {
31102 public: 0x043587cf,
31103 private: 0x04358394
31104 },
31105 pubKeyHash: 0x6f,
31106 scriptHash: 0xc4,
31107 wif: 0xef,
31108 dustThreshold: 546,
31109 feePerKb: 10000,
31110 estimateFee: estimateFee('testnet')
31111 }
31112}
31113
31114function estimateFee(type) {
31115 return function(tx) {
31116 var network = networks[type]
31117 var baseFee = network.feePerKb
31118 var byteSize = tx.toBuffer().length
31119
31120 var fee = baseFee * Math.ceil(byteSize / 1000)
31121 if (network.dustSoftThreshold == undefined) return fee
31122
31123 tx.outs.forEach(function(e){
31124 if (e.value < network.dustSoftThreshold) {
31125 fee += baseFee
31126 }
31127 })
31128
31129 return fee
31130 }
31131}
31132
31133module.exports = networks
31134
31135},{}],82:[function(_dereq_,module,exports){
31136module.exports = {
31137 // push value
31138 OP_FALSE : 0,
31139 OP_0 : 0,
31140 OP_PUSHDATA1 : 76,
31141 OP_PUSHDATA2 : 77,
31142 OP_PUSHDATA4 : 78,
31143 OP_1NEGATE : 79,
31144 OP_RESERVED : 80,
31145 OP_1 : 81,
31146 OP_TRUE : 81,
31147 OP_2 : 82,
31148 OP_3 : 83,
31149 OP_4 : 84,
31150 OP_5 : 85,
31151 OP_6 : 86,
31152 OP_7 : 87,
31153 OP_8 : 88,
31154 OP_9 : 89,
31155 OP_10 : 90,
31156 OP_11 : 91,
31157 OP_12 : 92,
31158 OP_13 : 93,
31159 OP_14 : 94,
31160 OP_15 : 95,
31161 OP_16 : 96,
31162
31163 // control
31164 OP_NOP : 97,
31165 OP_VER : 98,
31166 OP_IF : 99,
31167 OP_NOTIF : 100,
31168 OP_VERIF : 101,
31169 OP_VERNOTIF : 102,
31170 OP_ELSE : 103,
31171 OP_ENDIF : 104,
31172 OP_VERIFY : 105,
31173 OP_RETURN : 106,
31174
31175 // stack ops
31176 OP_TOALTSTACK : 107,
31177 OP_FROMALTSTACK : 108,
31178 OP_2DROP : 109,
31179 OP_2DUP : 110,
31180 OP_3DUP : 111,
31181 OP_2OVER : 112,
31182 OP_2ROT : 113,
31183 OP_2SWAP : 114,
31184 OP_IFDUP : 115,
31185 OP_DEPTH : 116,
31186 OP_DROP : 117,
31187 OP_DUP : 118,
31188 OP_NIP : 119,
31189 OP_OVER : 120,
31190 OP_PICK : 121,
31191 OP_ROLL : 122,
31192 OP_ROT : 123,
31193 OP_SWAP : 124,
31194 OP_TUCK : 125,
31195
31196 // splice ops
31197 OP_CAT : 126,
31198 OP_SUBSTR : 127,
31199 OP_LEFT : 128,
31200 OP_RIGHT : 129,
31201 OP_SIZE : 130,
31202
31203 // bit logic
31204 OP_INVERT : 131,
31205 OP_AND : 132,
31206 OP_OR : 133,
31207 OP_XOR : 134,
31208 OP_EQUAL : 135,
31209 OP_EQUALVERIFY : 136,
31210 OP_RESERVED1 : 137,
31211 OP_RESERVED2 : 138,
31212
31213 // numeric
31214 OP_1ADD : 139,
31215 OP_1SUB : 140,
31216 OP_2MUL : 141,
31217 OP_2DIV : 142,
31218 OP_NEGATE : 143,
31219 OP_ABS : 144,
31220 OP_NOT : 145,
31221 OP_0NOTEQUAL : 146,
31222
31223 OP_ADD : 147,
31224 OP_SUB : 148,
31225 OP_MUL : 149,
31226 OP_DIV : 150,
31227 OP_MOD : 151,
31228 OP_LSHIFT : 152,
31229 OP_RSHIFT : 153,
31230
31231 OP_BOOLAND : 154,
31232 OP_BOOLOR : 155,
31233 OP_NUMEQUAL : 156,
31234 OP_NUMEQUALVERIFY : 157,
31235 OP_NUMNOTEQUAL : 158,
31236 OP_LESSTHAN : 159,
31237 OP_GREATERTHAN : 160,
31238 OP_LESSTHANOREQUAL : 161,
31239 OP_GREATERTHANOREQUAL : 162,
31240 OP_MIN : 163,
31241 OP_MAX : 164,
31242
31243 OP_WITHIN : 165,
31244
31245 // crypto
31246 OP_RIPEMD160 : 166,
31247 OP_SHA1 : 167,
31248 OP_SHA256 : 168,
31249 OP_HASH160 : 169,
31250 OP_HASH256 : 170,
31251 OP_CODESEPARATOR : 171,
31252 OP_CHECKSIG : 172,
31253 OP_CHECKSIGVERIFY : 173,
31254 OP_CHECKMULTISIG : 174,
31255 OP_CHECKMULTISIGVERIFY : 175,
31256
31257 // expansion
31258 OP_NOP1 : 176,
31259 OP_NOP2 : 177,
31260 OP_NOP3 : 178,
31261 OP_NOP4 : 179,
31262 OP_NOP5 : 180,
31263 OP_NOP6 : 181,
31264 OP_NOP7 : 182,
31265 OP_NOP8 : 183,
31266 OP_NOP9 : 184,
31267 OP_NOP10 : 185,
31268
31269 // template matching params
31270 OP_PUBKEYHASH : 253,
31271 OP_PUBKEY : 254,
31272 OP_INVALIDOPCODE : 255
31273}
31274
31275},{}],83:[function(_dereq_,module,exports){
31276(function (Buffer){
31277var assert = _dereq_('assert')
31278var bufferutils = _dereq_('./bufferutils')
31279var crypto = _dereq_('./crypto')
31280var opcodes = _dereq_('./opcodes')
31281
31282function Script(buffer, chunks) {
31283 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got ' + buffer)
31284 assert(Array.isArray(chunks), 'Expected Array, got ' + chunks)
31285
31286 this.buffer = buffer
31287 this.chunks = chunks
31288}
31289
31290// Import operations
31291Script.fromASM = function(asm) {
31292 var strChunks = asm.split(' ')
31293
31294 var chunks = strChunks.map(function(strChunk) {
31295 if (strChunk in opcodes) {
31296 return opcodes[strChunk]
31297
31298 } else {
31299 return new Buffer(strChunk, 'hex')
31300 }
31301 })
31302
31303 return Script.fromChunks(chunks)
31304}
31305
31306Script.fromBuffer = function(buffer) {
31307 var chunks = []
31308
31309 var i = 0
31310
31311 while (i < buffer.length) {
31312 var opcode = buffer.readUInt8(i)
31313
31314 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
31315 var d = bufferutils.readPushDataInt(buffer, i)
31316 i += d.size
31317
31318 var data = buffer.slice(i, i + d.number)
31319 i += d.number
31320
31321 chunks.push(data)
31322
31323 } else {
31324 chunks.push(opcode)
31325
31326 i += 1
31327 }
31328 }
31329
31330 return new Script(buffer, chunks)
31331}
31332
31333Script.fromChunks = function(chunks) {
31334 assert(Array.isArray(chunks), 'Expected Array, got ' + chunks)
31335
31336 var bufferSize = chunks.reduce(function(accum, chunk) {
31337 if (Buffer.isBuffer(chunk)) {
31338 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
31339 }
31340
31341 return accum + 1
31342 }, 0.0)
31343
31344 var buffer = new Buffer(bufferSize)
31345 var offset = 0
31346
31347 chunks.forEach(function(chunk) {
31348 if (Buffer.isBuffer(chunk)) {
31349 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
31350
31351 chunk.copy(buffer, offset)
31352 offset += chunk.length
31353
31354 } else {
31355 buffer.writeUInt8(chunk, offset)
31356 offset += 1
31357 }
31358 })
31359
31360 assert.equal(offset, buffer.length, 'Could not decode chunks')
31361 return new Script(buffer, chunks)
31362}
31363
31364Script.fromHex = function(hex) {
31365 return Script.fromBuffer(new Buffer(hex, 'hex'))
31366}
31367
31368// Constants
31369Script.EMPTY = Script.fromChunks([])
31370
31371// Operations
31372Script.prototype.getHash = function() {
31373 return crypto.hash160(this.buffer)
31374}
31375
31376// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
31377Script.prototype.without = function(needle) {
31378 return Script.fromChunks(this.chunks.filter(function(op) {
31379 return op !== needle
31380 }))
31381}
31382
31383// Export operations
31384var reverseOps = []
31385for (var op in opcodes) {
31386 var code = opcodes[op]
31387 reverseOps[code] = op
31388}
31389
31390Script.prototype.toASM = function() {
31391 return this.chunks.map(function(chunk) {
31392 if (Buffer.isBuffer(chunk)) {
31393 return chunk.toString('hex')
31394
31395 } else {
31396 return reverseOps[chunk]
31397 }
31398 }).join(' ')
31399}
31400
31401Script.prototype.toBuffer = function() {
31402 return this.buffer
31403}
31404
31405Script.prototype.toHex = function() {
31406 return this.toBuffer().toString('hex')
31407}
31408
31409module.exports = Script
31410
31411}).call(this,_dereq_("buffer").Buffer)
31412},{"./bufferutils":71,"./crypto":73,"./opcodes":82,"assert":4,"buffer":8}],84:[function(_dereq_,module,exports){
31413(function (Buffer){
31414var assert = _dereq_('assert')
31415var opcodes = _dereq_('./opcodes')
31416
31417// FIXME: use ECPubKey, currently the circular dependency breaks everything.
31418//
31419// Solutions:
31420// * Remove ECPubKey.getAddress
31421// - Minimal change, but likely unpopular
31422// * Move all script related functionality out of Address
31423// - Means a lot of changes to Transaction/Wallet
31424// * Ignore it (existing solution)
31425// * Some form of hackery with commonjs
31426//
31427var ecurve = _dereq_('ecurve')
31428var curve = ecurve.getCurveByName('secp256k1')
31429
31430var ECSignature = _dereq_('./ecsignature')
31431var Script = _dereq_('./script')
31432
31433function classifyOutput(script) {
31434 assert(script instanceof Script, 'Expected Script, got ', script)
31435
31436 if (isPubKeyHashOutput.call(script)) {
31437 return 'pubkeyhash'
31438 } else if (isScriptHashOutput.call(script)) {
31439 return 'scripthash'
31440 } else if (isMultisigOutput.call(script)) {
31441 return 'multisig'
31442 } else if (isPubKeyOutput.call(script)) {
31443 return 'pubkey'
31444 } else if (isNulldataOutput.call(script)) {
31445 return 'nulldata'
31446 } else {
31447 return 'nonstandard'
31448 }
31449}
31450
31451function classifyInput(script) {
31452 assert(script instanceof Script, 'Expected Script, got ', script)
31453
31454 if (isPubKeyHashInput.call(script)) {
31455 return 'pubkeyhash'
31456 } else if (isScriptHashInput.call(script)) {
31457 return 'scripthash'
31458 } else if (isMultisigInput.call(script)) {
31459 return 'multisig'
31460 } else if (isPubKeyInput.call(script)) {
31461 return 'pubkey'
31462 } else {
31463 return 'nonstandard'
31464 }
31465}
31466
31467function isCanonicalPubKey(buffer) {
31468 if (!Buffer.isBuffer(buffer)) return false
31469
31470 try {
31471 // FIXME: boo
31472 ecurve.Point.decodeFrom(curve, buffer)
31473 } catch (e) {
31474 if (!(e.message.match(/Invalid sequence (length|tag)/))) throw e
31475
31476 return false
31477 }
31478
31479 return true
31480}
31481
31482function isCanonicalSignature(buffer) {
31483 if (!Buffer.isBuffer(buffer)) return false
31484
31485 try {
31486 ECSignature.parseScriptSignature(buffer)
31487 } catch(e) {
31488 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) throw e
31489
31490 return false
31491 }
31492
31493 return true
31494}
31495
31496function isPubKeyHashInput() {
31497 return this.chunks.length === 2 &&
31498 isCanonicalSignature(this.chunks[0]) &&
31499 isCanonicalPubKey(this.chunks[1])
31500}
31501
31502function isPubKeyHashOutput() {
31503 return this.chunks.length === 5 &&
31504 this.chunks[0] === opcodes.OP_DUP &&
31505 this.chunks[1] === opcodes.OP_HASH160 &&
31506 Buffer.isBuffer(this.chunks[2]) &&
31507 this.chunks[2].length === 20 &&
31508 this.chunks[3] === opcodes.OP_EQUALVERIFY &&
31509 this.chunks[4] === opcodes.OP_CHECKSIG
31510}
31511
31512function isPubKeyInput() {
31513 return this.chunks.length === 1 &&
31514 isCanonicalSignature(this.chunks[0])
31515}
31516
31517function isPubKeyOutput() {
31518 return this.chunks.length === 2 &&
31519 isCanonicalPubKey(this.chunks[0]) &&
31520 this.chunks[1] === opcodes.OP_CHECKSIG
31521}
31522
31523function isScriptHashInput() {
31524 if (this.chunks.length < 2) return false
31525 var lastChunk = this.chunks[this.chunks.length - 1]
31526
31527 if (!Buffer.isBuffer(lastChunk)) return false
31528
31529 var scriptSig = Script.fromChunks(this.chunks.slice(0, -1))
31530 var scriptPubKey = Script.fromBuffer(lastChunk)
31531
31532 return classifyInput(scriptSig) === classifyOutput(scriptPubKey)
31533}
31534
31535function isScriptHashOutput() {
31536 return this.chunks.length === 3 &&
31537 this.chunks[0] === opcodes.OP_HASH160 &&
31538 Buffer.isBuffer(this.chunks[1]) &&
31539 this.chunks[1].length === 20 &&
31540 this.chunks[2] === opcodes.OP_EQUAL
31541}
31542
31543function isMultisigInput() {
31544 return this.chunks[0] === opcodes.OP_0 &&
31545 this.chunks.slice(1).every(isCanonicalSignature)
31546}
31547
31548function isMultisigOutput() {
31549 if (this.chunks < 4) return false
31550 if (this.chunks[this.chunks.length - 1] !== opcodes.OP_CHECKMULTISIG) return false
31551
31552 var mOp = this.chunks[0]
31553 if (mOp === opcodes.OP_0) return false
31554 if (mOp < opcodes.OP_1) return false
31555 if (mOp > opcodes.OP_16) return false
31556
31557 var nOp = this.chunks[this.chunks.length - 2]
31558 if (nOp === opcodes.OP_0) return false
31559 if (nOp < opcodes.OP_1) return false
31560 if (nOp > opcodes.OP_16) return false
31561
31562 var m = mOp - (opcodes.OP_1 - 1)
31563 var n = nOp - (opcodes.OP_1 - 1)
31564 if (n < m) return false
31565
31566 var pubKeys = this.chunks.slice(1, -2)
31567 if (n < pubKeys.length) return false
31568
31569 return pubKeys.every(isCanonicalPubKey)
31570}
31571
31572function isNulldataOutput() {
31573 return this.chunks[0] === opcodes.OP_RETURN
31574}
31575
31576// Standard Script Templates
31577// {pubKey} OP_CHECKSIG
31578function pubKeyOutput(pubKey) {
31579 return Script.fromChunks([
31580 pubKey.toBuffer(),
31581 opcodes.OP_CHECKSIG
31582 ])
31583}
31584
31585// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
31586function pubKeyHashOutput(hash) {
31587 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
31588
31589 return Script.fromChunks([
31590 opcodes.OP_DUP,
31591 opcodes.OP_HASH160,
31592 hash,
31593 opcodes.OP_EQUALVERIFY,
31594 opcodes.OP_CHECKSIG
31595 ])
31596}
31597
31598// OP_HASH160 {scriptHash} OP_EQUAL
31599function scriptHashOutput(hash) {
31600 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
31601
31602 return Script.fromChunks([
31603 opcodes.OP_HASH160,
31604 hash,
31605 opcodes.OP_EQUAL
31606 ])
31607}
31608
31609// m [pubKeys ...] n OP_CHECKMULTISIG
31610function multisigOutput(m, pubKeys) {
31611 assert(Array.isArray(pubKeys), 'Expected Array, got ' + pubKeys)
31612 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
31613
31614 var pubKeyBuffers = pubKeys.map(function(pubKey) {
31615 return pubKey.toBuffer()
31616 })
31617 var n = pubKeys.length
31618
31619 return Script.fromChunks([].concat(
31620 (opcodes.OP_1 - 1) + m,
31621 pubKeyBuffers,
31622 (opcodes.OP_1 - 1) + n,
31623 opcodes.OP_CHECKMULTISIG
31624 ))
31625}
31626
31627// {signature}
31628function pubKeyInput(signature) {
31629 assert(Buffer.isBuffer(signature), 'Expected Buffer, got ' + signature)
31630
31631 return Script.fromChunks([signature])
31632}
31633
31634// {signature} {pubKey}
31635function pubKeyHashInput(signature, pubKey) {
31636 assert(Buffer.isBuffer(signature), 'Expected Buffer, got ' + signature)
31637
31638 return Script.fromChunks([signature, pubKey.toBuffer()])
31639}
31640
31641// <scriptSig> {serialized scriptPubKey script}
31642function scriptHashInput(scriptSig, scriptPubKey) {
31643 return Script.fromChunks([].concat(
31644 scriptSig.chunks,
31645 scriptPubKey.toBuffer()
31646 ))
31647}
31648
31649// OP_0 [signatures ...]
31650function multisigInput(signatures, scriptPubKey) {
31651 if (scriptPubKey) {
31652 assert(isMultisigOutput.call(scriptPubKey))
31653
31654 var m = scriptPubKey.chunks[0]
31655 var k = m - (opcodes.OP_1 - 1)
31656 assert(k <= signatures.length, 'Not enough signatures provided')
31657 }
31658
31659 return Script.fromChunks([].concat(opcodes.OP_0, signatures))
31660}
31661
31662module.exports = {
31663 classifyInput: classifyInput,
31664 classifyOutput: classifyOutput,
31665 multisigInput: multisigInput,
31666 multisigOutput: multisigOutput,
31667 pubKeyHashInput: pubKeyHashInput,
31668 pubKeyHashOutput: pubKeyHashOutput,
31669 pubKeyInput: pubKeyInput,
31670 pubKeyOutput: pubKeyOutput,
31671 scriptHashInput: scriptHashInput,
31672 scriptHashOutput: scriptHashOutput
31673}
31674
31675}).call(this,_dereq_("buffer").Buffer)
31676},{"./ecsignature":77,"./opcodes":82,"./script":83,"assert":4,"buffer":8,"ecurve":65}],85:[function(_dereq_,module,exports){
31677(function (Buffer){
31678var assert = _dereq_('assert')
31679var bufferutils = _dereq_('./bufferutils')
31680var crypto = _dereq_('./crypto')
31681var opcodes = _dereq_('./opcodes')
31682var scripts = _dereq_('./scripts')
31683
31684var Address = _dereq_('./address')
31685var ECKey = _dereq_('./eckey')
31686var ECSignature = _dereq_('./ecsignature')
31687var Script = _dereq_('./script')
31688
31689Transaction.DEFAULT_SEQUENCE = 0xffffffff
31690Transaction.SIGHASH_ALL = 0x01
31691Transaction.SIGHASH_NONE = 0x02
31692Transaction.SIGHASH_SINGLE = 0x03
31693Transaction.SIGHASH_ANYONECANPAY = 0x80
31694
31695function Transaction() {
31696 this.version = 1
31697 this.locktime = 0
31698 this.ins = []
31699 this.outs = []
31700}
31701
31702/**
31703 * Create a new txin.
31704 *
31705 * Can be called with any of:
31706 *
31707 * - A transaction and an index
31708 * - A transaction hash and an index
31709 *
31710 * Note that this method does not sign the created input.
31711 */
31712Transaction.prototype.addInput = function(tx, index, sequence) {
31713 if (sequence == undefined) sequence = Transaction.DEFAULT_SEQUENCE
31714
31715 var hash
31716
31717 if (typeof tx === 'string') {
31718 hash = new Buffer(tx, 'hex')
31719
31720 // TxId hex is big-endian, we need little-endian
31721 Array.prototype.reverse.call(hash)
31722
31723 } else if (tx instanceof Transaction) {
31724 hash = tx.getHash()
31725
31726 } else {
31727 hash = tx
31728 }
31729
31730 assert(Buffer.isBuffer(hash), 'Expected Transaction, txId or txHash, got ' + tx)
31731 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
31732 assert.equal(typeof index, 'number', 'Expected number index, got ' + index)
31733
31734 return (this.ins.push({
31735 hash: hash,
31736 index: index,
31737 script: Script.EMPTY,
31738 sequence: sequence
31739 }) - 1)
31740}
31741
31742/**
31743 * Create a new txout.
31744 *
31745 * Can be called with:
31746 *
31747 * - A base58 address string and a value
31748 * - An Address object and a value
31749 * - A scriptPubKey Script and a value
31750 */
31751Transaction.prototype.addOutput = function(scriptPubKey, value) {
31752 // Attempt to get a valid address if it's a base58 address string
31753 if (typeof scriptPubKey === 'string') {
31754 scriptPubKey = Address.fromBase58Check(scriptPubKey)
31755 }
31756
31757 // Attempt to get a valid script if it's an Address object
31758 if (scriptPubKey instanceof Address) {
31759 var address = scriptPubKey
31760
31761 scriptPubKey = address.toOutputScript()
31762 }
31763
31764 return (this.outs.push({
31765 script: scriptPubKey,
31766 value: value,
31767 }) - 1)
31768}
31769
31770Transaction.prototype.toBuffer = function () {
31771 var txInSize = this.ins.reduce(function(a, x) {
31772 return a + (40 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length)
31773 }, 0)
31774
31775 var txOutSize = this.outs.reduce(function(a, x) {
31776 return a + (8 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length)
31777 }, 0)
31778
31779 var buffer = new Buffer(
31780 8 +
31781 bufferutils.varIntSize(this.ins.length) +
31782 bufferutils.varIntSize(this.outs.length) +
31783 txInSize +
31784 txOutSize
31785 )
31786
31787 var offset = 0
31788 function writeSlice(slice) {
31789 slice.copy(buffer, offset)
31790 offset += slice.length
31791 }
31792 function writeUInt32(i) {
31793 buffer.writeUInt32LE(i, offset)
31794 offset += 4
31795 }
31796 function writeUInt64(i) {
31797 bufferutils.writeUInt64LE(buffer, i, offset)
31798 offset += 8
31799 }
31800 function writeVarInt(i) {
31801 var n = bufferutils.writeVarInt(buffer, i, offset)
31802 offset += n
31803 }
31804
31805 writeUInt32(this.version)
31806 writeVarInt(this.ins.length)
31807
31808 this.ins.forEach(function(txin) {
31809 writeSlice(txin.hash)
31810 writeUInt32(txin.index)
31811 writeVarInt(txin.script.buffer.length)
31812 writeSlice(txin.script.buffer)
31813 writeUInt32(txin.sequence)
31814 })
31815
31816 writeVarInt(this.outs.length)
31817 this.outs.forEach(function(txout) {
31818 writeUInt64(txout.value)
31819 writeVarInt(txout.script.buffer.length)
31820 writeSlice(txout.script.buffer)
31821 })
31822
31823 writeUInt32(this.locktime)
31824
31825 return buffer
31826}
31827
31828Transaction.prototype.toHex = function() {
31829 return this.toBuffer().toString('hex')
31830}
31831
31832/**
31833 * Hash transaction for signing a specific input.
31834 *
31835 * Bitcoin uses a different hash for each signed transaction input. This
31836 * method copies the transaction, makes the necessary changes based on the
31837 * hashType, serializes and finally hashes the result. This hash can then be
31838 * used to sign the transaction input in question.
31839 */
31840Transaction.prototype.hashForSignature = function(prevOutScript, inIndex, hashType) {
31841 assert(inIndex >= 0, 'Invalid vin index')
31842 assert(inIndex < this.ins.length, 'Invalid vin index')
31843 assert(prevOutScript instanceof Script, 'Invalid Script object')
31844
31845 var txTmp = this.clone()
31846 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
31847
31848 // Blank out other inputs' signatures
31849 txTmp.ins.forEach(function(txin) {
31850 txin.script = Script.EMPTY
31851 })
31852 txTmp.ins[inIndex].script = hashScript
31853
31854 var hashTypeModifier = hashType & 0x1f
31855 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
31856 assert(false, 'SIGHASH_NONE not yet supported')
31857
31858 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
31859 assert(false, 'SIGHASH_SINGLE not yet supported')
31860
31861 }
31862
31863 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
31864 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
31865 }
31866
31867 var hashTypeBuffer = new Buffer(4)
31868 hashTypeBuffer.writeInt32LE(hashType, 0)
31869
31870 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
31871 return crypto.hash256(buffer)
31872}
31873
31874Transaction.prototype.getHash = function () {
31875 return crypto.hash256(this.toBuffer())
31876}
31877
31878Transaction.prototype.getId = function () {
31879 var buffer = this.getHash()
31880
31881 // Big-endian is used for TxHash
31882 Array.prototype.reverse.call(buffer)
31883
31884 return buffer.toString('hex')
31885}
31886
31887Transaction.prototype.clone = function () {
31888 var newTx = new Transaction()
31889 newTx.version = this.version
31890 newTx.locktime = this.locktime
31891
31892 newTx.ins = this.ins.map(function(txin) {
31893 return {
31894 hash: txin.hash,
31895 index: txin.index,
31896 script: txin.script,
31897 sequence: txin.sequence
31898 }
31899 })
31900
31901 newTx.outs = this.outs.map(function(txout) {
31902 return {
31903 script: txout.script,
31904 value: txout.value
31905 }
31906 })
31907
31908 return newTx
31909}
31910
31911Transaction.fromBuffer = function(buffer) {
31912 var offset = 0
31913 function readSlice(n) {
31914 offset += n
31915 return buffer.slice(offset - n, offset)
31916 }
31917 function readUInt32() {
31918 var i = buffer.readUInt32LE(offset)
31919 offset += 4
31920 return i
31921 }
31922 function readUInt64() {
31923 var i = bufferutils.readUInt64LE(buffer, offset)
31924 offset += 8
31925 return i
31926 }
31927 function readVarInt() {
31928 var vi = bufferutils.readVarInt(buffer, offset)
31929 offset += vi.size
31930 return vi.number
31931 }
31932
31933 var tx = new Transaction()
31934 tx.version = readUInt32()
31935
31936 var vinLen = readVarInt()
31937 for (var i = 0; i < vinLen; ++i) {
31938 var hash = readSlice(32)
31939 var vout = readUInt32()
31940 var scriptLen = readVarInt()
31941 var script = readSlice(scriptLen)
31942 var sequence = readUInt32()
31943
31944 tx.ins.push({
31945 hash: hash,
31946 index: vout,
31947 script: Script.fromBuffer(script),
31948 sequence: sequence
31949 })
31950 }
31951
31952 var voutLen = readVarInt()
31953 for (i = 0; i < voutLen; ++i) {
31954 var value = readUInt64()
31955 var scriptLen = readVarInt()
31956 var script = readSlice(scriptLen)
31957
31958 tx.outs.push({
31959 value: value,
31960 script: Script.fromBuffer(script)
31961 })
31962 }
31963
31964 tx.locktime = readUInt32()
31965 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
31966
31967 return tx
31968}
31969
31970Transaction.fromHex = function(hex) {
31971 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
31972}
31973
31974/**
31975 * Signs a pubKeyHash output at some index with the given key
31976 */
31977Transaction.prototype.sign = function(index, privKey, hashType) {
31978 var prevOutScript = privKey.pub.getAddress().toOutputScript()
31979 var signature = this.signInput(index, prevOutScript, privKey, hashType)
31980
31981 // FIXME: Assumed prior TX was pay-to-pubkey-hash
31982 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
31983 this.setInputScript(index, scriptSig)
31984}
31985
31986Transaction.prototype.signInput = function(index, prevOutScript, privKey, hashType) {
31987 hashType = hashType || Transaction.SIGHASH_ALL
31988
31989 var hash = this.hashForSignature(prevOutScript, index, hashType)
31990 var signature = privKey.sign(hash)
31991
31992 return signature.toScriptSignature(hashType)
31993}
31994
31995Transaction.prototype.setInputScript = function(index, script) {
31996 this.ins[index].script = script
31997}
31998
31999// FIXME: could be validateInput(index, prevTxOut, pub)
32000Transaction.prototype.validateInput = function(index, prevOutScript, pubKey, buffer) {
32001 var parsed = ECSignature.parseScriptSignature(buffer)
32002 var hash = this.hashForSignature(prevOutScript, index, parsed.hashType)
32003
32004 return pubKey.verify(hash, parsed.signature)
32005}
32006
32007module.exports = Transaction
32008
32009}).call(this,_dereq_("buffer").Buffer)
32010},{"./address":69,"./bufferutils":71,"./crypto":73,"./eckey":75,"./ecsignature":77,"./opcodes":82,"./script":83,"./scripts":84,"assert":4,"buffer":8}],86:[function(_dereq_,module,exports){
32011(function (Buffer){
32012var assert = _dereq_('assert')
32013var networks = _dereq_('./networks')
32014var rng = _dereq_('secure-random')
32015
32016var Address = _dereq_('./address')
32017var HDNode = _dereq_('./hdnode')
32018var Transaction = _dereq_('./transaction')
32019
32020function Wallet(seed, network) {
32021 network = network || networks.bitcoin
32022
32023 // Stored in a closure to make accidental serialization less likely
32024 var masterkey = null
32025 var me = this
32026 var accountZero = null
32027 var internalAccount = null
32028 var externalAccount = null
32029
32030 // Addresses
32031 this.addresses = []
32032 this.changeAddresses = []
32033
32034 // Transaction output data
32035 this.outputs = {}
32036
32037 // Make a new master key
32038 this.newMasterKey = function(seed) {
32039 seed = seed || new Buffer(rng(32))
32040 masterkey = HDNode.fromSeedBuffer(seed, network)
32041
32042 // HD first-level child derivation method should be hardened
32043 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
32044 accountZero = masterkey.deriveHardened(0)
32045 externalAccount = accountZero.derive(0)
32046 internalAccount = accountZero.derive(1)
32047
32048 me.addresses = []
32049 me.changeAddresses = []
32050
32051 me.outputs = {}
32052 }
32053
32054 this.newMasterKey(seed)
32055
32056 this.generateAddress = function() {
32057 var key = externalAccount.derive(this.addresses.length)
32058 this.addresses.push(key.getAddress().toString())
32059 return this.addresses[this.addresses.length - 1]
32060 }
32061
32062 this.generateChangeAddress = function() {
32063 var key = internalAccount.derive(this.changeAddresses.length)
32064 this.changeAddresses.push(key.getAddress().toString())
32065 return this.changeAddresses[this.changeAddresses.length - 1]
32066 }
32067
32068 this.getBalance = function() {
32069 return this.getUnspentOutputs().reduce(function(memo, output){
32070 return memo + output.value
32071 }, 0)
32072 }
32073
32074 this.getUnspentOutputs = function() {
32075 var utxo = []
32076
32077 for(var key in this.outputs){
32078 var output = this.outputs[key]
32079 if(!output.to) utxo.push(outputToUnspentOutput(output))
32080 }
32081
32082 return utxo
32083 }
32084
32085 this.setUnspentOutputs = function(utxo) {
32086 var outputs = {}
32087
32088 utxo.forEach(function(uo){
32089 validateUnspentOutput(uo)
32090 var o = unspentOutputToOutput(uo)
32091 outputs[o.from] = o
32092 })
32093
32094 this.outputs = outputs
32095 }
32096
32097 function outputToUnspentOutput(output){
32098 var hashAndIndex = output.from.split(":")
32099
32100 return {
32101 hash: hashAndIndex[0],
32102 outputIndex: parseInt(hashAndIndex[1]),
32103 address: output.address,
32104 value: output.value,
32105 pending: output.pending
32106 }
32107 }
32108
32109 function unspentOutputToOutput(o) {
32110 var hash = o.hash
32111 var key = hash + ":" + o.outputIndex
32112 return {
32113 from: key,
32114 address: o.address,
32115 value: o.value,
32116 pending: o.pending
32117 }
32118 }
32119
32120 function validateUnspentOutput(uo) {
32121 var missingField
32122
32123 if (isNullOrUndefined(uo.hash)) {
32124 missingField = "hash"
32125 }
32126
32127 var requiredKeys = ['outputIndex', 'address', 'value']
32128 requiredKeys.forEach(function (key) {
32129 if (isNullOrUndefined(uo[key])){
32130 missingField = key
32131 }
32132 })
32133
32134 if (missingField) {
32135 var message = [
32136 'Invalid unspent output: key', missingField, 'is missing.',
32137 'A valid unspent output must contain'
32138 ]
32139 message.push(requiredKeys.join(', '))
32140 message.push("and hash")
32141 throw new Error(message.join(' '))
32142 }
32143 }
32144
32145 function isNullOrUndefined(value) {
32146 return value == undefined
32147 }
32148
32149 this.processPendingTx = function(tx){
32150 processTx(tx, true)
32151 }
32152
32153 this.processConfirmedTx = function(tx){
32154 processTx(tx, false)
32155 }
32156
32157 function processTx(tx, isPending) {
32158 var txid = tx.getId()
32159
32160 tx.outs.forEach(function(txOut, i) {
32161 var address
32162
32163 try {
32164 address = Address.fromOutputScript(txOut.script, network).toString()
32165 } catch(e) {
32166 if (!(e.message.match(/has no matching Address/))) throw e
32167 }
32168
32169 if (isMyAddress(address)) {
32170 var output = txid + ':' + i
32171
32172 me.outputs[output] = {
32173 from: output,
32174 value: txOut.value,
32175 address: address,
32176 pending: isPending
32177 }
32178 }
32179 })
32180
32181 tx.ins.forEach(function(txIn, i) {
32182 // copy and convert to big-endian hex
32183 var txinId = new Buffer(txIn.hash)
32184 Array.prototype.reverse.call(txinId)
32185 txinId = txinId.toString('hex')
32186
32187 var output = txinId + ':' + txIn.index
32188
32189 if (!(output in me.outputs)) return
32190
32191 if (isPending) {
32192 me.outputs[output].to = txid + ':' + i
32193 me.outputs[output].pending = true
32194 } else {
32195 delete me.outputs[output]
32196 }
32197 })
32198 }
32199
32200 this.createTx = function(to, value, fixedFee, changeAddress) {
32201 assert(value > network.dustThreshold, value + ' must be above dust threshold (' + network.dustThreshold + ' Satoshis)')
32202
32203 var utxos = getCandidateOutputs(value)
32204 var accum = 0
32205 var subTotal = value
32206 var addresses = []
32207
32208 var tx = new Transaction()
32209 tx.addOutput(to, value)
32210
32211 for (var i = 0; i < utxos.length; ++i) {
32212 var utxo = utxos[i]
32213 addresses.push(utxo.address)
32214
32215 var outpoint = utxo.from.split(':')
32216 tx.addInput(outpoint[0], parseInt(outpoint[1]))
32217
32218 var fee = fixedFee == undefined ? estimateFeePadChangeOutput(tx) : fixedFee
32219
32220 accum += utxo.value
32221 subTotal = value + fee
32222 if (accum >= subTotal) {
32223 var change = accum - subTotal
32224
32225 if (change > network.dustThreshold) {
32226 tx.addOutput(changeAddress || getChangeAddress(), change)
32227 }
32228
32229 break
32230 }
32231 }
32232
32233 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
32234
32235 this.signWith(tx, addresses)
32236 return tx
32237 }
32238
32239 function getCandidateOutputs() {
32240 var unspent = []
32241
32242 for (var key in me.outputs) {
32243 var output = me.outputs[key]
32244 if (!output.pending) unspent.push(output)
32245 }
32246
32247 var sortByValueDesc = unspent.sort(function(o1, o2){
32248 return o2.value - o1.value
32249 })
32250
32251 return sortByValueDesc
32252 }
32253
32254 function estimateFeePadChangeOutput(tx) {
32255 var tmpTx = tx.clone()
32256 tmpTx.addOutput(getChangeAddress(), network.dustSoftThreshold || 0)
32257
32258 return network.estimateFee(tmpTx)
32259 }
32260
32261 function getChangeAddress() {
32262 if(me.changeAddresses.length === 0) me.generateChangeAddress();
32263 return me.changeAddresses[me.changeAddresses.length - 1]
32264 }
32265
32266 this.signWith = function(tx, addresses) {
32267 assert.equal(tx.ins.length, addresses.length, 'Number of addresses must match number of transaction inputs')
32268
32269 addresses.forEach(function(address, i) {
32270 var key = me.getPrivateKeyForAddress(address)
32271
32272 tx.sign(i, key)
32273 })
32274
32275 return tx
32276 }
32277
32278 this.getMasterKey = function() { return masterkey }
32279 this.getAccountZero = function() { return accountZero }
32280 this.getInternalAccount = function() { return internalAccount }
32281 this.getExternalAccount = function() { return externalAccount }
32282
32283 this.getPrivateKey = function(index) {
32284 return externalAccount.derive(index).privKey
32285 }
32286
32287 this.getInternalPrivateKey = function(index) {
32288 return internalAccount.derive(index).privKey
32289 }
32290
32291 this.getPrivateKeyForAddress = function(address) {
32292 var index
32293 if((index = this.addresses.indexOf(address)) > -1) {
32294 return this.getPrivateKey(index)
32295 } else if((index = this.changeAddresses.indexOf(address)) > -1) {
32296 return this.getInternalPrivateKey(index)
32297 } else {
32298 throw new Error('Unknown address. Make sure the address is from the keychain and has been generated.')
32299 }
32300 }
32301
32302 function isReceiveAddress(address){
32303 return me.addresses.indexOf(address) > -1
32304 }
32305
32306 function isChangeAddress(address){
32307 return me.changeAddresses.indexOf(address) > -1
32308 }
32309
32310 function isMyAddress(address) {
32311 return isReceiveAddress(address) || isChangeAddress(address)
32312 }
32313}
32314
32315module.exports = Wallet
32316
32317}).call(this,_dereq_("buffer").Buffer)
32318},{"./address":69,"./hdnode":78,"./networks":81,"./transaction":85,"assert":4,"buffer":8,"secure-random":68}]},{},[79])
32319(79)
32320});
32321 </script>
3af2954a 32322 <script>
ebd8d4e8
IC
32323// https://rawgit.com/tresorit/asmcrypto.js/598a1098504f1b2d0e615bc51dd8404afd2d338b/asmcrypto.js
32324// Provides PBKDF2 functionality
32325// It's faster than CryptoJS
32326// Couldn't get SJCL working as desired
32327
32328
32329(function(exports, global) {
ebd8d4e8 32330 global["asmCrypto"] = exports;
3af2954a 32331 "use strict";
ebd8d4e8
IC
32332 function string_to_bytes(str) {
32333 var i, len = str.length, arr = new Uint8Array(len);
32334 for (i = 0; i < len; i += 1) {
32335 arr[i] = str.charCodeAt(i);
32336 }
32337 return arr;
32338 }
32339 function hex_to_bytes(str) {
32340 var arr = [], len = str.length, i;
32341 if (len & 1) {
32342 str = "0" + str;
32343 len++;
32344 }
32345 for (i = 0; i < len; i += 2) {
32346 arr.push(parseInt(str.substr(i, 2), 16));
32347 }
32348 return new Uint8Array(arr);
32349 }
32350 function base64_to_bytes(str) {
32351 return string_to_bytes(atob(str));
32352 }
32353 function bytes_to_string(arr) {
32354 var str = "";
32355 for (var i = 0; i < arr.length; i++) str += String.fromCharCode(arr[i]);
32356 return str;
32357 }
32358 function bytes_to_hex(arr) {
32359 var sz = (arr.byteLength || arr.length) / arr.length, str = "";
32360 for (var i = 0; i < arr.length; i++) {
32361 var h = arr[i].toString(16);
32362 if (h.length < 2 * sz) str += "00000000000000".substr(0, 2 * sz - h.length);
32363 str += h;
32364 }
32365 return str;
32366 }
32367 function bytes_to_base64(arr) {
32368 return btoa(bytes_to_string(arr));
32369 }
32370 function pow2_ceil(a) {
32371 a -= 1;
32372 a |= a >>> 1;
32373 a |= a >>> 2;
32374 a |= a >>> 4;
32375 a |= a >>> 8;
32376 a |= a >>> 16;
32377 a += 1;
32378 return a;
32379 }
32380 function is_number(a) {
32381 return typeof a === "number";
32382 }
32383 function is_string(a) {
32384 return typeof a === "string";
32385 }
32386 function is_buffer(a) {
32387 return a instanceof ArrayBuffer;
32388 }
32389 function is_bytes(a) {
32390 return a instanceof Uint8Array;
32391 }
32392 function is_typed_array(a) {
32393 return a instanceof Int8Array || a instanceof Uint8Array || a instanceof Int16Array || a instanceof Uint16Array || a instanceof Int32Array || a instanceof Uint32Array || a instanceof Float32Array || a instanceof Float64Array;
32394 }
32395 function IllegalStateError() {
32396 Error.apply(this, arguments);
32397 }
32398 IllegalStateError.prototype = new Error();
32399 function IllegalArgumentError() {
32400 Error.apply(this, arguments);
32401 }
32402 IllegalArgumentError.prototype = new Error();
32403 function SecurityError() {
32404 Error.apply(this, arguments);
32405 }
32406 IllegalArgumentError.prototype = new Error();
32407 var _aes_tables = [ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22, 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125, 198, 248, 238, 246, 255, 214, 222, 145, 96, 2, 206, 86, 231, 181, 77, 236, 143, 31, 137, 250, 239, 178, 142, 251, 65, 179, 95, 69, 35, 83, 228, 155, 117, 225, 61, 76, 108, 126, 245, 131, 104, 81, 209, 249, 226, 171, 98, 42, 8, 149, 70, 157, 48, 55, 10, 47, 14, 36, 27, 223, 205, 78, 127, 234, 18, 29, 88, 52, 54, 220, 180, 91, 164, 118, 183, 125, 82, 221, 94, 19, 166, 185, 0, 193, 64, 227, 121, 182, 212, 141, 103, 114, 148, 152, 176, 133, 187, 197, 79, 237, 134, 154, 102, 17, 138, 233, 4, 254, 160, 120, 37, 75, 162, 93, 128, 5, 63, 33, 112, 241, 99, 119, 175, 66, 32, 229, 253, 191, 129, 24, 38, 195, 190, 53, 136, 46, 147, 85, 252, 122, 200, 186, 50, 230, 192, 25, 158, 163, 68, 84, 59, 11, 140, 199, 107, 40, 167, 188, 22, 173, 219, 100, 116, 20, 146, 12, 72, 184, 159, 189, 67, 196, 57, 49, 211, 242, 213, 139, 110, 218, 1, 177, 156, 73, 216, 172, 243, 207, 202, 244, 71, 16, 111, 240, 74, 92, 56, 87, 115, 151, 203, 161, 232, 62, 150, 97, 13, 15, 224, 124, 113, 204, 144, 6, 247, 28, 194, 106, 174, 105, 23, 153, 58, 39, 217, 235, 43, 34, 210, 169, 7, 51, 45, 60, 21, 201, 135, 170, 80, 165, 3, 89, 9, 26, 101, 215, 132, 208, 130, 41, 90, 30, 123, 168, 109, 44, 165, 132, 153, 141, 13, 189, 177, 84, 80, 3, 169, 125, 25, 98, 230, 154, 69, 157, 64, 135, 21, 235, 201, 11, 236, 103, 253, 234, 191, 247, 150, 91, 194, 28, 174, 106, 90, 65, 2, 79, 92, 244, 52, 8, 147, 115, 83, 63, 12, 82, 101, 94, 40, 161, 15, 181, 9, 54, 155, 61, 38, 105, 205, 159, 27, 158, 116, 46, 45, 178, 238, 251, 246, 77, 97, 206, 123, 62, 113, 151, 245, 104, 0, 44, 96, 31, 200, 237, 190, 70, 217, 75, 222, 212, 232, 74, 107, 42, 229, 22, 197, 215, 85, 148, 207, 16, 6, 129, 240, 68, 186, 227, 243, 254, 192, 138, 173, 188, 72, 4, 223, 193, 117, 99, 48, 26, 14, 109, 76, 20, 53, 47, 225, 162, 204, 57, 87, 242, 130, 71, 172, 231, 43, 149, 160, 152, 209, 127, 102, 126, 171, 131, 202, 41, 211, 60, 121, 226, 29, 118, 59, 86, 78, 30, 219, 10, 108, 228, 93, 110, 239, 166, 168, 164, 55, 139, 50, 67, 89, 183, 140, 100, 210, 224, 180, 250, 7, 37, 175, 142, 233, 24, 213, 136, 111, 114, 36, 241, 199, 81, 35, 124, 156, 33, 221, 220, 134, 133, 144, 66, 196, 170, 216, 5, 1, 18, 163, 95, 249, 208, 145, 88, 39, 185, 56, 19, 179, 51, 187, 112, 137, 167, 182, 34, 146, 32, 73, 255, 120, 122, 143, 248, 128, 23, 218, 49, 198, 184, 195, 176, 119, 17, 203, 252, 214, 58, 0, 9, 18, 27, 36, 45, 54, 63, 72, 65, 90, 83, 108, 101, 126, 119, 144, 153, 130, 139, 180, 189, 166, 175, 216, 209, 202, 195, 252, 245, 238, 231, 59, 50, 41, 32, 31, 22, 13, 4, 115, 122, 97, 104, 87, 94, 69, 76, 171, 162, 185, 176, 143, 134, 157, 148, 227, 234, 241, 248, 199, 206, 213, 220, 118, 127, 100, 109, 82, 91, 64, 73, 62, 55, 44, 37, 26, 19, 8, 1, 230, 239, 244, 253, 194, 203, 208, 217, 174, 167, 188, 181, 138, 131, 152, 145, 77, 68, 95, 86, 105, 96, 123, 114, 5, 12, 23, 30, 33, 40, 51, 58, 221, 212, 207, 198, 249, 240, 235, 226, 149, 156, 135, 142, 177, 184, 163, 170, 236, 229, 254, 247, 200, 193, 218, 211, 164, 173, 182, 191, 128, 137, 146, 155, 124, 117, 110, 103, 88, 81, 74, 67, 52, 61, 38, 47, 16, 25, 2, 11, 215, 222, 197, 204, 243, 250, 225, 232, 159, 150, 141, 132, 187, 178, 169, 160, 71, 78, 85, 92, 99, 106, 113, 120, 15, 6, 29, 20, 43, 34, 57, 48, 154, 147, 136, 129, 190, 183, 172, 165, 210, 219, 192, 201, 246, 255, 228, 237, 10, 3, 24, 17, 46, 39, 60, 53, 66, 75, 80, 89, 102, 111, 116, 125, 161, 168, 179, 186, 133, 140, 151, 158, 233, 224, 251, 242, 205, 196, 223, 214, 49, 56, 35, 42, 21, 28, 7, 14, 121, 112, 107, 98, 93, 84, 79, 70, 0, 11, 22, 29, 44, 39, 58, 49, 88, 83, 78, 69, 116, 127, 98, 105, 176, 187, 166, 173, 156, 151, 138, 129, 232, 227, 254, 245, 196, 207, 210, 217, 123, 112, 109, 102, 87, 92, 65, 74, 35, 40, 53, 62, 15, 4, 25, 18, 203, 192, 221, 214, 231, 236, 241, 250, 147, 152, 133, 142, 191, 180, 169, 162, 246, 253, 224, 235, 218, 209, 204, 199, 174, 165, 184, 179, 130, 137, 148, 159, 70, 77, 80, 91, 106, 97, 124, 119, 30, 21, 8, 3, 50, 57, 36, 47, 141, 134, 155, 144, 161, 170, 183, 188, 213, 222, 195, 200, 249, 242, 239, 228, 61, 54, 43, 32, 17, 26, 7, 12, 101, 110, 115, 120, 73, 66, 95, 84, 247, 252, 225, 234, 219, 208, 205, 198, 175, 164, 185, 178, 131, 136, 149, 158, 71, 76, 81, 90, 107, 96, 125, 118, 31, 20, 9, 2, 51, 56, 37, 46, 140, 135, 154, 145, 160, 171, 182, 189, 212, 223, 194, 201, 248, 243, 238, 229, 60, 55, 42, 33, 16, 27, 6, 13, 100, 111, 114, 121, 72, 67, 94, 85, 1, 10, 23, 28, 45, 38, 59, 48, 89, 82, 79, 68, 117, 126, 99, 104, 177, 186, 167, 172, 157, 150, 139, 128, 233, 226, 255, 244, 197, 206, 211, 216, 122, 113, 108, 103, 86, 93, 64, 75, 34, 41, 52, 63, 14, 5, 24, 19, 202, 193, 220, 215, 230, 237, 240, 251, 146, 153, 132, 143, 190, 181, 168, 163, 0, 13, 26, 23, 52, 57, 46, 35, 104, 101, 114, 127, 92, 81, 70, 75, 208, 221, 202, 199, 228, 233, 254, 243, 184, 181, 162, 175, 140, 129, 150, 155, 187, 182, 161, 172, 143, 130, 149, 152, 211, 222, 201, 196, 231, 234, 253, 240, 107, 102, 113, 124, 95, 82, 69, 72, 3, 14, 25, 20, 55, 58, 45, 32, 109, 96, 119, 122, 89, 84, 67, 78, 5, 8, 31, 18, 49, 60, 43, 38, 189, 176, 167, 170, 137, 132, 147, 158, 213, 216, 207, 194, 225, 236, 251, 246, 214, 219, 204, 193, 226, 239, 248, 245, 190, 179, 164, 169, 138, 135, 144, 157, 6, 11, 28, 17, 50, 63, 40, 37, 110, 99, 116, 121, 90, 87, 64, 77, 218, 215, 192, 205, 238, 227, 244, 249, 178, 191, 168, 165, 134, 139, 156, 145, 10, 7, 16, 29, 62, 51, 36, 41, 98, 111, 120, 117, 86, 91, 76, 65, 97, 108, 123, 118, 85, 88, 79, 66, 9, 4, 19, 30, 61, 48, 39, 42, 177, 188, 171, 166, 133, 136, 159, 146, 217, 212, 195, 206, 237, 224, 247, 250, 183, 186, 173, 160, 131, 142, 153, 148, 223, 210, 197, 200, 235, 230, 241, 252, 103, 106, 125, 112, 83, 94, 73, 68, 15, 2, 21, 24, 59, 54, 33, 44, 12, 1, 22, 27, 56, 53, 34, 47, 100, 105, 126, 115, 80, 93, 74, 71, 220, 209, 198, 203, 232, 229, 242, 255, 180, 185, 174, 163, 128, 141, 154, 151, 0, 14, 28, 18, 56, 54, 36, 42, 112, 126, 108, 98, 72, 70, 84, 90, 224, 238, 252, 242, 216, 214, 196, 202, 144, 158, 140, 130, 168, 166, 180, 186, 219, 213, 199, 201, 227, 237, 255, 241, 171, 165, 183, 185, 147, 157, 143, 129, 59, 53, 39, 41, 3, 13, 31, 17, 75, 69, 87, 89, 115, 125, 111, 97, 173, 163, 177, 191, 149, 155, 137, 135, 221, 211, 193, 207, 229, 235, 249, 247, 77, 67, 81, 95, 117, 123, 105, 103, 61, 51, 33, 47, 5, 11, 25, 23, 118, 120, 106, 100, 78, 64, 82, 92, 6, 8, 26, 20, 62, 48, 34, 44, 150, 152, 138, 132, 174, 160, 178, 188, 230, 232, 250, 244, 222, 208, 194, 204, 65, 79, 93, 83, 121, 119, 101, 107, 49, 63, 45, 35, 9, 7, 21, 27, 161, 175, 189, 179, 153, 151, 133, 139, 209, 223, 205, 195, 233, 231, 245, 251, 154, 148, 134, 136, 162, 172, 190, 176, 234, 228, 246, 248, 210, 220, 206, 192, 122, 116, 102, 104, 66, 76, 94, 80, 10, 4, 22, 24, 50, 60, 46, 32, 236, 226, 240, 254, 212, 218, 200, 198, 156, 146, 128, 142, 164, 170, 184, 182, 12, 2, 16, 30, 52, 58, 40, 38, 124, 114, 96, 110, 68, 74, 88, 86, 55, 57, 43, 37, 15, 1, 19, 29, 71, 73, 91, 85, 127, 113, 99, 109, 215, 217, 203, 197, 239, 225, 243, 253, 167, 169, 187, 181, 159, 145, 131, 141 ];
32408 var _aes_heap_start = 2048;
32409 function _aes_asm(stdlib, foreign, buffer) {
3af2954a 32410 "use asm";
ebd8d4e8
IC
32411 var S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, S5 = 0, S6 = 0, S7 = 0, S8 = 0, S9 = 0, SA = 0, SB = 0, SC = 0, SD = 0, SE = 0, SF = 0;
32412 var keySize = 0;
32413 var R00 = 0, R01 = 0, R02 = 0, R03 = 0, R04 = 0, R05 = 0, R06 = 0, R07 = 0, R08 = 0, R09 = 0, R0A = 0, R0B = 0, R0C = 0, R0D = 0, R0E = 0, R0F = 0, R10 = 0, R11 = 0, R12 = 0, R13 = 0, R14 = 0, R15 = 0, R16 = 0, R17 = 0, R18 = 0, R19 = 0, R1A = 0, R1B = 0, R1C = 0, R1D = 0, R1E = 0, R1F = 0, R20 = 0, R21 = 0, R22 = 0, R23 = 0, R24 = 0, R25 = 0, R26 = 0, R27 = 0, R28 = 0, R29 = 0, R2A = 0, R2B = 0, R2C = 0, R2D = 0, R2E = 0, R2F = 0, R30 = 0, R31 = 0, R32 = 0, R33 = 0, R34 = 0, R35 = 0, R36 = 0, R37 = 0, R38 = 0, R39 = 0, R3A = 0, R3B = 0, R3C = 0, R3D = 0, R3E = 0, R3F = 0, R40 = 0, R41 = 0, R42 = 0, R43 = 0, R44 = 0, R45 = 0, R46 = 0, R47 = 0, R48 = 0, R49 = 0, R4A = 0, R4B = 0, R4C = 0, R4D = 0, R4E = 0, R4F = 0, R50 = 0, R51 = 0, R52 = 0, R53 = 0, R54 = 0, R55 = 0, R56 = 0, R57 = 0, R58 = 0, R59 = 0, R5A = 0, R5B = 0, R5C = 0, R5D = 0, R5E = 0, R5F = 0, R60 = 0, R61 = 0, R62 = 0, R63 = 0, R64 = 0, R65 = 0, R66 = 0, R67 = 0, R68 = 0, R69 = 0, R6A = 0, R6B = 0, R6C = 0, R6D = 0, R6E = 0, R6F = 0, R70 = 0, R71 = 0, R72 = 0, R73 = 0, R74 = 0, R75 = 0, R76 = 0, R77 = 0, R78 = 0, R79 = 0, R7A = 0, R7B = 0, R7C = 0, R7D = 0, R7E = 0, R7F = 0, R80 = 0, R81 = 0, R82 = 0, R83 = 0, R84 = 0, R85 = 0, R86 = 0, R87 = 0, R88 = 0, R89 = 0, R8A = 0, R8B = 0, R8C = 0, R8D = 0, R8E = 0, R8F = 0, R90 = 0, R91 = 0, R92 = 0, R93 = 0, R94 = 0, R95 = 0, R96 = 0, R97 = 0, R98 = 0, R99 = 0, R9A = 0, R9B = 0, R9C = 0, R9D = 0, R9E = 0, R9F = 0, RA0 = 0, RA1 = 0, RA2 = 0, RA3 = 0, RA4 = 0, RA5 = 0, RA6 = 0, RA7 = 0, RA8 = 0, RA9 = 0, RAA = 0, RAB = 0, RAC = 0, RAD = 0, RAE = 0, RAF = 0, RB0 = 0, RB1 = 0, RB2 = 0, RB3 = 0, RB4 = 0, RB5 = 0, RB6 = 0, RB7 = 0, RB8 = 0, RB9 = 0, RBA = 0, RBB = 0, RBC = 0, RBD = 0, RBE = 0, RBF = 0, RC0 = 0, RC1 = 0, RC2 = 0, RC3 = 0, RC4 = 0, RC5 = 0, RC6 = 0, RC7 = 0, RC8 = 0, RC9 = 0, RCA = 0, RCB = 0, RCC = 0, RCD = 0, RCE = 0, RCF = 0, RD0 = 0, RD1 = 0, RD2 = 0, RD3 = 0, RD4 = 0, RD5 = 0, RD6 = 0, RD7 = 0, RD8 = 0, RD9 = 0, RDA = 0, RDB = 0, RDC = 0, RDD = 0, RDE = 0, RDF = 0, RE0 = 0, RE1 = 0, RE2 = 0, RE3 = 0, RE4 = 0, RE5 = 0, RE6 = 0, RE7 = 0, RE8 = 0, RE9 = 0, REA = 0, REB = 0, REC = 0, RED = 0, REE = 0, REF = 0;
32414 var HEAP = new stdlib.Uint8Array(buffer);
32415 function _expand_key_128() {
32416 var sbox = 0;
32417 R10 = R00 ^ HEAP[sbox | R0D] ^ 1;
32418 R11 = R01 ^ HEAP[sbox | R0E];
32419 R12 = R02 ^ HEAP[sbox | R0F];
32420 R13 = R03 ^ HEAP[sbox | R0C];
32421 R14 = R04 ^ R10;
32422 R15 = R05 ^ R11;
32423 R16 = R06 ^ R12;
32424 R17 = R07 ^ R13;
32425 R18 = R08 ^ R14;
32426 R19 = R09 ^ R15;
32427 R1A = R0A ^ R16;
32428 R1B = R0B ^ R17;
32429 R1C = R0C ^ R18;
32430 R1D = R0D ^ R19;
32431 R1E = R0E ^ R1A;
32432 R1F = R0F ^ R1B;
32433 R20 = R10 ^ HEAP[sbox | R1D] ^ 2;
32434 R21 = R11 ^ HEAP[sbox | R1E];
32435 R22 = R12 ^ HEAP[sbox | R1F];
32436 R23 = R13 ^ HEAP[sbox | R1C];
32437 R24 = R14 ^ R20;
32438 R25 = R15 ^ R21;
32439 R26 = R16 ^ R22;
32440 R27 = R17 ^ R23;
32441 R28 = R18 ^ R24;
32442 R29 = R19 ^ R25;
32443 R2A = R1A ^ R26;
32444 R2B = R1B ^ R27;
32445 R2C = R1C ^ R28;
32446 R2D = R1D ^ R29;
32447 R2E = R1E ^ R2A;
32448 R2F = R1F ^ R2B;
32449 R30 = R20 ^ HEAP[sbox | R2D] ^ 4;
32450 R31 = R21 ^ HEAP[sbox | R2E];
32451 R32 = R22 ^ HEAP[sbox | R2F];
32452 R33 = R23 ^ HEAP[sbox | R2C];
32453 R34 = R24 ^ R30;
32454 R35 = R25 ^ R31;
32455 R36 = R26 ^ R32;
32456 R37 = R27 ^ R33;
32457 R38 = R28 ^ R34;
32458 R39 = R29 ^ R35;
32459 R3A = R2A ^ R36;
32460 R3B = R2B ^ R37;
32461 R3C = R2C ^ R38;
32462 R3D = R2D ^ R39;
32463 R3E = R2E ^ R3A;
32464 R3F = R2F ^ R3B;
32465 R40 = R30 ^ HEAP[sbox | R3D] ^ 8;
32466 R41 = R31 ^ HEAP[sbox | R3E];
32467 R42 = R32 ^ HEAP[sbox | R3F];
32468 R43 = R33 ^ HEAP[sbox | R3C];
32469 R44 = R34 ^ R40;
32470 R45 = R35 ^ R41;
32471 R46 = R36 ^ R42;
32472 R47 = R37 ^ R43;
32473 R48 = R38 ^ R44;
32474 R49 = R39 ^ R45;
32475 R4A = R3A ^ R46;
32476 R4B = R3B ^ R47;
32477 R4C = R3C ^ R48;
32478 R4D = R3D ^ R49;
32479 R4E = R3E ^ R4A;
32480 R4F = R3F ^ R4B;
32481 R50 = R40 ^ HEAP[sbox | R4D] ^ 16;
32482 R51 = R41 ^ HEAP[sbox | R4E];
32483 R52 = R42 ^ HEAP[sbox | R4F];
32484 R53 = R43 ^ HEAP[sbox | R4C];
32485 R54 = R44 ^ R50;
32486 R55 = R45 ^ R51;
32487 R56 = R46 ^ R52;
32488 R57 = R47 ^ R53;
32489 R58 = R48 ^ R54;
32490 R59 = R49 ^ R55;
32491 R5A = R4A ^ R56;
32492 R5B = R4B ^ R57;
32493 R5C = R4C ^ R58;
32494 R5D = R4D ^ R59;
32495 R5E = R4E ^ R5A;
32496 R5F = R4F ^ R5B;
32497 R60 = R50 ^ HEAP[sbox | R5D] ^ 32;
32498 R61 = R51 ^ HEAP[sbox | R5E];
32499 R62 = R52 ^ HEAP[sbox | R5F];
32500 R63 = R53 ^ HEAP[sbox | R5C];
32501 R64 = R54 ^ R60;
32502 R65 = R55 ^ R61;
32503 R66 = R56 ^ R62;
32504 R67 = R57 ^ R63;
32505 R68 = R58 ^ R64;
32506 R69 = R59 ^ R65;
32507 R6A = R5A ^ R66;
32508 R6B = R5B ^ R67;
32509 R6C = R5C ^ R68;
32510 R6D = R5D ^ R69;
32511 R6E = R5E ^ R6A;
32512 R6F = R5F ^ R6B;
32513 R70 = R60 ^ HEAP[sbox | R6D] ^ 64;
32514 R71 = R61 ^ HEAP[sbox | R6E];
32515 R72 = R62 ^ HEAP[sbox | R6F];
32516 R73 = R63 ^ HEAP[sbox | R6C];
32517 R74 = R64 ^ R70;
32518 R75 = R65 ^ R71;
32519 R76 = R66 ^ R72;
32520 R77 = R67 ^ R73;
32521 R78 = R68 ^ R74;
32522 R79 = R69 ^ R75;
32523 R7A = R6A ^ R76;
32524 R7B = R6B ^ R77;
32525 R7C = R6C ^ R78;
32526 R7D = R6D ^ R79;
32527 R7E = R6E ^ R7A;
32528 R7F = R6F ^ R7B;
32529 R80 = R70 ^ HEAP[sbox | R7D] ^ 128;
32530 R81 = R71 ^ HEAP[sbox | R7E];
32531 R82 = R72 ^ HEAP[sbox | R7F];
32532 R83 = R73 ^ HEAP[sbox | R7C];
32533 R84 = R74 ^ R80;
32534 R85 = R75 ^ R81;
32535 R86 = R76 ^ R82;
32536 R87 = R77 ^ R83;
32537 R88 = R78 ^ R84;
32538 R89 = R79 ^ R85;
32539 R8A = R7A ^ R86;
32540 R8B = R7B ^ R87;
32541 R8C = R7C ^ R88;
32542 R8D = R7D ^ R89;
32543 R8E = R7E ^ R8A;
32544 R8F = R7F ^ R8B;
32545 R90 = R80 ^ HEAP[sbox | R8D] ^ 27;
32546 R91 = R81 ^ HEAP[sbox | R8E];
32547 R92 = R82 ^ HEAP[sbox | R8F];
32548 R93 = R83 ^ HEAP[sbox | R8C];
32549 R94 = R84 ^ R90;
32550 R95 = R85 ^ R91;
32551 R96 = R86 ^ R92;
32552 R97 = R87 ^ R93;
32553 R98 = R88 ^ R94;
32554 R99 = R89 ^ R95;
32555 R9A = R8A ^ R96;
32556 R9B = R8B ^ R97;
32557 R9C = R8C ^ R98;
32558 R9D = R8D ^ R99;
32559 R9E = R8E ^ R9A;
32560 R9F = R8F ^ R9B;
32561 RA0 = R90 ^ HEAP[sbox | R9D] ^ 54;
32562 RA1 = R91 ^ HEAP[sbox | R9E];
32563 RA2 = R92 ^ HEAP[sbox | R9F];
32564 RA3 = R93 ^ HEAP[sbox | R9C];
32565 RA4 = R94 ^ RA0;
32566 RA5 = R95 ^ RA1;
32567 RA6 = R96 ^ RA2;
32568 RA7 = R97 ^ RA3;
32569 RA8 = R98 ^ RA4;
32570 RA9 = R99 ^ RA5;
32571 RAA = R9A ^ RA6;
32572 RAB = R9B ^ RA7;
32573 RAC = R9C ^ RA8;
32574 RAD = R9D ^ RA9;
32575 RAE = R9E ^ RAA;
32576 RAF = R9F ^ RAB;
32577 }
32578 function _expand_key_256() {
32579 var sbox = 0;
32580 R20 = R00 ^ HEAP[sbox | R1D] ^ 1;
32581 R21 = R01 ^ HEAP[sbox | R1E];
32582 R22 = R02 ^ HEAP[sbox | R1F];
32583 R23 = R03 ^ HEAP[sbox | R1C];
32584 R24 = R04 ^ R20;
32585 R25 = R05 ^ R21;
32586 R26 = R06 ^ R22;
32587 R27 = R07 ^ R23;
32588 R28 = R08 ^ R24;
32589 R29 = R09 ^ R25;
32590 R2A = R0A ^ R26;
32591 R2B = R0B ^ R27;
32592 R2C = R0C ^ R28;
32593 R2D = R0D ^ R29;
32594 R2E = R0E ^ R2A;
32595 R2F = R0F ^ R2B;
32596 R30 = R10 ^ HEAP[sbox | R2C];
32597 R31 = R11 ^ HEAP[sbox | R2D];
32598 R32 = R12 ^ HEAP[sbox | R2E];
32599 R33 = R13 ^ HEAP[sbox | R2F];
32600 R34 = R14 ^ R30;
32601 R35 = R15 ^ R31;
32602 R36 = R16 ^ R32;
32603 R37 = R17 ^ R33;
32604 R38 = R18 ^ R34;
32605 R39 = R19 ^ R35;
32606 R3A = R1A ^ R36;
32607 R3B = R1B ^ R37;
32608 R3C = R1C ^ R38;
32609 R3D = R1D ^ R39;
32610 R3E = R1E ^ R3A;
32611 R3F = R1F ^ R3B;
32612 R40 = R20 ^ HEAP[sbox | R3D] ^ 2;
32613 R41 = R21 ^ HEAP[sbox | R3E];
32614 R42 = R22 ^ HEAP[sbox | R3F];
32615 R43 = R23 ^ HEAP[sbox | R3C];
32616 R44 = R24 ^ R40;
32617 R45 = R25 ^ R41;
32618 R46 = R26 ^ R42;
32619 R47 = R27 ^ R43;
32620 R48 = R28 ^ R44;
32621 R49 = R29 ^ R45;
32622 R4A = R2A ^ R46;
32623 R4B = R2B ^ R47;
32624 R4C = R2C ^ R48;
32625 R4D = R2D ^ R49;
32626 R4E = R2E ^ R4A;
32627 R4F = R2F ^ R4B;
32628 R50 = R30 ^ HEAP[sbox | R4C];
32629 R51 = R31 ^ HEAP[sbox | R4D];
32630 R52 = R32 ^ HEAP[sbox | R4E];
32631 R53 = R33 ^ HEAP[sbox | R4F];
32632 R54 = R34 ^ R50;
32633 R55 = R35 ^ R51;
32634 R56 = R36 ^ R52;
32635 R57 = R37 ^ R53;
32636 R58 = R38 ^ R54;
32637 R59 = R39 ^ R55;
32638 R5A = R3A ^ R56;
32639 R5B = R3B ^ R57;
32640 R5C = R3C ^ R58;
32641 R5D = R3D ^ R59;
32642 R5E = R3E ^ R5A;
32643 R5F = R3F ^ R5B;
32644 R60 = R40 ^ HEAP[sbox | R5D] ^ 4;
32645 R61 = R41 ^ HEAP[sbox | R5E];
32646 R62 = R42 ^ HEAP[sbox | R5F];
32647 R63 = R43 ^ HEAP[sbox | R5C];
32648 R64 = R44 ^ R60;
32649 R65 = R45 ^ R61;
32650 R66 = R46 ^ R62;
32651 R67 = R47 ^ R63;
32652 R68 = R48 ^ R64;
32653 R69 = R49 ^ R65;
32654 R6A = R4A ^ R66;
32655 R6B = R4B ^ R67;
32656 R6C = R4C ^ R68;
32657 R6D = R4D ^ R69;
32658 R6E = R4E ^ R6A;
32659 R6F = R4F ^ R6B;
32660 R70 = R50 ^ HEAP[sbox | R6C];
32661 R71 = R51 ^ HEAP[sbox | R6D];
32662 R72 = R52 ^ HEAP[sbox | R6E];
32663 R73 = R53 ^ HEAP[sbox | R6F];
32664 R74 = R54 ^ R70;
32665 R75 = R55 ^ R71;
32666 R76 = R56 ^ R72;
32667 R77 = R57 ^ R73;
32668 R78 = R58 ^ R74;
32669 R79 = R59 ^ R75;
32670 R7A = R5A ^ R76;
32671 R7B = R5B ^ R77;
32672 R7C = R5C ^ R78;
32673 R7D = R5D ^ R79;
32674 R7E = R5E ^ R7A;
32675 R7F = R5F ^ R7B;
32676 R80 = R60 ^ HEAP[sbox | R7D] ^ 8;
32677 R81 = R61 ^ HEAP[sbox | R7E];
32678 R82 = R62 ^ HEAP[sbox | R7F];
32679 R83 = R63 ^ HEAP[sbox | R7C];
32680 R84 = R64 ^ R80;
32681 R85 = R65 ^ R81;
32682 R86 = R66 ^ R82;
32683 R87 = R67 ^ R83;
32684 R88 = R68 ^ R84;
32685 R89 = R69 ^ R85;
32686 R8A = R6A ^ R86;
32687 R8B = R6B ^ R87;
32688 R8C = R6C ^ R88;
32689 R8D = R6D ^ R89;
32690 R8E = R6E ^ R8A;
32691 R8F = R6F ^ R8B;
32692 R90 = R70 ^ HEAP[sbox | R8C];
32693 R91 = R71 ^ HEAP[sbox | R8D];
32694 R92 = R72 ^ HEAP[sbox | R8E];
32695 R93 = R73 ^ HEAP[sbox | R8F];
32696 R94 = R74 ^ R90;
32697 R95 = R75 ^ R91;
32698 R96 = R76 ^ R92;
32699 R97 = R77 ^ R93;
32700 R98 = R78 ^ R94;
32701 R99 = R79 ^ R95;
32702 R9A = R7A ^ R96;
32703 R9B = R7B ^ R97;
32704 R9C = R7C ^ R98;
32705 R9D = R7D ^ R99;
32706 R9E = R7E ^ R9A;
32707 R9F = R7F ^ R9B;
32708 RA0 = R80 ^ HEAP[sbox | R9D] ^ 16;
32709 RA1 = R81 ^ HEAP[sbox | R9E];
32710 RA2 = R82 ^ HEAP[sbox | R9F];
32711 RA3 = R83 ^ HEAP[sbox | R9C];
32712 RA4 = R84 ^ RA0;
32713 RA5 = R85 ^ RA1;
32714 RA6 = R86 ^ RA2;
32715 RA7 = R87 ^ RA3;
32716 RA8 = R88 ^ RA4;
32717 RA9 = R89 ^ RA5;
32718 RAA = R8A ^ RA6;
32719 RAB = R8B ^ RA7;
32720 RAC = R8C ^ RA8;
32721 RAD = R8D ^ RA9;
32722 RAE = R8E ^ RAA;
32723 RAF = R8F ^ RAB;
32724 RB0 = R90 ^ HEAP[sbox | RAC];
32725 RB1 = R91 ^ HEAP[sbox | RAD];
32726 RB2 = R92 ^ HEAP[sbox | RAE];
32727 RB3 = R93 ^ HEAP[sbox | RAF];
32728 RB4 = R94 ^ RB0;
32729 RB5 = R95 ^ RB1;
32730 RB6 = R96 ^ RB2;
32731 RB7 = R97 ^ RB3;
32732 RB8 = R98 ^ RB4;
32733 RB9 = R99 ^ RB5;
32734 RBA = R9A ^ RB6;
32735 RBB = R9B ^ RB7;
32736 RBC = R9C ^ RB8;
32737 RBD = R9D ^ RB9;
32738 RBE = R9E ^ RBA;
32739 RBF = R9F ^ RBB;
32740 RC0 = RA0 ^ HEAP[sbox | RBD] ^ 32;
32741 RC1 = RA1 ^ HEAP[sbox | RBE];
32742 RC2 = RA2 ^ HEAP[sbox | RBF];
32743 RC3 = RA3 ^ HEAP[sbox | RBC];
32744 RC4 = RA4 ^ RC0;
32745 RC5 = RA5 ^ RC1;
32746 RC6 = RA6 ^ RC2;
32747 RC7 = RA7 ^ RC3;
32748 RC8 = RA8 ^ RC4;
32749 RC9 = RA9 ^ RC5;
32750 RCA = RAA ^ RC6;
32751 RCB = RAB ^ RC7;
32752 RCC = RAC ^ RC8;
32753 RCD = RAD ^ RC9;
32754 RCE = RAE ^ RCA;
32755 RCF = RAF ^ RCB;
32756 RD0 = RB0 ^ HEAP[sbox | RCC];
32757 RD1 = RB1 ^ HEAP[sbox | RCD];
32758 RD2 = RB2 ^ HEAP[sbox | RCE];
32759 RD3 = RB3 ^ HEAP[sbox | RCF];
32760 RD4 = RB4 ^ RD0;
32761 RD5 = RB5 ^ RD1;
32762 RD6 = RB6 ^ RD2;
32763 RD7 = RB7 ^ RD3;
32764 RD8 = RB8 ^ RD4;
32765 RD9 = RB9 ^ RD5;
32766 RDA = RBA ^ RD6;
32767 RDB = RBB ^ RD7;
32768 RDC = RBC ^ RD8;
32769 RDD = RBD ^ RD9;
32770 RDE = RBE ^ RDA;
32771 RDF = RBF ^ RDB;
32772 RE0 = RC0 ^ HEAP[sbox | RDD] ^ 64;
32773 RE1 = RC1 ^ HEAP[sbox | RDE];
32774 RE2 = RC2 ^ HEAP[sbox | RDF];
32775 RE3 = RC3 ^ HEAP[sbox | RDC];
32776 RE4 = RC4 ^ RE0;
32777 RE5 = RC5 ^ RE1;
32778 RE6 = RC6 ^ RE2;
32779 RE7 = RC7 ^ RE3;
32780 RE8 = RC8 ^ RE4;
32781 RE9 = RC9 ^ RE5;
32782 REA = RCA ^ RE6;
32783 REB = RCB ^ RE7;
32784 REC = RCC ^ RE8;
32785 RED = RCD ^ RE9;
32786 REE = RCE ^ REA;
32787 REF = RCF ^ REB;
32788 }
32789 function _encrypt(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
32790 s0 = s0 | 0;
32791 s1 = s1 | 0;
32792 s2 = s2 | 0;
32793 s3 = s3 | 0;
32794 s4 = s4 | 0;
32795 s5 = s5 | 0;
32796 s6 = s6 | 0;
32797 s7 = s7 | 0;
32798 s8 = s8 | 0;
32799 s9 = s9 | 0;
32800 sA = sA | 0;
32801 sB = sB | 0;
32802 sC = sC | 0;
32803 sD = sD | 0;
32804 sE = sE | 0;
32805 sF = sF | 0;
32806 var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, tA = 0, tB = 0, tC = 0, tD = 0, tE = 0, tF = 0, sbox = 0, x2_sbox = 512, x3_sbox = 768;
32807 s0 = s0 ^ R00;
32808 s1 = s1 ^ R01;
32809 s2 = s2 ^ R02;
32810 s3 = s3 ^ R03;
32811 s4 = s4 ^ R04;
32812 s5 = s5 ^ R05;
32813 s6 = s6 ^ R06;
32814 s7 = s7 ^ R07;
32815 s8 = s8 ^ R08;
32816 s9 = s9 ^ R09;
32817 sA = sA ^ R0A;
32818 sB = sB ^ R0B;
32819 sC = sC ^ R0C;
32820 sD = sD ^ R0D;
32821 sE = sE ^ R0E;
32822 sF = sF ^ R0F;
32823 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R10;
32824 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R11;
32825 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R12;
32826 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R13;
32827 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R14;
32828 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R15;
32829 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R16;
32830 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R17;
32831 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R18;
32832 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R19;
32833 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R1A;
32834 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R1B;
32835 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R1C;
32836 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R1D;
32837 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R1E;
32838 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R1F;
32839 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R20;
32840 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R21;
32841 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R22;
32842 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R23;
32843 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R24;
32844 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R25;
32845 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R26;
32846 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R27;
32847 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R28;
32848 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R29;
32849 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R2A;
32850 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R2B;
32851 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R2C;
32852 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R2D;
32853 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R2E;
32854 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R2F;
32855 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R30;
32856 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R31;
32857 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R32;
32858 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R33;
32859 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R34;
32860 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R35;
32861 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R36;
32862 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R37;
32863 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R38;
32864 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R39;
32865 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R3A;
32866 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R3B;
32867 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R3C;
32868 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R3D;
32869 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R3E;
32870 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R3F;
32871 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R40;
32872 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R41;
32873 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R42;
32874 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R43;
32875 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R44;
32876 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R45;
32877 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R46;
32878 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R47;
32879 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R48;
32880 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R49;
32881 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R4A;
32882 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R4B;
32883 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R4C;
32884 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R4D;
32885 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R4E;
32886 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R4F;
32887 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R50;
32888 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R51;
32889 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R52;
32890 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R53;
32891 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R54;
32892 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R55;
32893 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R56;
32894 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R57;
32895 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R58;
32896 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R59;
32897 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R5A;
32898 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R5B;
32899 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R5C;
32900 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R5D;
32901 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R5E;
32902 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R5F;
32903 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R60;
32904 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R61;
32905 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R62;
32906 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R63;
32907 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R64;
32908 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R65;
32909 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R66;
32910 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R67;
32911 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R68;
32912 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R69;
32913 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R6A;
32914 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R6B;
32915 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R6C;
32916 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R6D;
32917 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R6E;
32918 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R6F;
32919 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R70;
32920 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R71;
32921 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R72;
32922 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R73;
32923 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R74;
32924 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R75;
32925 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R76;
32926 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R77;
32927 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R78;
32928 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R79;
32929 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R7A;
32930 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R7B;
32931 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R7C;
32932 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R7D;
32933 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R7E;
32934 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R7F;
32935 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R80;
32936 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R81;
32937 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R82;
32938 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R83;
32939 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R84;
32940 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R85;
32941 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R86;
32942 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R87;
32943 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R88;
32944 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R89;
32945 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R8A;
32946 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R8B;
32947 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R8C;
32948 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R8D;
32949 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R8E;
32950 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R8F;
32951 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R90;
32952 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R91;
32953 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R92;
32954 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R93;
32955 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R94;
32956 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R95;
32957 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R96;
32958 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R97;
32959 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R98;
32960 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R99;
32961 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R9A;
32962 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R9B;
32963 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R9C;
32964 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R9D;
32965 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R9E;
32966 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R9F;
32967 if ((keySize | 0) == 16) {
32968 S0 = HEAP[sbox | t0] ^ RA0;
32969 S1 = HEAP[sbox | t5] ^ RA1;
32970 S2 = HEAP[sbox | tA] ^ RA2;
32971 S3 = HEAP[sbox | tF] ^ RA3;
32972 S4 = HEAP[sbox | t4] ^ RA4;
32973 S5 = HEAP[sbox | t9] ^ RA5;
32974 S6 = HEAP[sbox | tE] ^ RA6;
32975 S7 = HEAP[sbox | t3] ^ RA7;
32976 S8 = HEAP[sbox | t8] ^ RA8;
32977 S9 = HEAP[sbox | tD] ^ RA9;
32978 SA = HEAP[sbox | t2] ^ RAA;
32979 SB = HEAP[sbox | t7] ^ RAB;
32980 SC = HEAP[sbox | tC] ^ RAC;
32981 SD = HEAP[sbox | t1] ^ RAD;
32982 SE = HEAP[sbox | t6] ^ RAE;
32983 SF = HEAP[sbox | tB] ^ RAF;
32984 return;
32985 }
32986 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ RA0;
32987 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ RA1;
32988 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ RA2;
32989 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ RA3;
32990 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ RA4;
32991 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ RA5;
32992 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ RA6;
32993 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ RA7;
32994 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ RA8;
32995 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ RA9;
32996 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ RAA;
32997 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ RAB;
32998 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ RAC;
32999 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ RAD;
33000 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ RAE;
33001 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ RAF;
33002 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ RB0;
33003 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ RB1;
33004 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ RB2;
33005 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ RB3;
33006 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ RB4;
33007 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ RB5;
33008 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ RB6;
33009 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ RB7;
33010 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ RB8;
33011 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ RB9;
33012 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ RBA;
33013 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ RBB;
33014 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ RBC;
33015 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ RBD;
33016 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ RBE;
33017 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ RBF;
33018 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ RC0;
33019 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ RC1;
33020 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ RC2;
33021 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ RC3;
33022 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ RC4;
33023 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ RC5;
33024 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ RC6;
33025 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ RC7;
33026 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ RC8;
33027 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ RC9;
33028 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ RCA;
33029 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ RCB;
33030 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ RCC;
33031 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ RCD;
33032 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ RCE;
33033 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ RCF;
33034 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ RD0;
33035 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ RD1;
33036 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ RD2;
33037 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ RD3;
33038 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ RD4;
33039 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ RD5;
33040 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ RD6;
33041 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ RD7;
33042 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ RD8;
33043 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ RD9;
33044 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ RDA;
33045 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ RDB;
33046 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ RDC;
33047 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ RDD;
33048 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ RDE;
33049 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ RDF;
33050 S0 = HEAP[sbox | t0] ^ RE0;
33051 S1 = HEAP[sbox | t5] ^ RE1;
33052 S2 = HEAP[sbox | tA] ^ RE2;
33053 S3 = HEAP[sbox | tF] ^ RE3;
33054 S4 = HEAP[sbox | t4] ^ RE4;
33055 S5 = HEAP[sbox | t9] ^ RE5;
33056 S6 = HEAP[sbox | tE] ^ RE6;
33057 S7 = HEAP[sbox | t3] ^ RE7;
33058 S8 = HEAP[sbox | t8] ^ RE8;
33059 S9 = HEAP[sbox | tD] ^ RE9;
33060 SA = HEAP[sbox | t2] ^ REA;
33061 SB = HEAP[sbox | t7] ^ REB;
33062 SC = HEAP[sbox | tC] ^ REC;
33063 SD = HEAP[sbox | t1] ^ RED;
33064 SE = HEAP[sbox | t6] ^ REE;
33065 SF = HEAP[sbox | tB] ^ REF;
33066 }
33067 function _decrypt(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
33068 s0 = s0 | 0;
33069 s1 = s1 | 0;
33070 s2 = s2 | 0;
33071 s3 = s3 | 0;
33072 s4 = s4 | 0;
33073 s5 = s5 | 0;
33074 s6 = s6 | 0;
33075 s7 = s7 | 0;
33076 s8 = s8 | 0;
33077 s9 = s9 | 0;
33078 sA = sA | 0;
33079 sB = sB | 0;
33080 sC = sC | 0;
33081 sD = sD | 0;
33082 sE = sE | 0;
33083 sF = sF | 0;
33084 var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, tA = 0, tB = 0, tC = 0, tD = 0, tE = 0, tF = 0, inv_sbox = 256, x9 = 1024, xB = 1280, xD = 1536, xE = 1792;
33085 if ((keySize | 0) == 32) {
33086 t0 = HEAP[inv_sbox | s0 ^ RE0] ^ RD0;
33087 t1 = HEAP[inv_sbox | sD ^ RED] ^ RD1;
33088 t2 = HEAP[inv_sbox | sA ^ REA] ^ RD2;
33089 t3 = HEAP[inv_sbox | s7 ^ RE7] ^ RD3;
33090 t4 = HEAP[inv_sbox | s4 ^ RE4] ^ RD4;
33091 t5 = HEAP[inv_sbox | s1 ^ RE1] ^ RD5;
33092 t6 = HEAP[inv_sbox | sE ^ REE] ^ RD6;
33093 t7 = HEAP[inv_sbox | sB ^ REB] ^ RD7;
33094 t8 = HEAP[inv_sbox | s8 ^ RE8] ^ RD8;
33095 t9 = HEAP[inv_sbox | s5 ^ RE5] ^ RD9;
33096 tA = HEAP[inv_sbox | s2 ^ RE2] ^ RDA;
33097 tB = HEAP[inv_sbox | sF ^ REF] ^ RDB;
33098 tC = HEAP[inv_sbox | sC ^ REC] ^ RDC;
33099 tD = HEAP[inv_sbox | s9 ^ RE9] ^ RDD;
33100 tE = HEAP[inv_sbox | s6 ^ RE6] ^ RDE;
33101 tF = HEAP[inv_sbox | s3 ^ RE3] ^ RDF;
33102 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33103 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33104 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33105 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33106 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33107 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33108 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33109 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33110 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33111 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33112 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33113 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33114 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33115 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33116 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33117 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33118 t0 = HEAP[inv_sbox | s0] ^ RC0;
33119 t1 = HEAP[inv_sbox | s1] ^ RC1;
33120 t2 = HEAP[inv_sbox | s2] ^ RC2;
33121 t3 = HEAP[inv_sbox | s3] ^ RC3;
33122 t4 = HEAP[inv_sbox | s4] ^ RC4;
33123 t5 = HEAP[inv_sbox | s5] ^ RC5;
33124 t6 = HEAP[inv_sbox | s6] ^ RC6;
33125 t7 = HEAP[inv_sbox | s7] ^ RC7;
33126 t8 = HEAP[inv_sbox | s8] ^ RC8;
33127 t9 = HEAP[inv_sbox | s9] ^ RC9;
33128 tA = HEAP[inv_sbox | sA] ^ RCA;
33129 tB = HEAP[inv_sbox | sB] ^ RCB;
33130 tC = HEAP[inv_sbox | sC] ^ RCC;
33131 tD = HEAP[inv_sbox | sD] ^ RCD;
33132 tE = HEAP[inv_sbox | sE] ^ RCE;
33133 tF = HEAP[inv_sbox | sF] ^ RCF;
33134 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33135 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33136 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33137 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33138 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33139 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33140 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33141 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33142 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33143 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33144 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33145 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33146 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33147 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33148 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33149 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33150 t0 = HEAP[inv_sbox | s0] ^ RB0;
33151 t1 = HEAP[inv_sbox | s1] ^ RB1;
33152 t2 = HEAP[inv_sbox | s2] ^ RB2;
33153 t3 = HEAP[inv_sbox | s3] ^ RB3;
33154 t4 = HEAP[inv_sbox | s4] ^ RB4;
33155 t5 = HEAP[inv_sbox | s5] ^ RB5;
33156 t6 = HEAP[inv_sbox | s6] ^ RB6;
33157 t7 = HEAP[inv_sbox | s7] ^ RB7;
33158 t8 = HEAP[inv_sbox | s8] ^ RB8;
33159 t9 = HEAP[inv_sbox | s9] ^ RB9;
33160 tA = HEAP[inv_sbox | sA] ^ RBA;
33161 tB = HEAP[inv_sbox | sB] ^ RBB;
33162 tC = HEAP[inv_sbox | sC] ^ RBC;
33163 tD = HEAP[inv_sbox | sD] ^ RBD;
33164 tE = HEAP[inv_sbox | sE] ^ RBE;
33165 tF = HEAP[inv_sbox | sF] ^ RBF;
33166 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33167 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33168 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33169 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33170 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33171 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33172 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33173 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33174 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33175 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33176 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33177 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33178 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33179 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33180 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33181 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33182 t0 = HEAP[inv_sbox | s0] ^ RA0;
33183 t1 = HEAP[inv_sbox | s1] ^ RA1;
33184 t2 = HEAP[inv_sbox | s2] ^ RA2;
33185 t3 = HEAP[inv_sbox | s3] ^ RA3;
33186 t4 = HEAP[inv_sbox | s4] ^ RA4;
33187 t5 = HEAP[inv_sbox | s5] ^ RA5;
33188 t6 = HEAP[inv_sbox | s6] ^ RA6;
33189 t7 = HEAP[inv_sbox | s7] ^ RA7;
33190 t8 = HEAP[inv_sbox | s8] ^ RA8;
33191 t9 = HEAP[inv_sbox | s9] ^ RA9;
33192 tA = HEAP[inv_sbox | sA] ^ RAA;
33193 tB = HEAP[inv_sbox | sB] ^ RAB;
33194 tC = HEAP[inv_sbox | sC] ^ RAC;
33195 tD = HEAP[inv_sbox | sD] ^ RAD;
33196 tE = HEAP[inv_sbox | sE] ^ RAE;
33197 tF = HEAP[inv_sbox | sF] ^ RAF;
33198 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33199 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33200 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33201 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33202 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33203 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33204 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33205 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33206 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33207 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33208 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33209 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33210 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33211 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33212 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33213 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33214 t0 = HEAP[inv_sbox | s0] ^ R90;
33215 t1 = HEAP[inv_sbox | s1] ^ R91;
33216 t2 = HEAP[inv_sbox | s2] ^ R92;
33217 t3 = HEAP[inv_sbox | s3] ^ R93;
33218 t4 = HEAP[inv_sbox | s4] ^ R94;
33219 t5 = HEAP[inv_sbox | s5] ^ R95;
33220 t6 = HEAP[inv_sbox | s6] ^ R96;
33221 t7 = HEAP[inv_sbox | s7] ^ R97;
33222 t8 = HEAP[inv_sbox | s8] ^ R98;
33223 t9 = HEAP[inv_sbox | s9] ^ R99;
33224 tA = HEAP[inv_sbox | sA] ^ R9A;
33225 tB = HEAP[inv_sbox | sB] ^ R9B;
33226 tC = HEAP[inv_sbox | sC] ^ R9C;
33227 tD = HEAP[inv_sbox | sD] ^ R9D;
33228 tE = HEAP[inv_sbox | sE] ^ R9E;
33229 tF = HEAP[inv_sbox | sF] ^ R9F;
33230 } else {
33231 t0 = HEAP[inv_sbox | s0 ^ RA0] ^ R90;
33232 t1 = HEAP[inv_sbox | sD ^ RAD] ^ R91;
33233 t2 = HEAP[inv_sbox | sA ^ RAA] ^ R92;
33234 t3 = HEAP[inv_sbox | s7 ^ RA7] ^ R93;
33235 t4 = HEAP[inv_sbox | s4 ^ RA4] ^ R94;
33236 t5 = HEAP[inv_sbox | s1 ^ RA1] ^ R95;
33237 t6 = HEAP[inv_sbox | sE ^ RAE] ^ R96;
33238 t7 = HEAP[inv_sbox | sB ^ RAB] ^ R97;
33239 t8 = HEAP[inv_sbox | s8 ^ RA8] ^ R98;
33240 t9 = HEAP[inv_sbox | s5 ^ RA5] ^ R99;
33241 tA = HEAP[inv_sbox | s2 ^ RA2] ^ R9A;
33242 tB = HEAP[inv_sbox | sF ^ RAF] ^ R9B;
33243 tC = HEAP[inv_sbox | sC ^ RAC] ^ R9C;
33244 tD = HEAP[inv_sbox | s9 ^ RA9] ^ R9D;
33245 tE = HEAP[inv_sbox | s6 ^ RA6] ^ R9E;
33246 tF = HEAP[inv_sbox | s3 ^ RA3] ^ R9F;
33247 }
33248 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33249 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33250 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33251 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33252 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33253 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33254 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33255 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33256 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33257 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33258 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33259 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33260 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33261 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33262 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33263 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33264 t0 = HEAP[inv_sbox | s0] ^ R80;
33265 t1 = HEAP[inv_sbox | s1] ^ R81;
33266 t2 = HEAP[inv_sbox | s2] ^ R82;
33267 t3 = HEAP[inv_sbox | s3] ^ R83;
33268 t4 = HEAP[inv_sbox | s4] ^ R84;
33269 t5 = HEAP[inv_sbox | s5] ^ R85;
33270 t6 = HEAP[inv_sbox | s6] ^ R86;
33271 t7 = HEAP[inv_sbox | s7] ^ R87;
33272 t8 = HEAP[inv_sbox | s8] ^ R88;
33273 t9 = HEAP[inv_sbox | s9] ^ R89;
33274 tA = HEAP[inv_sbox | sA] ^ R8A;
33275 tB = HEAP[inv_sbox | sB] ^ R8B;
33276 tC = HEAP[inv_sbox | sC] ^ R8C;
33277 tD = HEAP[inv_sbox | sD] ^ R8D;
33278 tE = HEAP[inv_sbox | sE] ^ R8E;
33279 tF = HEAP[inv_sbox | sF] ^ R8F;
33280 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33281 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33282 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33283 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33284 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33285 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33286 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33287 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33288 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33289 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33290 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33291 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33292 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33293 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33294 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33295 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33296 t0 = HEAP[inv_sbox | s0] ^ R70;
33297 t1 = HEAP[inv_sbox | s1] ^ R71;
33298 t2 = HEAP[inv_sbox | s2] ^ R72;
33299 t3 = HEAP[inv_sbox | s3] ^ R73;
33300 t4 = HEAP[inv_sbox | s4] ^ R74;
33301 t5 = HEAP[inv_sbox | s5] ^ R75;
33302 t6 = HEAP[inv_sbox | s6] ^ R76;
33303 t7 = HEAP[inv_sbox | s7] ^ R77;
33304 t8 = HEAP[inv_sbox | s8] ^ R78;
33305 t9 = HEAP[inv_sbox | s9] ^ R79;
33306 tA = HEAP[inv_sbox | sA] ^ R7A;
33307 tB = HEAP[inv_sbox | sB] ^ R7B;
33308 tC = HEAP[inv_sbox | sC] ^ R7C;
33309 tD = HEAP[inv_sbox | sD] ^ R7D;
33310 tE = HEAP[inv_sbox | sE] ^ R7E;
33311 tF = HEAP[inv_sbox | sF] ^ R7F;
33312 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33313 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33314 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33315 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33316 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33317 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33318 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33319 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33320 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33321 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33322 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33323 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33324 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33325 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33326 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33327 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33328 t0 = HEAP[inv_sbox | s0] ^ R60;
33329 t1 = HEAP[inv_sbox | s1] ^ R61;
33330 t2 = HEAP[inv_sbox | s2] ^ R62;
33331 t3 = HEAP[inv_sbox | s3] ^ R63;
33332 t4 = HEAP[inv_sbox | s4] ^ R64;
33333 t5 = HEAP[inv_sbox | s5] ^ R65;
33334 t6 = HEAP[inv_sbox | s6] ^ R66;
33335 t7 = HEAP[inv_sbox | s7] ^ R67;
33336 t8 = HEAP[inv_sbox | s8] ^ R68;
33337 t9 = HEAP[inv_sbox | s9] ^ R69;
33338 tA = HEAP[inv_sbox | sA] ^ R6A;
33339 tB = HEAP[inv_sbox | sB] ^ R6B;
33340 tC = HEAP[inv_sbox | sC] ^ R6C;
33341 tD = HEAP[inv_sbox | sD] ^ R6D;
33342 tE = HEAP[inv_sbox | sE] ^ R6E;
33343 tF = HEAP[inv_sbox | sF] ^ R6F;
33344 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33345 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33346 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33347 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33348 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33349 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33350 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33351 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33352 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33353 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33354 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33355 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33356 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33357 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33358 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33359 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33360 t0 = HEAP[inv_sbox | s0] ^ R50;
33361 t1 = HEAP[inv_sbox | s1] ^ R51;
33362 t2 = HEAP[inv_sbox | s2] ^ R52;
33363 t3 = HEAP[inv_sbox | s3] ^ R53;
33364 t4 = HEAP[inv_sbox | s4] ^ R54;
33365 t5 = HEAP[inv_sbox | s5] ^ R55;
33366 t6 = HEAP[inv_sbox | s6] ^ R56;
33367 t7 = HEAP[inv_sbox | s7] ^ R57;
33368 t8 = HEAP[inv_sbox | s8] ^ R58;
33369 t9 = HEAP[inv_sbox | s9] ^ R59;
33370 tA = HEAP[inv_sbox | sA] ^ R5A;
33371 tB = HEAP[inv_sbox | sB] ^ R5B;
33372 tC = HEAP[inv_sbox | sC] ^ R5C;
33373 tD = HEAP[inv_sbox | sD] ^ R5D;
33374 tE = HEAP[inv_sbox | sE] ^ R5E;
33375 tF = HEAP[inv_sbox | sF] ^ R5F;
33376 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33377 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33378 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33379 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33380 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33381 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33382 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33383 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33384 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33385 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33386 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33387 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33388 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33389 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33390 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33391 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33392 t0 = HEAP[inv_sbox | s0] ^ R40;
33393 t1 = HEAP[inv_sbox | s1] ^ R41;
33394 t2 = HEAP[inv_sbox | s2] ^ R42;
33395 t3 = HEAP[inv_sbox | s3] ^ R43;
33396 t4 = HEAP[inv_sbox | s4] ^ R44;
33397 t5 = HEAP[inv_sbox | s5] ^ R45;
33398 t6 = HEAP[inv_sbox | s6] ^ R46;
33399 t7 = HEAP[inv_sbox | s7] ^ R47;
33400 t8 = HEAP[inv_sbox | s8] ^ R48;
33401 t9 = HEAP[inv_sbox | s9] ^ R49;
33402 tA = HEAP[inv_sbox | sA] ^ R4A;
33403 tB = HEAP[inv_sbox | sB] ^ R4B;
33404 tC = HEAP[inv_sbox | sC] ^ R4C;
33405 tD = HEAP[inv_sbox | sD] ^ R4D;
33406 tE = HEAP[inv_sbox | sE] ^ R4E;
33407 tF = HEAP[inv_sbox | sF] ^ R4F;
33408 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33409 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33410 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33411 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33412 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33413 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33414 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33415 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33416 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33417 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33418 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33419 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33420 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33421 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33422 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33423 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33424 t0 = HEAP[inv_sbox | s0] ^ R30;
33425 t1 = HEAP[inv_sbox | s1] ^ R31;
33426 t2 = HEAP[inv_sbox | s2] ^ R32;
33427 t3 = HEAP[inv_sbox | s3] ^ R33;
33428 t4 = HEAP[inv_sbox | s4] ^ R34;
33429 t5 = HEAP[inv_sbox | s5] ^ R35;
33430 t6 = HEAP[inv_sbox | s6] ^ R36;
33431 t7 = HEAP[inv_sbox | s7] ^ R37;
33432 t8 = HEAP[inv_sbox | s8] ^ R38;
33433 t9 = HEAP[inv_sbox | s9] ^ R39;
33434 tA = HEAP[inv_sbox | sA] ^ R3A;
33435 tB = HEAP[inv_sbox | sB] ^ R3B;
33436 tC = HEAP[inv_sbox | sC] ^ R3C;
33437 tD = HEAP[inv_sbox | sD] ^ R3D;
33438 tE = HEAP[inv_sbox | sE] ^ R3E;
33439 tF = HEAP[inv_sbox | sF] ^ R3F;
33440 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33441 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33442 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33443 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33444 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33445 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33446 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33447 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33448 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33449 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33450 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33451 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33452 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33453 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33454 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33455 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33456 t0 = HEAP[inv_sbox | s0] ^ R20;
33457 t1 = HEAP[inv_sbox | s1] ^ R21;
33458 t2 = HEAP[inv_sbox | s2] ^ R22;
33459 t3 = HEAP[inv_sbox | s3] ^ R23;
33460 t4 = HEAP[inv_sbox | s4] ^ R24;
33461 t5 = HEAP[inv_sbox | s5] ^ R25;
33462 t6 = HEAP[inv_sbox | s6] ^ R26;
33463 t7 = HEAP[inv_sbox | s7] ^ R27;
33464 t8 = HEAP[inv_sbox | s8] ^ R28;
33465 t9 = HEAP[inv_sbox | s9] ^ R29;
33466 tA = HEAP[inv_sbox | sA] ^ R2A;
33467 tB = HEAP[inv_sbox | sB] ^ R2B;
33468 tC = HEAP[inv_sbox | sC] ^ R2C;
33469 tD = HEAP[inv_sbox | sD] ^ R2D;
33470 tE = HEAP[inv_sbox | sE] ^ R2E;
33471 tF = HEAP[inv_sbox | sF] ^ R2F;
33472 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33473 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33474 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33475 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33476 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33477 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33478 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33479 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33480 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33481 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33482 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33483 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33484 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33485 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33486 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33487 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33488 t0 = HEAP[inv_sbox | s0] ^ R10;
33489 t1 = HEAP[inv_sbox | s1] ^ R11;
33490 t2 = HEAP[inv_sbox | s2] ^ R12;
33491 t3 = HEAP[inv_sbox | s3] ^ R13;
33492 t4 = HEAP[inv_sbox | s4] ^ R14;
33493 t5 = HEAP[inv_sbox | s5] ^ R15;
33494 t6 = HEAP[inv_sbox | s6] ^ R16;
33495 t7 = HEAP[inv_sbox | s7] ^ R17;
33496 t8 = HEAP[inv_sbox | s8] ^ R18;
33497 t9 = HEAP[inv_sbox | s9] ^ R19;
33498 tA = HEAP[inv_sbox | sA] ^ R1A;
33499 tB = HEAP[inv_sbox | sB] ^ R1B;
33500 tC = HEAP[inv_sbox | sC] ^ R1C;
33501 tD = HEAP[inv_sbox | sD] ^ R1D;
33502 tE = HEAP[inv_sbox | sE] ^ R1E;
33503 tF = HEAP[inv_sbox | sF] ^ R1F;
33504 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
33505 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
33506 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
33507 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
33508 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
33509 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
33510 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
33511 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
33512 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
33513 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
33514 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
33515 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
33516 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
33517 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
33518 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
33519 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
33520 S0 = HEAP[inv_sbox | s0] ^ R00;
33521 S1 = HEAP[inv_sbox | s1] ^ R01;
33522 S2 = HEAP[inv_sbox | s2] ^ R02;
33523 S3 = HEAP[inv_sbox | s3] ^ R03;
33524 S4 = HEAP[inv_sbox | s4] ^ R04;
33525 S5 = HEAP[inv_sbox | s5] ^ R05;
33526 S6 = HEAP[inv_sbox | s6] ^ R06;
33527 S7 = HEAP[inv_sbox | s7] ^ R07;
33528 S8 = HEAP[inv_sbox | s8] ^ R08;
33529 S9 = HEAP[inv_sbox | s9] ^ R09;
33530 SA = HEAP[inv_sbox | sA] ^ R0A;
33531 SB = HEAP[inv_sbox | sB] ^ R0B;
33532 SC = HEAP[inv_sbox | sC] ^ R0C;
33533 SD = HEAP[inv_sbox | sD] ^ R0D;
33534 SE = HEAP[inv_sbox | sE] ^ R0E;
33535 SF = HEAP[inv_sbox | sF] ^ R0F;
33536 }
33537 function init_state(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
33538 s0 = s0 | 0;
33539 s1 = s1 | 0;
33540 s2 = s2 | 0;
33541 s3 = s3 | 0;
33542 s4 = s4 | 0;
33543 s5 = s5 | 0;
33544 s6 = s6 | 0;
33545 s7 = s7 | 0;
33546 s8 = s8 | 0;
33547 s9 = s9 | 0;
33548 sA = sA | 0;
33549 sB = sB | 0;
33550 sC = sC | 0;
33551 sD = sD | 0;
33552 sE = sE | 0;
33553 sF = sF | 0;
33554 S0 = s0;
33555 S1 = s1;
33556 S2 = s2;
33557 S3 = s3;
33558 S4 = s4;
33559 S5 = s5;
33560 S6 = s6;
33561 S7 = s7;
33562 S8 = s8;
33563 S9 = s9;
33564 SA = sA;
33565 SB = sB;
33566 SC = sC;
33567 SD = sD;
33568 SE = sE;
33569 SF = sF;
33570 }
33571 function save_state(offset) {
33572 offset = offset | 0;
33573 HEAP[offset] = S0;
33574 HEAP[offset | 1] = S1;
33575 HEAP[offset | 2] = S2;
33576 HEAP[offset | 3] = S3;
33577 HEAP[offset | 4] = S4;
33578 HEAP[offset | 5] = S5;
33579 HEAP[offset | 6] = S6;
33580 HEAP[offset | 7] = S7;
33581 HEAP[offset | 8] = S8;
33582 HEAP[offset | 9] = S9;
33583 HEAP[offset | 10] = SA;
33584 HEAP[offset | 11] = SB;
33585 HEAP[offset | 12] = SC;
33586 HEAP[offset | 13] = SD;
33587 HEAP[offset | 14] = SE;
33588 HEAP[offset | 15] = SF;
33589 }
33590 function init_key_128(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, kA, kB, kC, kD, kE, kF) {
33591 k0 = k0 | 0;
33592 k1 = k1 | 0;
33593 k2 = k2 | 0;
33594 k3 = k3 | 0;
33595 k4 = k4 | 0;
33596 k5 = k5 | 0;
33597 k6 = k6 | 0;
33598 k7 = k7 | 0;
33599 k8 = k8 | 0;
33600 k9 = k9 | 0;
33601 kA = kA | 0;
33602 kB = kB | 0;
33603 kC = kC | 0;
33604 kD = kD | 0;
33605 kE = kE | 0;
33606 kF = kF | 0;
33607 R00 = k0;
33608 R01 = k1;
33609 R02 = k2;
33610 R03 = k3;
33611 R04 = k4;
33612 R05 = k5;
33613 R06 = k6;
33614 R07 = k7;
33615 R08 = k8;
33616 R09 = k9;
33617 R0A = kA;
33618 R0B = kB;
33619 R0C = kC;
33620 R0D = kD;
33621 R0E = kE;
33622 R0F = kF;
33623 keySize = 16;
33624 _expand_key_128();
33625 }
33626 function init_key_256(k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F) {
33627 k00 = k00 | 0;
33628 k01 = k01 | 0;
33629 k02 = k02 | 0;
33630 k03 = k03 | 0;
33631 k04 = k04 | 0;
33632 k05 = k05 | 0;
33633 k06 = k06 | 0;
33634 k07 = k07 | 0;
33635 k08 = k08 | 0;
33636 k09 = k09 | 0;
33637 k0A = k0A | 0;
33638 k0B = k0B | 0;
33639 k0C = k0C | 0;
33640 k0D = k0D | 0;
33641 k0E = k0E | 0;
33642 k0F = k0F | 0;
33643 k10 = k10 | 0;
33644 k11 = k11 | 0;
33645 k12 = k12 | 0;
33646 k13 = k13 | 0;
33647 k14 = k14 | 0;
33648 k15 = k15 | 0;
33649 k16 = k16 | 0;
33650 k17 = k17 | 0;
33651 k18 = k18 | 0;
33652 k19 = k19 | 0;
33653 k1A = k1A | 0;
33654 k1B = k1B | 0;
33655 k1C = k1C | 0;
33656 k1D = k1D | 0;
33657 k1E = k1E | 0;
33658 k1F = k1F | 0;
33659 R00 = k00;
33660 R01 = k01;
33661 R02 = k02;
33662 R03 = k03;
33663 R04 = k04;
33664 R05 = k05;
33665 R06 = k06;
33666 R07 = k07;
33667 R08 = k08;
33668 R09 = k09;
33669 R0A = k0A;
33670 R0B = k0B;
33671 R0C = k0C;
33672 R0D = k0D;
33673 R0E = k0E;
33674 R0F = k0F;
33675 R10 = k10;
33676 R11 = k11;
33677 R12 = k12;
33678 R13 = k13;
33679 R14 = k14;
33680 R15 = k15;
33681 R16 = k16;
33682 R17 = k17;
33683 R18 = k18;
33684 R19 = k19;
33685 R1A = k1A;
33686 R1B = k1B;
33687 R1C = k1C;
33688 R1D = k1D;
33689 R1E = k1E;
33690 R1F = k1F;
33691 keySize = 32;
33692 _expand_key_256();
33693 }
33694 function cbc_encrypt(offset, length) {
33695 offset = offset | 0;
33696 length = length | 0;
33697 var encrypted = 0;
33698 if (offset & 15) return -1;
33699 while ((length | 0) >= 16) {
33700 _encrypt(S0 ^ HEAP[offset], S1 ^ HEAP[offset | 1], S2 ^ HEAP[offset | 2], S3 ^ HEAP[offset | 3], S4 ^ HEAP[offset | 4], S5 ^ HEAP[offset | 5], S6 ^ HEAP[offset | 6], S7 ^ HEAP[offset | 7], S8 ^ HEAP[offset | 8], S9 ^ HEAP[offset | 9], SA ^ HEAP[offset | 10], SB ^ HEAP[offset | 11], SC ^ HEAP[offset | 12], SD ^ HEAP[offset | 13], SE ^ HEAP[offset | 14], SF ^ HEAP[offset | 15]);
33701 HEAP[offset] = S0;
33702 HEAP[offset | 1] = S1;
33703 HEAP[offset | 2] = S2;
33704 HEAP[offset | 3] = S3;
33705 HEAP[offset | 4] = S4;
33706 HEAP[offset | 5] = S5;
33707 HEAP[offset | 6] = S6;
33708 HEAP[offset | 7] = S7;
33709 HEAP[offset | 8] = S8;
33710 HEAP[offset | 9] = S9;
33711 HEAP[offset | 10] = SA;
33712 HEAP[offset | 11] = SB;
33713 HEAP[offset | 12] = SC;
33714 HEAP[offset | 13] = SD;
33715 HEAP[offset | 14] = SE;
33716 HEAP[offset | 15] = SF;
33717 offset = offset + 16 | 0;
33718 length = length - 16 | 0;
33719 encrypted = encrypted + 16 | 0;
33720 }
33721 return encrypted | 0;
33722 }
33723 function cbc_decrypt(offset, length) {
33724 offset = offset | 0;
33725 length = length | 0;
33726 var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, decrypted = 0;
33727 if (offset & 15) return -1;
33728 iv0 = S0;
33729 iv1 = S1;
33730 iv2 = S2;
33731 iv3 = S3;
33732 iv4 = S4;
33733 iv5 = S5;
33734 iv6 = S6;
33735 iv7 = S7;
33736 iv8 = S8;
33737 iv9 = S9;
33738 ivA = SA;
33739 ivB = SB;
33740 ivC = SC;
33741 ivD = SD;
33742 ivE = SE;
33743 ivF = SF;
33744 while ((length | 0) >= 16) {
33745 _decrypt(HEAP[offset] | 0, HEAP[offset | 1] | 0, HEAP[offset | 2] | 0, HEAP[offset | 3] | 0, HEAP[offset | 4] | 0, HEAP[offset | 5] | 0, HEAP[offset | 6] | 0, HEAP[offset | 7] | 0, HEAP[offset | 8] | 0, HEAP[offset | 9] | 0, HEAP[offset | 10] | 0, HEAP[offset | 11] | 0, HEAP[offset | 12] | 0, HEAP[offset | 13] | 0, HEAP[offset | 14] | 0, HEAP[offset | 15] | 0);
33746 S0 = S0 ^ iv0;
33747 iv0 = HEAP[offset] | 0;
33748 S1 = S1 ^ iv1;
33749 iv1 = HEAP[offset | 1] | 0;
33750 S2 = S2 ^ iv2;
33751 iv2 = HEAP[offset | 2] | 0;
33752 S3 = S3 ^ iv3;
33753 iv3 = HEAP[offset | 3] | 0;
33754 S4 = S4 ^ iv4;
33755 iv4 = HEAP[offset | 4] | 0;
33756 S5 = S5 ^ iv5;
33757 iv5 = HEAP[offset | 5] | 0;
33758 S6 = S6 ^ iv6;
33759 iv6 = HEAP[offset | 6] | 0;
33760 S7 = S7 ^ iv7;
33761 iv7 = HEAP[offset | 7] | 0;
33762 S8 = S8 ^ iv8;
33763 iv8 = HEAP[offset | 8] | 0;
33764 S9 = S9 ^ iv9;
33765 iv9 = HEAP[offset | 9] | 0;
33766 SA = SA ^ ivA;
33767 ivA = HEAP[offset | 10] | 0;
33768 SB = SB ^ ivB;
33769 ivB = HEAP[offset | 11] | 0;
33770 SC = SC ^ ivC;
33771 ivC = HEAP[offset | 12] | 0;
33772 SD = SD ^ ivD;
33773 ivD = HEAP[offset | 13] | 0;
33774 SE = SE ^ ivE;
33775 ivE = HEAP[offset | 14] | 0;
33776 SF = SF ^ ivF;
33777 ivF = HEAP[offset | 15] | 0;
33778 HEAP[offset] = S0;
33779 HEAP[offset | 1] = S1;
33780 HEAP[offset | 2] = S2;
33781 HEAP[offset | 3] = S3;
33782 HEAP[offset | 4] = S4;
33783 HEAP[offset | 5] = S5;
33784 HEAP[offset | 6] = S6;
33785 HEAP[offset | 7] = S7;
33786 HEAP[offset | 8] = S8;
33787 HEAP[offset | 9] = S9;
33788 HEAP[offset | 10] = SA;
33789 HEAP[offset | 11] = SB;
33790 HEAP[offset | 12] = SC;
33791 HEAP[offset | 13] = SD;
33792 HEAP[offset | 14] = SE;
33793 HEAP[offset | 15] = SF;
33794 offset = offset + 16 | 0;
33795 length = length - 16 | 0;
33796 decrypted = decrypted + 16 | 0;
33797 }
33798 S0 = iv0;
33799 S1 = iv1;
33800 S2 = iv2;
33801 S3 = iv3;
33802 S4 = iv4;
33803 S5 = iv5;
33804 S6 = iv6;
33805 S7 = iv7;
33806 S8 = iv8;
33807 S9 = iv9;
33808 SA = ivA;
33809 SB = ivB;
33810 SC = ivC;
33811 SD = ivD;
33812 SE = ivE;
33813 SF = ivF;
33814 return decrypted | 0;
33815 }
33816 function cbc_mac(offset, length, output) {
33817 offset = offset | 0;
33818 length = length | 0;
33819 output = output | 0;
33820 if (offset & 15) return -1;
33821 if (~output) if (output & 31) return -1;
33822 while ((length | 0) >= 16) {
33823 _encrypt(S0 ^ HEAP[offset], S1 ^ HEAP[offset | 1], S2 ^ HEAP[offset | 2], S3 ^ HEAP[offset | 3], S4 ^ HEAP[offset | 4], S5 ^ HEAP[offset | 5], S6 ^ HEAP[offset | 6], S7 ^ HEAP[offset | 7], S8 ^ HEAP[offset | 8], S9 ^ HEAP[offset | 9], SA ^ HEAP[offset | 10], SB ^ HEAP[offset | 11], SC ^ HEAP[offset | 12], SD ^ HEAP[offset | 13], SE ^ HEAP[offset | 14], SF ^ HEAP[offset | 15]);
33824 offset = offset + 16 | 0;
33825 length = length - 16 | 0;
33826 }
33827 if ((length | 0) > 0) {
33828 S0 = S0 ^ HEAP[offset];
33829 if ((length | 0) > 1) S1 = S1 ^ HEAP[offset | 1];
33830 if ((length | 0) > 2) S2 = S2 ^ HEAP[offset | 2];
33831 if ((length | 0) > 3) S3 = S3 ^ HEAP[offset | 3];
33832 if ((length | 0) > 4) S4 = S4 ^ HEAP[offset | 4];
33833 if ((length | 0) > 5) S5 = S5 ^ HEAP[offset | 5];
33834 if ((length | 0) > 6) S6 = S6 ^ HEAP[offset | 6];
33835 if ((length | 0) > 7) S7 = S7 ^ HEAP[offset | 7];
33836 if ((length | 0) > 8) S8 = S8 ^ HEAP[offset | 8];
33837 if ((length | 0) > 9) S9 = S9 ^ HEAP[offset | 9];
33838 if ((length | 0) > 10) SA = SA ^ HEAP[offset | 10];
33839 if ((length | 0) > 11) SB = SB ^ HEAP[offset | 11];
33840 if ((length | 0) > 12) SC = SC ^ HEAP[offset | 12];
33841 if ((length | 0) > 13) SD = SD ^ HEAP[offset | 13];
33842 if ((length | 0) > 14) SE = SE ^ HEAP[offset | 14];
33843 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
33844 offset = offset + length | 0;
33845 length = 0;
33846 }
33847 if (~output) {
33848 HEAP[output | 0] = S0;
33849 HEAP[output | 1] = S1;
33850 HEAP[output | 2] = S2;
33851 HEAP[output | 3] = S3;
33852 HEAP[output | 4] = S4;
33853 HEAP[output | 5] = S5;
33854 HEAP[output | 6] = S6;
33855 HEAP[output | 7] = S7;
33856 HEAP[output | 8] = S8;
33857 HEAP[output | 9] = S9;
33858 HEAP[output | 10] = SA;
33859 HEAP[output | 11] = SB;
33860 HEAP[output | 12] = SC;
33861 HEAP[output | 13] = SD;
33862 HEAP[output | 14] = SE;
33863 HEAP[output | 15] = SF;
33864 }
33865 return 0;
33866 }
33867 function ccm_encrypt(offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1) {
33868 offset = offset | 0;
33869 length = length | 0;
33870 nonce0 = nonce0 | 0;
33871 nonce1 = nonce1 | 0;
33872 nonce2 = nonce2 | 0;
33873 nonce3 = nonce3 | 0;
33874 nonce4 = nonce4 | 0;
33875 nonce5 = nonce5 | 0;
33876 nonce6 = nonce6 | 0;
33877 nonce7 = nonce7 | 0;
33878 nonce8 = nonce8 | 0;
33879 nonce9 = nonce9 | 0;
33880 nonceA = nonceA | 0;
33881 nonceB = nonceB | 0;
33882 nonceC = nonceC | 0;
33883 nonceD = nonceD | 0;
33884 counter0 = counter0 | 0;
33885 counter1 = counter1 | 0;
33886 var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, encrypted = 0;
33887 if (offset & 15) return -1;
33888 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
33889 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
33890 while ((length | 0) >= 16) {
33891 s0 = HEAP[offset] | 0;
33892 s1 = HEAP[offset | 1] | 0;
33893 s2 = HEAP[offset | 2] | 0;
33894 s3 = HEAP[offset | 3] | 0;
33895 s4 = HEAP[offset | 4] | 0;
33896 s5 = HEAP[offset | 5] | 0;
33897 s6 = HEAP[offset | 6] | 0;
33898 s7 = HEAP[offset | 7] | 0;
33899 s8 = HEAP[offset | 8] | 0;
33900 s9 = HEAP[offset | 9] | 0;
33901 sA = HEAP[offset | 10] | 0;
33902 sB = HEAP[offset | 11] | 0;
33903 sC = HEAP[offset | 12] | 0;
33904 sD = HEAP[offset | 13] | 0;
33905 sE = HEAP[offset | 14] | 0;
33906 sF = HEAP[offset | 15] | 0;
33907 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0 >>> 24, nonce9 ^ counter0 >>> 16 & 255, nonceA ^ counter0 >>> 8 & 255, nonceB ^ counter0 & 255, nonceC ^ counter1 >>> 24, nonceD ^ counter1 >>> 16 & 255, counter1 >>> 8 & 255, counter1 & 255);
33908 HEAP[offset] = s0 ^ S0;
33909 HEAP[offset | 1] = s1 ^ S1;
33910 HEAP[offset | 2] = s2 ^ S2;
33911 HEAP[offset | 3] = s3 ^ S3;
33912 HEAP[offset | 4] = s4 ^ S4;
33913 HEAP[offset | 5] = s5 ^ S5;
33914 HEAP[offset | 6] = s6 ^ S6;
33915 HEAP[offset | 7] = s7 ^ S7;
33916 HEAP[offset | 8] = s8 ^ S8;
33917 HEAP[offset | 9] = s9 ^ S9;
33918 HEAP[offset | 10] = sA ^ SA;
33919 HEAP[offset | 11] = sB ^ SB;
33920 HEAP[offset | 12] = sC ^ SC;
33921 HEAP[offset | 13] = sD ^ SD;
33922 HEAP[offset | 14] = sE ^ SE;
33923 HEAP[offset | 15] = sF ^ SF;
33924 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
33925 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
33926 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
33927 encrypted = encrypted + 16 | 0;
33928 offset = offset + 16 | 0;
33929 length = length - 16 | 0;
33930 counter1 = counter1 + 1 | 0;
33931 if ((counter1 | 0) == 0) counter0 = counter0 + 1 | 0;
33932 }
33933 if ((length | 0) > 0) {
33934 s0 = HEAP[offset] | 0;
33935 s1 = (length | 0) > 1 ? HEAP[offset | 1] | 0 : 0;
33936 s2 = (length | 0) > 2 ? HEAP[offset | 2] | 0 : 0;
33937 s3 = (length | 0) > 3 ? HEAP[offset | 3] | 0 : 0;
33938 s4 = (length | 0) > 4 ? HEAP[offset | 4] | 0 : 0;
33939 s5 = (length | 0) > 5 ? HEAP[offset | 5] | 0 : 0;
33940 s6 = (length | 0) > 6 ? HEAP[offset | 6] | 0 : 0;
33941 s7 = (length | 0) > 7 ? HEAP[offset | 7] | 0 : 0;
33942 s8 = (length | 0) > 8 ? HEAP[offset | 8] | 0 : 0;
33943 s9 = (length | 0) > 9 ? HEAP[offset | 9] | 0 : 0;
33944 sA = (length | 0) > 10 ? HEAP[offset | 10] | 0 : 0;
33945 sB = (length | 0) > 11 ? HEAP[offset | 11] | 0 : 0;
33946 sC = (length | 0) > 12 ? HEAP[offset | 12] | 0 : 0;
33947 sD = (length | 0) > 13 ? HEAP[offset | 13] | 0 : 0;
33948 sE = (length | 0) > 14 ? HEAP[offset | 14] | 0 : 0;
33949 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0 >>> 24, nonce9 ^ counter0 >>> 16 & 255, nonceA ^ counter0 >>> 8 & 255, nonceB ^ counter0 & 255, nonceC ^ counter1 >>> 24, nonceD ^ counter1 >>> 16 & 255, counter1 >>> 8 & 255, counter1 & 255);
33950 HEAP[offset] = s0 ^ S0;
33951 if ((length | 0) > 1) HEAP[offset | 1] = s1 ^ S1;
33952 if ((length | 0) > 2) HEAP[offset | 2] = s2 ^ S2;
33953 if ((length | 0) > 3) HEAP[offset | 3] = s3 ^ S3;
33954 if ((length | 0) > 4) HEAP[offset | 4] = s4 ^ S4;
33955 if ((length | 0) > 5) HEAP[offset | 5] = s5 ^ S5;
33956 if ((length | 0) > 6) HEAP[offset | 6] = s6 ^ S6;
33957 if ((length | 0) > 7) HEAP[offset | 7] = s7 ^ S7;
33958 if ((length | 0) > 8) HEAP[offset | 8] = s8 ^ S8;
33959 if ((length | 0) > 9) HEAP[offset | 9] = s9 ^ S9;
33960 if ((length | 0) > 10) HEAP[offset | 10] = sA ^ SA;
33961 if ((length | 0) > 11) HEAP[offset | 11] = sB ^ SB;
33962 if ((length | 0) > 12) HEAP[offset | 12] = sC ^ SC;
33963 if ((length | 0) > 13) HEAP[offset | 13] = sD ^ SD;
33964 if ((length | 0) > 14) HEAP[offset | 14] = sE ^ SE;
33965 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, ivF);
33966 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
33967 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
33968 encrypted = encrypted + length | 0;
33969 offset = offset + length | 0;
33970 length = 0;
33971 counter1 = counter1 + 1 | 0;
33972 if ((counter1 | 0) == 0) counter0 = counter0 + 1 | 0;
33973 }
33974 return encrypted | 0;
33975 }
33976 function ccm_decrypt(offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1) {
33977 offset = offset | 0;
33978 length = length | 0;
33979 nonce0 = nonce0 | 0;
33980 nonce1 = nonce1 | 0;
33981 nonce2 = nonce2 | 0;
33982 nonce3 = nonce3 | 0;
33983 nonce4 = nonce4 | 0;
33984 nonce5 = nonce5 | 0;
33985 nonce6 = nonce6 | 0;
33986 nonce7 = nonce7 | 0;
33987 nonce8 = nonce8 | 0;
33988 nonce9 = nonce9 | 0;
33989 nonceA = nonceA | 0;
33990 nonceB = nonceB | 0;
33991 nonceC = nonceC | 0;
33992 nonceD = nonceD | 0;
33993 counter0 = counter0 | 0;
33994 counter1 = counter1 | 0;
33995 var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0, s7 = 0, s8 = 0, s9 = 0, sA = 0, sB = 0, sC = 0, sD = 0, sE = 0, sF = 0, decrypted = 0;
33996 if (offset & 15) return -1;
33997 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
33998 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
33999 while ((length | 0) >= 16) {
34000 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0 >>> 24, nonce9 ^ counter0 >>> 16 & 255, nonceA ^ counter0 >>> 8 & 255, nonceB ^ counter0 & 255, nonceC ^ counter1 >>> 24, nonceD ^ counter1 >>> 16 & 255, counter1 >>> 8 & 255, counter1 & 255);
34001 HEAP[offset] = s0 = HEAP[offset] ^ S0;
34002 HEAP[offset | 1] = s1 = HEAP[offset | 1] ^ S1;
34003 HEAP[offset | 2] = s2 = HEAP[offset | 2] ^ S2;
34004 HEAP[offset | 3] = s3 = HEAP[offset | 3] ^ S3;
34005 HEAP[offset | 4] = s4 = HEAP[offset | 4] ^ S4;
34006 HEAP[offset | 5] = s5 = HEAP[offset | 5] ^ S5;
34007 HEAP[offset | 6] = s6 = HEAP[offset | 6] ^ S6;
34008 HEAP[offset | 7] = s7 = HEAP[offset | 7] ^ S7;
34009 HEAP[offset | 8] = s8 = HEAP[offset | 8] ^ S8;
34010 HEAP[offset | 9] = s9 = HEAP[offset | 9] ^ S9;
34011 HEAP[offset | 10] = sA = HEAP[offset | 10] ^ SA;
34012 HEAP[offset | 11] = sB = HEAP[offset | 11] ^ SB;
34013 HEAP[offset | 12] = sC = HEAP[offset | 12] ^ SC;
34014 HEAP[offset | 13] = sD = HEAP[offset | 13] ^ SD;
34015 HEAP[offset | 14] = sE = HEAP[offset | 14] ^ SE;
34016 HEAP[offset | 15] = sF = HEAP[offset | 15] ^ SF;
34017 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
34018 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
34019 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
34020 decrypted = decrypted + 16 | 0;
34021 offset = offset + 16 | 0;
34022 length = length - 16 | 0;
34023 counter1 = counter1 + 1 | 0;
34024 if ((counter1 | 0) == 0) counter0 = counter0 + 1 | 0;
34025 }
34026 if ((length | 0) > 0) {
34027 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0 >>> 24, nonce9 ^ counter0 >>> 16 & 255, nonceA ^ counter0 >>> 8 & 255, nonceB ^ counter0 & 255, nonceC ^ counter1 >>> 24, nonceD ^ counter1 >>> 16 & 255, counter1 >>> 8 & 255, counter1 & 255);
34028 s0 = HEAP[offset] ^ S0;
34029 s1 = (length | 0) > 1 ? HEAP[offset | 1] ^ S1 : 0;
34030 s2 = (length | 0) > 2 ? HEAP[offset | 2] ^ S2 : 0;
34031 s3 = (length | 0) > 3 ? HEAP[offset | 3] ^ S3 : 0;
34032 s4 = (length | 0) > 4 ? HEAP[offset | 4] ^ S4 : 0;
34033 s5 = (length | 0) > 5 ? HEAP[offset | 5] ^ S5 : 0;
34034 s6 = (length | 0) > 6 ? HEAP[offset | 6] ^ S6 : 0;
34035 s7 = (length | 0) > 7 ? HEAP[offset | 7] ^ S7 : 0;
34036 s8 = (length | 0) > 8 ? HEAP[offset | 8] ^ S8 : 0;
34037 s9 = (length | 0) > 9 ? HEAP[offset | 9] ^ S9 : 0;
34038 sA = (length | 0) > 10 ? HEAP[offset | 10] ^ SA : 0;
34039 sB = (length | 0) > 11 ? HEAP[offset | 11] ^ SB : 0;
34040 sC = (length | 0) > 12 ? HEAP[offset | 12] ^ SC : 0;
34041 sD = (length | 0) > 13 ? HEAP[offset | 13] ^ SD : 0;
34042 sE = (length | 0) > 14 ? HEAP[offset | 14] ^ SE : 0;
34043 sF = (length | 0) > 15 ? HEAP[offset | 15] ^ SF : 0;
34044 HEAP[offset] = s0;
34045 if ((length | 0) > 1) HEAP[offset | 1] = s1;
34046 if ((length | 0) > 2) HEAP[offset | 2] = s2;
34047 if ((length | 0) > 3) HEAP[offset | 3] = s3;
34048 if ((length | 0) > 4) HEAP[offset | 4] = s4;
34049 if ((length | 0) > 5) HEAP[offset | 5] = s5;
34050 if ((length | 0) > 6) HEAP[offset | 6] = s6;
34051 if ((length | 0) > 7) HEAP[offset | 7] = s7;
34052 if ((length | 0) > 8) HEAP[offset | 8] = s8;
34053 if ((length | 0) > 9) HEAP[offset | 9] = s9;
34054 if ((length | 0) > 10) HEAP[offset | 10] = sA;
34055 if ((length | 0) > 11) HEAP[offset | 11] = sB;
34056 if ((length | 0) > 12) HEAP[offset | 12] = sC;
34057 if ((length | 0) > 13) HEAP[offset | 13] = sD;
34058 if ((length | 0) > 14) HEAP[offset | 14] = sE;
34059 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
34060 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
34061 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
34062 decrypted = decrypted + length | 0;
34063 offset = offset + length | 0;
34064 length = 0;
34065 counter1 = counter1 + 1 | 0;
34066 if ((counter1 | 0) == 0) counter0 = counter0 + 1 | 0;
34067 }
34068 return decrypted | 0;
34069 }
34070 function cfb_encrypt(offset, length) {
34071 offset = offset | 0;
34072 length = length | 0;
34073 var encrypted = 0;
34074 if (offset & 15) return -1;
34075 while ((length | 0) >= 16) {
34076 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
34077 S0 = S0 ^ HEAP[offset];
34078 S1 = S1 ^ HEAP[offset | 1];
34079 S2 = S2 ^ HEAP[offset | 2];
34080 S3 = S3 ^ HEAP[offset | 3];
34081 S4 = S4 ^ HEAP[offset | 4];
34082 S5 = S5 ^ HEAP[offset | 5];
34083 S6 = S6 ^ HEAP[offset | 6];
34084 S7 = S7 ^ HEAP[offset | 7];
34085 S8 = S8 ^ HEAP[offset | 8];
34086 S9 = S9 ^ HEAP[offset | 9];
34087 SA = SA ^ HEAP[offset | 10];
34088 SB = SB ^ HEAP[offset | 11];
34089 SC = SC ^ HEAP[offset | 12];
34090 SD = SD ^ HEAP[offset | 13];
34091 SE = SE ^ HEAP[offset | 14];
34092 SF = SF ^ HEAP[offset | 15];
34093 HEAP[offset] = S0;
34094 HEAP[offset | 1] = S1;
34095 HEAP[offset | 2] = S2;
34096 HEAP[offset | 3] = S3;
34097 HEAP[offset | 4] = S4;
34098 HEAP[offset | 5] = S5;
34099 HEAP[offset | 6] = S6;
34100 HEAP[offset | 7] = S7;
34101 HEAP[offset | 8] = S8;
34102 HEAP[offset | 9] = S9;
34103 HEAP[offset | 10] = SA;
34104 HEAP[offset | 11] = SB;
34105 HEAP[offset | 12] = SC;
34106 HEAP[offset | 13] = SD;
34107 HEAP[offset | 14] = SE;
34108 HEAP[offset | 15] = SF;
34109 offset = offset + 16 | 0;
34110 length = length - 16 | 0;
34111 encrypted = encrypted + 16 | 0;
34112 }
34113 if ((length | 0) > 0) {
34114 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
34115 HEAP[offset] = HEAP[offset] ^ S0;
34116 if ((length | 0) > 1) HEAP[offset | 1] = HEAP[offset | 1] ^ S1;
34117 if ((length | 0) > 2) HEAP[offset | 2] = HEAP[offset | 2] ^ S2;
34118 if ((length | 0) > 3) HEAP[offset | 3] = HEAP[offset | 3] ^ S3;
34119 if ((length | 0) > 4) HEAP[offset | 4] = HEAP[offset | 4] ^ S4;
34120 if ((length | 0) > 5) HEAP[offset | 5] = HEAP[offset | 5] ^ S5;
34121 if ((length | 0) > 6) HEAP[offset | 6] = HEAP[offset | 6] ^ S6;
34122 if ((length | 0) > 7) HEAP[offset | 7] = HEAP[offset | 7] ^ S7;
34123 if ((length | 0) > 8) HEAP[offset | 8] = HEAP[offset | 8] ^ S8;
34124 if ((length | 0) > 9) HEAP[offset | 9] = HEAP[offset | 9] ^ S9;
34125 if ((length | 0) > 10) HEAP[offset | 10] = HEAP[offset | 10] ^ SA;
34126 if ((length | 0) > 11) HEAP[offset | 11] = HEAP[offset | 11] ^ SB;
34127 if ((length | 0) > 12) HEAP[offset | 12] = HEAP[offset | 12] ^ SC;
34128 if ((length | 0) > 13) HEAP[offset | 13] = HEAP[offset | 13] ^ SD;
34129 if ((length | 0) > 14) HEAP[offset | 14] = HEAP[offset | 14] ^ SE;
34130 encrypted = encrypted + length | 0;
34131 offset = offset + length | 0;
34132 length = 0;
34133 }
34134 return encrypted | 0;
34135 }
34136 function cfb_decrypt(offset, length) {
34137 offset = offset | 0;
34138 length = length | 0;
34139 var iv0 = 0, iv1 = 0, iv2 = 0, iv3 = 0, iv4 = 0, iv5 = 0, iv6 = 0, iv7 = 0, iv8 = 0, iv9 = 0, ivA = 0, ivB = 0, ivC = 0, ivD = 0, ivE = 0, ivF = 0, decrypted = 0;
34140 if (offset & 15) return -1;
34141 while ((length | 0) >= 16) {
34142 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
34143 iv0 = HEAP[offset] | 0;
34144 iv1 = HEAP[offset | 1] | 0;
34145 iv2 = HEAP[offset | 2] | 0;
34146 iv3 = HEAP[offset | 3] | 0;
34147 iv4 = HEAP[offset | 4] | 0;
34148 iv5 = HEAP[offset | 5] | 0;
34149 iv6 = HEAP[offset | 6] | 0;
34150 iv7 = HEAP[offset | 7] | 0;
34151 iv8 = HEAP[offset | 8] | 0;
34152 iv9 = HEAP[offset | 9] | 0;
34153 ivA = HEAP[offset | 10] | 0;
34154 ivB = HEAP[offset | 11] | 0;
34155 ivC = HEAP[offset | 12] | 0;
34156 ivD = HEAP[offset | 13] | 0;
34157 ivE = HEAP[offset | 14] | 0;
34158 ivF = HEAP[offset | 15] | 0;
34159 HEAP[offset] = S0 ^ iv0;
34160 HEAP[offset | 1] = S1 ^ iv1;
34161 HEAP[offset | 2] = S2 ^ iv2;
34162 HEAP[offset | 3] = S3 ^ iv3;
34163 HEAP[offset | 4] = S4 ^ iv4;
34164 HEAP[offset | 5] = S5 ^ iv5;
34165 HEAP[offset | 6] = S6 ^ iv6;
34166 HEAP[offset | 7] = S7 ^ iv7;
34167 HEAP[offset | 8] = S8 ^ iv8;
34168 HEAP[offset | 9] = S9 ^ iv9;
34169 HEAP[offset | 10] = SA ^ ivA;
34170 HEAP[offset | 11] = SB ^ ivB;
34171 HEAP[offset | 12] = SC ^ ivC;
34172 HEAP[offset | 13] = SD ^ ivD;
34173 HEAP[offset | 14] = SE ^ ivE;
34174 HEAP[offset | 15] = SF ^ ivF;
34175 S0 = iv0;
34176 S1 = iv1;
34177 S2 = iv2;
34178 S3 = iv3;
34179 S4 = iv4;
34180 S5 = iv5;
34181 S6 = iv6;
34182 S7 = iv7;
34183 S8 = iv8;
34184 S9 = iv9;
34185 SA = ivA;
34186 SB = ivB;
34187 SC = ivC;
34188 SD = ivD;
34189 SE = ivE;
34190 SF = ivF;
34191 offset = offset + 16 | 0;
34192 length = length - 16 | 0;
34193 decrypted = decrypted + 16 | 0;
34194 }
34195 if ((length | 0) > 0) {
34196 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
34197 HEAP[offset] = HEAP[offset] ^ S0;
34198 if ((length | 0) > 1) HEAP[offset | 1] = HEAP[offset | 1] ^ S1;
34199 if ((length | 0) > 2) HEAP[offset | 2] = HEAP[offset | 2] ^ S2;
34200 if ((length | 0) > 3) HEAP[offset | 3] = HEAP[offset | 3] ^ S3;
34201 if ((length | 0) > 4) HEAP[offset | 4] = HEAP[offset | 4] ^ S4;
34202 if ((length | 0) > 5) HEAP[offset | 5] = HEAP[offset | 5] ^ S5;
34203 if ((length | 0) > 6) HEAP[offset | 6] = HEAP[offset | 6] ^ S6;
34204 if ((length | 0) > 7) HEAP[offset | 7] = HEAP[offset | 7] ^ S7;
34205 if ((length | 0) > 8) HEAP[offset | 8] = HEAP[offset | 8] ^ S8;
34206 if ((length | 0) > 9) HEAP[offset | 9] = HEAP[offset | 9] ^ S9;
34207 if ((length | 0) > 10) HEAP[offset | 10] = HEAP[offset | 10] ^ SA;
34208 if ((length | 0) > 11) HEAP[offset | 11] = HEAP[offset | 11] ^ SB;
34209 if ((length | 0) > 12) HEAP[offset | 12] = HEAP[offset | 12] ^ SC;
34210 if ((length | 0) > 13) HEAP[offset | 13] = HEAP[offset | 13] ^ SD;
34211 if ((length | 0) > 14) HEAP[offset | 14] = HEAP[offset | 14] ^ SE;
34212 decrypted = decrypted + length | 0;
34213 offset = offset + length | 0;
34214 length = 0;
34215 }
34216 return decrypted | 0;
34217 }
34218 return {
34219 init_state: init_state,
34220 save_state: save_state,
34221 init_key_128: init_key_128,
34222 init_key_256: init_key_256,
34223 cbc_encrypt: cbc_encrypt,
34224 cbc_decrypt: cbc_decrypt,
34225 cbc_mac: cbc_mac,
34226 ccm_encrypt: ccm_encrypt,
34227 ccm_decrypt: ccm_decrypt,
34228 cfb_encrypt: cfb_encrypt,
34229 cfb_decrypt: cfb_decrypt
34230 };
34231 }
34232 function aes_asm(stdlib, foreign, buffer) {
34233 var heap = new Uint8Array(buffer);
34234 heap.set(_aes_tables);
34235 return _aes_asm(stdlib, foreign, buffer);
34236 }
34237 var _aes_block_size = 16;
34238 function _aes_constructor(options) {
34239 options = options || {};
34240 options.heapSize = options.heapSize || 4096;
34241 if (options.heapSize <= 0 || options.heapSize % 4096) throw new IllegalArgumentError("heapSize must be a positive number and multiple of 4096");
34242 this.BLOCK_SIZE = _aes_block_size;
34243 this.heap = options.heap || new Uint8Array(options.heapSize);
34244 this.asm = options.asm || aes_asm(global, null, this.heap.buffer);
34245 this.pos = _aes_heap_start;
34246 this.len = 0;
34247 this.key = null;
34248 this.result = null;
34249 this.reset(options);
34250 }
34251 function _aes_reset(options) {
34252 options = options || {};
34253 this.result = null;
34254 this.pos = _aes_heap_start;
34255 this.len = 0;
34256 var asm = this.asm;
34257 var key = options.key;
34258 if (key !== undefined) {
34259 if (is_buffer(key) || is_bytes(key)) {
34260 key = new Uint8Array(key);
34261 } else if (is_string(key)) {
34262 var str = key;
34263 key = new Uint8Array(str.length);
34264 for (var i = 0; i < str.length; ++i) key[i] = str.charCodeAt(i);
34265 } else {
34266 throw new TypeError("unexpected key type");
34267 }
34268 if (key.length === 16) {
34269 this.key = key;
34270 asm.init_key_128.call(asm, key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7], key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15]);
34271 } else if (key.length === 24) {
34272 throw new IllegalArgumentError("illegal key size");
34273 } else if (key.length === 32) {
34274 this.key = key;
34275 asm.init_key_256.call(asm, key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7], key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15], key[16], key[17], key[18], key[19], key[20], key[21], key[22], key[23], key[24], key[25], key[26], key[27], key[28], key[29], key[30], key[31]);
34276 } else {
34277 throw new IllegalArgumentError("illegal key size");
34278 }
34279 }
34280 return this;
34281 }
34282 function _aes_init_iv(iv) {
34283 var asm = this.asm;
34284 if (iv !== undefined) {
34285 if (is_buffer(iv) || is_bytes(iv)) {
34286 iv = new Uint8Array(iv);
34287 } else if (is_string(iv)) {
34288 var str = iv;
34289 iv = new Uint8Array(str.length);
34290 for (var i = 0; i < str.length; ++i) iv[i] = str.charCodeAt(i);
34291 } else {
34292 throw new TypeError("unexpected iv type");
34293 }
34294 if (iv.length !== _aes_block_size) throw new IllegalArgumentError("illegal iv size");
34295 this.iv = iv;
34296 asm.init_state.call(asm, iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7], iv[8], iv[9], iv[10], iv[11], iv[12], iv[13], iv[14], iv[15]);
34297 } else {
34298 this.iv = null;
34299 asm.init_state.call(asm, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
34300 }
34301 }
34302 function _aes_heap_write(heap, hpos, data, dpos, dlen) {
34303 var hlen = heap.byteLength - hpos, wlen = hlen < dlen ? hlen : dlen;
34304 if (is_buffer(data) || is_bytes(data)) {
34305 heap.set(new Uint8Array(data.buffer || data, dpos, wlen), hpos);
34306 } else if (is_string(data)) {
34307 for (var i = 0; i < wlen; ++i) heap[hpos + i] = data.charCodeAt(dpos + i);
34308 } else {
34309 throw new TypeError("unexpected data type");
34310 }
34311 return wlen;
34312 }
34313 function cbc_aes_constructor(options) {
34314 this.padding = true;
34315 this.mode = "cbc";
34316 this.iv = null;
34317 _aes_constructor.call(this, options);
34318 }
34319 function cbc_aes_encrypt_constructor(options) {
34320 cbc_aes_constructor.call(this, options);
34321 }
34322 function cbc_aes_decrypt_constructor(options) {
34323 cbc_aes_constructor.call(this, options);
34324 }
34325 function cbc_aes_reset(options) {
34326 options = options || {};
34327 _aes_reset.call(this, options);
34328 var padding = options.padding;
34329 if (padding !== undefined) {
34330 this.padding = !!padding;
34331 } else {
34332 this.padding = true;
34333 }
34334 _aes_init_iv.call(this, options.iv);
34335 return this;
34336 }
34337 function cbc_aes_encrypt_process(data) {
34338 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34339 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34340 var result = new Uint8Array(rlen);
34341 while (dlen > 0) {
34342 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34343 len += wlen;
34344 dpos += wlen;
34345 dlen -= wlen;
34346 wlen = asm.cbc_encrypt(pos, len);
34347 result.set(heap.subarray(pos, pos + wlen), rpos);
34348 rpos += wlen;
34349 if (wlen < len) {
34350 pos += wlen;
34351 len -= wlen;
34352 } else {
34353 pos = _aes_heap_start;
34354 len = 0;
34355 }
34356 }
34357 this.result = result;
34358 this.pos = pos;
34359 this.len = len;
34360 return this;
34361 }
34362 function cbc_aes_encrypt_finish() {
34363 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34364 var asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len, rlen = _aes_block_size * Math.ceil(len / _aes_block_size);
34365 if (len % _aes_block_size === 0) {
34366 if (padding) rlen += _aes_block_size;
34367 } else if (!padding) {
34368 throw new IllegalArgumentError("data length must be a multiple of " + _aes_block_size);
34369 }
34370 var result = new Uint8Array(rlen);
34371 if (len < rlen) {
34372 var plen = _aes_block_size - len % _aes_block_size;
34373 for (var p = 0; p < plen; ++p) heap[pos + len + p] = plen;
34374 len += plen;
34375 }
34376 asm.cbc_encrypt(pos, len);
34377 result.set(heap.subarray(pos, pos + len));
34378 this.result = result;
34379 this.pos = _aes_heap_start;
34380 this.len = 0;
34381 return this;
34382 }
34383 function cbc_aes_encrypt(data) {
34384 var result1 = cbc_aes_encrypt_process.call(this, data).result, result2 = cbc_aes_encrypt_finish.call(this).result, result;
34385 result = new Uint8Array(result1.length + result2.length);
34386 result.set(result1);
34387 result.set(result2, result1.length);
34388 this.result = result;
34389 return this;
34390 }
34391 function cbc_aes_decrypt_process(data) {
34392 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34393 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34394 var result = new Uint8Array(rlen);
34395 while (dlen > 0) {
34396 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34397 len += wlen;
34398 dpos += wlen;
34399 dlen -= wlen;
34400 wlen = asm.cbc_decrypt(pos, len - (padding && dlen === 0 && len % _aes_block_size === 0 ? _aes_block_size : 0));
34401 result.set(heap.subarray(pos, pos + wlen), rpos);
34402 rpos += wlen;
34403 if (wlen < len) {
34404 pos += wlen;
34405 len -= wlen;
34406 } else {
34407 pos = _aes_heap_start;
34408 len = 0;
34409 }
34410 }
34411 this.result = result.subarray(0, rpos);
34412 this.pos = pos;
34413 this.len = len;
34414 return this;
34415 }
34416 function cbc_aes_decrypt_finish() {
34417 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34418 var asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len;
34419 if (len === 0) {
34420 if (!padding) {
34421 this.result = new Uint8Array(0);
34422 this.pos = _aes_heap_start;
34423 this.len = 0;
34424 return this;
34425 } else {
34426 throw new IllegalStateError("padding not found");
34427 }
34428 }
34429 if (len % _aes_block_size !== 0) throw new IllegalArgumentError("data length must be a multiple of " + _aes_block_size);
34430 var result = new Uint8Array(len);
34431 asm.cbc_decrypt(pos, len);
34432 result.set(heap.subarray(pos, pos + len));
34433 if (padding) {
34434 var pad = result[len - 1];
34435 result = result.subarray(0, len - pad);
34436 }
34437 this.result = result;
34438 this.pos = _aes_heap_start;
34439 this.len = 0;
34440 return this;
34441 }
34442 function cbc_aes_decrypt(data) {
34443 var result1 = cbc_aes_decrypt_process.call(this, data).result, result2 = cbc_aes_decrypt_finish.call(this).result, result;
34444 result = new Uint8Array(result1.length + result2.length);
34445 result.set(result1);
34446 result.set(result2, result1.length);
34447 this.result = result;
34448 return this;
34449 }
34450 var cbc_aes_encrypt_prototype = cbc_aes_encrypt_constructor.prototype;
34451 cbc_aes_encrypt_prototype.reset = cbc_aes_reset;
34452 cbc_aes_encrypt_prototype.process = cbc_aes_encrypt_process;
34453 cbc_aes_encrypt_prototype.finish = cbc_aes_encrypt_finish;
34454 var cbc_aes_decrypt_prototype = cbc_aes_decrypt_constructor.prototype;
34455 cbc_aes_decrypt_prototype.reset = cbc_aes_reset;
34456 cbc_aes_decrypt_prototype.process = cbc_aes_decrypt_process;
34457 cbc_aes_decrypt_prototype.finish = cbc_aes_decrypt_finish;
34458 var cbc_aes_prototype = cbc_aes_constructor.prototype;
34459 cbc_aes_prototype.reset = cbc_aes_reset;
34460 cbc_aes_prototype.encrypt = cbc_aes_encrypt;
34461 cbc_aes_prototype.decrypt = cbc_aes_decrypt;
34462 function _cbc_mac_process(data) {
34463 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, wlen = 0;
34464 while (dlen > 0) {
34465 wlen = _aes_heap_write(this.heap, _aes_heap_start, data, dpos, dlen);
34466 this.asm.cbc_mac(_aes_heap_start, wlen, -1);
34467 dpos += wlen;
34468 dlen -= wlen;
34469 }
34470 }
34471 var _ccm_adata_maxLength = 65279, _ccm_data_maxLength = 68719476720;
34472 function ccm_aes_constructor(options) {
34473 this.padding = false;
34474 this.mode = "ccm";
34475 this.tagSize = _aes_block_size;
34476 this.lengthSize = 4;
34477 this.nonce = null;
34478 this.adata = null;
34479 this.iv = null;
34480 this.dataLength = -1;
34481 this.dataLeft = -1;
34482 this.counter = 1;
34483 _aes_constructor.call(this, options);
34484 }
34485 function ccm_aes_encrypt_constructor(options) {
34486 ccm_aes_constructor.call(this, options);
34487 }
34488 function ccm_aes_decrypt_constructor(options) {
34489 ccm_aes_constructor.call(this, options);
34490 }
34491 function _ccm_calculate_iv() {
34492 var nonce = this.nonce, adata = this.adata, tagSize = this.tagSize, lengthSize = this.lengthSize, dataLength = this.dataLength;
34493 var data = new Uint8Array(_aes_block_size + (adata ? 2 + adata.byteLength : 0));
34494 data[0] = (adata ? 64 : 0) | tagSize - 2 << 2 | lengthSize - 1;
34495 data.set(nonce, 1);
34496 if (lengthSize > 4) data[11] = (dataLength - (dataLength >>> 0)) / 4294967296 & 15;
34497 if (lengthSize > 3) data[12] = dataLength >>> 24;
34498 if (lengthSize > 2) data[13] = dataLength >>> 16 & 255;
34499 data[14] = dataLength >>> 8 & 255;
34500 data[15] = dataLength & 255;
34501 if (adata) {
34502 data[16] = adata.byteLength >>> 8 & 255;
34503 data[17] = adata.byteLength & 255;
34504 data.set(adata, 18);
34505 }
34506 _cbc_mac_process.call(this, data);
34507 this.asm.save_state(_aes_heap_start);
34508 this.iv = new Uint8Array(this.heap.subarray(_aes_heap_start, _aes_heap_start + _aes_block_size));
34509 }
34510 function ccm_aes_reset(options) {
34511 options = options || {};
34512 _aes_reset.call(this, options);
34513 _aes_init_iv.call(this, options.iv);
34514 var tagSize = options.tagSize;
34515 if (tagSize !== undefined) {
34516 if (!is_number(tagSize)) throw new TypeError("tagSize must be a number");
34517 if (tagSize < 4 || tagSize > 16 || tagSize & 1) throw new IllegalArgumentError("illegal tagSize value");
34518 this.tagSize = tagSize;
34519 } else {
34520 this.tagSize = _aes_block_size;
34521 }
34522 var lengthSize = options.lengthSize, nonce = options.nonce;
34523 if (nonce !== undefined) {
34524 if (is_buffer(nonce) || is_bytes(nonce)) {
34525 nonce = new Uint8Array(nonce);
34526 } else if (is_string(nonce)) {
34527 var str = nonce;
34528 nonce = new Uint8Array(str.length);
34529 for (var i = 0; i < str.length; ++i) nonce[i] = str.charCodeAt(i);
34530 } else {
34531 throw new TypeError("unexpected nonce type");
34532 }
34533 if (nonce.length < 10 || nonce.length > 13) throw new IllegalArgumentError("illegal nonce length");
34534 lengthSize = lengthSize || 15 - nonce.length;
34535 this.nonce = nonce;
34536 } else {
34537 this.nonce = null;
34538 }
34539 if (lengthSize !== undefined) {
34540 if (!is_number(lengthSize)) throw new TypeError("lengthSize must be a number");
34541 if (lengthSize < 2 || lengthSize > 5 || nonce.length + lengthSize !== 15) throw new IllegalArgumentError("illegal lengthSize value");
34542 this.lengthSize = lengthSize;
34543 } else {
34544 this.lengthSize = lengthSize = 4;
34545 }
34546 var iv = this.iv;
34547 var counter = options.counter;
34548 if (counter !== undefined) {
34549 if (iv === null) throw new IllegalStateError("iv is also required");
34550 if (!is_number(counter)) throw new TypeError("counter must be a number");
34551 this.counter = counter;
34552 } else {
34553 this.counter = 1;
34554 }
34555 var dataLength = options.dataLength;
34556 if (dataLength !== undefined) {
34557 if (!is_number(dataLength)) throw new TypeError("dataLength must be a number");
34558 if (dataLength < 0 || dataLength > _ccm_data_maxLength || dataLength > Math.pow(2, 8 * lengthSize) - 1) throw new IllegalArgumentError("illegal dataLength value");
34559 this.dataLength = dataLength;
34560 var dataLeft = options.dataLeft || dataLength;
34561 if (!is_number(dataLeft)) throw new TypeError("dataLeft must be a number");
34562 if (dataLeft < 0 || dataLeft > dataLength) throw new IllegalArgumentError("illegal dataLeft value");
34563 this.dataLeft = dataLeft;
34564 } else {
34565 this.dataLength = dataLength = -1;
34566 this.dataLeft = dataLength;
34567 }
34568 var adata = options.adata;
34569 if (adata !== undefined) {
34570 if (iv !== null) throw new IllegalStateError("you must specify either adata or iv, not both");
34571 if (is_buffer(adata) || is_bytes(adata)) {
34572 adata = new Uint8Array(adata);
34573 } else if (is_string(adata)) {
34574 var str = adata;
34575 adata = new Uint8Array(str.length);
34576 for (var i = 0; i < str.length; ++i) adata[i] = str.charCodeAt(i);
34577 } else {
34578 throw new TypeError("unexpected adata type");
34579 }
34580 if (adata.byteLength === 0 || adata.byteLength > _ccm_adata_maxLength) throw new IllegalArgumentError("illegal adata length");
34581 this.adata = adata;
34582 this.counter = 1;
34583 } else {
34584 this.adata = adata = null;
34585 }
34586 if (dataLength !== -1) _ccm_calculate_iv.call(this);
34587 return this;
34588 }
34589 function ccm_aes_encrypt_process(data) {
34590 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34591 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34592 if ((counter - 1 << 4) + len + dlen > _ccm_data_maxLength) throw new RangeError("counter overflow");
34593 var result = new Uint8Array(rlen);
34594 var asm_args = [ 0, 0, this.lengthSize - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
34595 for (var i = 0; i < nonce.length; i++) asm_args[3 + i] = nonce[i];
34596 while (dlen > 0) {
34597 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34598 len += wlen;
34599 dpos += wlen;
34600 dlen -= wlen;
34601 asm_args[0] = pos;
34602 asm_args[1] = len & ~15;
34603 asm_args[16] = counter / 4294967296 >>> 0;
34604 asm_args[17] = counter >>> 0;
34605 wlen = asm.ccm_encrypt.apply(asm, asm_args);
34606 result.set(heap.subarray(pos, pos + wlen), rpos);
34607 counter += wlen >>> 4;
34608 rpos += wlen;
34609 if (wlen < len) {
34610 pos += wlen;
34611 len -= wlen;
34612 } else {
34613 pos = _aes_heap_start;
34614 len = 0;
34615 }
34616 }
34617 this.result = result;
34618 this.counter = counter;
34619 this.pos = pos;
34620 this.len = len;
34621 return this;
34622 }
34623 function ccm_aes_encrypt_finish() {
34624 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34625 var asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, wlen = 0;
34626 var result = new Uint8Array(len + tagSize);
34627 var asm_args = [ 0, 0, this.lengthSize - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
34628 for (var i = 0; i < nonce.length; i++) asm_args[3 + i] = nonce[i];
34629 asm_args[0] = pos;
34630 asm_args[1] = len;
34631 asm_args[16] = counter / 4294967296 >>> 0;
34632 asm_args[17] = counter >>> 0;
34633 wlen = asm.ccm_encrypt.apply(asm, asm_args);
34634 result.set(heap.subarray(pos, pos + wlen));
34635 counter = 1;
34636 pos = _aes_heap_start;
34637 len = 0;
34638 asm.save_state(_aes_heap_start);
34639 asm_args[0] = _aes_heap_start, asm_args[1] = _aes_block_size, asm_args[16] = 0;
34640 asm_args[17] = 0;
34641 asm.ccm_encrypt.apply(asm, asm_args);
34642 result.set(heap.subarray(_aes_heap_start, _aes_heap_start + tagSize), wlen);
34643 this.result = result;
34644 this.counter = counter;
34645 this.pos = pos;
34646 this.len = len;
34647 return this;
34648 }
34649 function ccm_aes_encrypt(data) {
34650 this.dataLength = this.dataLeft = data.byteLength || data.length || 0;
34651 var result1 = ccm_aes_encrypt_process.call(this, data).result, result2 = ccm_aes_encrypt_finish.call(this).result, result;
34652 result = new Uint8Array(result1.length + result2.length);
34653 result.set(result1);
34654 result.set(result2, result1.length);
34655 this.result = result;
34656 return this;
34657 }
34658 function ccm_aes_decrypt_process(data) {
34659 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34660 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34661 if ((counter - 1 << 4) + len + dlen > _ccm_data_maxLength) throw new RangeError("counter overflow");
34662 var result = new Uint8Array(rlen);
34663 var asm_args = [ 0, 0, this.lengthSize - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
34664 for (var i = 0; i < nonce.length; i++) asm_args[3 + i] = nonce[i];
34665 while (dlen > 0) {
34666 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34667 len += wlen;
34668 dpos += wlen;
34669 dlen -= wlen;
34670 asm_args[0] = pos;
34671 asm_args[1] = len + dlen - tagSize >= _aes_block_size ? dlen >= tagSize ? len & ~15 : len + dlen - tagSize & ~15 : 0;
34672 asm_args[16] = counter / 4294967296 >>> 0;
34673 asm_args[17] = counter >>> 0;
34674 wlen = asm.ccm_decrypt.apply(asm, asm_args);
34675 result.set(heap.subarray(pos, pos + wlen), rpos);
34676 counter += wlen >>> 4;
34677 rpos += wlen;
34678 if (wlen < len) {
34679 pos += wlen;
34680 len -= wlen;
34681 } else {
34682 pos = _aes_heap_start;
34683 len = 0;
34684 }
34685 }
34686 this.result = result.subarray(0, rpos);
34687 this.counter = counter;
34688 this.pos = pos;
34689 this.len = len;
34690 return this;
34691 }
34692 function ccm_aes_decrypt_finish() {
34693 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34694 var asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, rlen = len - tagSize, wlen = 0;
34695 if (len < tagSize) throw new IllegalStateError("authentication tag not found");
34696 var result = new Uint8Array(rlen), atag = new Uint8Array(heap.subarray(pos + rlen, pos + len));
34697 var asm_args = [ 0, 0, this.lengthSize - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
34698 for (var i = 0; i < nonce.length; i++) asm_args[3 + i] = nonce[i];
34699 asm_args[0] = pos;
34700 asm_args[1] = rlen;
34701 asm_args[16] = counter / 4294967296 >>> 0;
34702 asm_args[17] = counter >>> 0;
34703 wlen = asm.ccm_decrypt.apply(asm, asm_args);
34704 result.set(heap.subarray(pos, pos + wlen));
34705 counter = 1;
34706 pos = _aes_heap_start;
34707 len = 0;
34708 asm.save_state(_aes_heap_start);
34709 asm_args[0] = _aes_heap_start, asm_args[1] = _aes_block_size, asm_args[16] = 0;
34710 asm_args[17] = 0;
34711 asm.ccm_encrypt.apply(asm, asm_args);
34712 var acheck = 0;
34713 for (var i = 0; i < tagSize; ++i) acheck |= atag[i] ^ heap[_aes_heap_start + i];
34714 if (acheck) throw new SecurityError("data integrity check failed");
34715 this.result = result;
34716 this.counter = counter;
34717 this.pos = pos;
34718 this.len = len;
34719 return this;
34720 }
34721 function ccm_aes_decrypt(data) {
34722 this.dataLength = this.dataLeft = data.byteLength || data.length || 0;
34723 var result1 = ccm_aes_decrypt_process.call(this, data).result, result2 = ccm_aes_decrypt_finish.call(this).result, result;
34724 result = new Uint8Array(result1.length + result2.length);
34725 result.set(result1);
34726 result.set(result2, result1.length);
34727 this.result = result;
34728 return this;
34729 }
34730 var ccm_aes_prototype = ccm_aes_constructor.prototype;
34731 ccm_aes_prototype.reset = ccm_aes_reset;
34732 ccm_aes_prototype.encrypt = ccm_aes_encrypt;
34733 ccm_aes_prototype.decrypt = ccm_aes_decrypt;
34734 var ccm_aes_encrypt_prototype = ccm_aes_encrypt_constructor.prototype;
34735 ccm_aes_encrypt_prototype.reset = ccm_aes_reset;
34736 ccm_aes_encrypt_prototype.process = ccm_aes_encrypt_process;
34737 ccm_aes_encrypt_prototype.finish = ccm_aes_encrypt_finish;
34738 var ccm_aes_decrypt_prototype = ccm_aes_decrypt_constructor.prototype;
34739 ccm_aes_decrypt_prototype.reset = ccm_aes_reset;
34740 ccm_aes_decrypt_prototype.process = ccm_aes_decrypt_process;
34741 ccm_aes_decrypt_prototype.finish = ccm_aes_decrypt_finish;
34742 function cfb_aes_constructor(options) {
34743 this.padding = false;
34744 this.mode = "cfb";
34745 this.iv = null;
34746 _aes_constructor.call(this, options);
34747 }
34748 function cfb_aes_encrypt_constructor(options) {
34749 cfb_aes_constructor.call(this, options);
34750 }
34751 function cfb_aes_decrypt_constructor(options) {
34752 cfb_aes_constructor.call(this, options);
34753 }
34754 function cfb_aes_reset(options) {
34755 options = options || {};
34756 _aes_reset.call(this, options);
34757 _aes_init_iv.call(this, options.iv);
34758 return this;
34759 }
34760 function cfb_aes_encrypt_process(data) {
34761 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34762 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34763 var result = new Uint8Array(rlen);
34764 while (dlen > 0) {
34765 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34766 len += wlen;
34767 dpos += wlen;
34768 dlen -= wlen;
34769 wlen = asm.cfb_encrypt(pos, _aes_block_size * Math.floor(len / _aes_block_size));
34770 result.set(heap.subarray(pos, pos + wlen), rpos);
34771 rpos += wlen;
34772 if (wlen < len) {
34773 pos += wlen;
34774 len -= wlen;
34775 } else {
34776 pos = _aes_heap_start;
34777 len = 0;
34778 }
34779 }
34780 this.result = result;
34781 this.pos = pos;
34782 this.len = len;
34783 return this;
34784 }
34785 function cfb_aes_encrypt_finish() {
34786 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34787 var asm = this.asm, heap = this.heap, pos = this.pos, len = this.len;
34788 var result = new Uint8Array(len);
34789 asm.cfb_encrypt(pos, len);
34790 result.set(heap.subarray(pos, pos + len));
34791 this.result = result;
34792 this.pos = _aes_heap_start;
34793 this.len = 0;
34794 return this;
34795 }
34796 function cfb_aes_encrypt(data) {
34797 var result1 = cfb_aes_encrypt_process.call(this, data).result, result2 = cfb_aes_encrypt_finish.call(this).result, result;
34798 result = new Uint8Array(result1.length + result2.length);
34799 result.set(result1);
34800 result.set(result2, result1.length);
34801 this.result = result;
34802 return this;
34803 }
34804 function cfb_aes_decrypt_process(data) {
34805 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34806 var dpos = data.byteOffset || 0, dlen = data.byteLength || data.length || 0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos = 0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen = 0;
34807 var result = new Uint8Array(rlen);
34808 while (dlen > 0) {
34809 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
34810 len += wlen;
34811 dpos += wlen;
34812 dlen -= wlen;
34813 wlen = asm.cfb_decrypt(pos, _aes_block_size * Math.floor(len / _aes_block_size));
34814 result.set(heap.subarray(pos, pos + wlen), rpos);
34815 rpos += wlen;
34816 if (wlen < len) {
34817 pos += wlen;
34818 len -= wlen;
34819 } else {
34820 pos = _aes_heap_start;
34821 len = 0;
34822 }
34823 }
34824 this.result = result.subarray(0, rpos);
34825 this.pos = pos;
34826 this.len = len;
34827 return this;
34828 }
34829 function cfb_aes_decrypt_finish() {
34830 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
34831 var asm = this.asm, heap = this.heap, pos = this.pos, len = this.len;
34832 if (len === 0) {
34833 this.result = new Uint8Array(0);
34834 this.pos = _aes_heap_start;
34835 this.len = 0;
34836 return this;
34837 }
34838 var result = new Uint8Array(len);
34839 asm.cfb_decrypt(pos, len);
34840 result.set(heap.subarray(pos, pos + len));
34841 this.result = result;
34842 this.pos = _aes_heap_start;
34843 this.len = 0;
34844 return this;
34845 }
34846 function cfb_aes_decrypt(data) {
34847 var result1 = cfb_aes_decrypt_process.call(this, data).result, result2 = cfb_aes_decrypt_finish.call(this).result, result;
34848 result = new Uint8Array(result1.length + result2.length);
34849 result.set(result1);
34850 result.set(result2, result1.length);
34851 this.result = result;
34852 return this;
34853 }
34854 var cfb_aes_encrypt_prototype = cfb_aes_encrypt_constructor.prototype;
34855 cfb_aes_encrypt_prototype.reset = cfb_aes_reset;
34856 cfb_aes_encrypt_prototype.process = cfb_aes_encrypt_process;
34857 cfb_aes_encrypt_prototype.finish = cfb_aes_encrypt_finish;
34858 var cfb_aes_decrypt_prototype = cfb_aes_decrypt_constructor.prototype;
34859 cfb_aes_decrypt_prototype.reset = cfb_aes_reset;
34860 cfb_aes_decrypt_prototype.process = cfb_aes_decrypt_process;
34861 cfb_aes_decrypt_prototype.finish = cfb_aes_decrypt_finish;
34862 var cfb_aes_prototype = cfb_aes_constructor.prototype;
34863 cfb_aes_prototype.reset = cfb_aes_reset;
34864 cfb_aes_prototype.encrypt = cfb_aes_encrypt;
34865 cfb_aes_prototype.decrypt = cfb_aes_decrypt;
34866 function sha256_asm(stdlib, foreign, buffer) {
3af2954a 34867 "use asm";
ebd8d4e8
IC
34868 var H0 = 0, H1 = 0, H2 = 0, H3 = 0, H4 = 0, H5 = 0, H6 = 0, H7 = 0, TOTAL = 0;
34869 var I0 = 0, I1 = 0, I2 = 0, I3 = 0, I4 = 0, I5 = 0, I6 = 0, I7 = 0, O0 = 0, O1 = 0, O2 = 0, O3 = 0, O4 = 0, O5 = 0, O6 = 0, O7 = 0;
34870 var HEAP = new stdlib.Uint8Array(buffer);
34871 function _core(w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15) {
34872 w0 = w0 | 0;
34873 w1 = w1 | 0;
34874 w2 = w2 | 0;
34875 w3 = w3 | 0;
34876 w4 = w4 | 0;
34877 w5 = w5 | 0;
34878 w6 = w6 | 0;
34879 w7 = w7 | 0;
34880 w8 = w8 | 0;
34881 w9 = w9 | 0;
34882 w10 = w10 | 0;
34883 w11 = w11 | 0;
34884 w12 = w12 | 0;
34885 w13 = w13 | 0;
34886 w14 = w14 | 0;
34887 w15 = w15 | 0;
34888 var a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, t = 0;
34889 a = H0;
34890 b = H1;
34891 c = H2;
34892 d = H3;
34893 e = H4;
34894 f = H5;
34895 g = H6;
34896 h = H7;
34897 t = w0 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1116352408 | 0;
34898 h = g;
34899 g = f;
34900 f = e;
34901 e = d + t | 0;
34902 d = c;
34903 c = b;
34904 b = a;
34905 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34906 t = w1 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1899447441 | 0;
34907 h = g;
34908 g = f;
34909 f = e;
34910 e = d + t | 0;
34911 d = c;
34912 c = b;
34913 b = a;
34914 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34915 t = w2 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3049323471 | 0;
34916 h = g;
34917 g = f;
34918 f = e;
34919 e = d + t | 0;
34920 d = c;
34921 c = b;
34922 b = a;
34923 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34924 t = w3 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3921009573 | 0;
34925 h = g;
34926 g = f;
34927 f = e;
34928 e = d + t | 0;
34929 d = c;
34930 c = b;
34931 b = a;
34932 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34933 t = w4 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 961987163 | 0;
34934 h = g;
34935 g = f;
34936 f = e;
34937 e = d + t | 0;
34938 d = c;
34939 c = b;
34940 b = a;
34941 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34942 t = w5 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1508970993 | 0;
34943 h = g;
34944 g = f;
34945 f = e;
34946 e = d + t | 0;
34947 d = c;
34948 c = b;
34949 b = a;
34950 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34951 t = w6 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2453635748 | 0;
34952 h = g;
34953 g = f;
34954 f = e;
34955 e = d + t | 0;
34956 d = c;
34957 c = b;
34958 b = a;
34959 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34960 t = w7 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2870763221 | 0;
34961 h = g;
34962 g = f;
34963 f = e;
34964 e = d + t | 0;
34965 d = c;
34966 c = b;
34967 b = a;
34968 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34969 t = w8 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3624381080 | 0;
34970 h = g;
34971 g = f;
34972 f = e;
34973 e = d + t | 0;
34974 d = c;
34975 c = b;
34976 b = a;
34977 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34978 t = w9 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 310598401 | 0;
34979 h = g;
34980 g = f;
34981 f = e;
34982 e = d + t | 0;
34983 d = c;
34984 c = b;
34985 b = a;
34986 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34987 t = w10 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 607225278 | 0;
34988 h = g;
34989 g = f;
34990 f = e;
34991 e = d + t | 0;
34992 d = c;
34993 c = b;
34994 b = a;
34995 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
34996 t = w11 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1426881987 | 0;
34997 h = g;
34998 g = f;
34999 f = e;
35000 e = d + t | 0;
35001 d = c;
35002 c = b;
35003 b = a;
35004 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35005 t = w12 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1925078388 | 0;
35006 h = g;
35007 g = f;
35008 f = e;
35009 e = d + t | 0;
35010 d = c;
35011 c = b;
35012 b = a;
35013 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35014 t = w13 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2162078206 | 0;
35015 h = g;
35016 g = f;
35017 f = e;
35018 e = d + t | 0;
35019 d = c;
35020 c = b;
35021 b = a;
35022 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35023 t = w14 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2614888103 | 0;
35024 h = g;
35025 g = f;
35026 f = e;
35027 e = d + t | 0;
35028 d = c;
35029 c = b;
35030 b = a;
35031 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35032 t = w15 + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3248222580 | 0;
35033 h = g;
35034 g = f;
35035 f = e;
35036 e = d + t | 0;
35037 d = c;
35038 c = b;
35039 b = a;
35040 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35041 w0 = t = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;
35042 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3835390401 | 0;
35043 h = g;
35044 g = f;
35045 f = e;
35046 e = d + t | 0;
35047 d = c;
35048 c = b;
35049 b = a;
35050 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35051 w1 = t = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;
35052 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 4022224774 | 0;
35053 h = g;
35054 g = f;
35055 f = e;
35056 e = d + t | 0;
35057 d = c;
35058 c = b;
35059 b = a;
35060 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35061 w2 = t = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;
35062 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 264347078 | 0;
35063 h = g;
35064 g = f;
35065 f = e;
35066 e = d + t | 0;
35067 d = c;
35068 c = b;
35069 b = a;
35070 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35071 w3 = t = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;
35072 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 604807628 | 0;
35073 h = g;
35074 g = f;
35075 f = e;
35076 e = d + t | 0;
35077 d = c;
35078 c = b;
35079 b = a;
35080 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35081 w4 = t = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;
35082 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 770255983 | 0;
35083 h = g;
35084 g = f;
35085 f = e;
35086 e = d + t | 0;
35087 d = c;
35088 c = b;
35089 b = a;
35090 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35091 w5 = t = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;
35092 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1249150122 | 0;
35093 h = g;
35094 g = f;
35095 f = e;
35096 e = d + t | 0;
35097 d = c;
35098 c = b;
35099 b = a;
35100 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35101 w6 = t = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;
35102 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1555081692 | 0;
35103 h = g;
35104 g = f;
35105 f = e;
35106 e = d + t | 0;
35107 d = c;
35108 c = b;
35109 b = a;
35110 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35111 w7 = t = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;
35112 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1996064986 | 0;
35113 h = g;
35114 g = f;
35115 f = e;
35116 e = d + t | 0;
35117 d = c;
35118 c = b;
35119 b = a;
35120 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35121 w8 = t = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;
35122 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2554220882 | 0;
35123 h = g;
35124 g = f;
35125 f = e;
35126 e = d + t | 0;
35127 d = c;
35128 c = b;
35129 b = a;
35130 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35131 w9 = t = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;
35132 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2821834349 | 0;
35133 h = g;
35134 g = f;
35135 f = e;
35136 e = d + t | 0;
35137 d = c;
35138 c = b;
35139 b = a;
35140 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35141 w10 = t = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;
35142 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2952996808 | 0;
35143 h = g;
35144 g = f;
35145 f = e;
35146 e = d + t | 0;
35147 d = c;
35148 c = b;
35149 b = a;
35150 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35151 w11 = t = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;
35152 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3210313671 | 0;
35153 h = g;
35154 g = f;
35155 f = e;
35156 e = d + t | 0;
35157 d = c;
35158 c = b;
35159 b = a;
35160 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35161 w12 = t = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;
35162 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3336571891 | 0;
35163 h = g;
35164 g = f;
35165 f = e;
35166 e = d + t | 0;
35167 d = c;
35168 c = b;
35169 b = a;
35170 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35171 w13 = t = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;
35172 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3584528711 | 0;
35173 h = g;
35174 g = f;
35175 f = e;
35176 e = d + t | 0;
35177 d = c;
35178 c = b;
35179 b = a;
35180 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35181 w14 = t = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;
35182 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 113926993 | 0;
35183 h = g;
35184 g = f;
35185 f = e;
35186 e = d + t | 0;
35187 d = c;
35188 c = b;
35189 b = a;
35190 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35191 w15 = t = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;
35192 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 338241895 | 0;
35193 h = g;
35194 g = f;
35195 f = e;
35196 e = d + t | 0;
35197 d = c;
35198 c = b;
35199 b = a;
35200 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35201 w0 = t = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;
35202 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 666307205 | 0;
35203 h = g;
35204 g = f;
35205 f = e;
35206 e = d + t | 0;
35207 d = c;
35208 c = b;
35209 b = a;
35210 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35211 w1 = t = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;
35212 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 773529912 | 0;
35213 h = g;
35214 g = f;
35215 f = e;
35216 e = d + t | 0;
35217 d = c;
35218 c = b;
35219 b = a;
35220 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35221 w2 = t = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;
35222 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1294757372 | 0;
35223 h = g;
35224 g = f;
35225 f = e;
35226 e = d + t | 0;
35227 d = c;
35228 c = b;
35229 b = a;
35230 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35231 w3 = t = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;
35232 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1396182291 | 0;
35233 h = g;
35234 g = f;
35235 f = e;
35236 e = d + t | 0;
35237 d = c;
35238 c = b;
35239 b = a;
35240 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35241 w4 = t = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;
35242 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1695183700 | 0;
35243 h = g;
35244 g = f;
35245 f = e;
35246 e = d + t | 0;
35247 d = c;
35248 c = b;
35249 b = a;
35250 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35251 w5 = t = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;
35252 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1986661051 | 0;
35253 h = g;
35254 g = f;
35255 f = e;
35256 e = d + t | 0;
35257 d = c;
35258 c = b;
35259 b = a;
35260 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35261 w6 = t = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;
35262 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2177026350 | 0;
35263 h = g;
35264 g = f;
35265 f = e;
35266 e = d + t | 0;
35267 d = c;
35268 c = b;
35269 b = a;
35270 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35271 w7 = t = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;
35272 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2456956037 | 0;
35273 h = g;
35274 g = f;
35275 f = e;
35276 e = d + t | 0;
35277 d = c;
35278 c = b;
35279 b = a;
35280 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35281 w8 = t = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;
35282 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2730485921 | 0;
35283 h = g;
35284 g = f;
35285 f = e;
35286 e = d + t | 0;
35287 d = c;
35288 c = b;
35289 b = a;
35290 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35291 w9 = t = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;
35292 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2820302411 | 0;
35293 h = g;
35294 g = f;
35295 f = e;
35296 e = d + t | 0;
35297 d = c;
35298 c = b;
35299 b = a;
35300 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35301 w10 = t = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;
35302 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3259730800 | 0;
35303 h = g;
35304 g = f;
35305 f = e;
35306 e = d + t | 0;
35307 d = c;
35308 c = b;
35309 b = a;
35310 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35311 w11 = t = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;
35312 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3345764771 | 0;
35313 h = g;
35314 g = f;
35315 f = e;
35316 e = d + t | 0;
35317 d = c;
35318 c = b;
35319 b = a;
35320 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35321 w12 = t = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;
35322 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3516065817 | 0;
35323 h = g;
35324 g = f;
35325 f = e;
35326 e = d + t | 0;
35327 d = c;
35328 c = b;
35329 b = a;
35330 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35331 w13 = t = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;
35332 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3600352804 | 0;
35333 h = g;
35334 g = f;
35335 f = e;
35336 e = d + t | 0;
35337 d = c;
35338 c = b;
35339 b = a;
35340 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35341 w14 = t = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;
35342 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 4094571909 | 0;
35343 h = g;
35344 g = f;
35345 f = e;
35346 e = d + t | 0;
35347 d = c;
35348 c = b;
35349 b = a;
35350 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35351 w15 = t = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;
35352 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 275423344 | 0;
35353 h = g;
35354 g = f;
35355 f = e;
35356 e = d + t | 0;
35357 d = c;
35358 c = b;
35359 b = a;
35360 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35361 w0 = t = (w1 >>> 7 ^ w1 >>> 18 ^ w1 >>> 3 ^ w1 << 25 ^ w1 << 14) + (w14 >>> 17 ^ w14 >>> 19 ^ w14 >>> 10 ^ w14 << 15 ^ w14 << 13) + w0 + w9 | 0;
35362 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 430227734 | 0;
35363 h = g;
35364 g = f;
35365 f = e;
35366 e = d + t | 0;
35367 d = c;
35368 c = b;
35369 b = a;
35370 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35371 w1 = t = (w2 >>> 7 ^ w2 >>> 18 ^ w2 >>> 3 ^ w2 << 25 ^ w2 << 14) + (w15 >>> 17 ^ w15 >>> 19 ^ w15 >>> 10 ^ w15 << 15 ^ w15 << 13) + w1 + w10 | 0;
35372 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 506948616 | 0;
35373 h = g;
35374 g = f;
35375 f = e;
35376 e = d + t | 0;
35377 d = c;
35378 c = b;
35379 b = a;
35380 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35381 w2 = t = (w3 >>> 7 ^ w3 >>> 18 ^ w3 >>> 3 ^ w3 << 25 ^ w3 << 14) + (w0 >>> 17 ^ w0 >>> 19 ^ w0 >>> 10 ^ w0 << 15 ^ w0 << 13) + w2 + w11 | 0;
35382 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 659060556 | 0;
35383 h = g;
35384 g = f;
35385 f = e;
35386 e = d + t | 0;
35387 d = c;
35388 c = b;
35389 b = a;
35390 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35391 w3 = t = (w4 >>> 7 ^ w4 >>> 18 ^ w4 >>> 3 ^ w4 << 25 ^ w4 << 14) + (w1 >>> 17 ^ w1 >>> 19 ^ w1 >>> 10 ^ w1 << 15 ^ w1 << 13) + w3 + w12 | 0;
35392 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 883997877 | 0;
35393 h = g;
35394 g = f;
35395 f = e;
35396 e = d + t | 0;
35397 d = c;
35398 c = b;
35399 b = a;
35400 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35401 w4 = t = (w5 >>> 7 ^ w5 >>> 18 ^ w5 >>> 3 ^ w5 << 25 ^ w5 << 14) + (w2 >>> 17 ^ w2 >>> 19 ^ w2 >>> 10 ^ w2 << 15 ^ w2 << 13) + w4 + w13 | 0;
35402 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 958139571 | 0;
35403 h = g;
35404 g = f;
35405 f = e;
35406 e = d + t | 0;
35407 d = c;
35408 c = b;
35409 b = a;
35410 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35411 w5 = t = (w6 >>> 7 ^ w6 >>> 18 ^ w6 >>> 3 ^ w6 << 25 ^ w6 << 14) + (w3 >>> 17 ^ w3 >>> 19 ^ w3 >>> 10 ^ w3 << 15 ^ w3 << 13) + w5 + w14 | 0;
35412 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1322822218 | 0;
35413 h = g;
35414 g = f;
35415 f = e;
35416 e = d + t | 0;
35417 d = c;
35418 c = b;
35419 b = a;
35420 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35421 w6 = t = (w7 >>> 7 ^ w7 >>> 18 ^ w7 >>> 3 ^ w7 << 25 ^ w7 << 14) + (w4 >>> 17 ^ w4 >>> 19 ^ w4 >>> 10 ^ w4 << 15 ^ w4 << 13) + w6 + w15 | 0;
35422 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1537002063 | 0;
35423 h = g;
35424 g = f;
35425 f = e;
35426 e = d + t | 0;
35427 d = c;
35428 c = b;
35429 b = a;
35430 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35431 w7 = t = (w8 >>> 7 ^ w8 >>> 18 ^ w8 >>> 3 ^ w8 << 25 ^ w8 << 14) + (w5 >>> 17 ^ w5 >>> 19 ^ w5 >>> 10 ^ w5 << 15 ^ w5 << 13) + w7 + w0 | 0;
35432 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1747873779 | 0;
35433 h = g;
35434 g = f;
35435 f = e;
35436 e = d + t | 0;
35437 d = c;
35438 c = b;
35439 b = a;
35440 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35441 w8 = t = (w9 >>> 7 ^ w9 >>> 18 ^ w9 >>> 3 ^ w9 << 25 ^ w9 << 14) + (w6 >>> 17 ^ w6 >>> 19 ^ w6 >>> 10 ^ w6 << 15 ^ w6 << 13) + w8 + w1 | 0;
35442 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 1955562222 | 0;
35443 h = g;
35444 g = f;
35445 f = e;
35446 e = d + t | 0;
35447 d = c;
35448 c = b;
35449 b = a;
35450 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35451 w9 = t = (w10 >>> 7 ^ w10 >>> 18 ^ w10 >>> 3 ^ w10 << 25 ^ w10 << 14) + (w7 >>> 17 ^ w7 >>> 19 ^ w7 >>> 10 ^ w7 << 15 ^ w7 << 13) + w9 + w2 | 0;
35452 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2024104815 | 0;
35453 h = g;
35454 g = f;
35455 f = e;
35456 e = d + t | 0;
35457 d = c;
35458 c = b;
35459 b = a;
35460 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35461 w10 = t = (w11 >>> 7 ^ w11 >>> 18 ^ w11 >>> 3 ^ w11 << 25 ^ w11 << 14) + (w8 >>> 17 ^ w8 >>> 19 ^ w8 >>> 10 ^ w8 << 15 ^ w8 << 13) + w10 + w3 | 0;
35462 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2227730452 | 0;
35463 h = g;
35464 g = f;
35465 f = e;
35466 e = d + t | 0;
35467 d = c;
35468 c = b;
35469 b = a;
35470 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35471 w11 = t = (w12 >>> 7 ^ w12 >>> 18 ^ w12 >>> 3 ^ w12 << 25 ^ w12 << 14) + (w9 >>> 17 ^ w9 >>> 19 ^ w9 >>> 10 ^ w9 << 15 ^ w9 << 13) + w11 + w4 | 0;
35472 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2361852424 | 0;
35473 h = g;
35474 g = f;
35475 f = e;
35476 e = d + t | 0;
35477 d = c;
35478 c = b;
35479 b = a;
35480 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35481 w12 = t = (w13 >>> 7 ^ w13 >>> 18 ^ w13 >>> 3 ^ w13 << 25 ^ w13 << 14) + (w10 >>> 17 ^ w10 >>> 19 ^ w10 >>> 10 ^ w10 << 15 ^ w10 << 13) + w12 + w5 | 0;
35482 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2428436474 | 0;
35483 h = g;
35484 g = f;
35485 f = e;
35486 e = d + t | 0;
35487 d = c;
35488 c = b;
35489 b = a;
35490 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35491 w13 = t = (w14 >>> 7 ^ w14 >>> 18 ^ w14 >>> 3 ^ w14 << 25 ^ w14 << 14) + (w11 >>> 17 ^ w11 >>> 19 ^ w11 >>> 10 ^ w11 << 15 ^ w11 << 13) + w13 + w6 | 0;
35492 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 2756734187 | 0;
35493 h = g;
35494 g = f;
35495 f = e;
35496 e = d + t | 0;
35497 d = c;
35498 c = b;
35499 b = a;
35500 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35501 w14 = t = (w15 >>> 7 ^ w15 >>> 18 ^ w15 >>> 3 ^ w15 << 25 ^ w15 << 14) + (w12 >>> 17 ^ w12 >>> 19 ^ w12 >>> 10 ^ w12 << 15 ^ w12 << 13) + w14 + w7 | 0;
35502 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3204031479 | 0;
35503 h = g;
35504 g = f;
35505 f = e;
35506 e = d + t | 0;
35507 d = c;
35508 c = b;
35509 b = a;
35510 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35511 w15 = t = (w0 >>> 7 ^ w0 >>> 18 ^ w0 >>> 3 ^ w0 << 25 ^ w0 << 14) + (w13 >>> 17 ^ w13 >>> 19 ^ w13 >>> 10 ^ w13 << 15 ^ w13 << 13) + w15 + w8 | 0;
35512 t = t + h + (e >>> 6 ^ e >>> 11 ^ e >>> 25 ^ e << 26 ^ e << 21 ^ e << 7) + (g ^ e & (f ^ g)) + 3329325298 | 0;
35513 h = g;
35514 g = f;
35515 f = e;
35516 e = d + t | 0;
35517 d = c;
35518 c = b;
35519 b = a;
35520 a = t + (b & c ^ d & (b ^ c)) + (b >>> 2 ^ b >>> 13 ^ b >>> 22 ^ b << 30 ^ b << 19 ^ b << 10) | 0;
35521 H0 = H0 + a | 0;
35522 H1 = H1 + b | 0;
35523 H2 = H2 + c | 0;
35524 H3 = H3 + d | 0;
35525 H4 = H4 + e | 0;
35526 H5 = H5 + f | 0;
35527 H6 = H6 + g | 0;
35528 H7 = H7 + h | 0;
35529 }
35530 function _core_heap(offset) {
35531 offset = offset | 0;
35532 _core(HEAP[offset | 0] << 24 | HEAP[offset | 1] << 16 | HEAP[offset | 2] << 8 | HEAP[offset | 3], HEAP[offset | 4] << 24 | HEAP[offset | 5] << 16 | HEAP[offset | 6] << 8 | HEAP[offset | 7], HEAP[offset | 8] << 24 | HEAP[offset | 9] << 16 | HEAP[offset | 10] << 8 | HEAP[offset | 11], HEAP[offset | 12] << 24 | HEAP[offset | 13] << 16 | HEAP[offset | 14] << 8 | HEAP[offset | 15], HEAP[offset | 16] << 24 | HEAP[offset | 17] << 16 | HEAP[offset | 18] << 8 | HEAP[offset | 19], HEAP[offset | 20] << 24 | HEAP[offset | 21] << 16 | HEAP[offset | 22] << 8 | HEAP[offset | 23], HEAP[offset | 24] << 24 | HEAP[offset | 25] << 16 | HEAP[offset | 26] << 8 | HEAP[offset | 27], HEAP[offset | 28] << 24 | HEAP[offset | 29] << 16 | HEAP[offset | 30] << 8 | HEAP[offset | 31], HEAP[offset | 32] << 24 | HEAP[offset | 33] << 16 | HEAP[offset | 34] << 8 | HEAP[offset | 35], HEAP[offset | 36] << 24 | HEAP[offset | 37] << 16 | HEAP[offset | 38] << 8 | HEAP[offset | 39], HEAP[offset | 40] << 24 | HEAP[offset | 41] << 16 | HEAP[offset | 42] << 8 | HEAP[offset | 43], HEAP[offset | 44] << 24 | HEAP[offset | 45] << 16 | HEAP[offset | 46] << 8 | HEAP[offset | 47], HEAP[offset | 48] << 24 | HEAP[offset | 49] << 16 | HEAP[offset | 50] << 8 | HEAP[offset | 51], HEAP[offset | 52] << 24 | HEAP[offset | 53] << 16 | HEAP[offset | 54] << 8 | HEAP[offset | 55], HEAP[offset | 56] << 24 | HEAP[offset | 57] << 16 | HEAP[offset | 58] << 8 | HEAP[offset | 59], HEAP[offset | 60] << 24 | HEAP[offset | 61] << 16 | HEAP[offset | 62] << 8 | HEAP[offset | 63]);
35533 }
35534 function _state_to_heap(output) {
35535 output = output | 0;
35536 HEAP[output | 0] = H0 >>> 24;
35537 HEAP[output | 1] = H0 >>> 16 & 255;
35538 HEAP[output | 2] = H0 >>> 8 & 255;
35539 HEAP[output | 3] = H0 & 255;
35540 HEAP[output | 4] = H1 >>> 24;
35541 HEAP[output | 5] = H1 >>> 16 & 255;
35542 HEAP[output | 6] = H1 >>> 8 & 255;
35543 HEAP[output | 7] = H1 & 255;
35544 HEAP[output | 8] = H2 >>> 24;
35545 HEAP[output | 9] = H2 >>> 16 & 255;
35546 HEAP[output | 10] = H2 >>> 8 & 255;
35547 HEAP[output | 11] = H2 & 255;
35548 HEAP[output | 12] = H3 >>> 24;
35549 HEAP[output | 13] = H3 >>> 16 & 255;
35550 HEAP[output | 14] = H3 >>> 8 & 255;
35551 HEAP[output | 15] = H3 & 255;
35552 HEAP[output | 16] = H4 >>> 24;
35553 HEAP[output | 17] = H4 >>> 16 & 255;
35554 HEAP[output | 18] = H4 >>> 8 & 255;
35555 HEAP[output | 19] = H4 & 255;
35556 HEAP[output | 20] = H5 >>> 24;
35557 HEAP[output | 21] = H5 >>> 16 & 255;
35558 HEAP[output | 22] = H5 >>> 8 & 255;
35559 HEAP[output | 23] = H5 & 255;
35560 HEAP[output | 24] = H6 >>> 24;
35561 HEAP[output | 25] = H6 >>> 16 & 255;
35562 HEAP[output | 26] = H6 >>> 8 & 255;
35563 HEAP[output | 27] = H6 & 255;
35564 HEAP[output | 28] = H7 >>> 24;
35565 HEAP[output | 29] = H7 >>> 16 & 255;
35566 HEAP[output | 30] = H7 >>> 8 & 255;
35567 HEAP[output | 31] = H7 & 255;
35568 }
35569 function reset() {
35570 H0 = 1779033703;
35571 H1 = 3144134277;
35572 H2 = 1013904242;
35573 H3 = 2773480762;
35574 H4 = 1359893119;
35575 H5 = 2600822924;
35576 H6 = 528734635;
35577 H7 = 1541459225;
35578 TOTAL = 0;
35579 }
35580 function init(h0, h1, h2, h3, h4, h5, h6, h7, total) {
35581 h0 = h0 | 0;
35582 h1 = h1 | 0;
35583 h2 = h2 | 0;
35584 h3 = h3 | 0;
35585 h4 = h4 | 0;
35586 h5 = h5 | 0;
35587 h6 = h6 | 0;
35588 h7 = h7 | 0;
35589 total = total | 0;
35590 H0 = h0;
35591 H1 = h1;
35592 H2 = h2;
35593 H3 = h3;
35594 H4 = h4;
35595 H5 = h5;
35596 H6 = h6;
35597 H7 = h7;
35598 TOTAL = total;
35599 }
35600 function process(offset, length) {
35601 offset = offset | 0;
35602 length = length | 0;
35603 var hashed = 0;
35604 if (offset & 63) return -1;
35605 while ((length | 0) >= 64) {
35606 _core_heap(offset);
35607 offset = offset + 64 | 0;
35608 length = length - 64 | 0;
35609 hashed = hashed + 64 | 0;
35610 }
35611 TOTAL = TOTAL + hashed | 0;
35612 return hashed | 0;
35613 }
35614 function finish(offset, length, output) {
35615 offset = offset | 0;
35616 length = length | 0;
35617 output = output | 0;
35618 var hashed = 0, i = 0;
35619 if (offset & 63) return -1;
35620 if (~output) if (output & 31) return -1;
35621 if ((length | 0) >= 64) {
35622 hashed = process(offset, length) | 0;
35623 if ((hashed | 0) == -1) return -1;
35624 offset = offset + hashed | 0;
35625 length = length - hashed | 0;
35626 }
35627 hashed = hashed + length | 0;
35628 TOTAL = TOTAL + length | 0;
35629 HEAP[offset | length] = 128;
35630 if ((length | 0) >= 56) {
35631 for (i = length + 1 | 0; (i | 0) < 64; i = i + 1 | 0) HEAP[offset | i] = 0;
35632 _core_heap(offset);
35633 length = 0;
35634 HEAP[offset | 0] = 0;
35635 }
35636 for (i = length + 1 | 0; (i | 0) < 59; i = i + 1 | 0) HEAP[offset | i] = 0;
35637 HEAP[offset | 59] = TOTAL >>> 29;
35638 HEAP[offset | 60] = TOTAL >>> 21 & 255;
35639 HEAP[offset | 61] = TOTAL >>> 13 & 255;
35640 HEAP[offset | 62] = TOTAL >>> 5 & 255;
35641 HEAP[offset | 63] = TOTAL << 3 & 255;
35642 _core_heap(offset);
35643 if (~output) _state_to_heap(output);
35644 return hashed | 0;
35645 }
35646 function hmac_reset() {
35647 H0 = I0;
35648 H1 = I1;
35649 H2 = I2;
35650 H3 = I3;
35651 H4 = I4;
35652 H5 = I5;
35653 H6 = I6;
35654 H7 = I7;
35655 TOTAL = 64;
35656 }
35657 function _hmac_opad() {
35658 H0 = O0;
35659 H1 = O1;
35660 H2 = O2;
35661 H3 = O3;
35662 H4 = O4;
35663 H5 = O5;
35664 H6 = O6;
35665 H7 = O7;
35666 TOTAL = 64;
35667 }
35668 function hmac_init(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) {
35669 p0 = p0 | 0;
35670 p1 = p1 | 0;
35671 p2 = p2 | 0;
35672 p3 = p3 | 0;
35673 p4 = p4 | 0;
35674 p5 = p5 | 0;
35675 p6 = p6 | 0;
35676 p7 = p7 | 0;
35677 p8 = p8 | 0;
35678 p9 = p9 | 0;
35679 p10 = p10 | 0;
35680 p11 = p11 | 0;
35681 p12 = p12 | 0;
35682 p13 = p13 | 0;
35683 p14 = p14 | 0;
35684 p15 = p15 | 0;
35685 reset();
35686 _core(p0 ^ 1549556828, p1 ^ 1549556828, p2 ^ 1549556828, p3 ^ 1549556828, p4 ^ 1549556828, p5 ^ 1549556828, p6 ^ 1549556828, p7 ^ 1549556828, p8 ^ 1549556828, p9 ^ 1549556828, p10 ^ 1549556828, p11 ^ 1549556828, p12 ^ 1549556828, p13 ^ 1549556828, p14 ^ 1549556828, p15 ^ 1549556828);
35687 O0 = H0;
35688 O1 = H1;
35689 O2 = H2;
35690 O3 = H3;
35691 O4 = H4;
35692 O5 = H5;
35693 O6 = H6;
35694 O7 = H7;
35695 reset();
35696 _core(p0 ^ 909522486, p1 ^ 909522486, p2 ^ 909522486, p3 ^ 909522486, p4 ^ 909522486, p5 ^ 909522486, p6 ^ 909522486, p7 ^ 909522486, p8 ^ 909522486, p9 ^ 909522486, p10 ^ 909522486, p11 ^ 909522486, p12 ^ 909522486, p13 ^ 909522486, p14 ^ 909522486, p15 ^ 909522486);
35697 I0 = H0;
35698 I1 = H1;
35699 I2 = H2;
35700 I3 = H3;
35701 I4 = H4;
35702 I5 = H5;
35703 I6 = H6;
35704 I7 = H7;
35705 TOTAL = 64;
35706 }
35707 function hmac_finish(offset, length, output) {
35708 offset = offset | 0;
35709 length = length | 0;
35710 output = output | 0;
35711 var t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, hashed = 0;
35712 if (offset & 63) return -1;
35713 if (~output) if (output & 31) return -1;
35714 hashed = finish(offset, length, -1) | 0;
35715 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
35716 _hmac_opad();
35717 _core(t0, t1, t2, t3, t4, t5, t6, t7, 2147483648, 0, 0, 0, 0, 0, 0, 768);
35718 if (~output) _state_to_heap(output);
35719 return hashed | 0;
35720 }
35721 function pbkdf2_generate_block(offset, length, block, count, output) {
35722 offset = offset | 0;
35723 length = length | 0;
35724 block = block | 0;
35725 count = count | 0;
35726 output = output | 0;
35727 var h0 = 0, h1 = 0, h2 = 0, h3 = 0, h4 = 0, h5 = 0, h6 = 0, h7 = 0, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0;
35728 if (offset & 63) return -1;
35729 if (~output) if (output & 31) return -1;
35730 HEAP[offset + length | 0] = block >>> 24;
35731 HEAP[offset + length + 1 | 0] = block >>> 16 & 255;
35732 HEAP[offset + length + 2 | 0] = block >>> 8 & 255;
35733 HEAP[offset + length + 3 | 0] = block & 255;
3af2954a 35734 hmac_finish(offset, length + 4 | 0, -1) | 0;
ebd8d4e8
IC
35735 h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4, h5 = t5 = H5,
35736 h6 = t6 = H6, h7 = t7 = H7;
35737 count = count - 1 | 0;
35738 while ((count | 0) > 0) {
35739 hmac_reset();
35740 _core(t0, t1, t2, t3, t4, t5, t6, t7, 2147483648, 0, 0, 0, 0, 0, 0, 768);
35741 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
35742 _hmac_opad();
35743 _core(t0, t1, t2, t3, t4, t5, t6, t7, 2147483648, 0, 0, 0, 0, 0, 0, 768);
35744 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
35745 h0 = h0 ^ H0;
35746 h1 = h1 ^ H1;
35747 h2 = h2 ^ H2;
35748 h3 = h3 ^ H3;
35749 h4 = h4 ^ H4;
35750 h5 = h5 ^ H5;
35751 h6 = h6 ^ H6;
35752 h7 = h7 ^ H7;
35753 count = count - 1 | 0;
35754 }
35755 H0 = h0;
35756 H1 = h1;
35757 H2 = h2;
35758 H3 = h3;
35759 H4 = h4;
35760 H5 = h5;
35761 H6 = h6;
35762 H7 = h7;
35763 if (~output) _state_to_heap(output);
35764 return 0;
35765 }
35766 return {
35767 reset: reset,
35768 init: init,
35769 process: process,
35770 finish: finish,
35771 hmac_reset: hmac_reset,
35772 hmac_init: hmac_init,
35773 hmac_finish: hmac_finish,
35774 pbkdf2_generate_block: pbkdf2_generate_block
35775 };
35776 }
35777 var _sha256_block_size = 64, _sha256_hash_size = 32;
35778 function sha256_constructor(options) {
35779 options = options || {};
35780 options.heapSize = options.heapSize || 4096;
35781 if (options.heapSize <= 0 || options.heapSize % 4096) throw new IllegalArgumentError("heapSize must be a positive number and multiple of 4096");
35782 this.heap = options.heap || new Uint8Array(options.heapSize);
35783 this.asm = options.asm || sha256_asm(global, null, this.heap.buffer);
35784 this.BLOCK_SIZE = _sha256_block_size;
35785 this.HASH_SIZE = _sha256_hash_size;
35786 this.reset();
35787 }
35788 function sha256_reset() {
35789 this.result = null;
35790 this.pos = 0;
35791 this.len = 0;
35792 this.asm.reset();
35793 return this;
35794 }
35795 function sha256_process(data) {
35796 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
35797 var dpos = 0, dlen = 0, clen = 0;
35798 if (is_buffer(data) || is_bytes(data)) {
35799 dpos = data.byteOffset || 0;
35800 dlen = data.byteLength;
35801 } else if (is_string(data)) {
35802 dlen = data.length;
35803 } else {
35804 throw new TypeError("data isn't of expected type");
35805 }
35806 while (dlen > 0) {
35807 clen = this.heap.byteLength - this.pos - this.len;
35808 clen = clen < dlen ? clen : dlen;
35809 if (is_buffer(data) || is_bytes(data)) {
35810 this.heap.set(new Uint8Array(data.buffer || data, dpos, clen), this.pos + this.len);
35811 } else {
35812 for (var i = 0; i < clen; i++) this.heap[this.pos + this.len + i] = data.charCodeAt(dpos + i);
35813 }
35814 this.len += clen;
35815 dpos += clen;
35816 dlen -= clen;
35817 clen = this.asm.process(this.pos, this.len);
35818 if (clen < this.len) {
35819 this.pos += clen;
35820 this.len -= clen;
35821 } else {
35822 this.pos = 0;
35823 this.len = 0;
35824 }
35825 }
35826 return this;
35827 }
35828 function sha256_finish() {
35829 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
35830 this.asm.finish(this.pos, this.len, 0);
35831 this.result = new Uint8Array(_sha256_hash_size);
35832 this.result.set(this.heap.subarray(0, _sha256_hash_size));
35833 this.pos = 0;
35834 this.len = 0;
35835 return this;
35836 }
35837 sha256_constructor.BLOCK_SIZE = _sha256_block_size;
35838 sha256_constructor.HASH_SIZE = _sha256_hash_size;
35839 var sha256_prototype = sha256_constructor.prototype;
35840 sha256_prototype.reset = sha256_reset;
35841 sha256_prototype.process = sha256_process;
35842 sha256_prototype.finish = sha256_finish;
35843 function sha512_asm(stdlib, foreign, buffer) {
3af2954a 35844 "use asm";
ebd8d4e8
IC
35845 var H0h = 0, H0l = 0, H1h = 0, H1l = 0, H2h = 0, H2l = 0, H3h = 0, H3l = 0, H4h = 0, H4l = 0, H5h = 0, H5l = 0, H6h = 0, H6l = 0, H7h = 0, H7l = 0, TOTAL = 0;
35846 var I0h = 0, I0l = 0, I1h = 0, I1l = 0, I2h = 0, I2l = 0, I3h = 0, I3l = 0, I4h = 0, I4l = 0, I5h = 0, I5l = 0, I6h = 0, I6l = 0, I7h = 0, I7l = 0, O0h = 0, O0l = 0, O1h = 0, O1l = 0, O2h = 0, O2l = 0, O3h = 0, O3l = 0, O4h = 0, O4l = 0, O5h = 0, O5l = 0, O6h = 0, O6l = 0, O7h = 0, O7l = 0;
35847 var HEAP = new stdlib.Uint8Array(buffer);
35848 function _core(w0h, w0l, w1h, w1l, w2h, w2l, w3h, w3l, w4h, w4l, w5h, w5l, w6h, w6l, w7h, w7l, w8h, w8l, w9h, w9l, w10h, w10l, w11h, w11l, w12h, w12l, w13h, w13l, w14h, w14l, w15h, w15l) {
35849 w0h = w0h | 0;
35850 w0l = w0l | 0;
35851 w1h = w1h | 0;
35852 w1l = w1l | 0;
35853 w2h = w2h | 0;
35854 w2l = w2l | 0;
35855 w3h = w3h | 0;
35856 w3l = w3l | 0;
35857 w4h = w4h | 0;
35858 w4l = w4l | 0;
35859 w5h = w5h | 0;
35860 w5l = w5l | 0;
35861 w6h = w6h | 0;
35862 w6l = w6l | 0;
35863 w7h = w7h | 0;
35864 w7l = w7l | 0;
35865 w8h = w8h | 0;
35866 w8l = w8l | 0;
35867 w9h = w9h | 0;
35868 w9l = w9l | 0;
35869 w10h = w10h | 0;
35870 w10l = w10l | 0;
35871 w11h = w11h | 0;
35872 w11l = w11l | 0;
35873 w12h = w12h | 0;
35874 w12l = w12l | 0;
35875 w13h = w13h | 0;
35876 w13l = w13l | 0;
35877 w14h = w14h | 0;
35878 w14l = w14l | 0;
35879 w15h = w15h | 0;
35880 w15l = w15l | 0;
35881 var ah = 0, al = 0, bh = 0, bl = 0, ch = 0, cl = 0, dh = 0, dl = 0, eh = 0, el = 0, fh = 0, fl = 0, gh = 0, gl = 0, hh = 0, hl = 0, th = 0, tl = 0, xl = 0;
35882 ah = H0h;
35883 al = H0l;
35884 bh = H1h;
35885 bl = H1l;
35886 ch = H2h;
35887 cl = H2l;
35888 dh = H3h;
35889 dl = H3l;
35890 eh = H4h;
35891 el = H4l;
35892 fh = H5h;
35893 fl = H5l;
35894 gh = H6h;
35895 gl = H6l;
35896 hh = H7h;
35897 hl = H7l;
35898 tl = 3609767458 + w0l | 0;
35899 th = 1116352408 + w0h + (tl >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
35900 tl = tl + hl | 0;
35901 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
35902 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
35903 tl = tl + xl | 0;
35904 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35905 xl = gl ^ el & (fl ^ gl) | 0;
35906 tl = tl + xl | 0;
35907 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35908 hl = gl;
35909 hh = gh;
35910 gl = fl;
35911 gh = fh;
35912 fl = el;
35913 fh = eh;
35914 el = dl + tl | 0;
35915 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
35916 dl = cl;
35917 dh = ch;
35918 cl = bl;
35919 ch = bh;
35920 bl = al;
35921 bh = ah;
35922 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
35923 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
35924 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
35925 al = al + xl | 0;
35926 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35927 tl = 602891725 + w1l | 0;
35928 th = 1899447441 + w1h + (tl >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
35929 tl = tl + hl | 0;
35930 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
35931 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
35932 tl = tl + xl | 0;
35933 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35934 xl = gl ^ el & (fl ^ gl) | 0;
35935 tl = tl + xl | 0;
35936 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35937 hl = gl;
35938 hh = gh;
35939 gl = fl;
35940 gh = fh;
35941 fl = el;
35942 fh = eh;
35943 el = dl + tl | 0;
35944 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
35945 dl = cl;
35946 dh = ch;
35947 cl = bl;
35948 ch = bh;
35949 bl = al;
35950 bh = ah;
35951 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
35952 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
35953 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
35954 al = al + xl | 0;
35955 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35956 tl = 3964484399 + w2l | 0;
35957 th = 3049323471 + w2h + (tl >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
35958 tl = tl + hl | 0;
35959 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
35960 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
35961 tl = tl + xl | 0;
35962 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35963 xl = gl ^ el & (fl ^ gl) | 0;
35964 tl = tl + xl | 0;
35965 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35966 hl = gl;
35967 hh = gh;
35968 gl = fl;
35969 gh = fh;
35970 fl = el;
35971 fh = eh;
35972 el = dl + tl | 0;
35973 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
35974 dl = cl;
35975 dh = ch;
35976 cl = bl;
35977 ch = bh;
35978 bl = al;
35979 bh = ah;
35980 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
35981 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
35982 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
35983 al = al + xl | 0;
35984 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35985 tl = 2173295548 + w3l | 0;
35986 th = 3921009573 + w3h + (tl >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
35987 tl = tl + hl | 0;
35988 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
35989 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
35990 tl = tl + xl | 0;
35991 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35992 xl = gl ^ el & (fl ^ gl) | 0;
35993 tl = tl + xl | 0;
35994 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
35995 hl = gl;
35996 hh = gh;
35997 gl = fl;
35998 gh = fh;
35999 fl = el;
36000 fh = eh;
36001 el = dl + tl | 0;
36002 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36003 dl = cl;
36004 dh = ch;
36005 cl = bl;
36006 ch = bh;
36007 bl = al;
36008 bh = ah;
36009 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36010 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36011 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36012 al = al + xl | 0;
36013 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36014 tl = 4081628472 + w4l | 0;
36015 th = 961987163 + w4h + (tl >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
36016 tl = tl + hl | 0;
36017 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36018 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36019 tl = tl + xl | 0;
36020 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36021 xl = gl ^ el & (fl ^ gl) | 0;
36022 tl = tl + xl | 0;
36023 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36024 hl = gl;
36025 hh = gh;
36026 gl = fl;
36027 gh = fh;
36028 fl = el;
36029 fh = eh;
36030 el = dl + tl | 0;
36031 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36032 dl = cl;
36033 dh = ch;
36034 cl = bl;
36035 ch = bh;
36036 bl = al;
36037 bh = ah;
36038 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36039 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36040 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36041 al = al + xl | 0;
36042 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36043 tl = 3053834265 + w5l | 0;
36044 th = 1508970993 + w5h + (tl >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
36045 tl = tl + hl | 0;
36046 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36047 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36048 tl = tl + xl | 0;
36049 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36050 xl = gl ^ el & (fl ^ gl) | 0;
36051 tl = tl + xl | 0;
36052 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36053 hl = gl;
36054 hh = gh;
36055 gl = fl;
36056 gh = fh;
36057 fl = el;
36058 fh = eh;
36059 el = dl + tl | 0;
36060 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36061 dl = cl;
36062 dh = ch;
36063 cl = bl;
36064 ch = bh;
36065 bl = al;
36066 bh = ah;
36067 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36068 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36069 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36070 al = al + xl | 0;
36071 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36072 tl = 2937671579 + w6l | 0;
36073 th = 2453635748 + w6h + (tl >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
36074 tl = tl + hl | 0;
36075 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36076 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36077 tl = tl + xl | 0;
36078 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36079 xl = gl ^ el & (fl ^ gl) | 0;
36080 tl = tl + xl | 0;
36081 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36082 hl = gl;
36083 hh = gh;
36084 gl = fl;
36085 gh = fh;
36086 fl = el;
36087 fh = eh;
36088 el = dl + tl | 0;
36089 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36090 dl = cl;
36091 dh = ch;
36092 cl = bl;
36093 ch = bh;
36094 bl = al;
36095 bh = ah;
36096 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36097 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36098 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36099 al = al + xl | 0;
36100 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36101 tl = 3664609560 + w7l | 0;
36102 th = 2870763221 + w7h + (tl >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
36103 tl = tl + hl | 0;
36104 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36105 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36106 tl = tl + xl | 0;
36107 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36108 xl = gl ^ el & (fl ^ gl) | 0;
36109 tl = tl + xl | 0;
36110 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36111 hl = gl;
36112 hh = gh;
36113 gl = fl;
36114 gh = fh;
36115 fl = el;
36116 fh = eh;
36117 el = dl + tl | 0;
36118 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36119 dl = cl;
36120 dh = ch;
36121 cl = bl;
36122 ch = bh;
36123 bl = al;
36124 bh = ah;
36125 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36126 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36127 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36128 al = al + xl | 0;
36129 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36130 tl = 2734883394 + w8l | 0;
36131 th = 3624381080 + w8h + (tl >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
36132 tl = tl + hl | 0;
36133 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36134 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36135 tl = tl + xl | 0;
36136 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36137 xl = gl ^ el & (fl ^ gl) | 0;
36138 tl = tl + xl | 0;
36139 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36140 hl = gl;
36141 hh = gh;
36142 gl = fl;
36143 gh = fh;
36144 fl = el;
36145 fh = eh;
36146 el = dl + tl | 0;
36147 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36148 dl = cl;
36149 dh = ch;
36150 cl = bl;
36151 ch = bh;
36152 bl = al;
36153 bh = ah;
36154 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36155 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36156 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36157 al = al + xl | 0;
36158 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36159 tl = 1164996542 + w9l | 0;
36160 th = 310598401 + w9h + (tl >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
36161 tl = tl + hl | 0;
36162 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36163 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36164 tl = tl + xl | 0;
36165 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36166 xl = gl ^ el & (fl ^ gl) | 0;
36167 tl = tl + xl | 0;
36168 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36169 hl = gl;
36170 hh = gh;
36171 gl = fl;
36172 gh = fh;
36173 fl = el;
36174 fh = eh;
36175 el = dl + tl | 0;
36176 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36177 dl = cl;
36178 dh = ch;
36179 cl = bl;
36180 ch = bh;
36181 bl = al;
36182 bh = ah;
36183 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36184 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36185 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36186 al = al + xl | 0;
36187 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36188 tl = 1323610764 + w10l | 0;
36189 th = 607225278 + w10h + (tl >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
36190 tl = tl + hl | 0;
36191 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36192 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36193 tl = tl + xl | 0;
36194 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36195 xl = gl ^ el & (fl ^ gl) | 0;
36196 tl = tl + xl | 0;
36197 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36198 hl = gl;
36199 hh = gh;
36200 gl = fl;
36201 gh = fh;
36202 fl = el;
36203 fh = eh;
36204 el = dl + tl | 0;
36205 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36206 dl = cl;
36207 dh = ch;
36208 cl = bl;
36209 ch = bh;
36210 bl = al;
36211 bh = ah;
36212 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36213 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36214 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36215 al = al + xl | 0;
36216 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36217 tl = 3590304994 + w11l | 0;
36218 th = 1426881987 + w11h + (tl >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
36219 tl = tl + hl | 0;
36220 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36221 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36222 tl = tl + xl | 0;
36223 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36224 xl = gl ^ el & (fl ^ gl) | 0;
36225 tl = tl + xl | 0;
36226 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36227 hl = gl;
36228 hh = gh;
36229 gl = fl;
36230 gh = fh;
36231 fl = el;
36232 fh = eh;
36233 el = dl + tl | 0;
36234 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36235 dl = cl;
36236 dh = ch;
36237 cl = bl;
36238 ch = bh;
36239 bl = al;
36240 bh = ah;
36241 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36242 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36243 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36244 al = al + xl | 0;
36245 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36246 tl = 4068182383 + w12l | 0;
36247 th = 1925078388 + w12h + (tl >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
36248 tl = tl + hl | 0;
36249 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36250 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36251 tl = tl + xl | 0;
36252 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36253 xl = gl ^ el & (fl ^ gl) | 0;
36254 tl = tl + xl | 0;
36255 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36256 hl = gl;
36257 hh = gh;
36258 gl = fl;
36259 gh = fh;
36260 fl = el;
36261 fh = eh;
36262 el = dl + tl | 0;
36263 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36264 dl = cl;
36265 dh = ch;
36266 cl = bl;
36267 ch = bh;
36268 bl = al;
36269 bh = ah;
36270 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36271 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36272 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36273 al = al + xl | 0;
36274 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36275 tl = 991336113 + w13l | 0;
36276 th = 2162078206 + w13h + (tl >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
36277 tl = tl + hl | 0;
36278 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36279 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36280 tl = tl + xl | 0;
36281 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36282 xl = gl ^ el & (fl ^ gl) | 0;
36283 tl = tl + xl | 0;
36284 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36285 hl = gl;
36286 hh = gh;
36287 gl = fl;
36288 gh = fh;
36289 fl = el;
36290 fh = eh;
36291 el = dl + tl | 0;
36292 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36293 dl = cl;
36294 dh = ch;
36295 cl = bl;
36296 ch = bh;
36297 bl = al;
36298 bh = ah;
36299 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36300 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36301 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36302 al = al + xl | 0;
36303 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36304 tl = 633803317 + w14l | 0;
36305 th = 2614888103 + w14h + (tl >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
36306 tl = tl + hl | 0;
36307 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36308 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36309 tl = tl + xl | 0;
36310 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36311 xl = gl ^ el & (fl ^ gl) | 0;
36312 tl = tl + xl | 0;
36313 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36314 hl = gl;
36315 hh = gh;
36316 gl = fl;
36317 gh = fh;
36318 fl = el;
36319 fh = eh;
36320 el = dl + tl | 0;
36321 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36322 dl = cl;
36323 dh = ch;
36324 cl = bl;
36325 ch = bh;
36326 bl = al;
36327 bh = ah;
36328 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36329 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36330 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36331 al = al + xl | 0;
36332 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36333 tl = 3479774868 + w15l | 0;
36334 th = 3248222580 + w15h + (tl >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
36335 tl = tl + hl | 0;
36336 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36337 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36338 tl = tl + xl | 0;
36339 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36340 xl = gl ^ el & (fl ^ gl) | 0;
36341 tl = tl + xl | 0;
36342 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36343 hl = gl;
36344 hh = gh;
36345 gl = fl;
36346 gh = fh;
36347 fl = el;
36348 fh = eh;
36349 el = dl + tl | 0;
36350 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36351 dl = cl;
36352 dh = ch;
36353 cl = bl;
36354 ch = bh;
36355 bl = al;
36356 bh = ah;
36357 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36358 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36359 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36360 al = al + xl | 0;
36361 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36362 w0l = w0l + w9l | 0;
36363 w0h = w0h + w9h + (w0l >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
36364 xl = (w1l >>> 1 | w1h << 31) ^ (w1l >>> 8 | w1h << 24) ^ (w1l >>> 7 | w1h << 25) | 0;
36365 w0l = w0l + xl | 0;
36366 w0h = w0h + ((w1h >>> 1 | w1l << 31) ^ (w1h >>> 8 | w1l << 24) ^ w1h >>> 7) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36367 xl = (w14l >>> 19 | w14h << 13) ^ (w14l << 3 | w14h >>> 29) ^ (w14l >>> 6 | w14h << 26) | 0;
36368 w0l = w0l + xl | 0;
36369 w0h = w0h + ((w14h >>> 19 | w14l << 13) ^ (w14h << 3 | w14l >>> 29) ^ w14h >>> 6) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36370 tl = 2666613458 + w0l | 0;
36371 th = 3835390401 + w0h + (tl >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
36372 tl = tl + hl | 0;
36373 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36374 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36375 tl = tl + xl | 0;
36376 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36377 xl = gl ^ el & (fl ^ gl) | 0;
36378 tl = tl + xl | 0;
36379 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36380 hl = gl;
36381 hh = gh;
36382 gl = fl;
36383 gh = fh;
36384 fl = el;
36385 fh = eh;
36386 el = dl + tl | 0;
36387 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36388 dl = cl;
36389 dh = ch;
36390 cl = bl;
36391 ch = bh;
36392 bl = al;
36393 bh = ah;
36394 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36395 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36396 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36397 al = al + xl | 0;
36398 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36399 w1l = w1l + w10l | 0;
36400 w1h = w1h + w10h + (w1l >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
36401 xl = (w2l >>> 1 | w2h << 31) ^ (w2l >>> 8 | w2h << 24) ^ (w2l >>> 7 | w2h << 25) | 0;
36402 w1l = w1l + xl | 0;
36403 w1h = w1h + ((w2h >>> 1 | w2l << 31) ^ (w2h >>> 8 | w2l << 24) ^ w2h >>> 7) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36404 xl = (w15l >>> 19 | w15h << 13) ^ (w15l << 3 | w15h >>> 29) ^ (w15l >>> 6 | w15h << 26) | 0;
36405 w1l = w1l + xl | 0;
36406 w1h = w1h + ((w15h >>> 19 | w15l << 13) ^ (w15h << 3 | w15l >>> 29) ^ w15h >>> 6) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36407 tl = 944711139 + w1l | 0;
36408 th = 4022224774 + w1h + (tl >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
36409 tl = tl + hl | 0;
36410 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36411 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36412 tl = tl + xl | 0;
36413 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36414 xl = gl ^ el & (fl ^ gl) | 0;
36415 tl = tl + xl | 0;
36416 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36417 hl = gl;
36418 hh = gh;
36419 gl = fl;
36420 gh = fh;
36421 fl = el;
36422 fh = eh;
36423 el = dl + tl | 0;
36424 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36425 dl = cl;
36426 dh = ch;
36427 cl = bl;
36428 ch = bh;
36429 bl = al;
36430 bh = ah;
36431 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36432 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36433 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36434 al = al + xl | 0;
36435 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36436 w2l = w2l + w11l | 0;
36437 w2h = w2h + w11h + (w2l >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
36438 xl = (w3l >>> 1 | w3h << 31) ^ (w3l >>> 8 | w3h << 24) ^ (w3l >>> 7 | w3h << 25) | 0;
36439 w2l = w2l + xl | 0;
36440 w2h = w2h + ((w3h >>> 1 | w3l << 31) ^ (w3h >>> 8 | w3l << 24) ^ w3h >>> 7) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36441 xl = (w0l >>> 19 | w0h << 13) ^ (w0l << 3 | w0h >>> 29) ^ (w0l >>> 6 | w0h << 26) | 0;
36442 w2l = w2l + xl | 0;
36443 w2h = w2h + ((w0h >>> 19 | w0l << 13) ^ (w0h << 3 | w0l >>> 29) ^ w0h >>> 6) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36444 tl = 2341262773 + w2l | 0;
36445 th = 264347078 + w2h + (tl >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
36446 tl = tl + hl | 0;
36447 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36448 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36449 tl = tl + xl | 0;
36450 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36451 xl = gl ^ el & (fl ^ gl) | 0;
36452 tl = tl + xl | 0;
36453 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36454 hl = gl;
36455 hh = gh;
36456 gl = fl;
36457 gh = fh;
36458 fl = el;
36459 fh = eh;
36460 el = dl + tl | 0;
36461 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36462 dl = cl;
36463 dh = ch;
36464 cl = bl;
36465 ch = bh;
36466 bl = al;
36467 bh = ah;
36468 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36469 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36470 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36471 al = al + xl | 0;
36472 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36473 w3l = w3l + w12l | 0;
36474 w3h = w3h + w12h + (w3l >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
36475 xl = (w4l >>> 1 | w4h << 31) ^ (w4l >>> 8 | w4h << 24) ^ (w4l >>> 7 | w4h << 25) | 0;
36476 w3l = w3l + xl | 0;
36477 w3h = w3h + ((w4h >>> 1 | w4l << 31) ^ (w4h >>> 8 | w4l << 24) ^ w4h >>> 7) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36478 xl = (w1l >>> 19 | w1h << 13) ^ (w1l << 3 | w1h >>> 29) ^ (w1l >>> 6 | w1h << 26) | 0;
36479 w3l = w3l + xl | 0;
36480 w3h = w3h + ((w1h >>> 19 | w1l << 13) ^ (w1h << 3 | w1l >>> 29) ^ w1h >>> 6) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36481 tl = 2007800933 + w3l | 0;
36482 th = 604807628 + w3h + (tl >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
36483 tl = tl + hl | 0;
36484 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36485 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36486 tl = tl + xl | 0;
36487 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36488 xl = gl ^ el & (fl ^ gl) | 0;
36489 tl = tl + xl | 0;
36490 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36491 hl = gl;
36492 hh = gh;
36493 gl = fl;
36494 gh = fh;
36495 fl = el;
36496 fh = eh;
36497 el = dl + tl | 0;
36498 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36499 dl = cl;
36500 dh = ch;
36501 cl = bl;
36502 ch = bh;
36503 bl = al;
36504 bh = ah;
36505 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36506 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36507 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36508 al = al + xl | 0;
36509 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36510 w4l = w4l + w13l | 0;
36511 w4h = w4h + w13h + (w4l >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
36512 xl = (w5l >>> 1 | w5h << 31) ^ (w5l >>> 8 | w5h << 24) ^ (w5l >>> 7 | w5h << 25) | 0;
36513 w4l = w4l + xl | 0;
36514 w4h = w4h + ((w5h >>> 1 | w5l << 31) ^ (w5h >>> 8 | w5l << 24) ^ w5h >>> 7) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36515 xl = (w2l >>> 19 | w2h << 13) ^ (w2l << 3 | w2h >>> 29) ^ (w2l >>> 6 | w2h << 26) | 0;
36516 w4l = w4l + xl | 0;
36517 w4h = w4h + ((w2h >>> 19 | w2l << 13) ^ (w2h << 3 | w2l >>> 29) ^ w2h >>> 6) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36518 tl = 1495990901 + w4l | 0;
36519 th = 770255983 + w4h + (tl >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
36520 tl = tl + hl | 0;
36521 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36522 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36523 tl = tl + xl | 0;
36524 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36525 xl = gl ^ el & (fl ^ gl) | 0;
36526 tl = tl + xl | 0;
36527 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36528 hl = gl;
36529 hh = gh;
36530 gl = fl;
36531 gh = fh;
36532 fl = el;
36533 fh = eh;
36534 el = dl + tl | 0;
36535 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36536 dl = cl;
36537 dh = ch;
36538 cl = bl;
36539 ch = bh;
36540 bl = al;
36541 bh = ah;
36542 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36543 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36544 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36545 al = al + xl | 0;
36546 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36547 w5l = w5l + w14l | 0;
36548 w5h = w5h + w14h + (w5l >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
36549 xl = (w6l >>> 1 | w6h << 31) ^ (w6l >>> 8 | w6h << 24) ^ (w6l >>> 7 | w6h << 25) | 0;
36550 w5l = w5l + xl | 0;
36551 w5h = w5h + ((w6h >>> 1 | w6l << 31) ^ (w6h >>> 8 | w6l << 24) ^ w6h >>> 7) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36552 xl = (w3l >>> 19 | w3h << 13) ^ (w3l << 3 | w3h >>> 29) ^ (w3l >>> 6 | w3h << 26) | 0;
36553 w5l = w5l + xl | 0;
36554 w5h = w5h + ((w3h >>> 19 | w3l << 13) ^ (w3h << 3 | w3l >>> 29) ^ w3h >>> 6) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36555 tl = 1856431235 + w5l | 0;
36556 th = 1249150122 + w5h + (tl >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
36557 tl = tl + hl | 0;
36558 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36559 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36560 tl = tl + xl | 0;
36561 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36562 xl = gl ^ el & (fl ^ gl) | 0;
36563 tl = tl + xl | 0;
36564 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36565 hl = gl;
36566 hh = gh;
36567 gl = fl;
36568 gh = fh;
36569 fl = el;
36570 fh = eh;
36571 el = dl + tl | 0;
36572 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36573 dl = cl;
36574 dh = ch;
36575 cl = bl;
36576 ch = bh;
36577 bl = al;
36578 bh = ah;
36579 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36580 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36581 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36582 al = al + xl | 0;
36583 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36584 w6l = w6l + w15l | 0;
36585 w6h = w6h + w15h + (w6l >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
36586 xl = (w7l >>> 1 | w7h << 31) ^ (w7l >>> 8 | w7h << 24) ^ (w7l >>> 7 | w7h << 25) | 0;
36587 w6l = w6l + xl | 0;
36588 w6h = w6h + ((w7h >>> 1 | w7l << 31) ^ (w7h >>> 8 | w7l << 24) ^ w7h >>> 7) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36589 xl = (w4l >>> 19 | w4h << 13) ^ (w4l << 3 | w4h >>> 29) ^ (w4l >>> 6 | w4h << 26) | 0;
36590 w6l = w6l + xl | 0;
36591 w6h = w6h + ((w4h >>> 19 | w4l << 13) ^ (w4h << 3 | w4l >>> 29) ^ w4h >>> 6) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36592 tl = 3175218132 + w6l | 0;
36593 th = 1555081692 + w6h + (tl >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
36594 tl = tl + hl | 0;
36595 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36596 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36597 tl = tl + xl | 0;
36598 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36599 xl = gl ^ el & (fl ^ gl) | 0;
36600 tl = tl + xl | 0;
36601 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36602 hl = gl;
36603 hh = gh;
36604 gl = fl;
36605 gh = fh;
36606 fl = el;
36607 fh = eh;
36608 el = dl + tl | 0;
36609 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36610 dl = cl;
36611 dh = ch;
36612 cl = bl;
36613 ch = bh;
36614 bl = al;
36615 bh = ah;
36616 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36617 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36618 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36619 al = al + xl | 0;
36620 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36621 w7l = w7l + w0l | 0;
36622 w7h = w7h + w0h + (w7l >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
36623 xl = (w8l >>> 1 | w8h << 31) ^ (w8l >>> 8 | w8h << 24) ^ (w8l >>> 7 | w8h << 25) | 0;
36624 w7l = w7l + xl | 0;
36625 w7h = w7h + ((w8h >>> 1 | w8l << 31) ^ (w8h >>> 8 | w8l << 24) ^ w8h >>> 7) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36626 xl = (w5l >>> 19 | w5h << 13) ^ (w5l << 3 | w5h >>> 29) ^ (w5l >>> 6 | w5h << 26) | 0;
36627 w7l = w7l + xl | 0;
36628 w7h = w7h + ((w5h >>> 19 | w5l << 13) ^ (w5h << 3 | w5l >>> 29) ^ w5h >>> 6) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36629 tl = 2198950837 + w7l | 0;
36630 th = 1996064986 + w7h + (tl >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
36631 tl = tl + hl | 0;
36632 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36633 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36634 tl = tl + xl | 0;
36635 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36636 xl = gl ^ el & (fl ^ gl) | 0;
36637 tl = tl + xl | 0;
36638 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36639 hl = gl;
36640 hh = gh;
36641 gl = fl;
36642 gh = fh;
36643 fl = el;
36644 fh = eh;
36645 el = dl + tl | 0;
36646 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36647 dl = cl;
36648 dh = ch;
36649 cl = bl;
36650 ch = bh;
36651 bl = al;
36652 bh = ah;
36653 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36654 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36655 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36656 al = al + xl | 0;
36657 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36658 w8l = w8l + w1l | 0;
36659 w8h = w8h + w1h + (w8l >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
36660 xl = (w9l >>> 1 | w9h << 31) ^ (w9l >>> 8 | w9h << 24) ^ (w9l >>> 7 | w9h << 25) | 0;
36661 w8l = w8l + xl | 0;
36662 w8h = w8h + ((w9h >>> 1 | w9l << 31) ^ (w9h >>> 8 | w9l << 24) ^ w9h >>> 7) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36663 xl = (w6l >>> 19 | w6h << 13) ^ (w6l << 3 | w6h >>> 29) ^ (w6l >>> 6 | w6h << 26) | 0;
36664 w8l = w8l + xl | 0;
36665 w8h = w8h + ((w6h >>> 19 | w6l << 13) ^ (w6h << 3 | w6l >>> 29) ^ w6h >>> 6) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36666 tl = 3999719339 + w8l | 0;
36667 th = 2554220882 + w8h + (tl >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
36668 tl = tl + hl | 0;
36669 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36670 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36671 tl = tl + xl | 0;
36672 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36673 xl = gl ^ el & (fl ^ gl) | 0;
36674 tl = tl + xl | 0;
36675 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36676 hl = gl;
36677 hh = gh;
36678 gl = fl;
36679 gh = fh;
36680 fl = el;
36681 fh = eh;
36682 el = dl + tl | 0;
36683 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36684 dl = cl;
36685 dh = ch;
36686 cl = bl;
36687 ch = bh;
36688 bl = al;
36689 bh = ah;
36690 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36691 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36692 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36693 al = al + xl | 0;
36694 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36695 w9l = w9l + w2l | 0;
36696 w9h = w9h + w2h + (w9l >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
36697 xl = (w10l >>> 1 | w10h << 31) ^ (w10l >>> 8 | w10h << 24) ^ (w10l >>> 7 | w10h << 25) | 0;
36698 w9l = w9l + xl | 0;
36699 w9h = w9h + ((w10h >>> 1 | w10l << 31) ^ (w10h >>> 8 | w10l << 24) ^ w10h >>> 7) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36700 xl = (w7l >>> 19 | w7h << 13) ^ (w7l << 3 | w7h >>> 29) ^ (w7l >>> 6 | w7h << 26) | 0;
36701 w9l = w9l + xl | 0;
36702 w9h = w9h + ((w7h >>> 19 | w7l << 13) ^ (w7h << 3 | w7l >>> 29) ^ w7h >>> 6) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36703 tl = 766784016 + w9l | 0;
36704 th = 2821834349 + w9h + (tl >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
36705 tl = tl + hl | 0;
36706 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36707 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36708 tl = tl + xl | 0;
36709 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36710 xl = gl ^ el & (fl ^ gl) | 0;
36711 tl = tl + xl | 0;
36712 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36713 hl = gl;
36714 hh = gh;
36715 gl = fl;
36716 gh = fh;
36717 fl = el;
36718 fh = eh;
36719 el = dl + tl | 0;
36720 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36721 dl = cl;
36722 dh = ch;
36723 cl = bl;
36724 ch = bh;
36725 bl = al;
36726 bh = ah;
36727 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36728 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36729 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36730 al = al + xl | 0;
36731 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36732 w10l = w10l + w3l | 0;
36733 w10h = w10h + w3h + (w10l >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
36734 xl = (w11l >>> 1 | w11h << 31) ^ (w11l >>> 8 | w11h << 24) ^ (w11l >>> 7 | w11h << 25) | 0;
36735 w10l = w10l + xl | 0;
36736 w10h = w10h + ((w11h >>> 1 | w11l << 31) ^ (w11h >>> 8 | w11l << 24) ^ w11h >>> 7) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36737 xl = (w8l >>> 19 | w8h << 13) ^ (w8l << 3 | w8h >>> 29) ^ (w8l >>> 6 | w8h << 26) | 0;
36738 w10l = w10l + xl | 0;
36739 w10h = w10h + ((w8h >>> 19 | w8l << 13) ^ (w8h << 3 | w8l >>> 29) ^ w8h >>> 6) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36740 tl = 2566594879 + w10l | 0;
36741 th = 2952996808 + w10h + (tl >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
36742 tl = tl + hl | 0;
36743 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36744 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36745 tl = tl + xl | 0;
36746 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36747 xl = gl ^ el & (fl ^ gl) | 0;
36748 tl = tl + xl | 0;
36749 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36750 hl = gl;
36751 hh = gh;
36752 gl = fl;
36753 gh = fh;
36754 fl = el;
36755 fh = eh;
36756 el = dl + tl | 0;
36757 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36758 dl = cl;
36759 dh = ch;
36760 cl = bl;
36761 ch = bh;
36762 bl = al;
36763 bh = ah;
36764 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36765 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36766 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36767 al = al + xl | 0;
36768 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36769 w11l = w11l + w4l | 0;
36770 w11h = w11h + w4h + (w11l >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
36771 xl = (w12l >>> 1 | w12h << 31) ^ (w12l >>> 8 | w12h << 24) ^ (w12l >>> 7 | w12h << 25) | 0;
36772 w11l = w11l + xl | 0;
36773 w11h = w11h + ((w12h >>> 1 | w12l << 31) ^ (w12h >>> 8 | w12l << 24) ^ w12h >>> 7) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36774 xl = (w9l >>> 19 | w9h << 13) ^ (w9l << 3 | w9h >>> 29) ^ (w9l >>> 6 | w9h << 26) | 0;
36775 w11l = w11l + xl | 0;
36776 w11h = w11h + ((w9h >>> 19 | w9l << 13) ^ (w9h << 3 | w9l >>> 29) ^ w9h >>> 6) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36777 tl = 3203337956 + w11l | 0;
36778 th = 3210313671 + w11h + (tl >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
36779 tl = tl + hl | 0;
36780 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36781 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36782 tl = tl + xl | 0;
36783 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36784 xl = gl ^ el & (fl ^ gl) | 0;
36785 tl = tl + xl | 0;
36786 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36787 hl = gl;
36788 hh = gh;
36789 gl = fl;
36790 gh = fh;
36791 fl = el;
36792 fh = eh;
36793 el = dl + tl | 0;
36794 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36795 dl = cl;
36796 dh = ch;
36797 cl = bl;
36798 ch = bh;
36799 bl = al;
36800 bh = ah;
36801 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36802 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36803 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36804 al = al + xl | 0;
36805 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36806 w12l = w12l + w5l | 0;
36807 w12h = w12h + w5h + (w12l >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
36808 xl = (w13l >>> 1 | w13h << 31) ^ (w13l >>> 8 | w13h << 24) ^ (w13l >>> 7 | w13h << 25) | 0;
36809 w12l = w12l + xl | 0;
36810 w12h = w12h + ((w13h >>> 1 | w13l << 31) ^ (w13h >>> 8 | w13l << 24) ^ w13h >>> 7) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36811 xl = (w10l >>> 19 | w10h << 13) ^ (w10l << 3 | w10h >>> 29) ^ (w10l >>> 6 | w10h << 26) | 0;
36812 w12l = w12l + xl | 0;
36813 w12h = w12h + ((w10h >>> 19 | w10l << 13) ^ (w10h << 3 | w10l >>> 29) ^ w10h >>> 6) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36814 tl = 1034457026 + w12l | 0;
36815 th = 3336571891 + w12h + (tl >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
36816 tl = tl + hl | 0;
36817 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36818 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36819 tl = tl + xl | 0;
36820 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36821 xl = gl ^ el & (fl ^ gl) | 0;
36822 tl = tl + xl | 0;
36823 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36824 hl = gl;
36825 hh = gh;
36826 gl = fl;
36827 gh = fh;
36828 fl = el;
36829 fh = eh;
36830 el = dl + tl | 0;
36831 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36832 dl = cl;
36833 dh = ch;
36834 cl = bl;
36835 ch = bh;
36836 bl = al;
36837 bh = ah;
36838 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36839 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36840 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36841 al = al + xl | 0;
36842 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36843 w13l = w13l + w6l | 0;
36844 w13h = w13h + w6h + (w13l >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
36845 xl = (w14l >>> 1 | w14h << 31) ^ (w14l >>> 8 | w14h << 24) ^ (w14l >>> 7 | w14h << 25) | 0;
36846 w13l = w13l + xl | 0;
36847 w13h = w13h + ((w14h >>> 1 | w14l << 31) ^ (w14h >>> 8 | w14l << 24) ^ w14h >>> 7) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36848 xl = (w11l >>> 19 | w11h << 13) ^ (w11l << 3 | w11h >>> 29) ^ (w11l >>> 6 | w11h << 26) | 0;
36849 w13l = w13l + xl | 0;
36850 w13h = w13h + ((w11h >>> 19 | w11l << 13) ^ (w11h << 3 | w11l >>> 29) ^ w11h >>> 6) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36851 tl = 2466948901 + w13l | 0;
36852 th = 3584528711 + w13h + (tl >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
36853 tl = tl + hl | 0;
36854 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36855 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36856 tl = tl + xl | 0;
36857 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36858 xl = gl ^ el & (fl ^ gl) | 0;
36859 tl = tl + xl | 0;
36860 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36861 hl = gl;
36862 hh = gh;
36863 gl = fl;
36864 gh = fh;
36865 fl = el;
36866 fh = eh;
36867 el = dl + tl | 0;
36868 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36869 dl = cl;
36870 dh = ch;
36871 cl = bl;
36872 ch = bh;
36873 bl = al;
36874 bh = ah;
36875 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36876 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36877 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36878 al = al + xl | 0;
36879 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36880 w14l = w14l + w7l | 0;
36881 w14h = w14h + w7h + (w14l >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
36882 xl = (w15l >>> 1 | w15h << 31) ^ (w15l >>> 8 | w15h << 24) ^ (w15l >>> 7 | w15h << 25) | 0;
36883 w14l = w14l + xl | 0;
36884 w14h = w14h + ((w15h >>> 1 | w15l << 31) ^ (w15h >>> 8 | w15l << 24) ^ w15h >>> 7) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36885 xl = (w12l >>> 19 | w12h << 13) ^ (w12l << 3 | w12h >>> 29) ^ (w12l >>> 6 | w12h << 26) | 0;
36886 w14l = w14l + xl | 0;
36887 w14h = w14h + ((w12h >>> 19 | w12l << 13) ^ (w12h << 3 | w12l >>> 29) ^ w12h >>> 6) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36888 tl = 3758326383 + w14l | 0;
36889 th = 113926993 + w14h + (tl >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
36890 tl = tl + hl | 0;
36891 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36892 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36893 tl = tl + xl | 0;
36894 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36895 xl = gl ^ el & (fl ^ gl) | 0;
36896 tl = tl + xl | 0;
36897 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36898 hl = gl;
36899 hh = gh;
36900 gl = fl;
36901 gh = fh;
36902 fl = el;
36903 fh = eh;
36904 el = dl + tl | 0;
36905 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36906 dl = cl;
36907 dh = ch;
36908 cl = bl;
36909 ch = bh;
36910 bl = al;
36911 bh = ah;
36912 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36913 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36914 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36915 al = al + xl | 0;
36916 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36917 w15l = w15l + w8l | 0;
36918 w15h = w15h + w8h + (w15l >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
36919 xl = (w0l >>> 1 | w0h << 31) ^ (w0l >>> 8 | w0h << 24) ^ (w0l >>> 7 | w0h << 25) | 0;
36920 w15l = w15l + xl | 0;
36921 w15h = w15h + ((w0h >>> 1 | w0l << 31) ^ (w0h >>> 8 | w0l << 24) ^ w0h >>> 7) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36922 xl = (w13l >>> 19 | w13h << 13) ^ (w13l << 3 | w13h >>> 29) ^ (w13l >>> 6 | w13h << 26) | 0;
36923 w15l = w15l + xl | 0;
36924 w15h = w15h + ((w13h >>> 19 | w13l << 13) ^ (w13h << 3 | w13l >>> 29) ^ w13h >>> 6) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36925 tl = 168717936 + w15l | 0;
36926 th = 338241895 + w15h + (tl >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
36927 tl = tl + hl | 0;
36928 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36929 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36930 tl = tl + xl | 0;
36931 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36932 xl = gl ^ el & (fl ^ gl) | 0;
36933 tl = tl + xl | 0;
36934 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36935 hl = gl;
36936 hh = gh;
36937 gl = fl;
36938 gh = fh;
36939 fl = el;
36940 fh = eh;
36941 el = dl + tl | 0;
36942 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36943 dl = cl;
36944 dh = ch;
36945 cl = bl;
36946 ch = bh;
36947 bl = al;
36948 bh = ah;
36949 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36950 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36951 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36952 al = al + xl | 0;
36953 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36954 w0l = w0l + w9l | 0;
36955 w0h = w0h + w9h + (w0l >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
36956 xl = (w1l >>> 1 | w1h << 31) ^ (w1l >>> 8 | w1h << 24) ^ (w1l >>> 7 | w1h << 25) | 0;
36957 w0l = w0l + xl | 0;
36958 w0h = w0h + ((w1h >>> 1 | w1l << 31) ^ (w1h >>> 8 | w1l << 24) ^ w1h >>> 7) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36959 xl = (w14l >>> 19 | w14h << 13) ^ (w14l << 3 | w14h >>> 29) ^ (w14l >>> 6 | w14h << 26) | 0;
36960 w0l = w0l + xl | 0;
36961 w0h = w0h + ((w14h >>> 19 | w14l << 13) ^ (w14h << 3 | w14l >>> 29) ^ w14h >>> 6) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36962 tl = 1188179964 + w0l | 0;
36963 th = 666307205 + w0h + (tl >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
36964 tl = tl + hl | 0;
36965 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
36966 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
36967 tl = tl + xl | 0;
36968 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36969 xl = gl ^ el & (fl ^ gl) | 0;
36970 tl = tl + xl | 0;
36971 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36972 hl = gl;
36973 hh = gh;
36974 gl = fl;
36975 gh = fh;
36976 fl = el;
36977 fh = eh;
36978 el = dl + tl | 0;
36979 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
36980 dl = cl;
36981 dh = ch;
36982 cl = bl;
36983 ch = bh;
36984 bl = al;
36985 bh = ah;
36986 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
36987 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
36988 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
36989 al = al + xl | 0;
36990 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36991 w1l = w1l + w10l | 0;
36992 w1h = w1h + w10h + (w1l >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
36993 xl = (w2l >>> 1 | w2h << 31) ^ (w2l >>> 8 | w2h << 24) ^ (w2l >>> 7 | w2h << 25) | 0;
36994 w1l = w1l + xl | 0;
36995 w1h = w1h + ((w2h >>> 1 | w2l << 31) ^ (w2h >>> 8 | w2l << 24) ^ w2h >>> 7) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36996 xl = (w15l >>> 19 | w15h << 13) ^ (w15l << 3 | w15h >>> 29) ^ (w15l >>> 6 | w15h << 26) | 0;
36997 w1l = w1l + xl | 0;
36998 w1h = w1h + ((w15h >>> 19 | w15l << 13) ^ (w15h << 3 | w15l >>> 29) ^ w15h >>> 6) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
36999 tl = 1546045734 + w1l | 0;
37000 th = 773529912 + w1h + (tl >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
37001 tl = tl + hl | 0;
37002 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37003 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37004 tl = tl + xl | 0;
37005 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37006 xl = gl ^ el & (fl ^ gl) | 0;
37007 tl = tl + xl | 0;
37008 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37009 hl = gl;
37010 hh = gh;
37011 gl = fl;
37012 gh = fh;
37013 fl = el;
37014 fh = eh;
37015 el = dl + tl | 0;
37016 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37017 dl = cl;
37018 dh = ch;
37019 cl = bl;
37020 ch = bh;
37021 bl = al;
37022 bh = ah;
37023 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37024 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37025 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37026 al = al + xl | 0;
37027 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37028 w2l = w2l + w11l | 0;
37029 w2h = w2h + w11h + (w2l >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
37030 xl = (w3l >>> 1 | w3h << 31) ^ (w3l >>> 8 | w3h << 24) ^ (w3l >>> 7 | w3h << 25) | 0;
37031 w2l = w2l + xl | 0;
37032 w2h = w2h + ((w3h >>> 1 | w3l << 31) ^ (w3h >>> 8 | w3l << 24) ^ w3h >>> 7) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37033 xl = (w0l >>> 19 | w0h << 13) ^ (w0l << 3 | w0h >>> 29) ^ (w0l >>> 6 | w0h << 26) | 0;
37034 w2l = w2l + xl | 0;
37035 w2h = w2h + ((w0h >>> 19 | w0l << 13) ^ (w0h << 3 | w0l >>> 29) ^ w0h >>> 6) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37036 tl = 1522805485 + w2l | 0;
37037 th = 1294757372 + w2h + (tl >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
37038 tl = tl + hl | 0;
37039 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37040 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37041 tl = tl + xl | 0;
37042 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37043 xl = gl ^ el & (fl ^ gl) | 0;
37044 tl = tl + xl | 0;
37045 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37046 hl = gl;
37047 hh = gh;
37048 gl = fl;
37049 gh = fh;
37050 fl = el;
37051 fh = eh;
37052 el = dl + tl | 0;
37053 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37054 dl = cl;
37055 dh = ch;
37056 cl = bl;
37057 ch = bh;
37058 bl = al;
37059 bh = ah;
37060 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37061 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37062 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37063 al = al + xl | 0;
37064 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37065 w3l = w3l + w12l | 0;
37066 w3h = w3h + w12h + (w3l >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
37067 xl = (w4l >>> 1 | w4h << 31) ^ (w4l >>> 8 | w4h << 24) ^ (w4l >>> 7 | w4h << 25) | 0;
37068 w3l = w3l + xl | 0;
37069 w3h = w3h + ((w4h >>> 1 | w4l << 31) ^ (w4h >>> 8 | w4l << 24) ^ w4h >>> 7) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37070 xl = (w1l >>> 19 | w1h << 13) ^ (w1l << 3 | w1h >>> 29) ^ (w1l >>> 6 | w1h << 26) | 0;
37071 w3l = w3l + xl | 0;
37072 w3h = w3h + ((w1h >>> 19 | w1l << 13) ^ (w1h << 3 | w1l >>> 29) ^ w1h >>> 6) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37073 tl = 2643833823 + w3l | 0;
37074 th = 1396182291 + w3h + (tl >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
37075 tl = tl + hl | 0;
37076 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37077 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37078 tl = tl + xl | 0;
37079 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37080 xl = gl ^ el & (fl ^ gl) | 0;
37081 tl = tl + xl | 0;
37082 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37083 hl = gl;
37084 hh = gh;
37085 gl = fl;
37086 gh = fh;
37087 fl = el;
37088 fh = eh;
37089 el = dl + tl | 0;
37090 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37091 dl = cl;
37092 dh = ch;
37093 cl = bl;
37094 ch = bh;
37095 bl = al;
37096 bh = ah;
37097 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37098 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37099 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37100 al = al + xl | 0;
37101 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37102 w4l = w4l + w13l | 0;
37103 w4h = w4h + w13h + (w4l >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
37104 xl = (w5l >>> 1 | w5h << 31) ^ (w5l >>> 8 | w5h << 24) ^ (w5l >>> 7 | w5h << 25) | 0;
37105 w4l = w4l + xl | 0;
37106 w4h = w4h + ((w5h >>> 1 | w5l << 31) ^ (w5h >>> 8 | w5l << 24) ^ w5h >>> 7) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37107 xl = (w2l >>> 19 | w2h << 13) ^ (w2l << 3 | w2h >>> 29) ^ (w2l >>> 6 | w2h << 26) | 0;
37108 w4l = w4l + xl | 0;
37109 w4h = w4h + ((w2h >>> 19 | w2l << 13) ^ (w2h << 3 | w2l >>> 29) ^ w2h >>> 6) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37110 tl = 2343527390 + w4l | 0;
37111 th = 1695183700 + w4h + (tl >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
37112 tl = tl + hl | 0;
37113 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37114 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37115 tl = tl + xl | 0;
37116 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37117 xl = gl ^ el & (fl ^ gl) | 0;
37118 tl = tl + xl | 0;
37119 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37120 hl = gl;
37121 hh = gh;
37122 gl = fl;
37123 gh = fh;
37124 fl = el;
37125 fh = eh;
37126 el = dl + tl | 0;
37127 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37128 dl = cl;
37129 dh = ch;
37130 cl = bl;
37131 ch = bh;
37132 bl = al;
37133 bh = ah;
37134 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37135 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37136 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37137 al = al + xl | 0;
37138 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37139 w5l = w5l + w14l | 0;
37140 w5h = w5h + w14h + (w5l >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
37141 xl = (w6l >>> 1 | w6h << 31) ^ (w6l >>> 8 | w6h << 24) ^ (w6l >>> 7 | w6h << 25) | 0;
37142 w5l = w5l + xl | 0;
37143 w5h = w5h + ((w6h >>> 1 | w6l << 31) ^ (w6h >>> 8 | w6l << 24) ^ w6h >>> 7) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37144 xl = (w3l >>> 19 | w3h << 13) ^ (w3l << 3 | w3h >>> 29) ^ (w3l >>> 6 | w3h << 26) | 0;
37145 w5l = w5l + xl | 0;
37146 w5h = w5h + ((w3h >>> 19 | w3l << 13) ^ (w3h << 3 | w3l >>> 29) ^ w3h >>> 6) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37147 tl = 1014477480 + w5l | 0;
37148 th = 1986661051 + w5h + (tl >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
37149 tl = tl + hl | 0;
37150 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37151 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37152 tl = tl + xl | 0;
37153 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37154 xl = gl ^ el & (fl ^ gl) | 0;
37155 tl = tl + xl | 0;
37156 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37157 hl = gl;
37158 hh = gh;
37159 gl = fl;
37160 gh = fh;
37161 fl = el;
37162 fh = eh;
37163 el = dl + tl | 0;
37164 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37165 dl = cl;
37166 dh = ch;
37167 cl = bl;
37168 ch = bh;
37169 bl = al;
37170 bh = ah;
37171 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37172 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37173 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37174 al = al + xl | 0;
37175 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37176 w6l = w6l + w15l | 0;
37177 w6h = w6h + w15h + (w6l >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
37178 xl = (w7l >>> 1 | w7h << 31) ^ (w7l >>> 8 | w7h << 24) ^ (w7l >>> 7 | w7h << 25) | 0;
37179 w6l = w6l + xl | 0;
37180 w6h = w6h + ((w7h >>> 1 | w7l << 31) ^ (w7h >>> 8 | w7l << 24) ^ w7h >>> 7) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37181 xl = (w4l >>> 19 | w4h << 13) ^ (w4l << 3 | w4h >>> 29) ^ (w4l >>> 6 | w4h << 26) | 0;
37182 w6l = w6l + xl | 0;
37183 w6h = w6h + ((w4h >>> 19 | w4l << 13) ^ (w4h << 3 | w4l >>> 29) ^ w4h >>> 6) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37184 tl = 1206759142 + w6l | 0;
37185 th = 2177026350 + w6h + (tl >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
37186 tl = tl + hl | 0;
37187 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37188 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37189 tl = tl + xl | 0;
37190 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37191 xl = gl ^ el & (fl ^ gl) | 0;
37192 tl = tl + xl | 0;
37193 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37194 hl = gl;
37195 hh = gh;
37196 gl = fl;
37197 gh = fh;
37198 fl = el;
37199 fh = eh;
37200 el = dl + tl | 0;
37201 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37202 dl = cl;
37203 dh = ch;
37204 cl = bl;
37205 ch = bh;
37206 bl = al;
37207 bh = ah;
37208 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37209 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37210 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37211 al = al + xl | 0;
37212 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37213 w7l = w7l + w0l | 0;
37214 w7h = w7h + w0h + (w7l >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
37215 xl = (w8l >>> 1 | w8h << 31) ^ (w8l >>> 8 | w8h << 24) ^ (w8l >>> 7 | w8h << 25) | 0;
37216 w7l = w7l + xl | 0;
37217 w7h = w7h + ((w8h >>> 1 | w8l << 31) ^ (w8h >>> 8 | w8l << 24) ^ w8h >>> 7) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37218 xl = (w5l >>> 19 | w5h << 13) ^ (w5l << 3 | w5h >>> 29) ^ (w5l >>> 6 | w5h << 26) | 0;
37219 w7l = w7l + xl | 0;
37220 w7h = w7h + ((w5h >>> 19 | w5l << 13) ^ (w5h << 3 | w5l >>> 29) ^ w5h >>> 6) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37221 tl = 344077627 + w7l | 0;
37222 th = 2456956037 + w7h + (tl >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
37223 tl = tl + hl | 0;
37224 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37225 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37226 tl = tl + xl | 0;
37227 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37228 xl = gl ^ el & (fl ^ gl) | 0;
37229 tl = tl + xl | 0;
37230 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37231 hl = gl;
37232 hh = gh;
37233 gl = fl;
37234 gh = fh;
37235 fl = el;
37236 fh = eh;
37237 el = dl + tl | 0;
37238 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37239 dl = cl;
37240 dh = ch;
37241 cl = bl;
37242 ch = bh;
37243 bl = al;
37244 bh = ah;
37245 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37246 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37247 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37248 al = al + xl | 0;
37249 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37250 w8l = w8l + w1l | 0;
37251 w8h = w8h + w1h + (w8l >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
37252 xl = (w9l >>> 1 | w9h << 31) ^ (w9l >>> 8 | w9h << 24) ^ (w9l >>> 7 | w9h << 25) | 0;
37253 w8l = w8l + xl | 0;
37254 w8h = w8h + ((w9h >>> 1 | w9l << 31) ^ (w9h >>> 8 | w9l << 24) ^ w9h >>> 7) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37255 xl = (w6l >>> 19 | w6h << 13) ^ (w6l << 3 | w6h >>> 29) ^ (w6l >>> 6 | w6h << 26) | 0;
37256 w8l = w8l + xl | 0;
37257 w8h = w8h + ((w6h >>> 19 | w6l << 13) ^ (w6h << 3 | w6l >>> 29) ^ w6h >>> 6) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37258 tl = 1290863460 + w8l | 0;
37259 th = 2730485921 + w8h + (tl >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
37260 tl = tl + hl | 0;
37261 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37262 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37263 tl = tl + xl | 0;
37264 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37265 xl = gl ^ el & (fl ^ gl) | 0;
37266 tl = tl + xl | 0;
37267 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37268 hl = gl;
37269 hh = gh;
37270 gl = fl;
37271 gh = fh;
37272 fl = el;
37273 fh = eh;
37274 el = dl + tl | 0;
37275 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37276 dl = cl;
37277 dh = ch;
37278 cl = bl;
37279 ch = bh;
37280 bl = al;
37281 bh = ah;
37282 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37283 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37284 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37285 al = al + xl | 0;
37286 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37287 w9l = w9l + w2l | 0;
37288 w9h = w9h + w2h + (w9l >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
37289 xl = (w10l >>> 1 | w10h << 31) ^ (w10l >>> 8 | w10h << 24) ^ (w10l >>> 7 | w10h << 25) | 0;
37290 w9l = w9l + xl | 0;
37291 w9h = w9h + ((w10h >>> 1 | w10l << 31) ^ (w10h >>> 8 | w10l << 24) ^ w10h >>> 7) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37292 xl = (w7l >>> 19 | w7h << 13) ^ (w7l << 3 | w7h >>> 29) ^ (w7l >>> 6 | w7h << 26) | 0;
37293 w9l = w9l + xl | 0;
37294 w9h = w9h + ((w7h >>> 19 | w7l << 13) ^ (w7h << 3 | w7l >>> 29) ^ w7h >>> 6) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37295 tl = 3158454273 + w9l | 0;
37296 th = 2820302411 + w9h + (tl >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
37297 tl = tl + hl | 0;
37298 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37299 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37300 tl = tl + xl | 0;
37301 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37302 xl = gl ^ el & (fl ^ gl) | 0;
37303 tl = tl + xl | 0;
37304 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37305 hl = gl;
37306 hh = gh;
37307 gl = fl;
37308 gh = fh;
37309 fl = el;
37310 fh = eh;
37311 el = dl + tl | 0;
37312 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37313 dl = cl;
37314 dh = ch;
37315 cl = bl;
37316 ch = bh;
37317 bl = al;
37318 bh = ah;
37319 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37320 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37321 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37322 al = al + xl | 0;
37323 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37324 w10l = w10l + w3l | 0;
37325 w10h = w10h + w3h + (w10l >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
37326 xl = (w11l >>> 1 | w11h << 31) ^ (w11l >>> 8 | w11h << 24) ^ (w11l >>> 7 | w11h << 25) | 0;
37327 w10l = w10l + xl | 0;
37328 w10h = w10h + ((w11h >>> 1 | w11l << 31) ^ (w11h >>> 8 | w11l << 24) ^ w11h >>> 7) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37329 xl = (w8l >>> 19 | w8h << 13) ^ (w8l << 3 | w8h >>> 29) ^ (w8l >>> 6 | w8h << 26) | 0;
37330 w10l = w10l + xl | 0;
37331 w10h = w10h + ((w8h >>> 19 | w8l << 13) ^ (w8h << 3 | w8l >>> 29) ^ w8h >>> 6) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37332 tl = 3505952657 + w10l | 0;
37333 th = 3259730800 + w10h + (tl >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
37334 tl = tl + hl | 0;
37335 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37336 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37337 tl = tl + xl | 0;
37338 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37339 xl = gl ^ el & (fl ^ gl) | 0;
37340 tl = tl + xl | 0;
37341 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37342 hl = gl;
37343 hh = gh;
37344 gl = fl;
37345 gh = fh;
37346 fl = el;
37347 fh = eh;
37348 el = dl + tl | 0;
37349 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37350 dl = cl;
37351 dh = ch;
37352 cl = bl;
37353 ch = bh;
37354 bl = al;
37355 bh = ah;
37356 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37357 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37358 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37359 al = al + xl | 0;
37360 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37361 w11l = w11l + w4l | 0;
37362 w11h = w11h + w4h + (w11l >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
37363 xl = (w12l >>> 1 | w12h << 31) ^ (w12l >>> 8 | w12h << 24) ^ (w12l >>> 7 | w12h << 25) | 0;
37364 w11l = w11l + xl | 0;
37365 w11h = w11h + ((w12h >>> 1 | w12l << 31) ^ (w12h >>> 8 | w12l << 24) ^ w12h >>> 7) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37366 xl = (w9l >>> 19 | w9h << 13) ^ (w9l << 3 | w9h >>> 29) ^ (w9l >>> 6 | w9h << 26) | 0;
37367 w11l = w11l + xl | 0;
37368 w11h = w11h + ((w9h >>> 19 | w9l << 13) ^ (w9h << 3 | w9l >>> 29) ^ w9h >>> 6) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37369 tl = 106217008 + w11l | 0;
37370 th = 3345764771 + w11h + (tl >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
37371 tl = tl + hl | 0;
37372 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37373 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37374 tl = tl + xl | 0;
37375 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37376 xl = gl ^ el & (fl ^ gl) | 0;
37377 tl = tl + xl | 0;
37378 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37379 hl = gl;
37380 hh = gh;
37381 gl = fl;
37382 gh = fh;
37383 fl = el;
37384 fh = eh;
37385 el = dl + tl | 0;
37386 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37387 dl = cl;
37388 dh = ch;
37389 cl = bl;
37390 ch = bh;
37391 bl = al;
37392 bh = ah;
37393 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37394 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37395 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37396 al = al + xl | 0;
37397 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37398 w12l = w12l + w5l | 0;
37399 w12h = w12h + w5h + (w12l >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
37400 xl = (w13l >>> 1 | w13h << 31) ^ (w13l >>> 8 | w13h << 24) ^ (w13l >>> 7 | w13h << 25) | 0;
37401 w12l = w12l + xl | 0;
37402 w12h = w12h + ((w13h >>> 1 | w13l << 31) ^ (w13h >>> 8 | w13l << 24) ^ w13h >>> 7) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37403 xl = (w10l >>> 19 | w10h << 13) ^ (w10l << 3 | w10h >>> 29) ^ (w10l >>> 6 | w10h << 26) | 0;
37404 w12l = w12l + xl | 0;
37405 w12h = w12h + ((w10h >>> 19 | w10l << 13) ^ (w10h << 3 | w10l >>> 29) ^ w10h >>> 6) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37406 tl = 3606008344 + w12l | 0;
37407 th = 3516065817 + w12h + (tl >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
37408 tl = tl + hl | 0;
37409 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37410 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37411 tl = tl + xl | 0;
37412 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37413 xl = gl ^ el & (fl ^ gl) | 0;
37414 tl = tl + xl | 0;
37415 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37416 hl = gl;
37417 hh = gh;
37418 gl = fl;
37419 gh = fh;
37420 fl = el;
37421 fh = eh;
37422 el = dl + tl | 0;
37423 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37424 dl = cl;
37425 dh = ch;
37426 cl = bl;
37427 ch = bh;
37428 bl = al;
37429 bh = ah;
37430 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37431 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37432 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37433 al = al + xl | 0;
37434 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37435 w13l = w13l + w6l | 0;
37436 w13h = w13h + w6h + (w13l >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
37437 xl = (w14l >>> 1 | w14h << 31) ^ (w14l >>> 8 | w14h << 24) ^ (w14l >>> 7 | w14h << 25) | 0;
37438 w13l = w13l + xl | 0;
37439 w13h = w13h + ((w14h >>> 1 | w14l << 31) ^ (w14h >>> 8 | w14l << 24) ^ w14h >>> 7) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37440 xl = (w11l >>> 19 | w11h << 13) ^ (w11l << 3 | w11h >>> 29) ^ (w11l >>> 6 | w11h << 26) | 0;
37441 w13l = w13l + xl | 0;
37442 w13h = w13h + ((w11h >>> 19 | w11l << 13) ^ (w11h << 3 | w11l >>> 29) ^ w11h >>> 6) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37443 tl = 1432725776 + w13l | 0;
37444 th = 3600352804 + w13h + (tl >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
37445 tl = tl + hl | 0;
37446 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37447 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37448 tl = tl + xl | 0;
37449 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37450 xl = gl ^ el & (fl ^ gl) | 0;
37451 tl = tl + xl | 0;
37452 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37453 hl = gl;
37454 hh = gh;
37455 gl = fl;
37456 gh = fh;
37457 fl = el;
37458 fh = eh;
37459 el = dl + tl | 0;
37460 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37461 dl = cl;
37462 dh = ch;
37463 cl = bl;
37464 ch = bh;
37465 bl = al;
37466 bh = ah;
37467 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37468 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37469 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37470 al = al + xl | 0;
37471 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37472 w14l = w14l + w7l | 0;
37473 w14h = w14h + w7h + (w14l >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
37474 xl = (w15l >>> 1 | w15h << 31) ^ (w15l >>> 8 | w15h << 24) ^ (w15l >>> 7 | w15h << 25) | 0;
37475 w14l = w14l + xl | 0;
37476 w14h = w14h + ((w15h >>> 1 | w15l << 31) ^ (w15h >>> 8 | w15l << 24) ^ w15h >>> 7) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37477 xl = (w12l >>> 19 | w12h << 13) ^ (w12l << 3 | w12h >>> 29) ^ (w12l >>> 6 | w12h << 26) | 0;
37478 w14l = w14l + xl | 0;
37479 w14h = w14h + ((w12h >>> 19 | w12l << 13) ^ (w12h << 3 | w12l >>> 29) ^ w12h >>> 6) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37480 tl = 1467031594 + w14l | 0;
37481 th = 4094571909 + w14h + (tl >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
37482 tl = tl + hl | 0;
37483 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37484 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37485 tl = tl + xl | 0;
37486 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37487 xl = gl ^ el & (fl ^ gl) | 0;
37488 tl = tl + xl | 0;
37489 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37490 hl = gl;
37491 hh = gh;
37492 gl = fl;
37493 gh = fh;
37494 fl = el;
37495 fh = eh;
37496 el = dl + tl | 0;
37497 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37498 dl = cl;
37499 dh = ch;
37500 cl = bl;
37501 ch = bh;
37502 bl = al;
37503 bh = ah;
37504 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37505 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37506 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37507 al = al + xl | 0;
37508 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37509 w15l = w15l + w8l | 0;
37510 w15h = w15h + w8h + (w15l >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
37511 xl = (w0l >>> 1 | w0h << 31) ^ (w0l >>> 8 | w0h << 24) ^ (w0l >>> 7 | w0h << 25) | 0;
37512 w15l = w15l + xl | 0;
37513 w15h = w15h + ((w0h >>> 1 | w0l << 31) ^ (w0h >>> 8 | w0l << 24) ^ w0h >>> 7) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37514 xl = (w13l >>> 19 | w13h << 13) ^ (w13l << 3 | w13h >>> 29) ^ (w13l >>> 6 | w13h << 26) | 0;
37515 w15l = w15l + xl | 0;
37516 w15h = w15h + ((w13h >>> 19 | w13l << 13) ^ (w13h << 3 | w13l >>> 29) ^ w13h >>> 6) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37517 tl = 851169720 + w15l | 0;
37518 th = 275423344 + w15h + (tl >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
37519 tl = tl + hl | 0;
37520 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37521 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37522 tl = tl + xl | 0;
37523 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37524 xl = gl ^ el & (fl ^ gl) | 0;
37525 tl = tl + xl | 0;
37526 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37527 hl = gl;
37528 hh = gh;
37529 gl = fl;
37530 gh = fh;
37531 fl = el;
37532 fh = eh;
37533 el = dl + tl | 0;
37534 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37535 dl = cl;
37536 dh = ch;
37537 cl = bl;
37538 ch = bh;
37539 bl = al;
37540 bh = ah;
37541 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37542 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37543 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37544 al = al + xl | 0;
37545 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37546 w0l = w0l + w9l | 0;
37547 w0h = w0h + w9h + (w0l >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
37548 xl = (w1l >>> 1 | w1h << 31) ^ (w1l >>> 8 | w1h << 24) ^ (w1l >>> 7 | w1h << 25) | 0;
37549 w0l = w0l + xl | 0;
37550 w0h = w0h + ((w1h >>> 1 | w1l << 31) ^ (w1h >>> 8 | w1l << 24) ^ w1h >>> 7) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37551 xl = (w14l >>> 19 | w14h << 13) ^ (w14l << 3 | w14h >>> 29) ^ (w14l >>> 6 | w14h << 26) | 0;
37552 w0l = w0l + xl | 0;
37553 w0h = w0h + ((w14h >>> 19 | w14l << 13) ^ (w14h << 3 | w14l >>> 29) ^ w14h >>> 6) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37554 tl = 3100823752 + w0l | 0;
37555 th = 430227734 + w0h + (tl >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
37556 tl = tl + hl | 0;
37557 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37558 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37559 tl = tl + xl | 0;
37560 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37561 xl = gl ^ el & (fl ^ gl) | 0;
37562 tl = tl + xl | 0;
37563 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37564 hl = gl;
37565 hh = gh;
37566 gl = fl;
37567 gh = fh;
37568 fl = el;
37569 fh = eh;
37570 el = dl + tl | 0;
37571 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37572 dl = cl;
37573 dh = ch;
37574 cl = bl;
37575 ch = bh;
37576 bl = al;
37577 bh = ah;
37578 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37579 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37580 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37581 al = al + xl | 0;
37582 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37583 w1l = w1l + w10l | 0;
37584 w1h = w1h + w10h + (w1l >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
37585 xl = (w2l >>> 1 | w2h << 31) ^ (w2l >>> 8 | w2h << 24) ^ (w2l >>> 7 | w2h << 25) | 0;
37586 w1l = w1l + xl | 0;
37587 w1h = w1h + ((w2h >>> 1 | w2l << 31) ^ (w2h >>> 8 | w2l << 24) ^ w2h >>> 7) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37588 xl = (w15l >>> 19 | w15h << 13) ^ (w15l << 3 | w15h >>> 29) ^ (w15l >>> 6 | w15h << 26) | 0;
37589 w1l = w1l + xl | 0;
37590 w1h = w1h + ((w15h >>> 19 | w15l << 13) ^ (w15h << 3 | w15l >>> 29) ^ w15h >>> 6) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37591 tl = 1363258195 + w1l | 0;
37592 th = 506948616 + w1h + (tl >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
37593 tl = tl + hl | 0;
37594 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37595 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37596 tl = tl + xl | 0;
37597 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37598 xl = gl ^ el & (fl ^ gl) | 0;
37599 tl = tl + xl | 0;
37600 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37601 hl = gl;
37602 hh = gh;
37603 gl = fl;
37604 gh = fh;
37605 fl = el;
37606 fh = eh;
37607 el = dl + tl | 0;
37608 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37609 dl = cl;
37610 dh = ch;
37611 cl = bl;
37612 ch = bh;
37613 bl = al;
37614 bh = ah;
37615 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37616 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37617 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37618 al = al + xl | 0;
37619 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37620 w2l = w2l + w11l | 0;
37621 w2h = w2h + w11h + (w2l >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
37622 xl = (w3l >>> 1 | w3h << 31) ^ (w3l >>> 8 | w3h << 24) ^ (w3l >>> 7 | w3h << 25) | 0;
37623 w2l = w2l + xl | 0;
37624 w2h = w2h + ((w3h >>> 1 | w3l << 31) ^ (w3h >>> 8 | w3l << 24) ^ w3h >>> 7) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37625 xl = (w0l >>> 19 | w0h << 13) ^ (w0l << 3 | w0h >>> 29) ^ (w0l >>> 6 | w0h << 26) | 0;
37626 w2l = w2l + xl | 0;
37627 w2h = w2h + ((w0h >>> 19 | w0l << 13) ^ (w0h << 3 | w0l >>> 29) ^ w0h >>> 6) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37628 tl = 3750685593 + w2l | 0;
37629 th = 659060556 + w2h + (tl >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
37630 tl = tl + hl | 0;
37631 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37632 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37633 tl = tl + xl | 0;
37634 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37635 xl = gl ^ el & (fl ^ gl) | 0;
37636 tl = tl + xl | 0;
37637 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37638 hl = gl;
37639 hh = gh;
37640 gl = fl;
37641 gh = fh;
37642 fl = el;
37643 fh = eh;
37644 el = dl + tl | 0;
37645 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37646 dl = cl;
37647 dh = ch;
37648 cl = bl;
37649 ch = bh;
37650 bl = al;
37651 bh = ah;
37652 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37653 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37654 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37655 al = al + xl | 0;
37656 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37657 w3l = w3l + w12l | 0;
37658 w3h = w3h + w12h + (w3l >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
37659 xl = (w4l >>> 1 | w4h << 31) ^ (w4l >>> 8 | w4h << 24) ^ (w4l >>> 7 | w4h << 25) | 0;
37660 w3l = w3l + xl | 0;
37661 w3h = w3h + ((w4h >>> 1 | w4l << 31) ^ (w4h >>> 8 | w4l << 24) ^ w4h >>> 7) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37662 xl = (w1l >>> 19 | w1h << 13) ^ (w1l << 3 | w1h >>> 29) ^ (w1l >>> 6 | w1h << 26) | 0;
37663 w3l = w3l + xl | 0;
37664 w3h = w3h + ((w1h >>> 19 | w1l << 13) ^ (w1h << 3 | w1l >>> 29) ^ w1h >>> 6) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37665 tl = 3785050280 + w3l | 0;
37666 th = 883997877 + w3h + (tl >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
37667 tl = tl + hl | 0;
37668 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37669 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37670 tl = tl + xl | 0;
37671 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37672 xl = gl ^ el & (fl ^ gl) | 0;
37673 tl = tl + xl | 0;
37674 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37675 hl = gl;
37676 hh = gh;
37677 gl = fl;
37678 gh = fh;
37679 fl = el;
37680 fh = eh;
37681 el = dl + tl | 0;
37682 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37683 dl = cl;
37684 dh = ch;
37685 cl = bl;
37686 ch = bh;
37687 bl = al;
37688 bh = ah;
37689 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37690 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37691 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37692 al = al + xl | 0;
37693 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37694 w4l = w4l + w13l | 0;
37695 w4h = w4h + w13h + (w4l >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
37696 xl = (w5l >>> 1 | w5h << 31) ^ (w5l >>> 8 | w5h << 24) ^ (w5l >>> 7 | w5h << 25) | 0;
37697 w4l = w4l + xl | 0;
37698 w4h = w4h + ((w5h >>> 1 | w5l << 31) ^ (w5h >>> 8 | w5l << 24) ^ w5h >>> 7) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37699 xl = (w2l >>> 19 | w2h << 13) ^ (w2l << 3 | w2h >>> 29) ^ (w2l >>> 6 | w2h << 26) | 0;
37700 w4l = w4l + xl | 0;
37701 w4h = w4h + ((w2h >>> 19 | w2l << 13) ^ (w2h << 3 | w2l >>> 29) ^ w2h >>> 6) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37702 tl = 3318307427 + w4l | 0;
37703 th = 958139571 + w4h + (tl >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
37704 tl = tl + hl | 0;
37705 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37706 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37707 tl = tl + xl | 0;
37708 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37709 xl = gl ^ el & (fl ^ gl) | 0;
37710 tl = tl + xl | 0;
37711 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37712 hl = gl;
37713 hh = gh;
37714 gl = fl;
37715 gh = fh;
37716 fl = el;
37717 fh = eh;
37718 el = dl + tl | 0;
37719 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37720 dl = cl;
37721 dh = ch;
37722 cl = bl;
37723 ch = bh;
37724 bl = al;
37725 bh = ah;
37726 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37727 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37728 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37729 al = al + xl | 0;
37730 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37731 w5l = w5l + w14l | 0;
37732 w5h = w5h + w14h + (w5l >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
37733 xl = (w6l >>> 1 | w6h << 31) ^ (w6l >>> 8 | w6h << 24) ^ (w6l >>> 7 | w6h << 25) | 0;
37734 w5l = w5l + xl | 0;
37735 w5h = w5h + ((w6h >>> 1 | w6l << 31) ^ (w6h >>> 8 | w6l << 24) ^ w6h >>> 7) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37736 xl = (w3l >>> 19 | w3h << 13) ^ (w3l << 3 | w3h >>> 29) ^ (w3l >>> 6 | w3h << 26) | 0;
37737 w5l = w5l + xl | 0;
37738 w5h = w5h + ((w3h >>> 19 | w3l << 13) ^ (w3h << 3 | w3l >>> 29) ^ w3h >>> 6) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37739 tl = 3812723403 + w5l | 0;
37740 th = 1322822218 + w5h + (tl >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
37741 tl = tl + hl | 0;
37742 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37743 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37744 tl = tl + xl | 0;
37745 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37746 xl = gl ^ el & (fl ^ gl) | 0;
37747 tl = tl + xl | 0;
37748 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37749 hl = gl;
37750 hh = gh;
37751 gl = fl;
37752 gh = fh;
37753 fl = el;
37754 fh = eh;
37755 el = dl + tl | 0;
37756 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37757 dl = cl;
37758 dh = ch;
37759 cl = bl;
37760 ch = bh;
37761 bl = al;
37762 bh = ah;
37763 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37764 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37765 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37766 al = al + xl | 0;
37767 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37768 w6l = w6l + w15l | 0;
37769 w6h = w6h + w15h + (w6l >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
37770 xl = (w7l >>> 1 | w7h << 31) ^ (w7l >>> 8 | w7h << 24) ^ (w7l >>> 7 | w7h << 25) | 0;
37771 w6l = w6l + xl | 0;
37772 w6h = w6h + ((w7h >>> 1 | w7l << 31) ^ (w7h >>> 8 | w7l << 24) ^ w7h >>> 7) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37773 xl = (w4l >>> 19 | w4h << 13) ^ (w4l << 3 | w4h >>> 29) ^ (w4l >>> 6 | w4h << 26) | 0;
37774 w6l = w6l + xl | 0;
37775 w6h = w6h + ((w4h >>> 19 | w4l << 13) ^ (w4h << 3 | w4l >>> 29) ^ w4h >>> 6) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37776 tl = 2003034995 + w6l | 0;
37777 th = 1537002063 + w6h + (tl >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
37778 tl = tl + hl | 0;
37779 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37780 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37781 tl = tl + xl | 0;
37782 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37783 xl = gl ^ el & (fl ^ gl) | 0;
37784 tl = tl + xl | 0;
37785 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37786 hl = gl;
37787 hh = gh;
37788 gl = fl;
37789 gh = fh;
37790 fl = el;
37791 fh = eh;
37792 el = dl + tl | 0;
37793 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37794 dl = cl;
37795 dh = ch;
37796 cl = bl;
37797 ch = bh;
37798 bl = al;
37799 bh = ah;
37800 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37801 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37802 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37803 al = al + xl | 0;
37804 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37805 w7l = w7l + w0l | 0;
37806 w7h = w7h + w0h + (w7l >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
37807 xl = (w8l >>> 1 | w8h << 31) ^ (w8l >>> 8 | w8h << 24) ^ (w8l >>> 7 | w8h << 25) | 0;
37808 w7l = w7l + xl | 0;
37809 w7h = w7h + ((w8h >>> 1 | w8l << 31) ^ (w8h >>> 8 | w8l << 24) ^ w8h >>> 7) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37810 xl = (w5l >>> 19 | w5h << 13) ^ (w5l << 3 | w5h >>> 29) ^ (w5l >>> 6 | w5h << 26) | 0;
37811 w7l = w7l + xl | 0;
37812 w7h = w7h + ((w5h >>> 19 | w5l << 13) ^ (w5h << 3 | w5l >>> 29) ^ w5h >>> 6) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37813 tl = 3602036899 + w7l | 0;
37814 th = 1747873779 + w7h + (tl >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
37815 tl = tl + hl | 0;
37816 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37817 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37818 tl = tl + xl | 0;
37819 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37820 xl = gl ^ el & (fl ^ gl) | 0;
37821 tl = tl + xl | 0;
37822 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37823 hl = gl;
37824 hh = gh;
37825 gl = fl;
37826 gh = fh;
37827 fl = el;
37828 fh = eh;
37829 el = dl + tl | 0;
37830 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37831 dl = cl;
37832 dh = ch;
37833 cl = bl;
37834 ch = bh;
37835 bl = al;
37836 bh = ah;
37837 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37838 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37839 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37840 al = al + xl | 0;
37841 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37842 w8l = w8l + w1l | 0;
37843 w8h = w8h + w1h + (w8l >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
37844 xl = (w9l >>> 1 | w9h << 31) ^ (w9l >>> 8 | w9h << 24) ^ (w9l >>> 7 | w9h << 25) | 0;
37845 w8l = w8l + xl | 0;
37846 w8h = w8h + ((w9h >>> 1 | w9l << 31) ^ (w9h >>> 8 | w9l << 24) ^ w9h >>> 7) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37847 xl = (w6l >>> 19 | w6h << 13) ^ (w6l << 3 | w6h >>> 29) ^ (w6l >>> 6 | w6h << 26) | 0;
37848 w8l = w8l + xl | 0;
37849 w8h = w8h + ((w6h >>> 19 | w6l << 13) ^ (w6h << 3 | w6l >>> 29) ^ w6h >>> 6) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37850 tl = 1575990012 + w8l | 0;
37851 th = 1955562222 + w8h + (tl >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
37852 tl = tl + hl | 0;
37853 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37854 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37855 tl = tl + xl | 0;
37856 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37857 xl = gl ^ el & (fl ^ gl) | 0;
37858 tl = tl + xl | 0;
37859 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37860 hl = gl;
37861 hh = gh;
37862 gl = fl;
37863 gh = fh;
37864 fl = el;
37865 fh = eh;
37866 el = dl + tl | 0;
37867 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37868 dl = cl;
37869 dh = ch;
37870 cl = bl;
37871 ch = bh;
37872 bl = al;
37873 bh = ah;
37874 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37875 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37876 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37877 al = al + xl | 0;
37878 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37879 w9l = w9l + w2l | 0;
37880 w9h = w9h + w2h + (w9l >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
37881 xl = (w10l >>> 1 | w10h << 31) ^ (w10l >>> 8 | w10h << 24) ^ (w10l >>> 7 | w10h << 25) | 0;
37882 w9l = w9l + xl | 0;
37883 w9h = w9h + ((w10h >>> 1 | w10l << 31) ^ (w10h >>> 8 | w10l << 24) ^ w10h >>> 7) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37884 xl = (w7l >>> 19 | w7h << 13) ^ (w7l << 3 | w7h >>> 29) ^ (w7l >>> 6 | w7h << 26) | 0;
37885 w9l = w9l + xl | 0;
37886 w9h = w9h + ((w7h >>> 19 | w7l << 13) ^ (w7h << 3 | w7l >>> 29) ^ w7h >>> 6) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37887 tl = 1125592928 + w9l | 0;
37888 th = 2024104815 + w9h + (tl >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
37889 tl = tl + hl | 0;
37890 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37891 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37892 tl = tl + xl | 0;
37893 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37894 xl = gl ^ el & (fl ^ gl) | 0;
37895 tl = tl + xl | 0;
37896 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37897 hl = gl;
37898 hh = gh;
37899 gl = fl;
37900 gh = fh;
37901 fl = el;
37902 fh = eh;
37903 el = dl + tl | 0;
37904 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37905 dl = cl;
37906 dh = ch;
37907 cl = bl;
37908 ch = bh;
37909 bl = al;
37910 bh = ah;
37911 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37912 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37913 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37914 al = al + xl | 0;
37915 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37916 w10l = w10l + w3l | 0;
37917 w10h = w10h + w3h + (w10l >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
37918 xl = (w11l >>> 1 | w11h << 31) ^ (w11l >>> 8 | w11h << 24) ^ (w11l >>> 7 | w11h << 25) | 0;
37919 w10l = w10l + xl | 0;
37920 w10h = w10h + ((w11h >>> 1 | w11l << 31) ^ (w11h >>> 8 | w11l << 24) ^ w11h >>> 7) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37921 xl = (w8l >>> 19 | w8h << 13) ^ (w8l << 3 | w8h >>> 29) ^ (w8l >>> 6 | w8h << 26) | 0;
37922 w10l = w10l + xl | 0;
37923 w10h = w10h + ((w8h >>> 19 | w8l << 13) ^ (w8h << 3 | w8l >>> 29) ^ w8h >>> 6) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37924 tl = 2716904306 + w10l | 0;
37925 th = 2227730452 + w10h + (tl >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
37926 tl = tl + hl | 0;
37927 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37928 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37929 tl = tl + xl | 0;
37930 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37931 xl = gl ^ el & (fl ^ gl) | 0;
37932 tl = tl + xl | 0;
37933 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37934 hl = gl;
37935 hh = gh;
37936 gl = fl;
37937 gh = fh;
37938 fl = el;
37939 fh = eh;
37940 el = dl + tl | 0;
37941 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37942 dl = cl;
37943 dh = ch;
37944 cl = bl;
37945 ch = bh;
37946 bl = al;
37947 bh = ah;
37948 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37949 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37950 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37951 al = al + xl | 0;
37952 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37953 w11l = w11l + w4l | 0;
37954 w11h = w11h + w4h + (w11l >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
37955 xl = (w12l >>> 1 | w12h << 31) ^ (w12l >>> 8 | w12h << 24) ^ (w12l >>> 7 | w12h << 25) | 0;
37956 w11l = w11l + xl | 0;
37957 w11h = w11h + ((w12h >>> 1 | w12l << 31) ^ (w12h >>> 8 | w12l << 24) ^ w12h >>> 7) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37958 xl = (w9l >>> 19 | w9h << 13) ^ (w9l << 3 | w9h >>> 29) ^ (w9l >>> 6 | w9h << 26) | 0;
37959 w11l = w11l + xl | 0;
37960 w11h = w11h + ((w9h >>> 19 | w9l << 13) ^ (w9h << 3 | w9l >>> 29) ^ w9h >>> 6) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37961 tl = 442776044 + w11l | 0;
37962 th = 2361852424 + w11h + (tl >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
37963 tl = tl + hl | 0;
37964 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
37965 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
37966 tl = tl + xl | 0;
37967 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37968 xl = gl ^ el & (fl ^ gl) | 0;
37969 tl = tl + xl | 0;
37970 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37971 hl = gl;
37972 hh = gh;
37973 gl = fl;
37974 gh = fh;
37975 fl = el;
37976 fh = eh;
37977 el = dl + tl | 0;
37978 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
37979 dl = cl;
37980 dh = ch;
37981 cl = bl;
37982 ch = bh;
37983 bl = al;
37984 bh = ah;
37985 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
37986 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
37987 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
37988 al = al + xl | 0;
37989 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37990 w12l = w12l + w5l | 0;
37991 w12h = w12h + w5h + (w12l >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
37992 xl = (w13l >>> 1 | w13h << 31) ^ (w13l >>> 8 | w13h << 24) ^ (w13l >>> 7 | w13h << 25) | 0;
37993 w12l = w12l + xl | 0;
37994 w12h = w12h + ((w13h >>> 1 | w13l << 31) ^ (w13h >>> 8 | w13l << 24) ^ w13h >>> 7) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37995 xl = (w10l >>> 19 | w10h << 13) ^ (w10l << 3 | w10h >>> 29) ^ (w10l >>> 6 | w10h << 26) | 0;
37996 w12l = w12l + xl | 0;
37997 w12h = w12h + ((w10h >>> 19 | w10l << 13) ^ (w10h << 3 | w10l >>> 29) ^ w10h >>> 6) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
37998 tl = 593698344 + w12l | 0;
37999 th = 2428436474 + w12h + (tl >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
38000 tl = tl + hl | 0;
38001 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38002 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38003 tl = tl + xl | 0;
38004 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38005 xl = gl ^ el & (fl ^ gl) | 0;
38006 tl = tl + xl | 0;
38007 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38008 hl = gl;
38009 hh = gh;
38010 gl = fl;
38011 gh = fh;
38012 fl = el;
38013 fh = eh;
38014 el = dl + tl | 0;
38015 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38016 dl = cl;
38017 dh = ch;
38018 cl = bl;
38019 ch = bh;
38020 bl = al;
38021 bh = ah;
38022 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38023 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38024 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38025 al = al + xl | 0;
38026 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38027 w13l = w13l + w6l | 0;
38028 w13h = w13h + w6h + (w13l >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
38029 xl = (w14l >>> 1 | w14h << 31) ^ (w14l >>> 8 | w14h << 24) ^ (w14l >>> 7 | w14h << 25) | 0;
38030 w13l = w13l + xl | 0;
38031 w13h = w13h + ((w14h >>> 1 | w14l << 31) ^ (w14h >>> 8 | w14l << 24) ^ w14h >>> 7) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38032 xl = (w11l >>> 19 | w11h << 13) ^ (w11l << 3 | w11h >>> 29) ^ (w11l >>> 6 | w11h << 26) | 0;
38033 w13l = w13l + xl | 0;
38034 w13h = w13h + ((w11h >>> 19 | w11l << 13) ^ (w11h << 3 | w11l >>> 29) ^ w11h >>> 6) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38035 tl = 3733110249 + w13l | 0;
38036 th = 2756734187 + w13h + (tl >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
38037 tl = tl + hl | 0;
38038 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38039 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38040 tl = tl + xl | 0;
38041 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38042 xl = gl ^ el & (fl ^ gl) | 0;
38043 tl = tl + xl | 0;
38044 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38045 hl = gl;
38046 hh = gh;
38047 gl = fl;
38048 gh = fh;
38049 fl = el;
38050 fh = eh;
38051 el = dl + tl | 0;
38052 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38053 dl = cl;
38054 dh = ch;
38055 cl = bl;
38056 ch = bh;
38057 bl = al;
38058 bh = ah;
38059 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38060 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38061 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38062 al = al + xl | 0;
38063 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38064 w14l = w14l + w7l | 0;
38065 w14h = w14h + w7h + (w14l >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
38066 xl = (w15l >>> 1 | w15h << 31) ^ (w15l >>> 8 | w15h << 24) ^ (w15l >>> 7 | w15h << 25) | 0;
38067 w14l = w14l + xl | 0;
38068 w14h = w14h + ((w15h >>> 1 | w15l << 31) ^ (w15h >>> 8 | w15l << 24) ^ w15h >>> 7) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38069 xl = (w12l >>> 19 | w12h << 13) ^ (w12l << 3 | w12h >>> 29) ^ (w12l >>> 6 | w12h << 26) | 0;
38070 w14l = w14l + xl | 0;
38071 w14h = w14h + ((w12h >>> 19 | w12l << 13) ^ (w12h << 3 | w12l >>> 29) ^ w12h >>> 6) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38072 tl = 2999351573 + w14l | 0;
38073 th = 3204031479 + w14h + (tl >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
38074 tl = tl + hl | 0;
38075 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38076 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38077 tl = tl + xl | 0;
38078 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38079 xl = gl ^ el & (fl ^ gl) | 0;
38080 tl = tl + xl | 0;
38081 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38082 hl = gl;
38083 hh = gh;
38084 gl = fl;
38085 gh = fh;
38086 fl = el;
38087 fh = eh;
38088 el = dl + tl | 0;
38089 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38090 dl = cl;
38091 dh = ch;
38092 cl = bl;
38093 ch = bh;
38094 bl = al;
38095 bh = ah;
38096 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38097 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38098 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38099 al = al + xl | 0;
38100 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38101 w15l = w15l + w8l | 0;
38102 w15h = w15h + w8h + (w15l >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
38103 xl = (w0l >>> 1 | w0h << 31) ^ (w0l >>> 8 | w0h << 24) ^ (w0l >>> 7 | w0h << 25) | 0;
38104 w15l = w15l + xl | 0;
38105 w15h = w15h + ((w0h >>> 1 | w0l << 31) ^ (w0h >>> 8 | w0l << 24) ^ w0h >>> 7) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38106 xl = (w13l >>> 19 | w13h << 13) ^ (w13l << 3 | w13h >>> 29) ^ (w13l >>> 6 | w13h << 26) | 0;
38107 w15l = w15l + xl | 0;
38108 w15h = w15h + ((w13h >>> 19 | w13l << 13) ^ (w13h << 3 | w13l >>> 29) ^ w13h >>> 6) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38109 tl = 3815920427 + w15l | 0;
38110 th = 3329325298 + w15h + (tl >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
38111 tl = tl + hl | 0;
38112 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38113 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38114 tl = tl + xl | 0;
38115 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38116 xl = gl ^ el & (fl ^ gl) | 0;
38117 tl = tl + xl | 0;
38118 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38119 hl = gl;
38120 hh = gh;
38121 gl = fl;
38122 gh = fh;
38123 fl = el;
38124 fh = eh;
38125 el = dl + tl | 0;
38126 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38127 dl = cl;
38128 dh = ch;
38129 cl = bl;
38130 ch = bh;
38131 bl = al;
38132 bh = ah;
38133 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38134 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38135 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38136 al = al + xl | 0;
38137 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38138 w0l = w0l + w9l | 0;
38139 w0h = w0h + w9h + (w0l >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
38140 xl = (w1l >>> 1 | w1h << 31) ^ (w1l >>> 8 | w1h << 24) ^ (w1l >>> 7 | w1h << 25) | 0;
38141 w0l = w0l + xl | 0;
38142 w0h = w0h + ((w1h >>> 1 | w1l << 31) ^ (w1h >>> 8 | w1l << 24) ^ w1h >>> 7) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38143 xl = (w14l >>> 19 | w14h << 13) ^ (w14l << 3 | w14h >>> 29) ^ (w14l >>> 6 | w14h << 26) | 0;
38144 w0l = w0l + xl | 0;
38145 w0h = w0h + ((w14h >>> 19 | w14l << 13) ^ (w14h << 3 | w14l >>> 29) ^ w14h >>> 6) + (w0l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38146 tl = 3928383900 + w0l | 0;
38147 th = 3391569614 + w0h + (tl >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
38148 tl = tl + hl | 0;
38149 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38150 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38151 tl = tl + xl | 0;
38152 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38153 xl = gl ^ el & (fl ^ gl) | 0;
38154 tl = tl + xl | 0;
38155 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38156 hl = gl;
38157 hh = gh;
38158 gl = fl;
38159 gh = fh;
38160 fl = el;
38161 fh = eh;
38162 el = dl + tl | 0;
38163 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38164 dl = cl;
38165 dh = ch;
38166 cl = bl;
38167 ch = bh;
38168 bl = al;
38169 bh = ah;
38170 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38171 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38172 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38173 al = al + xl | 0;
38174 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38175 w1l = w1l + w10l | 0;
38176 w1h = w1h + w10h + (w1l >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
38177 xl = (w2l >>> 1 | w2h << 31) ^ (w2l >>> 8 | w2h << 24) ^ (w2l >>> 7 | w2h << 25) | 0;
38178 w1l = w1l + xl | 0;
38179 w1h = w1h + ((w2h >>> 1 | w2l << 31) ^ (w2h >>> 8 | w2l << 24) ^ w2h >>> 7) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38180 xl = (w15l >>> 19 | w15h << 13) ^ (w15l << 3 | w15h >>> 29) ^ (w15l >>> 6 | w15h << 26) | 0;
38181 w1l = w1l + xl | 0;
38182 w1h = w1h + ((w15h >>> 19 | w15l << 13) ^ (w15h << 3 | w15l >>> 29) ^ w15h >>> 6) + (w1l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38183 tl = 566280711 + w1l | 0;
38184 th = 3515267271 + w1h + (tl >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
38185 tl = tl + hl | 0;
38186 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38187 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38188 tl = tl + xl | 0;
38189 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38190 xl = gl ^ el & (fl ^ gl) | 0;
38191 tl = tl + xl | 0;
38192 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38193 hl = gl;
38194 hh = gh;
38195 gl = fl;
38196 gh = fh;
38197 fl = el;
38198 fh = eh;
38199 el = dl + tl | 0;
38200 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38201 dl = cl;
38202 dh = ch;
38203 cl = bl;
38204 ch = bh;
38205 bl = al;
38206 bh = ah;
38207 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38208 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38209 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38210 al = al + xl | 0;
38211 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38212 w2l = w2l + w11l | 0;
38213 w2h = w2h + w11h + (w2l >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
38214 xl = (w3l >>> 1 | w3h << 31) ^ (w3l >>> 8 | w3h << 24) ^ (w3l >>> 7 | w3h << 25) | 0;
38215 w2l = w2l + xl | 0;
38216 w2h = w2h + ((w3h >>> 1 | w3l << 31) ^ (w3h >>> 8 | w3l << 24) ^ w3h >>> 7) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38217 xl = (w0l >>> 19 | w0h << 13) ^ (w0l << 3 | w0h >>> 29) ^ (w0l >>> 6 | w0h << 26) | 0;
38218 w2l = w2l + xl | 0;
38219 w2h = w2h + ((w0h >>> 19 | w0l << 13) ^ (w0h << 3 | w0l >>> 29) ^ w0h >>> 6) + (w2l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38220 tl = 3454069534 + w2l | 0;
38221 th = 3940187606 + w2h + (tl >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
38222 tl = tl + hl | 0;
38223 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38224 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38225 tl = tl + xl | 0;
38226 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38227 xl = gl ^ el & (fl ^ gl) | 0;
38228 tl = tl + xl | 0;
38229 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38230 hl = gl;
38231 hh = gh;
38232 gl = fl;
38233 gh = fh;
38234 fl = el;
38235 fh = eh;
38236 el = dl + tl | 0;
38237 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38238 dl = cl;
38239 dh = ch;
38240 cl = bl;
38241 ch = bh;
38242 bl = al;
38243 bh = ah;
38244 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38245 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38246 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38247 al = al + xl | 0;
38248 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38249 w3l = w3l + w12l | 0;
38250 w3h = w3h + w12h + (w3l >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
38251 xl = (w4l >>> 1 | w4h << 31) ^ (w4l >>> 8 | w4h << 24) ^ (w4l >>> 7 | w4h << 25) | 0;
38252 w3l = w3l + xl | 0;
38253 w3h = w3h + ((w4h >>> 1 | w4l << 31) ^ (w4h >>> 8 | w4l << 24) ^ w4h >>> 7) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38254 xl = (w1l >>> 19 | w1h << 13) ^ (w1l << 3 | w1h >>> 29) ^ (w1l >>> 6 | w1h << 26) | 0;
38255 w3l = w3l + xl | 0;
38256 w3h = w3h + ((w1h >>> 19 | w1l << 13) ^ (w1h << 3 | w1l >>> 29) ^ w1h >>> 6) + (w3l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38257 tl = 4000239992 + w3l | 0;
38258 th = 4118630271 + w3h + (tl >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
38259 tl = tl + hl | 0;
38260 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38261 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38262 tl = tl + xl | 0;
38263 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38264 xl = gl ^ el & (fl ^ gl) | 0;
38265 tl = tl + xl | 0;
38266 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38267 hl = gl;
38268 hh = gh;
38269 gl = fl;
38270 gh = fh;
38271 fl = el;
38272 fh = eh;
38273 el = dl + tl | 0;
38274 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38275 dl = cl;
38276 dh = ch;
38277 cl = bl;
38278 ch = bh;
38279 bl = al;
38280 bh = ah;
38281 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38282 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38283 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38284 al = al + xl | 0;
38285 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38286 w4l = w4l + w13l | 0;
38287 w4h = w4h + w13h + (w4l >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
38288 xl = (w5l >>> 1 | w5h << 31) ^ (w5l >>> 8 | w5h << 24) ^ (w5l >>> 7 | w5h << 25) | 0;
38289 w4l = w4l + xl | 0;
38290 w4h = w4h + ((w5h >>> 1 | w5l << 31) ^ (w5h >>> 8 | w5l << 24) ^ w5h >>> 7) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38291 xl = (w2l >>> 19 | w2h << 13) ^ (w2l << 3 | w2h >>> 29) ^ (w2l >>> 6 | w2h << 26) | 0;
38292 w4l = w4l + xl | 0;
38293 w4h = w4h + ((w2h >>> 19 | w2l << 13) ^ (w2h << 3 | w2l >>> 29) ^ w2h >>> 6) + (w4l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38294 tl = 1914138554 + w4l | 0;
38295 th = 116418474 + w4h + (tl >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
38296 tl = tl + hl | 0;
38297 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38298 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38299 tl = tl + xl | 0;
38300 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38301 xl = gl ^ el & (fl ^ gl) | 0;
38302 tl = tl + xl | 0;
38303 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38304 hl = gl;
38305 hh = gh;
38306 gl = fl;
38307 gh = fh;
38308 fl = el;
38309 fh = eh;
38310 el = dl + tl | 0;
38311 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38312 dl = cl;
38313 dh = ch;
38314 cl = bl;
38315 ch = bh;
38316 bl = al;
38317 bh = ah;
38318 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38319 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38320 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38321 al = al + xl | 0;
38322 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38323 w5l = w5l + w14l | 0;
38324 w5h = w5h + w14h + (w5l >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
38325 xl = (w6l >>> 1 | w6h << 31) ^ (w6l >>> 8 | w6h << 24) ^ (w6l >>> 7 | w6h << 25) | 0;
38326 w5l = w5l + xl | 0;
38327 w5h = w5h + ((w6h >>> 1 | w6l << 31) ^ (w6h >>> 8 | w6l << 24) ^ w6h >>> 7) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38328 xl = (w3l >>> 19 | w3h << 13) ^ (w3l << 3 | w3h >>> 29) ^ (w3l >>> 6 | w3h << 26) | 0;
38329 w5l = w5l + xl | 0;
38330 w5h = w5h + ((w3h >>> 19 | w3l << 13) ^ (w3h << 3 | w3l >>> 29) ^ w3h >>> 6) + (w5l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38331 tl = 2731055270 + w5l | 0;
38332 th = 174292421 + w5h + (tl >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
38333 tl = tl + hl | 0;
38334 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38335 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38336 tl = tl + xl | 0;
38337 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38338 xl = gl ^ el & (fl ^ gl) | 0;
38339 tl = tl + xl | 0;
38340 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38341 hl = gl;
38342 hh = gh;
38343 gl = fl;
38344 gh = fh;
38345 fl = el;
38346 fh = eh;
38347 el = dl + tl | 0;
38348 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38349 dl = cl;
38350 dh = ch;
38351 cl = bl;
38352 ch = bh;
38353 bl = al;
38354 bh = ah;
38355 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38356 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38357 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38358 al = al + xl | 0;
38359 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38360 w6l = w6l + w15l | 0;
38361 w6h = w6h + w15h + (w6l >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
38362 xl = (w7l >>> 1 | w7h << 31) ^ (w7l >>> 8 | w7h << 24) ^ (w7l >>> 7 | w7h << 25) | 0;
38363 w6l = w6l + xl | 0;
38364 w6h = w6h + ((w7h >>> 1 | w7l << 31) ^ (w7h >>> 8 | w7l << 24) ^ w7h >>> 7) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38365 xl = (w4l >>> 19 | w4h << 13) ^ (w4l << 3 | w4h >>> 29) ^ (w4l >>> 6 | w4h << 26) | 0;
38366 w6l = w6l + xl | 0;
38367 w6h = w6h + ((w4h >>> 19 | w4l << 13) ^ (w4h << 3 | w4l >>> 29) ^ w4h >>> 6) + (w6l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38368 tl = 3203993006 + w6l | 0;
38369 th = 289380356 + w6h + (tl >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
38370 tl = tl + hl | 0;
38371 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38372 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38373 tl = tl + xl | 0;
38374 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38375 xl = gl ^ el & (fl ^ gl) | 0;
38376 tl = tl + xl | 0;
38377 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38378 hl = gl;
38379 hh = gh;
38380 gl = fl;
38381 gh = fh;
38382 fl = el;
38383 fh = eh;
38384 el = dl + tl | 0;
38385 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38386 dl = cl;
38387 dh = ch;
38388 cl = bl;
38389 ch = bh;
38390 bl = al;
38391 bh = ah;
38392 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38393 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38394 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38395 al = al + xl | 0;
38396 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38397 w7l = w7l + w0l | 0;
38398 w7h = w7h + w0h + (w7l >>> 0 < w0l >>> 0 ? 1 : 0) | 0;
38399 xl = (w8l >>> 1 | w8h << 31) ^ (w8l >>> 8 | w8h << 24) ^ (w8l >>> 7 | w8h << 25) | 0;
38400 w7l = w7l + xl | 0;
38401 w7h = w7h + ((w8h >>> 1 | w8l << 31) ^ (w8h >>> 8 | w8l << 24) ^ w8h >>> 7) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38402 xl = (w5l >>> 19 | w5h << 13) ^ (w5l << 3 | w5h >>> 29) ^ (w5l >>> 6 | w5h << 26) | 0;
38403 w7l = w7l + xl | 0;
38404 w7h = w7h + ((w5h >>> 19 | w5l << 13) ^ (w5h << 3 | w5l >>> 29) ^ w5h >>> 6) + (w7l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38405 tl = 320620315 + w7l | 0;
38406 th = 460393269 + w7h + (tl >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
38407 tl = tl + hl | 0;
38408 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38409 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38410 tl = tl + xl | 0;
38411 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38412 xl = gl ^ el & (fl ^ gl) | 0;
38413 tl = tl + xl | 0;
38414 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38415 hl = gl;
38416 hh = gh;
38417 gl = fl;
38418 gh = fh;
38419 fl = el;
38420 fh = eh;
38421 el = dl + tl | 0;
38422 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38423 dl = cl;
38424 dh = ch;
38425 cl = bl;
38426 ch = bh;
38427 bl = al;
38428 bh = ah;
38429 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38430 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38431 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38432 al = al + xl | 0;
38433 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38434 w8l = w8l + w1l | 0;
38435 w8h = w8h + w1h + (w8l >>> 0 < w1l >>> 0 ? 1 : 0) | 0;
38436 xl = (w9l >>> 1 | w9h << 31) ^ (w9l >>> 8 | w9h << 24) ^ (w9l >>> 7 | w9h << 25) | 0;
38437 w8l = w8l + xl | 0;
38438 w8h = w8h + ((w9h >>> 1 | w9l << 31) ^ (w9h >>> 8 | w9l << 24) ^ w9h >>> 7) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38439 xl = (w6l >>> 19 | w6h << 13) ^ (w6l << 3 | w6h >>> 29) ^ (w6l >>> 6 | w6h << 26) | 0;
38440 w8l = w8l + xl | 0;
38441 w8h = w8h + ((w6h >>> 19 | w6l << 13) ^ (w6h << 3 | w6l >>> 29) ^ w6h >>> 6) + (w8l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38442 tl = 587496836 + w8l | 0;
38443 th = 685471733 + w8h + (tl >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
38444 tl = tl + hl | 0;
38445 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38446 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38447 tl = tl + xl | 0;
38448 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38449 xl = gl ^ el & (fl ^ gl) | 0;
38450 tl = tl + xl | 0;
38451 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38452 hl = gl;
38453 hh = gh;
38454 gl = fl;
38455 gh = fh;
38456 fl = el;
38457 fh = eh;
38458 el = dl + tl | 0;
38459 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38460 dl = cl;
38461 dh = ch;
38462 cl = bl;
38463 ch = bh;
38464 bl = al;
38465 bh = ah;
38466 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38467 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38468 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38469 al = al + xl | 0;
38470 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38471 w9l = w9l + w2l | 0;
38472 w9h = w9h + w2h + (w9l >>> 0 < w2l >>> 0 ? 1 : 0) | 0;
38473 xl = (w10l >>> 1 | w10h << 31) ^ (w10l >>> 8 | w10h << 24) ^ (w10l >>> 7 | w10h << 25) | 0;
38474 w9l = w9l + xl | 0;
38475 w9h = w9h + ((w10h >>> 1 | w10l << 31) ^ (w10h >>> 8 | w10l << 24) ^ w10h >>> 7) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38476 xl = (w7l >>> 19 | w7h << 13) ^ (w7l << 3 | w7h >>> 29) ^ (w7l >>> 6 | w7h << 26) | 0;
38477 w9l = w9l + xl | 0;
38478 w9h = w9h + ((w7h >>> 19 | w7l << 13) ^ (w7h << 3 | w7l >>> 29) ^ w7h >>> 6) + (w9l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38479 tl = 1086792851 + w9l | 0;
38480 th = 852142971 + w9h + (tl >>> 0 < w9l >>> 0 ? 1 : 0) | 0;
38481 tl = tl + hl | 0;
38482 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38483 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38484 tl = tl + xl | 0;
38485 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38486 xl = gl ^ el & (fl ^ gl) | 0;
38487 tl = tl + xl | 0;
38488 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38489 hl = gl;
38490 hh = gh;
38491 gl = fl;
38492 gh = fh;
38493 fl = el;
38494 fh = eh;
38495 el = dl + tl | 0;
38496 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38497 dl = cl;
38498 dh = ch;
38499 cl = bl;
38500 ch = bh;
38501 bl = al;
38502 bh = ah;
38503 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38504 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38505 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38506 al = al + xl | 0;
38507 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38508 w10l = w10l + w3l | 0;
38509 w10h = w10h + w3h + (w10l >>> 0 < w3l >>> 0 ? 1 : 0) | 0;
38510 xl = (w11l >>> 1 | w11h << 31) ^ (w11l >>> 8 | w11h << 24) ^ (w11l >>> 7 | w11h << 25) | 0;
38511 w10l = w10l + xl | 0;
38512 w10h = w10h + ((w11h >>> 1 | w11l << 31) ^ (w11h >>> 8 | w11l << 24) ^ w11h >>> 7) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38513 xl = (w8l >>> 19 | w8h << 13) ^ (w8l << 3 | w8h >>> 29) ^ (w8l >>> 6 | w8h << 26) | 0;
38514 w10l = w10l + xl | 0;
38515 w10h = w10h + ((w8h >>> 19 | w8l << 13) ^ (w8h << 3 | w8l >>> 29) ^ w8h >>> 6) + (w10l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38516 tl = 365543100 + w10l | 0;
38517 th = 1017036298 + w10h + (tl >>> 0 < w10l >>> 0 ? 1 : 0) | 0;
38518 tl = tl + hl | 0;
38519 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38520 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38521 tl = tl + xl | 0;
38522 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38523 xl = gl ^ el & (fl ^ gl) | 0;
38524 tl = tl + xl | 0;
38525 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38526 hl = gl;
38527 hh = gh;
38528 gl = fl;
38529 gh = fh;
38530 fl = el;
38531 fh = eh;
38532 el = dl + tl | 0;
38533 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38534 dl = cl;
38535 dh = ch;
38536 cl = bl;
38537 ch = bh;
38538 bl = al;
38539 bh = ah;
38540 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38541 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38542 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38543 al = al + xl | 0;
38544 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38545 w11l = w11l + w4l | 0;
38546 w11h = w11h + w4h + (w11l >>> 0 < w4l >>> 0 ? 1 : 0) | 0;
38547 xl = (w12l >>> 1 | w12h << 31) ^ (w12l >>> 8 | w12h << 24) ^ (w12l >>> 7 | w12h << 25) | 0;
38548 w11l = w11l + xl | 0;
38549 w11h = w11h + ((w12h >>> 1 | w12l << 31) ^ (w12h >>> 8 | w12l << 24) ^ w12h >>> 7) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38550 xl = (w9l >>> 19 | w9h << 13) ^ (w9l << 3 | w9h >>> 29) ^ (w9l >>> 6 | w9h << 26) | 0;
38551 w11l = w11l + xl | 0;
38552 w11h = w11h + ((w9h >>> 19 | w9l << 13) ^ (w9h << 3 | w9l >>> 29) ^ w9h >>> 6) + (w11l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38553 tl = 2618297676 + w11l | 0;
38554 th = 1126000580 + w11h + (tl >>> 0 < w11l >>> 0 ? 1 : 0) | 0;
38555 tl = tl + hl | 0;
38556 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38557 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38558 tl = tl + xl | 0;
38559 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38560 xl = gl ^ el & (fl ^ gl) | 0;
38561 tl = tl + xl | 0;
38562 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38563 hl = gl;
38564 hh = gh;
38565 gl = fl;
38566 gh = fh;
38567 fl = el;
38568 fh = eh;
38569 el = dl + tl | 0;
38570 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38571 dl = cl;
38572 dh = ch;
38573 cl = bl;
38574 ch = bh;
38575 bl = al;
38576 bh = ah;
38577 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38578 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38579 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38580 al = al + xl | 0;
38581 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38582 w12l = w12l + w5l | 0;
38583 w12h = w12h + w5h + (w12l >>> 0 < w5l >>> 0 ? 1 : 0) | 0;
38584 xl = (w13l >>> 1 | w13h << 31) ^ (w13l >>> 8 | w13h << 24) ^ (w13l >>> 7 | w13h << 25) | 0;
38585 w12l = w12l + xl | 0;
38586 w12h = w12h + ((w13h >>> 1 | w13l << 31) ^ (w13h >>> 8 | w13l << 24) ^ w13h >>> 7) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38587 xl = (w10l >>> 19 | w10h << 13) ^ (w10l << 3 | w10h >>> 29) ^ (w10l >>> 6 | w10h << 26) | 0;
38588 w12l = w12l + xl | 0;
38589 w12h = w12h + ((w10h >>> 19 | w10l << 13) ^ (w10h << 3 | w10l >>> 29) ^ w10h >>> 6) + (w12l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38590 tl = 3409855158 + w12l | 0;
38591 th = 1288033470 + w12h + (tl >>> 0 < w12l >>> 0 ? 1 : 0) | 0;
38592 tl = tl + hl | 0;
38593 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38594 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38595 tl = tl + xl | 0;
38596 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38597 xl = gl ^ el & (fl ^ gl) | 0;
38598 tl = tl + xl | 0;
38599 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38600 hl = gl;
38601 hh = gh;
38602 gl = fl;
38603 gh = fh;
38604 fl = el;
38605 fh = eh;
38606 el = dl + tl | 0;
38607 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38608 dl = cl;
38609 dh = ch;
38610 cl = bl;
38611 ch = bh;
38612 bl = al;
38613 bh = ah;
38614 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38615 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38616 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38617 al = al + xl | 0;
38618 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38619 w13l = w13l + w6l | 0;
38620 w13h = w13h + w6h + (w13l >>> 0 < w6l >>> 0 ? 1 : 0) | 0;
38621 xl = (w14l >>> 1 | w14h << 31) ^ (w14l >>> 8 | w14h << 24) ^ (w14l >>> 7 | w14h << 25) | 0;
38622 w13l = w13l + xl | 0;
38623 w13h = w13h + ((w14h >>> 1 | w14l << 31) ^ (w14h >>> 8 | w14l << 24) ^ w14h >>> 7) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38624 xl = (w11l >>> 19 | w11h << 13) ^ (w11l << 3 | w11h >>> 29) ^ (w11l >>> 6 | w11h << 26) | 0;
38625 w13l = w13l + xl | 0;
38626 w13h = w13h + ((w11h >>> 19 | w11l << 13) ^ (w11h << 3 | w11l >>> 29) ^ w11h >>> 6) + (w13l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38627 tl = 4234509866 + w13l | 0;
38628 th = 1501505948 + w13h + (tl >>> 0 < w13l >>> 0 ? 1 : 0) | 0;
38629 tl = tl + hl | 0;
38630 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38631 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38632 tl = tl + xl | 0;
38633 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38634 xl = gl ^ el & (fl ^ gl) | 0;
38635 tl = tl + xl | 0;
38636 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38637 hl = gl;
38638 hh = gh;
38639 gl = fl;
38640 gh = fh;
38641 fl = el;
38642 fh = eh;
38643 el = dl + tl | 0;
38644 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38645 dl = cl;
38646 dh = ch;
38647 cl = bl;
38648 ch = bh;
38649 bl = al;
38650 bh = ah;
38651 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38652 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38653 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38654 al = al + xl | 0;
38655 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38656 w14l = w14l + w7l | 0;
38657 w14h = w14h + w7h + (w14l >>> 0 < w7l >>> 0 ? 1 : 0) | 0;
38658 xl = (w15l >>> 1 | w15h << 31) ^ (w15l >>> 8 | w15h << 24) ^ (w15l >>> 7 | w15h << 25) | 0;
38659 w14l = w14l + xl | 0;
38660 w14h = w14h + ((w15h >>> 1 | w15l << 31) ^ (w15h >>> 8 | w15l << 24) ^ w15h >>> 7) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38661 xl = (w12l >>> 19 | w12h << 13) ^ (w12l << 3 | w12h >>> 29) ^ (w12l >>> 6 | w12h << 26) | 0;
38662 w14l = w14l + xl | 0;
38663 w14h = w14h + ((w12h >>> 19 | w12l << 13) ^ (w12h << 3 | w12l >>> 29) ^ w12h >>> 6) + (w14l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38664 tl = 987167468 + w14l | 0;
38665 th = 1607167915 + w14h + (tl >>> 0 < w14l >>> 0 ? 1 : 0) | 0;
38666 tl = tl + hl | 0;
38667 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38668 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38669 tl = tl + xl | 0;
38670 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38671 xl = gl ^ el & (fl ^ gl) | 0;
38672 tl = tl + xl | 0;
38673 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38674 hl = gl;
38675 hh = gh;
38676 gl = fl;
38677 gh = fh;
38678 fl = el;
38679 fh = eh;
38680 el = dl + tl | 0;
38681 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38682 dl = cl;
38683 dh = ch;
38684 cl = bl;
38685 ch = bh;
38686 bl = al;
38687 bh = ah;
38688 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38689 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38690 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38691 al = al + xl | 0;
38692 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38693 w15l = w15l + w8l | 0;
38694 w15h = w15h + w8h + (w15l >>> 0 < w8l >>> 0 ? 1 : 0) | 0;
38695 xl = (w0l >>> 1 | w0h << 31) ^ (w0l >>> 8 | w0h << 24) ^ (w0l >>> 7 | w0h << 25) | 0;
38696 w15l = w15l + xl | 0;
38697 w15h = w15h + ((w0h >>> 1 | w0l << 31) ^ (w0h >>> 8 | w0l << 24) ^ w0h >>> 7) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38698 xl = (w13l >>> 19 | w13h << 13) ^ (w13l << 3 | w13h >>> 29) ^ (w13l >>> 6 | w13h << 26) | 0;
38699 w15l = w15l + xl | 0;
38700 w15h = w15h + ((w13h >>> 19 | w13l << 13) ^ (w13h << 3 | w13l >>> 29) ^ w13h >>> 6) + (w15l >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38701 tl = 1246189591 + w15l | 0;
38702 th = 1816402316 + w15h + (tl >>> 0 < w15l >>> 0 ? 1 : 0) | 0;
38703 tl = tl + hl | 0;
38704 th = th + hh + (tl >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38705 xl = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9) | 0;
38706 tl = tl + xl | 0;
38707 th = th + ((eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38708 xl = gl ^ el & (fl ^ gl) | 0;
38709 tl = tl + xl | 0;
38710 th = th + (gh ^ eh & (fh ^ gh)) + (tl >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38711 hl = gl;
38712 hh = gh;
38713 gl = fl;
38714 gh = fh;
38715 fl = el;
38716 fh = eh;
38717 el = dl + tl | 0;
38718 eh = dh + th + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38719 dl = cl;
38720 dh = ch;
38721 cl = bl;
38722 ch = bh;
38723 bl = al;
38724 bh = ah;
38725 al = tl + (bl & cl ^ dl & (bl ^ cl)) | 0;
38726 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al >>> 0 < tl >>> 0 ? 1 : 0) | 0;
38727 xl = (bl >>> 28 | bh << 4) ^ (bl << 30 | bh >>> 2) ^ (bl << 25 | bh >>> 7) | 0;
38728 al = al + xl | 0;
38729 ah = ah + ((bh >>> 28 | bl << 4) ^ (bh << 30 | bl >>> 2) ^ (bh << 25 | bl >>> 7)) + (al >>> 0 < xl >>> 0 ? 1 : 0) | 0;
38730 H0l = H0l + al | 0;
38731 H0h = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0) | 0;
38732 H1l = H1l + bl | 0;
38733 H1h = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0) | 0;
38734 H2l = H2l + cl | 0;
38735 H2h = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0) | 0;
38736 H3l = H3l + dl | 0;
38737 H3h = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0) | 0;
38738 H4l = H4l + el | 0;
38739 H4h = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0) | 0;
38740 H5l = H5l + fl | 0;
38741 H5h = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0) | 0;
38742 H6l = H6l + gl | 0;
38743 H6h = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0) | 0;
38744 H7l = H7l + hl | 0;
38745 H7h = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0) | 0;
38746 }
38747 function _core_heap(offset) {
38748 offset = offset | 0;
38749 _core(HEAP[offset | 0] << 24 | HEAP[offset | 1] << 16 | HEAP[offset | 2] << 8 | HEAP[offset | 3], HEAP[offset | 4] << 24 | HEAP[offset | 5] << 16 | HEAP[offset | 6] << 8 | HEAP[offset | 7], HEAP[offset | 8] << 24 | HEAP[offset | 9] << 16 | HEAP[offset | 10] << 8 | HEAP[offset | 11], HEAP[offset | 12] << 24 | HEAP[offset | 13] << 16 | HEAP[offset | 14] << 8 | HEAP[offset | 15], HEAP[offset | 16] << 24 | HEAP[offset | 17] << 16 | HEAP[offset | 18] << 8 | HEAP[offset | 19], HEAP[offset | 20] << 24 | HEAP[offset | 21] << 16 | HEAP[offset | 22] << 8 | HEAP[offset | 23], HEAP[offset | 24] << 24 | HEAP[offset | 25] << 16 | HEAP[offset | 26] << 8 | HEAP[offset | 27], HEAP[offset | 28] << 24 | HEAP[offset | 29] << 16 | HEAP[offset | 30] << 8 | HEAP[offset | 31], HEAP[offset | 32] << 24 | HEAP[offset | 33] << 16 | HEAP[offset | 34] << 8 | HEAP[offset | 35], HEAP[offset | 36] << 24 | HEAP[offset | 37] << 16 | HEAP[offset | 38] << 8 | HEAP[offset | 39], HEAP[offset | 40] << 24 | HEAP[offset | 41] << 16 | HEAP[offset | 42] << 8 | HEAP[offset | 43], HEAP[offset | 44] << 24 | HEAP[offset | 45] << 16 | HEAP[offset | 46] << 8 | HEAP[offset | 47], HEAP[offset | 48] << 24 | HEAP[offset | 49] << 16 | HEAP[offset | 50] << 8 | HEAP[offset | 51], HEAP[offset | 52] << 24 | HEAP[offset | 53] << 16 | HEAP[offset | 54] << 8 | HEAP[offset | 55], HEAP[offset | 56] << 24 | HEAP[offset | 57] << 16 | HEAP[offset | 58] << 8 | HEAP[offset | 59], HEAP[offset | 60] << 24 | HEAP[offset | 61] << 16 | HEAP[offset | 62] << 8 | HEAP[offset | 63], HEAP[offset | 64] << 24 | HEAP[offset | 65] << 16 | HEAP[offset | 66] << 8 | HEAP[offset | 67], HEAP[offset | 68] << 24 | HEAP[offset | 69] << 16 | HEAP[offset | 70] << 8 | HEAP[offset | 71], HEAP[offset | 72] << 24 | HEAP[offset | 73] << 16 | HEAP[offset | 74] << 8 | HEAP[offset | 75], HEAP[offset | 76] << 24 | HEAP[offset | 77] << 16 | HEAP[offset | 78] << 8 | HEAP[offset | 79], HEAP[offset | 80] << 24 | HEAP[offset | 81] << 16 | HEAP[offset | 82] << 8 | HEAP[offset | 83], HEAP[offset | 84] << 24 | HEAP[offset | 85] << 16 | HEAP[offset | 86] << 8 | HEAP[offset | 87], HEAP[offset | 88] << 24 | HEAP[offset | 89] << 16 | HEAP[offset | 90] << 8 | HEAP[offset | 91], HEAP[offset | 92] << 24 | HEAP[offset | 93] << 16 | HEAP[offset | 94] << 8 | HEAP[offset | 95], HEAP[offset | 96] << 24 | HEAP[offset | 97] << 16 | HEAP[offset | 98] << 8 | HEAP[offset | 99], HEAP[offset | 100] << 24 | HEAP[offset | 101] << 16 | HEAP[offset | 102] << 8 | HEAP[offset | 103], HEAP[offset | 104] << 24 | HEAP[offset | 105] << 16 | HEAP[offset | 106] << 8 | HEAP[offset | 107], HEAP[offset | 108] << 24 | HEAP[offset | 109] << 16 | HEAP[offset | 110] << 8 | HEAP[offset | 111], HEAP[offset | 112] << 24 | HEAP[offset | 113] << 16 | HEAP[offset | 114] << 8 | HEAP[offset | 115], HEAP[offset | 116] << 24 | HEAP[offset | 117] << 16 | HEAP[offset | 118] << 8 | HEAP[offset | 119], HEAP[offset | 120] << 24 | HEAP[offset | 121] << 16 | HEAP[offset | 122] << 8 | HEAP[offset | 123], HEAP[offset | 124] << 24 | HEAP[offset | 125] << 16 | HEAP[offset | 126] << 8 | HEAP[offset | 127]);
38750 }
38751 function _state_to_heap(output) {
38752 output = output | 0;
38753 HEAP[output | 0] = H0h >>> 24;
38754 HEAP[output | 1] = H0h >>> 16 & 255;
38755 HEAP[output | 2] = H0h >>> 8 & 255;
38756 HEAP[output | 3] = H0h & 255;
38757 HEAP[output | 4] = H0l >>> 24;
38758 HEAP[output | 5] = H0l >>> 16 & 255;
38759 HEAP[output | 6] = H0l >>> 8 & 255;
38760 HEAP[output | 7] = H0l & 255;
38761 HEAP[output | 8] = H1h >>> 24;
38762 HEAP[output | 9] = H1h >>> 16 & 255;
38763 HEAP[output | 10] = H1h >>> 8 & 255;
38764 HEAP[output | 11] = H1h & 255;
38765 HEAP[output | 12] = H1l >>> 24;
38766 HEAP[output | 13] = H1l >>> 16 & 255;
38767 HEAP[output | 14] = H1l >>> 8 & 255;
38768 HEAP[output | 15] = H1l & 255;
38769 HEAP[output | 16] = H2h >>> 24;
38770 HEAP[output | 17] = H2h >>> 16 & 255;
38771 HEAP[output | 18] = H2h >>> 8 & 255;
38772 HEAP[output | 19] = H2h & 255;
38773 HEAP[output | 20] = H2l >>> 24;
38774 HEAP[output | 21] = H2l >>> 16 & 255;
38775 HEAP[output | 22] = H2l >>> 8 & 255;
38776 HEAP[output | 23] = H2l & 255;
38777 HEAP[output | 24] = H3h >>> 24;
38778 HEAP[output | 25] = H3h >>> 16 & 255;
38779 HEAP[output | 26] = H3h >>> 8 & 255;
38780 HEAP[output | 27] = H3h & 255;
38781 HEAP[output | 28] = H3l >>> 24;
38782 HEAP[output | 29] = H3l >>> 16 & 255;
38783 HEAP[output | 30] = H3l >>> 8 & 255;
38784 HEAP[output | 31] = H3l & 255;
38785 HEAP[output | 32] = H4h >>> 24;
38786 HEAP[output | 33] = H4h >>> 16 & 255;
38787 HEAP[output | 34] = H4h >>> 8 & 255;
38788 HEAP[output | 35] = H4h & 255;
38789 HEAP[output | 36] = H4l >>> 24;
38790 HEAP[output | 37] = H4l >>> 16 & 255;
38791 HEAP[output | 38] = H4l >>> 8 & 255;
38792 HEAP[output | 39] = H4l & 255;
38793 HEAP[output | 40] = H5h >>> 24;
38794 HEAP[output | 41] = H5h >>> 16 & 255;
38795 HEAP[output | 42] = H5h >>> 8 & 255;
38796 HEAP[output | 43] = H5h & 255;
38797 HEAP[output | 44] = H5l >>> 24;
38798 HEAP[output | 45] = H5l >>> 16 & 255;
38799 HEAP[output | 46] = H5l >>> 8 & 255;
38800 HEAP[output | 47] = H5l & 255;
38801 HEAP[output | 48] = H6h >>> 24;
38802 HEAP[output | 49] = H6h >>> 16 & 255;
38803 HEAP[output | 50] = H6h >>> 8 & 255;
38804 HEAP[output | 51] = H6h & 255;
38805 HEAP[output | 52] = H6l >>> 24;
38806 HEAP[output | 53] = H6l >>> 16 & 255;
38807 HEAP[output | 54] = H6l >>> 8 & 255;
38808 HEAP[output | 55] = H6l & 255;
38809 HEAP[output | 56] = H7h >>> 24;
38810 HEAP[output | 57] = H7h >>> 16 & 255;
38811 HEAP[output | 58] = H7h >>> 8 & 255;
38812 HEAP[output | 59] = H7h & 255;
38813 HEAP[output | 60] = H7l >>> 24;
38814 HEAP[output | 61] = H7l >>> 16 & 255;
38815 HEAP[output | 62] = H7l >>> 8 & 255;
38816 HEAP[output | 63] = H7l & 255;
38817 }
38818 function reset() {
38819 H0h = 1779033703;
38820 H0l = 4089235720;
38821 H1h = 3144134277;
38822 H1l = 2227873595;
38823 H2h = 1013904242;
38824 H2l = 4271175723;
38825 H3h = 2773480762;
38826 H3l = 1595750129;
38827 H4h = 1359893119;
38828 H4l = 2917565137;
38829 H5h = 2600822924;
38830 H5l = 725511199;
38831 H6h = 528734635;
38832 H6l = 4215389547;
38833 H7h = 1541459225;
38834 H7l = 327033209;
38835 TOTAL = 0;
38836 }
38837 function init(h0h, h0l, h1h, h1l, h2h, h2l, h3h, h3l, h4h, h4l, h5h, h5l, h6h, h6l, h7h, h7l, total) {
38838 h0h = h0h | 0;
38839 h0l = h0l | 0;
38840 h1h = h1h | 0;
38841 h1l = h1l | 0;
38842 h2h = h2h | 0;
38843 h2l = h2l | 0;
38844 h3h = h3h | 0;
38845 h3l = h3l | 0;
38846 h4h = h4h | 0;
38847 h4l = h4l | 0;
38848 h5h = h5h | 0;
38849 h5l = h5l | 0;
38850 h6h = h6h | 0;
38851 h6l = h6l | 0;
38852 h7h = h7h | 0;
38853 h7l = h7l | 0;
38854 total = total | 0;
38855 H0h = h0h;
38856 H0l = h0l;
38857 H1h = h1h;
38858 H1l = h1l;
38859 H2h = h2h;
38860 H2l = h2l;
38861 H3h = h3h;
38862 H3l = h3l;
38863 H4h = h4h;
38864 H4l = h4l;
38865 H5h = h5h;
38866 H5l = h5l;
38867 H6h = h6h;
38868 H6l = h6l;
38869 H7h = h7h;
38870 H7l = h7l;
38871 TOTAL = total;
38872 }
38873 function process(offset, length) {
38874 offset = offset | 0;
38875 length = length | 0;
38876 var hashed = 0;
38877 if (offset & 127) return -1;
38878 while ((length | 0) >= 128) {
38879 _core_heap(offset);
38880 offset = offset + 128 | 0;
38881 length = length - 128 | 0;
38882 hashed = hashed + 128 | 0;
38883 }
38884 TOTAL = TOTAL + hashed | 0;
38885 return hashed | 0;
38886 }
38887 function finish(offset, length, output) {
38888 offset = offset | 0;
38889 length = length | 0;
38890 output = output | 0;
38891 var hashed = 0, i = 0;
38892 if (offset & 127) return -1;
38893 if (~output) if (output & 63) return -1;
38894 if ((length | 0) >= 128) {
38895 hashed = process(offset, length) | 0;
38896 if ((hashed | 0) == -1) return -1;
38897 offset = offset + hashed | 0;
38898 length = length - hashed | 0;
38899 }
38900 hashed = hashed + length | 0;
38901 TOTAL = TOTAL + length | 0;
38902 HEAP[offset | length] = 128;
38903 if ((length | 0) >= 112) {
38904 for (i = length + 1 | 0; (i | 0) < 128; i = i + 1 | 0) HEAP[offset | i] = 0;
38905 _core_heap(offset);
38906 length = 0;
38907 HEAP[offset | 0] = 0;
38908 }
38909 for (i = length + 1 | 0; (i | 0) < 123; i = i + 1 | 0) HEAP[offset | i] = 0;
38910 HEAP[offset | 123] = TOTAL >>> 29;
38911 HEAP[offset | 124] = TOTAL >>> 21 & 255;
38912 HEAP[offset | 125] = TOTAL >>> 13 & 255;
38913 HEAP[offset | 126] = TOTAL >>> 5 & 255;
38914 HEAP[offset | 127] = TOTAL << 3 & 255;
38915 _core_heap(offset);
38916 if (~output) _state_to_heap(output);
38917 return hashed | 0;
38918 }
38919 function hmac_reset() {
38920 H0h = I0h;
38921 H0l = I0l;
38922 H1h = I1h;
38923 H1l = I1l;
38924 H2h = I2h;
38925 H2l = I2l;
38926 H3h = I3h;
38927 H3l = I3l;
38928 H4h = I4h;
38929 H4l = I4l;
38930 H5h = I5h;
38931 H5l = I5l;
38932 H6h = I6h;
38933 H6l = I6l;
38934 H7h = I7h;
38935 H7l = I7l;
38936 TOTAL = 128;
38937 }
38938 function _hmac_opad() {
38939 H0h = O0h;
38940 H0l = O0l;
38941 H1h = O1h;
38942 H1l = O1l;
38943 H2h = O2h;
38944 H2l = O2l;
38945 H3h = O3h;
38946 H3l = O3l;
38947 H4h = O4h;
38948 H4l = O4l;
38949 H5h = O5h;
38950 H5l = O5l;
38951 H6h = O6h;
38952 H6l = O6l;
38953 H7h = O7h;
38954 H7l = O7l;
38955 TOTAL = 128;
38956 }
38957 function hmac_init(p0h, p0l, p1h, p1l, p2h, p2l, p3h, p3l, p4h, p4l, p5h, p5l, p6h, p6l, p7h, p7l, p8h, p8l, p9h, p9l, p10h, p10l, p11h, p11l, p12h, p12l, p13h, p13l, p14h, p14l, p15h, p15l) {
38958 p0h = p0h | 0;
38959 p0l = p0l | 0;
38960 p1h = p1h | 0;
38961 p1l = p1l | 0;
38962 p2h = p2h | 0;
38963 p2l = p2l | 0;
38964 p3h = p3h | 0;
38965 p3l = p3l | 0;
38966 p4h = p4h | 0;
38967 p4l = p4l | 0;
38968 p5h = p5h | 0;
38969 p5l = p5l | 0;
38970 p6h = p6h | 0;
38971 p6l = p6l | 0;
38972 p7h = p7h | 0;
38973 p7l = p7l | 0;
38974 p8h = p8h | 0;
38975 p8l = p8l | 0;
38976 p9h = p9h | 0;
38977 p9l = p9l | 0;
38978 p10h = p10h | 0;
38979 p10l = p10l | 0;
38980 p11h = p11h | 0;
38981 p11l = p11l | 0;
38982 p12h = p12h | 0;
38983 p12l = p12l | 0;
38984 p13h = p13h | 0;
38985 p13l = p13l | 0;
38986 p14h = p14h | 0;
38987 p14l = p14l | 0;
38988 p15h = p15h | 0;
38989 p15l = p15l | 0;
38990 reset();
38991 _core(p0h ^ 1549556828, p0l ^ 1549556828, p1h ^ 1549556828, p1l ^ 1549556828, p2h ^ 1549556828, p2l ^ 1549556828, p3h ^ 1549556828, p3l ^ 1549556828, p4h ^ 1549556828, p4l ^ 1549556828, p5h ^ 1549556828, p5l ^ 1549556828, p6h ^ 1549556828, p6l ^ 1549556828, p7h ^ 1549556828, p7l ^ 1549556828, p8h ^ 1549556828, p8l ^ 1549556828, p9h ^ 1549556828, p9l ^ 1549556828, p10h ^ 1549556828, p10l ^ 1549556828, p11h ^ 1549556828, p11l ^ 1549556828, p12h ^ 1549556828, p12l ^ 1549556828, p13h ^ 1549556828, p13l ^ 1549556828, p14h ^ 1549556828, p14l ^ 1549556828, p15h ^ 1549556828, p15l ^ 1549556828);
38992 O0h = H0h;
38993 O0l = H0l;
38994 O1h = H1h;
38995 O1l = H1l;
38996 O2h = H2h;
38997 O2l = H2l;
38998 O3h = H3h;
38999 O3l = H3l;
39000 O4h = H4h;
39001 O4l = H4l;
39002 O5h = H5h;
39003 O5l = H5l;
39004 O6h = H6h;
39005 O6l = H6l;
39006 O7h = H7h;
39007 O7l = H7l;
39008 reset();
39009 _core(p0h ^ 909522486, p0l ^ 909522486, p1h ^ 909522486, p1l ^ 909522486, p2h ^ 909522486, p2l ^ 909522486, p3h ^ 909522486, p3l ^ 909522486, p4h ^ 909522486, p4l ^ 909522486, p5h ^ 909522486, p5l ^ 909522486, p6h ^ 909522486, p6l ^ 909522486, p7h ^ 909522486, p7l ^ 909522486, p8h ^ 909522486, p8l ^ 909522486, p9h ^ 909522486, p9l ^ 909522486, p10h ^ 909522486, p10l ^ 909522486, p11h ^ 909522486, p11l ^ 909522486, p12h ^ 909522486, p12l ^ 909522486, p13h ^ 909522486, p13l ^ 909522486, p14h ^ 909522486, p14l ^ 909522486, p15h ^ 909522486, p15l ^ 909522486);
39010 I0h = H0h;
39011 I0l = H0l;
39012 I1h = H1h;
39013 I1l = H1l;
39014 I2h = H2h;
39015 I2l = H2l;
39016 I3h = H3h;
39017 I3l = H3l;
39018 I4h = H4h;
39019 I4l = H4l;
39020 I5h = H5h;
39021 I5l = H5l;
39022 I6h = H6h;
39023 I6l = H6l;
39024 I7h = H7h;
39025 I7l = H7l;
39026 TOTAL = 128;
39027 }
39028 function hmac_finish(offset, length, output) {
39029 offset = offset | 0;
39030 length = length | 0;
39031 output = output | 0;
39032 var t0h = 0, t0l = 0, t1h = 0, t1l = 0, t2h = 0, t2l = 0, t3h = 0, t3l = 0, t4h = 0, t4l = 0, t5h = 0, t5l = 0, t6h = 0, t6l = 0, t7h = 0, t7l = 0, hashed = 0;
39033 if (offset & 127) return -1;
39034 if (~output) if (output & 63) return -1;
39035 hashed = finish(offset, length, -1) | 0;
39036 t0h = H0h;
39037 t0l = H0l;
39038 t1h = H1h;
39039 t1l = H1l;
39040 t2h = H2h;
39041 t2l = H2l;
39042 t3h = H3h;
39043 t3l = H3l;
39044 t4h = H4h;
39045 t4l = H4l;
39046 t5h = H5h;
39047 t5l = H5l;
39048 t6h = H6h;
39049 t6l = H6l;
39050 t7h = H7h;
39051 t7l = H7l;
39052 _hmac_opad();
39053 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l, 2147483648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1536);
39054 if (~output) _state_to_heap(output);
39055 return hashed | 0;
39056 }
39057 function pbkdf2_generate_block(offset, length, block, count, output) {
39058 offset = offset | 0;
39059 length = length | 0;
39060 block = block | 0;
39061 count = count | 0;
39062 output = output | 0;
39063 var h0h = 0, h0l = 0, h1h = 0, h1l = 0, h2h = 0, h2l = 0, h3h = 0, h3l = 0, h4h = 0, h4l = 0, h5h = 0, h5l = 0, h6h = 0, h6l = 0, h7h = 0, h7l = 0, t0h = 0, t0l = 0, t1h = 0, t1l = 0, t2h = 0, t2l = 0, t3h = 0, t3l = 0, t4h = 0, t4l = 0, t5h = 0, t5l = 0, t6h = 0, t6l = 0, t7h = 0, t7l = 0;
39064 if (offset & 127) return -1;
39065 if (~output) if (output & 63) return -1;
39066 HEAP[offset + length | 0] = block >>> 24;
39067 HEAP[offset + length + 1 | 0] = block >>> 16 & 255;
39068 HEAP[offset + length + 2 | 0] = block >>> 8 & 255;
39069 HEAP[offset + length + 3 | 0] = block & 255;
3af2954a 39070 hmac_finish(offset, length + 4 | 0, -1) | 0;
ebd8d4e8
IC
39071 h0h = t0h = H0h;
39072 h0l = t0l = H0l;
39073 h1h = t1h = H1h;
39074 h1l = t1l = H1l;
39075 h2h = t2h = H2h;
39076 h2l = t2l = H2l;
39077 h3h = t3h = H3h;
39078 h3l = t3l = H3l;
39079 h4h = t4h = H4h;
39080 h4l = t4l = H4l;
39081 h5h = t5h = H5h;
39082 h5l = t5l = H5l;
39083 h6h = t6h = H6h;
39084 h6l = t6l = H6l;
39085 h7h = t7h = H7h;
39086 h7l = t7l = H7l;
39087 count = count - 1 | 0;
39088 while ((count | 0) > 0) {
39089 hmac_reset();
39090 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l, 2147483648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1536);
39091 t0h = H0h;
39092 t0l = H0l;
39093 t1h = H1h;
39094 t1l = H1l;
39095 t2h = H2h;
39096 t2l = H2l;
39097 t3h = H3h;
39098 t3l = H3l;
39099 t4h = H4h;
39100 t4l = H4l;
39101 t5h = H5h;
39102 t5l = H5l;
39103 t6h = H6h;
39104 t6l = H6l;
39105 t7h = H7h;
39106 t7l = H7l;
39107 _hmac_opad();
39108 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l, 2147483648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1536);
39109 t0h = H0h;
39110 t0l = H0l;
39111 t1h = H1h;
39112 t1l = H1l;
39113 t2h = H2h;
39114 t2l = H2l;
39115 t3h = H3h;
39116 t3l = H3l;
39117 t4h = H4h;
39118 t4l = H4l;
39119 t5h = H5h;
39120 t5l = H5l;
39121 t6h = H6h;
39122 t6l = H6l;
39123 t7h = H7h;
39124 t7l = H7l;
39125 h0h = h0h ^ H0h;
39126 h0l = h0l ^ H0l;
39127 h1h = h1h ^ H1h;
39128 h1l = h1l ^ H1l;
39129 h2h = h2h ^ H2h;
39130 h2l = h2l ^ H2l;
39131 h3h = h3h ^ H3h;
39132 h3l = h3l ^ H3l;
39133 h4h = h4h ^ H4h;
39134 h4l = h4l ^ H4l;
39135 h5h = h5h ^ H5h;
39136 h5l = h5l ^ H5l;
39137 h6h = h6h ^ H6h;
39138 h6l = h6l ^ H6l;
39139 h7h = h7h ^ H7h;
39140 h7l = h7l ^ H7l;
39141 count = count - 1 | 0;
39142 }
39143 H0h = h0h;
39144 H0l = h0l;
39145 H1h = h1h;
39146 H1l = h1l;
39147 H2h = h2h;
39148 H2l = h2l;
39149 H3h = h3h;
39150 H3l = h3l;
39151 H4h = h4h;
39152 H4l = h4l;
39153 H5h = h5h;
39154 H5l = h5l;
39155 H6h = h6h;
39156 H6l = h6l;
39157 H7h = h7h;
39158 H7l = h7l;
39159 if (~output) _state_to_heap(output);
39160 return 0;
39161 }
39162 return {
39163 reset: reset,
39164 init: init,
39165 process: process,
39166 finish: finish,
39167 hmac_reset: hmac_reset,
39168 hmac_init: hmac_init,
39169 hmac_finish: hmac_finish,
39170 pbkdf2_generate_block: pbkdf2_generate_block
39171 };
39172 }
39173 var _sha512_block_size = 128, _sha512_hash_size = 64;
39174 function sha512_constructor(options) {
39175 options = options || {};
39176 options.heapSize = options.heapSize || 4096;
39177 if (options.heapSize <= 0 || options.heapSize % 4096) throw new IllegalArgumentError("heapSize must be a positive number and multiple of 4096");
39178 this.heap = options.heap || new Uint8Array(options.heapSize);
39179 this.asm = options.asm || sha512_asm(global, null, this.heap.buffer);
39180 this.BLOCK_SIZE = _sha512_block_size;
39181 this.HASH_SIZE = _sha512_hash_size;
39182 this.reset();
39183 }
39184 function sha512_reset() {
39185 this.result = null;
39186 this.pos = 0;
39187 this.len = 0;
39188 this.asm.reset();
39189 return this;
39190 }
39191 function sha512_process(data) {
39192 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39193 var dpos = 0, dlen = 0, clen = 0;
39194 if (is_buffer(data) || is_bytes(data)) {
39195 dpos = data.byteOffset || 0;
39196 dlen = data.byteLength;
39197 } else if (is_string(data)) {
39198 dlen = data.length;
39199 } else {
39200 throw new TypeError("data isn't of expected type");
39201 }
39202 while (dlen > 0) {
39203 clen = this.heap.byteLength - this.pos - this.len;
39204 clen = clen < dlen ? clen : dlen;
39205 if (is_buffer(data) || is_bytes(data)) {
39206 this.heap.set(new Uint8Array(data.buffer || data, dpos, clen), this.pos + this.len);
39207 } else {
39208 for (var i = 0; i < clen; i++) this.heap[this.pos + this.len + i] = data.charCodeAt(dpos + i);
39209 }
39210 this.len += clen;
39211 dpos += clen;
39212 dlen -= clen;
39213 clen = this.asm.process(this.pos, this.len);
39214 if (clen < this.len) {
39215 this.pos += clen;
39216 this.len -= clen;
39217 } else {
39218 this.pos = 0;
39219 this.len = 0;
39220 }
39221 }
39222 return this;
39223 }
39224 function sha512_finish() {
39225 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39226 this.asm.finish(this.pos, this.len, 0);
39227 this.result = new Uint8Array(_sha512_hash_size);
39228 this.result.set(this.heap.subarray(0, _sha512_hash_size));
39229 this.pos = 0;
39230 this.len = 0;
39231 return this;
39232 }
39233 sha512_constructor.BLOCK_SIZE = _sha512_block_size;
39234 sha512_constructor.HASH_SIZE = _sha512_hash_size;
39235 var sha512_prototype = sha512_constructor.prototype;
39236 sha512_prototype.reset = sha512_reset;
39237 sha512_prototype.process = sha512_process;
39238 sha512_prototype.finish = sha512_finish;
39239 function hmac_constructor(options) {
39240 options = options || {};
39241 if (!options.hash) throw new SyntaxError("option 'hash' is required");
39242 if (!options.hash.HASH_SIZE) throw new SyntaxError("option 'hash' supplied doesn't seem to be a valid hash function");
39243 this.hash = options.hash;
39244 this.BLOCK_SIZE = this.hash.BLOCK_SIZE;
39245 this.HMAC_SIZE = this.hash.HASH_SIZE;
39246 this.key = null;
39247 this.verify = null;
39248 this.result = null;
39249 if (options.password !== undefined || options.verify !== undefined) this.reset(options);
39250 return this;
39251 }
39252 function hmac_sha256_constructor(options) {
39253 options = options || {};
39254 if (!(options.hash instanceof sha256_constructor)) options.hash = new sha256_constructor(options);
39255 hmac_constructor.call(this, options);
39256 return this;
39257 }
39258 function hmac_sha512_constructor(options) {
39259 options = options || {};
39260 if (!(options.hash instanceof sha512_constructor)) options.hash = new sha512_constructor(options);
39261 hmac_constructor.call(this, options);
39262 return this;
39263 }
39264 function _hmac_key(hash, password) {
39265 var key;
39266 if (is_buffer(password) || is_bytes(password)) {
39267 key = new Uint8Array(hash.BLOCK_SIZE);
39268 if (password.byteLength > hash.BLOCK_SIZE) {
39269 key.set(new Uint8Array(hash.reset().process(password).finish().result));
39270 } else if (is_buffer(password)) {
39271 key.set(new Uint8Array(password));
39272 } else {
39273 key.set(password);
39274 }
39275 } else if (is_string(password)) {
39276 key = new Uint8Array(hash.BLOCK_SIZE);
39277 if (password.length > hash.BLOCK_SIZE) {
39278 key.set(new Uint8Array(hash.reset().process(password).finish().result));
39279 } else {
39280 for (var i = 0; i < password.length; ++i) key[i] = password.charCodeAt(i);
39281 }
39282 } else {
39283 throw new TypeError("password isn't of expected type");
39284 }
39285 return key;
39286 }
39287 function _hmac_init_verify(verify) {
39288 if (is_buffer(verify) || is_bytes(verify)) {
39289 verify = new Uint8Array(verify);
39290 } else if (is_string(verify)) {
39291 verify = string_to_bytes(verify);
39292 } else {
39293 throw new TypeError("verify tag isn't of expected type");
39294 }
39295 if (verify.length !== this.HMAC_SIZE) throw new IllegalArgumentError("illegal verification tag size");
39296 this.verify = verify;
39297 }
39298 function hmac_reset(options) {
39299 options = options || {};
39300 var password = options.password;
39301 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
39302 this.result = null;
39303 this.hash.reset();
39304 if (password || is_string(password)) this.key = _hmac_key(this.hash, password);
39305 var ipad = new Uint8Array(this.key);
39306 for (var i = 0; i < ipad.length; ++i) ipad[i] ^= 54;
39307 this.hash.process(ipad);
39308 var verify = options.verify;
39309 if (verify !== undefined) {
39310 _hmac_init_verify.call(this, verify);
39311 } else {
39312 this.verify = null;
39313 }
39314 return this;
39315 }
39316 function hmac_sha256_reset(options) {
39317 options = options || {};
39318 var password = options.password;
39319 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
39320 this.result = null;
39321 this.hash.reset();
39322 if (password || is_string(password)) {
39323 this.key = _hmac_key(this.hash, password);
39324 this.hash.reset().asm.hmac_init(this.key[0] << 24 | this.key[1] << 16 | this.key[2] << 8 | this.key[3], this.key[4] << 24 | this.key[5] << 16 | this.key[6] << 8 | this.key[7], this.key[8] << 24 | this.key[9] << 16 | this.key[10] << 8 | this.key[11], this.key[12] << 24 | this.key[13] << 16 | this.key[14] << 8 | this.key[15], this.key[16] << 24 | this.key[17] << 16 | this.key[18] << 8 | this.key[19], this.key[20] << 24 | this.key[21] << 16 | this.key[22] << 8 | this.key[23], this.key[24] << 24 | this.key[25] << 16 | this.key[26] << 8 | this.key[27], this.key[28] << 24 | this.key[29] << 16 | this.key[30] << 8 | this.key[31], this.key[32] << 24 | this.key[33] << 16 | this.key[34] << 8 | this.key[35], this.key[36] << 24 | this.key[37] << 16 | this.key[38] << 8 | this.key[39], this.key[40] << 24 | this.key[41] << 16 | this.key[42] << 8 | this.key[43], this.key[44] << 24 | this.key[45] << 16 | this.key[46] << 8 | this.key[47], this.key[48] << 24 | this.key[49] << 16 | this.key[50] << 8 | this.key[51], this.key[52] << 24 | this.key[53] << 16 | this.key[54] << 8 | this.key[55], this.key[56] << 24 | this.key[57] << 16 | this.key[58] << 8 | this.key[59], this.key[60] << 24 | this.key[61] << 16 | this.key[62] << 8 | this.key[63]);
39325 } else {
39326 this.hash.asm.hmac_reset();
39327 }
39328 var verify = options.verify;
39329 if (verify !== undefined) {
39330 _hmac_init_verify.call(this, verify);
39331 } else {
39332 this.verify = null;
39333 }
39334 return this;
39335 }
39336 function hmac_sha512_reset(options) {
39337 options = options || {};
39338 var password = options.password;
39339 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
39340 this.result = null;
39341 this.hash.reset();
39342 if (password || is_string(password)) {
39343 this.key = _hmac_key(this.hash, password);
39344 this.hash.reset().asm.hmac_init(this.key[0] << 24 | this.key[1] << 16 | this.key[2] << 8 | this.key[3], this.key[4] << 24 | this.key[5] << 16 | this.key[6] << 8 | this.key[7], this.key[8] << 24 | this.key[9] << 16 | this.key[10] << 8 | this.key[11], this.key[12] << 24 | this.key[13] << 16 | this.key[14] << 8 | this.key[15], this.key[16] << 24 | this.key[17] << 16 | this.key[18] << 8 | this.key[19], this.key[20] << 24 | this.key[21] << 16 | this.key[22] << 8 | this.key[23], this.key[24] << 24 | this.key[25] << 16 | this.key[26] << 8 | this.key[27], this.key[28] << 24 | this.key[29] << 16 | this.key[30] << 8 | this.key[31], this.key[32] << 24 | this.key[33] << 16 | this.key[34] << 8 | this.key[35], this.key[36] << 24 | this.key[37] << 16 | this.key[38] << 8 | this.key[39], this.key[40] << 24 | this.key[41] << 16 | this.key[42] << 8 | this.key[43], this.key[44] << 24 | this.key[45] << 16 | this.key[46] << 8 | this.key[47], this.key[48] << 24 | this.key[49] << 16 | this.key[50] << 8 | this.key[51], this.key[52] << 24 | this.key[53] << 16 | this.key[54] << 8 | this.key[55], this.key[56] << 24 | this.key[57] << 16 | this.key[58] << 8 | this.key[59], this.key[60] << 24 | this.key[61] << 16 | this.key[62] << 8 | this.key[63], this.key[64] << 24 | this.key[65] << 16 | this.key[66] << 8 | this.key[67], this.key[68] << 24 | this.key[69] << 16 | this.key[70] << 8 | this.key[71], this.key[72] << 24 | this.key[73] << 16 | this.key[74] << 8 | this.key[75], this.key[76] << 24 | this.key[77] << 16 | this.key[78] << 8 | this.key[79], this.key[80] << 24 | this.key[81] << 16 | this.key[82] << 8 | this.key[83], this.key[84] << 24 | this.key[85] << 16 | this.key[86] << 8 | this.key[87], this.key[88] << 24 | this.key[89] << 16 | this.key[90] << 8 | this.key[91], this.key[92] << 24 | this.key[93] << 16 | this.key[94] << 8 | this.key[95], this.key[96] << 24 | this.key[97] << 16 | this.key[98] << 8 | this.key[99], this.key[100] << 24 | this.key[101] << 16 | this.key[102] << 8 | this.key[103], this.key[104] << 24 | this.key[105] << 16 | this.key[106] << 8 | this.key[107], this.key[108] << 24 | this.key[109] << 16 | this.key[110] << 8 | this.key[111], this.key[112] << 24 | this.key[113] << 16 | this.key[114] << 8 | this.key[115], this.key[116] << 24 | this.key[117] << 16 | this.key[118] << 8 | this.key[119], this.key[120] << 24 | this.key[121] << 16 | this.key[122] << 8 | this.key[123], this.key[124] << 24 | this.key[125] << 16 | this.key[126] << 8 | this.key[127]);
39345 } else {
39346 this.hash.asm.hmac_reset();
39347 }
39348 var verify = options.verify;
39349 if (verify !== undefined) {
39350 _hmac_init_verify.call(this, verify);
39351 } else {
39352 this.verify = null;
39353 }
39354 return this;
39355 }
39356 function hmac_process(data) {
39357 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
39358 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39359 this.hash.process(data);
39360 return this;
39361 }
39362 function hmac_finish() {
39363 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
39364 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39365 var inner_result = this.hash.finish().result;
39366 var opad = new Uint8Array(this.key);
39367 for (var i = 0; i < opad.length; ++i) opad[i] ^= 92;
39368 var verify = this.verify;
39369 var result = this.hash.reset().process(opad).process(inner_result).finish().result;
39370 if (verify) {
39371 if (verify.length === result.length) {
39372 var diff = 0;
39373 for (var i = 0; i < verify.length; i++) {
39374 diff |= verify[i] ^ result[i];
39375 }
39376 this.result = !diff;
39377 } else {
39378 this.result = false;
39379 }
39380 } else {
39381 this.result = result;
39382 }
39383 return this;
39384 }
39385 function hmac_sha256_finish() {
39386 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
39387 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39388 var hash = this.hash, asm = this.hash.asm, heap = this.hash.heap;
39389 asm.hmac_finish(hash.pos, hash.len, 0);
39390 var verify = this.verify;
39391 var result = new Uint8Array(_sha256_hash_size);
39392 result.set(heap.subarray(0, _sha256_hash_size));
39393 if (verify) {
39394 if (verify.length === result.length) {
39395 var diff = 0;
39396 for (var i = 0; i < verify.length; i++) {
39397 diff |= verify[i] ^ result[i];
39398 }
39399 this.result = !diff;
39400 } else {
39401 this.result = false;
39402 }
39403 } else {
39404 this.result = result;
39405 }
39406 return this;
39407 }
39408 function hmac_sha512_finish() {
39409 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
39410 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39411 var hash = this.hash, asm = this.hash.asm, heap = this.hash.heap;
39412 asm.hmac_finish(hash.pos, hash.len, 0);
39413 var verify = this.verify;
39414 var result = new Uint8Array(_sha512_hash_size);
39415 result.set(heap.subarray(0, _sha512_hash_size));
39416 if (verify) {
39417 if (verify.length === result.length) {
39418 var diff = 0;
39419 for (var i = 0; i < verify.length; i++) {
39420 diff |= verify[i] ^ result[i];
39421 }
39422 this.result = !diff;
39423 } else {
39424 this.result = false;
39425 }
39426 } else {
39427 this.result = result;
39428 }
39429 return this;
39430 }
39431 var hmac_prototype = hmac_constructor.prototype;
39432 hmac_prototype.reset = hmac_reset;
39433 hmac_prototype.process = hmac_process;
39434 hmac_prototype.finish = hmac_finish;
39435 hmac_sha256_constructor.BLOCK_SIZE = sha256_constructor.BLOCK_SIZE;
39436 hmac_sha256_constructor.HMAC_SIZE = sha256_constructor.HASH_SIZE;
39437 var hmac_sha256_prototype = hmac_sha256_constructor.prototype;
39438 hmac_sha256_prototype.reset = hmac_sha256_reset;
39439 hmac_sha256_prototype.process = hmac_process;
39440 hmac_sha256_prototype.finish = hmac_sha256_finish;
39441 hmac_sha512_constructor.BLOCK_SIZE = sha512_constructor.BLOCK_SIZE;
39442 hmac_sha512_constructor.HMAC_SIZE = sha512_constructor.HASH_SIZE;
39443 var hmac_sha512_prototype = hmac_sha512_constructor.prototype;
39444 hmac_sha512_prototype.reset = hmac_sha512_reset;
39445 hmac_sha512_prototype.process = hmac_process;
39446 hmac_sha512_prototype.finish = hmac_sha512_finish;
39447 function pbkdf2_constructor(options) {
39448 options = options || {};
39449 if (!options.hmac) throw new SyntaxError("option 'hmac' is required");
39450 if (!options.hmac.HMAC_SIZE) throw new SyntaxError("option 'hmac' supplied doesn't seem to be a valid HMAC function");
39451 this.hmac = options.hmac;
39452 this.count = options.count || 4096;
39453 this.length = options.length || this.hmac.HMAC_SIZE;
39454 this.result = null;
39455 var password = options.password;
39456 if (password || is_string(password)) this.reset(options);
39457 return this;
39458 }
39459 function pbkdf2_hmac_sha256_constructor(options) {
39460 options = options || {};
39461 if (!(options.hmac instanceof hmac_sha256_constructor)) options.hmac = new hmac_sha256_constructor(options);
39462 pbkdf2_constructor.call(this, options);
39463 return this;
39464 }
39465 function pbkdf2_hmac_sha512_constructor(options) {
39466 options = options || {};
39467 if (!(options.hmac instanceof hmac_sha512_constructor)) options.hmac = new hmac_sha512_constructor(options);
39468 pbkdf2_constructor.call(this, options);
39469 return this;
39470 }
39471 function pbkdf2_reset(options) {
39472 this.result = null;
39473 this.hmac.reset(options);
39474 return this;
39475 }
39476 function pbkdf2_generate(salt, count, length) {
39477 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39478 if (!salt && !is_string(salt)) throw new IllegalArgumentError("bad 'salt' value");
39479 count = count || this.count;
39480 length = length || this.length;
39481 this.result = new Uint8Array(length);
39482 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
39483 for (var i = 1; i <= blocks; ++i) {
39484 var j = (i - 1) * this.hmac.HMAC_SIZE;
39485 var l = (i < blocks ? 0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
39486 var tmp = new Uint8Array(this.hmac.reset().process(salt).process(new Uint8Array([ i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, i & 255 ])).finish().result);
39487 this.result.set(tmp.subarray(0, l), j);
39488 for (var k = 1; k < count; ++k) {
39489 tmp = new Uint8Array(this.hmac.reset().process(tmp).finish().result);
39490 for (var r = 0; r < l; ++r) this.result[j + r] ^= tmp[r];
39491 }
39492 }
39493 return this;
39494 }
39495 function pbkdf2_hmac_sha256_generate(salt, count, length) {
39496 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39497 if (!salt && !is_string(salt)) throw new IllegalArgumentError("bad 'salt' value");
39498 count = count || this.count;
39499 length = length || this.length;
39500 this.result = new Uint8Array(length);
39501 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
39502 for (var i = 1; i <= blocks; ++i) {
39503 var j = (i - 1) * this.hmac.HMAC_SIZE;
39504 var l = (i < blocks ? 0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
39505 this.hmac.reset().process(salt);
39506 this.hmac.hash.asm.pbkdf2_generate_block(this.hmac.hash.pos, this.hmac.hash.len, i, count, 0);
39507 this.result.set(this.hmac.hash.heap.subarray(0, l), j);
39508 }
39509 return this;
39510 }
39511 function pbkdf2_hmac_sha512_generate(salt, count, length) {
39512 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
39513 if (!salt && !is_string(salt)) throw new IllegalArgumentError("bad 'salt' value");
39514 count = count || this.count;
39515 length = length || this.length;
39516 this.result = new Uint8Array(length);
39517 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
39518 for (var i = 1; i <= blocks; ++i) {
39519 var j = (i - 1) * this.hmac.HMAC_SIZE;
39520 var l = (i < blocks ? 0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
39521 this.hmac.reset().process(salt);
39522 this.hmac.hash.asm.pbkdf2_generate_block(this.hmac.hash.pos, this.hmac.hash.len, i, count, 0);
39523 this.result.set(this.hmac.hash.heap.subarray(0, l), j);
39524 }
39525 return this;
39526 }
39527 var pbkdf2_prototype = pbkdf2_constructor.prototype;
39528 pbkdf2_prototype.reset = pbkdf2_reset;
39529 pbkdf2_prototype.generate = pbkdf2_generate;
39530 var pbkdf2_hmac_sha256_prototype = pbkdf2_hmac_sha256_constructor.prototype;
39531 pbkdf2_hmac_sha256_prototype.reset = pbkdf2_reset;
39532 pbkdf2_hmac_sha256_prototype.generate = pbkdf2_hmac_sha256_generate;
39533 var pbkdf2_hmac_sha512_prototype = pbkdf2_hmac_sha512_constructor.prototype;
39534 pbkdf2_hmac_sha512_prototype.reset = pbkdf2_reset;
39535 pbkdf2_hmac_sha512_prototype.generate = pbkdf2_hmac_sha512_generate;
39536 global.IllegalStateError = IllegalStateError;
39537 global.IllegalArgumentError = IllegalArgumentError;
39538 global.SecurityError = SecurityError;
39539 exports.string_to_bytes = string_to_bytes;
39540 exports.hex_to_bytes = hex_to_bytes;
39541 exports.base64_to_bytes = base64_to_bytes;
39542 exports.bytes_to_string = bytes_to_string;
39543 exports.bytes_to_hex = bytes_to_hex;
39544 exports.bytes_to_base64 = bytes_to_base64;
39545 var SHA256_instance = new sha256_constructor({
39546 heapSize: 1048576
39547 });
39548 function sha256_bytes(data) {
39549 if (data === undefined) throw new SyntaxError("data required");
39550 return SHA256_instance.reset().process(data).finish().result;
39551 }
39552 function sha256_hex(data) {
3af2954a 39553 var result = sha256_bytes(data.toUTF8Array());
ebd8d4e8
IC
39554 return bytes_to_hex(result);
39555 }
39556 function sha256_base64(data) {
39557 var result = sha256_bytes(data);
39558 return bytes_to_base64(result);
39559 }
39560 exports.SHA256 = {
39561 bytes: sha256_bytes,
39562 hex: sha256_hex,
39563 base64: sha256_base64
39564 };
39565 var SHA512_instance = new sha512_constructor({
39566 heapSize: 1048576
39567 });
39568 function sha512_bytes(data) {
39569 if (data === undefined) throw new SyntaxError("data required");
39570 return SHA512_instance.reset().process(data).finish().result;
39571 }
39572 function sha512_hex(data) {
39573 var result = sha512_bytes(data);
39574 return bytes_to_hex(result);
39575 }
39576 function sha512_base64(data) {
39577 var result = sha512_bytes(data);
39578 return bytes_to_base64(result);
39579 }
39580 exports.SHA512 = {
39581 bytes: sha512_bytes,
39582 hex: sha512_hex,
39583 base64: sha512_base64
39584 };
39585 var hmac_sha256_instance = new hmac_sha256_constructor({
39586 hash: SHA256_instance
39587 });
39588 function hmac_sha256_bytes(data, password) {
39589 if (data === undefined) throw new SyntaxError("data required");
39590 if (password === undefined) throw new SyntaxError("password required");
39591 return hmac_sha256_instance.reset({
39592 password: password
39593 }).process(data).finish().result;
39594 }
39595 function hmac_sha256_hex(data, password) {
39596 var result = hmac_sha256_bytes(data, password);
39597 return bytes_to_hex(result);
39598 }
39599 function hmac_sha256_base64(data, password) {
39600 var result = hmac_sha256_bytes(data, password);
39601 return bytes_to_base64(result);
39602 }
39603 exports.HMAC = exports.HMAC_SHA256 = {
39604 bytes: hmac_sha256_bytes,
39605 hex: hmac_sha256_hex,
39606 base64: hmac_sha256_base64
39607 };
39608 var hmac_sha512_instance = new hmac_sha512_constructor({
39609 hash: SHA512_instance
39610 });
39611 function hmac_sha512_bytes(data, password) {
39612 if (data === undefined) throw new SyntaxError("data required");
39613 if (password === undefined) throw new SyntaxError("password required");
39614 return hmac_sha512_instance.reset({
39615 password: password
39616 }).process(data).finish().result;
39617 }
39618 function hmac_sha512_hex(data, password) {
39619 var result = hmac_sha512_bytes(data, password);
39620 return bytes_to_hex(result);
39621 }
39622 function hmac_sha512_base64(data, password) {
39623 var result = hmac_sha512_bytes(data, password);
39624 return bytes_to_base64(result);
39625 }
39626 exports.HMAC_SHA512 = {
39627 bytes: hmac_sha512_bytes,
39628 hex: hmac_sha512_hex,
39629 base64: hmac_sha512_base64
39630 };
39631 var pbkdf2_hmac_sha256_instance = new pbkdf2_hmac_sha256_constructor({
39632 hmac: hmac_sha256_instance
39633 });
39634 function pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen) {
39635 if (password === undefined) throw new SyntaxError("password required");
39636 if (salt === undefined) throw new SyntaxError("salt required");
39637 return pbkdf2_hmac_sha256_instance.reset({
3af2954a
IC
39638 password: password.toUTF8Array()
39639 }).generate(salt.toUTF8Array(), iterations, dklen).result;
ebd8d4e8
IC
39640 }
39641 function pbkdf2_hmac_sha256_hex(password, salt, iterations, dklen) {
39642 var result = pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen);
39643 return bytes_to_hex(result);
39644 }
39645 function pbkdf2_hmac_sha256_base64(password, salt, iterations, dklen) {
39646 var result = pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen);
39647 return bytes_to_base64(result);
39648 }
39649 exports.PBKDF2 = exports.PBKDF2_HMAC_SHA256 = {
39650 bytes: pbkdf2_hmac_sha256_bytes,
39651 hex: pbkdf2_hmac_sha256_hex,
39652 base64: pbkdf2_hmac_sha256_base64
39653 };
39654 var pbkdf2_hmac_sha512_instance = new pbkdf2_hmac_sha512_constructor({
39655 hmac: hmac_sha512_instance
39656 });
39657 function pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen) {
39658 if (password === undefined) throw new SyntaxError("password required");
39659 if (salt === undefined) throw new SyntaxError("salt required");
39660 return pbkdf2_hmac_sha512_instance.reset({
3af2954a
IC
39661 password: password.toUTF8Array()
39662 }).generate(salt.toUTF8Array(), iterations, dklen).result;
ebd8d4e8
IC
39663 }
39664 function pbkdf2_hmac_sha512_hex(password, salt, iterations, dklen) {
39665 var result = pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen);
39666 return bytes_to_hex(result);
39667 }
39668 function pbkdf2_hmac_sha512_base64(password, salt, iterations, dklen) {
39669 var result = pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen);
39670 return bytes_to_base64(result);
39671 }
39672 exports.PBKDF2_HMAC_SHA512 = {
39673 bytes: pbkdf2_hmac_sha512_bytes,
39674 hex: pbkdf2_hmac_sha512_hex,
39675 base64: pbkdf2_hmac_sha512_base64
39676 };
39677 var cbc_aes_instance = new cbc_aes_constructor({
39678 heapSize: 1048576
39679 });
39680 function cbc_aes_encrypt_bytes(data, key, padding, iv) {
39681 if (data === undefined) throw new SyntaxError("data required");
39682 if (key === undefined) throw new SyntaxError("key required");
39683 return cbc_aes_instance.reset({
39684 key: key,
39685 padding: padding,
39686 iv: iv
39687 }).encrypt(data).result;
39688 }
39689 function cbc_aes_decrypt_bytes(data, key, padding, iv) {
39690 if (data === undefined) throw new SyntaxError("data required");
39691 if (key === undefined) throw new SyntaxError("key required");
39692 return cbc_aes_instance.reset({
39693 key: key,
39694 padding: padding,
39695 iv: iv
39696 }).decrypt(data).result;
39697 }
39698 exports.AES = exports.AES_CBC = {
39699 encrypt: cbc_aes_encrypt_bytes,
39700 decrypt: cbc_aes_decrypt_bytes
39701 };
39702 var ccm_aes_instance = new ccm_aes_constructor({
39703 heap: cbc_aes_instance.heap,
39704 asm: cbc_aes_instance.asm
39705 });
39706 function ccm_aes_encrypt_bytes(data, key, nonce, adata, tagSize) {
39707 if (data === undefined) throw new SyntaxError("data required");
39708 if (key === undefined) throw new SyntaxError("key required");
39709 if (nonce === undefined) throw new SyntaxError("nonce required");
39710 var dataLength = data.byteLength || data.length || 0;
39711 return ccm_aes_instance.reset({
39712 key: key,
39713 nonce: nonce,
39714 adata: adata,
39715 tagSize: tagSize,
39716 dataLength: dataLength
39717 }).encrypt(data).result;
39718 }
39719 function ccm_aes_decrypt_bytes(data, key, nonce, adata, tagSize) {
39720 if (data === undefined) throw new SyntaxError("data required");
39721 if (key === undefined) throw new SyntaxError("key required");
39722 if (nonce === undefined) throw new SyntaxError("nonce required");
39723 var dataLength = data.byteLength || data.length || 0;
39724 tagSize = tagSize || _aes_block_size;
39725 return ccm_aes_instance.reset({
39726 key: key,
39727 nonce: nonce,
39728 adata: adata,
39729 tagSize: tagSize,
39730 dataLength: dataLength - tagSize
39731 }).decrypt(data).result;
39732 }
39733 exports.AES_CCM = {
39734 encrypt: ccm_aes_encrypt_bytes,
39735 decrypt: ccm_aes_decrypt_bytes
39736 };
39737 var cfb_aes_instance = new cfb_aes_constructor({
39738 heap: cbc_aes_instance.heap,
39739 asm: cbc_aes_instance.asm
39740 });
39741 function cfb_aes_encrypt_bytes(data, key, padding, iv) {
39742 if (data === undefined) throw new SyntaxError("data required");
39743 if (key === undefined) throw new SyntaxError("key required");
39744 return cfb_aes_instance.reset({
39745 key: key,
39746 padding: padding,
3af2954a
IC
39747 iv: iv
39748 }).encrypt(data).result;
ebd8d4e8 39749 }
3af2954a
IC
39750 function cfb_aes_decrypt_bytes(data, key, padding, iv) {
39751 if (data === undefined) throw new SyntaxError("data required");
39752 if (key === undefined) throw new SyntaxError("key required");
39753 return cfb_aes_instance.reset({
39754 key: key,
39755 padding: padding,
39756 iv: iv
39757 }).decrypt(data).result;
ebd8d4e8 39758 }
3af2954a
IC
39759 exports.AES_CFB = {
39760 encrypt: cfb_aes_encrypt_bytes,
39761 decrypt: cfb_aes_decrypt_bytes
39762 };
39763 var cfb_aes_decrypt_instance = new cfb_aes_decrypt_constructor({
39764 heap: cbc_aes_instance.heap,
39765 asm: cbc_aes_instance.asm
39766 });
39767 function cfb_aes_decrypt_init(key, padding, iv) {
39768 if (key === undefined) throw new SyntaxError("key required");
39769 return cfb_aes_decrypt_instance.reset({
39770 key: key,
39771 padding: padding,
39772 iv: iv
39773 });
ebd8d4e8 39774 }
3af2954a
IC
39775 exports.AES_CFB = exports.AES_CFB || {};
39776 exports.AES_CFB.decryptor = {
39777 init: cfb_aes_decrypt_init
39778 };
39779})({}, function() {
39780 return this;
39781}());
ebd8d4e8 39782
3af2954a
IC
39783String.prototype.toUTF8Array = function() {
39784 var str = this;
39785 var utf8 = [];
39786 for (var i=0; i < str.length; i++) {
39787 var charcode = str.charCodeAt(i);
39788 if (charcode < 0x80) utf8.push(charcode);
39789 else if (charcode < 0x800) {
39790 utf8.push(0xc0 | (charcode >> 6),
39791 0x80 | (charcode & 0x3f));
ebd8d4e8 39792 }
3af2954a
IC
39793 else if (charcode < 0xd800 || charcode >= 0xe000) {
39794 utf8.push(0xe0 | (charcode >> 12),
39795 0x80 | ((charcode>>6) & 0x3f),
39796 0x80 | (charcode & 0x3f));
39797 }
39798 // surrogate pair
39799 else {
39800 i++;
39801 // UTF-16 encodes 0x10000-0x10FFFF by
39802 // subtracting 0x10000 and splitting the
39803 // 20 bits of 0x0-0xFFFFF into two halves
39804 charcode = 0x10000 + (((charcode & 0x3ff)<<10)
39805 | (str.charCodeAt(i) & 0x3ff))
39806 utf8.push(0xf0 | (charcode >>18),
39807 0x80 | ((charcode>>12) & 0x3f),
39808 0x80 | ((charcode>>6) & 0x3f),
39809 0x80 | (charcode & 0x3f));
ebd8d4e8 39810 }
ebd8d4e8 39811 }
3af2954a 39812 return new Uint8Array(utf8);
ebd8d4e8 39813}
3af2954a
IC
39814 </script>
39815 <script>
39816WORDLISTS = {};
39817 </script>
39818 <script>
39819WORDLISTS["english"] = [
ebd8d4e8
IC
39820"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
39821"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
39822"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
39823"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
39824"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
39825"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
39826"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
39827"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
39828"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
39829"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
39830"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
39831"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
39832"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
39833"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
39834"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
39835"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
39836"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
39837"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
39838"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
39839"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
39840"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
39841"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
39842"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
39843"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
39844"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
39845"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
39846"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
39847"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
39848"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
39849"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
39850"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
39851"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
39852"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
39853"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
39854"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
39855"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
39856"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
39857"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
39858"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
39859"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
39860"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
39861"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
39862"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
39863"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
39864"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
39865"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
39866"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
39867"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
39868"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
39869"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
39870"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
39871"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
39872"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
39873"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
39874"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
39875"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
39876"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
39877"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
39878"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
39879"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
39880"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
39881"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
39882"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
39883"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
39884"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
39885"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
39886"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
39887"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
39888"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
39889"film","filter","final","find","fine","finger","finish","fire","firm","first",
39890"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
39891"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
39892"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
39893"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
39894"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
39895"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
39896"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
39897"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
39898"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
39899"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
39900"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
39901"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
39902"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
39903"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
39904"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
39905"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
39906"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
39907"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
39908"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
39909"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
39910"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
39911"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
39912"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
39913"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
39914"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
39915"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
39916"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
39917"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
39918"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
39919"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
39920"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
39921"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
39922"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
39923"liar","liberty","library","license","life","lift","light","like","limb","limit",
39924"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
39925"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
39926"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
39927"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
39928"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
39929"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
39930"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
39931"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
39932"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
39933"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
39934"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
39935"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
39936"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
39937"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
39938"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
39939"network","neutral","never","news","next","nice","night","noble","noise","nominee",
39940"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
39941"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
39942"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
39943"oil","okay","old","olive","olympic","omit","once","one","onion","online",
39944"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
39945"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
39946"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
39947"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
39948"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
39949"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
39950"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
39951"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
39952"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
39953"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
39954"pole","police","pond","pony","pool","popular","portion","position","possible","post",
39955"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
39956"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
39957"prize","problem","process","produce","profit","program","project","promote","proof","property",
39958"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
39959"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
39960"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
39961"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
39962"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
39963"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
39964"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
39965"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
39966"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
39967"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
39968"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
39969"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
39970"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
39971"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
39972"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
39973"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
39974"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
39975"scrub","sea","search","season","seat","second","secret","section","security","seed",
39976"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
39977"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
39978"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
39979"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
39980"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
39981"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
39982"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
39983"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
39984"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
39985"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
39986"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
39987"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
39988"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
39989"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
39990"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
39991"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
39992"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
39993"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
39994"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
39995"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
39996"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
39997"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
39998"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
39999"thank","that","theme","then","theory","there","they","thing","this","thought",
40000"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
40001"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
40002"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
40003"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
40004"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
40005"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
40006"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
40007"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
40008"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
40009"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
40010"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
40011"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
40012"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
40013"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
40014"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
40015"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
40016"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
40017"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
40018"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
40019"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
40020"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
40021"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
40022"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
40023"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
40024"yellow","you","young","youth","zebra","zero","zone","zoo"]
3af2954a
IC
40025 </script>
40026 <script>
40027/*
40028 * Copyright (c) 2013 Pavol Rusnak
40029 *
40030 * Permission is hereby granted, free of charge, to any person obtaining a copy of
40031 * this software and associated documentation files (the "Software"), to deal in
40032 * the Software without restriction, including without limitation the rights to
40033 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
40034 * of the Software, and to permit persons to whom the Software is furnished to do
40035 * so, subject to the following conditions:
40036 *
40037 * The above copyright notice and this permission notice shall be included in all
40038 * copies or substantial portions of the Software.
40039 *
40040 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40041 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40042 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
40043 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40044 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
40045 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40046 */
40047
40048/*
40049 * Javascript port from python by Ian Coleman
40050 *
40051 * Includes code from asmCrypto
40052 * https://github.com/tresorit/asmcrypto.js
40053 */
40054
40055var Mnemonic = function(language) {
40056
40057 var PBKDF2_ROUNDS = 2048;
40058 var RADIX = 2048;
40059
40060 var self = this;
40061 var wordlist = [];
40062
40063 function init() {
40064 wordlist = WORDLISTS[language];
40065 if (wordlist.length != RADIX) {
40066 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
40067 throw err;
40068 }
40069 }
40070
40071 self.generate = function(strength) {
40072 strength = strength || 128;
40073 var r = strength % 32;
40074 if (r > 0) {
40075 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
40076 }
40077 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
40078 if (!hasStrongCrypto) {
40079 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
40080 }
40081 var buffer = new Uint8Array(strength / 8);
40082 var data = crypto.getRandomValues(buffer);
40083 return self.toMnemonic(data);
40084 }
40085
40086 self.toMnemonic = function(data) {
40087 if (data.length % 4 > 0) {
40088 throw 'Data length in bits should be divisible by 32, but it is not (' + data.length + ' bytes = ' + data.length*8 + ' bits).'
40089 }
40090
40091 //h = hashlib.sha256(data).hexdigest()
40092 var uintArray = new Uint8Array(data);
40093 var h = asmCrypto.SHA256.bytes(uintArray);
40094
40095 // b is a binary string, eg '00111010101100...'
40096 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
40097 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
40098 //
40099 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
40100 // c = bin(int(h, 16))[2:].zfill(256)
40101 // d = c[:len(data) * 8 / 32]
40102 var a = byteArrayToBinaryString(data);
40103 var c = byteArrayToBinaryString(h);
40104 var d = c.substring(0, data.length * 8 / 32);
40105 // b = line1 + line2
40106 var b = a + d;
40107
40108 var result = [];
40109 var blen = b.length / 11;
40110 for (var i=0; i<blen; i++) {
40111 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
40112 result.push(wordlist[idx]);
40113 }
40114 return result.join(' ');
40115 }
40116
40117 self.check = function(mnemonic) {
40118 var mnemonic = mnemonic.split(' ')
40119 if (mnemonic.length % 3 > 0) {
40120 return false
40121 }
40122 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
40123 var idx = [];
40124 for (var i=0; i<mnemonic.length; i++) {
40125 var word = mnemonic[i];
40126 var wordIndex = wordlist.indexOf(word);
40127 if (wordIndex == -1) {
40128 return false;
40129 }
40130 var binaryIndex = zfill(wordIndex.toString(2), 11);
40131 idx.push(binaryIndex);
40132 }
40133 var b = idx.join('');
40134 var l = b.length;
40135 //d = b[:l / 33 * 32]
40136 //h = b[-l / 33:]
40137 var d = b.substring(0, l / 33 * 32);
40138 var h = b.substring(l - l / 33, l);
40139 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
40140 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
40141 var nd = binaryStringToByteArray(d);
40142 var ndHash = asmCrypto.SHA256.bytes(nd);
40143 var ndBstr = zfill(byteArrayToBinaryString(ndHash), 256);
40144 var nh = ndBstr.substring(0,l/33);
40145 return h == nh;
40146 }
40147
40148 self.toSeed = function(mnemonic, passphrase) {
40149 passphrase = passphrase || '';
40150 mnemonic = self.normalizeString(mnemonic)
40151 passphrase = self.normalizeString(passphrase)
40152 passphrase = "mnemonic" + passphrase;
40153 //return PBKDF2(mnemonic, 'mnemonic' + passphrase, iterations=PBKDF2_ROUNDS, macmodule=hmac, digestmodule=hashlib.sha512).read(64)
40154 return asmCrypto.PBKDF2_HMAC_SHA512.hex(mnemonic, passphrase, PBKDF2_ROUNDS, 512/8);
40155 }
40156
40157 self.normalizeString = function(str) {
40158 if (typeof str.normalize == "function") {
40159 return str.normalize("NFKD");
40160 }
40161 else {
40162 // TODO decide how to handle this in the future.
40163 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
40164 return str;
40165 }
40166 }
40167
40168 function byteArrayToBinaryString(data) {
40169 var bin = "";
40170 for (var i=0; i<data.length; i++) {
40171 bin += zfill(data[i].toString(2), 8);
40172 }
40173 return bin;
40174 }
40175
40176 function binaryStringToByteArray(str) {
40177 var arrayLen = str.length / 8;
40178 var array = new Uint8Array(arrayLen);
40179 for (var i=0; i<arrayLen; i++) {
40180 var valueStr = str.substring(0,8);
40181 var value = parseInt(valueStr, 2);
40182 array[i] = value;
40183 str = str.slice(8);
40184 }
40185 return array;
40186 }
40187
40188 // Pad a numeric string on the left with zero digits until the given width
40189 // is reached.
40190 // Note this differs to the python implementation because it does not
40191 // handle numbers starting with a sign.
40192 function zfill(source, length) {
40193 source = source.toString();
40194 while (source.length < length) {
40195 source = '0' + source;
40196 }
40197 return source;
40198 }
40199
40200 init();
ebd8d4e8 40201
3af2954a
IC
40202}
40203 </script>
40204 <script>
ebd8d4e8
IC
40205(function() {
40206
40207 var mnemonic = new Mnemonic("english");
40208 var bip32RootKey = null;
40209 var bip32ExtendedKey = null;
40210 var network = Bitcoin.networks.bitcoin;
40211 var addressRowTemplate = $("#address-row-template");
40212
40213 var phraseChangeTimeoutEvent = null;
40214
40215 var DOM = {};
40216 DOM.phrase = $(".phrase");
721b7284 40217 DOM.passphrase = $(".passphrase");
ebd8d4e8
IC
40218 DOM.generate = $(".generate");
40219 DOM.rootKey = $(".root-key");
40220 DOM.extendedPrivKey = $(".extended-priv-key");
40221 DOM.extendedPubKey = $(".extended-pub-key");
40222 DOM.bip32path = $("#bip32-path");
40223 DOM.bip44path = $("#bip44-path");
40224 DOM.bip44purpose = $("#bip44 .purpose");
40225 DOM.bip44coin = $("#bip44 .coin");
40226 DOM.bip44account = $("#bip44 .account");
40227 DOM.bip44change = $("#bip44 .change");
40228 DOM.strength = $(".strength");
40229 DOM.addresses = $(".addresses");
40230 DOM.rowsToAdd = $(".rows-to-add");
40231 DOM.more = $(".more");
40232 DOM.feedback = $(".feedback");
40233 DOM.tab = $(".derivation-type a");
40234 DOM.indexToggle = $(".index-toggle");
40235 DOM.addressToggle = $(".address-toggle");
40236 DOM.privateKeyToggle = $(".private-key-toggle");
40237
40238 var derivationPath = DOM.bip44path.val();
40239
40240 function init() {
40241 // Events
a19a5498
IC
40242 DOM.phrase.on("input", delayedPhraseChanged);
40243 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
40244 DOM.generate.on("click", generateClicked);
40245 DOM.more.on("click", showMore);
a19a5498
IC
40246 DOM.bip32path.on("input", bip32Changed);
40247 DOM.bip44purpose.on("input", bip44Changed);
40248 DOM.bip44coin.on("input", bip44Changed);
40249 DOM.bip44account.on("input", bip44Changed);
40250 DOM.bip44change.on("input", bip44Changed);
ebd8d4e8
IC
40251 DOM.tab.on("click", tabClicked);
40252 DOM.indexToggle.on("click", toggleIndexes);
40253 DOM.addressToggle.on("click", toggleAddresses);
40254 DOM.privateKeyToggle.on("click", togglePrivateKeys);
40255 disableForms();
40256 hidePending();
40257 hideValidationError();
40258 }
40259
40260 // Event handlers
40261
40262 function delayedPhraseChanged() {
40263 hideValidationError();
40264 showPending();
40265 if (phraseChangeTimeoutEvent != null) {
40266 clearTimeout(phraseChangeTimeoutEvent);
40267 }
40268 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
40269 }
40270
40271 function phraseChanged() {
40272 showPending();
40273 hideValidationError();
40274 // Get the mnemonic phrase
40275 var phrase = DOM.phrase.val();
721b7284 40276 var passphrase = DOM.passphrase.val();
ebd8d4e8
IC
40277 var errorText = findPhraseErrors(phrase);
40278 if (errorText) {
40279 showValidationError(errorText);
40280 return;
40281 }
40282 // Get the derivation path
40283 var errorText = findDerivationPathErrors();
40284 if (errorText) {
40285 showValidationError(errorText);
40286 return;
40287 }
40288 // Calculate and display
721b7284 40289 calcBip32Seed(phrase, passphrase, derivationPath);
ebd8d4e8
IC
40290 displayBip32Info();
40291 hidePending();
40292 }
40293
40294 function generateClicked() {
40295 clearDisplay();
40296 showPending();
40297 setTimeout(function() {
40298 var phrase = generateRandomPhrase();
40299 if (!phrase) {
40300 return;
40301 }
40302 phraseChanged();
40303 }, 50);
40304 }
40305
40306 function tabClicked(e) {
40307 var activePath = $(e.target.getAttribute("href") + " .path");
40308 derivationPath = activePath.val();
40309 derivationChanged();
40310 }
40311
40312 function derivationChanged() {
59780293 40313 delayedPhraseChanged();
ebd8d4e8
IC
40314 }
40315
40316 function bip32Changed() {
40317 derivationPath = DOM.bip32path.val();
40318 derivationChanged();
40319 }
40320
40321 function bip44Changed() {
40322 setBip44DerivationPath();
40323 derivationPath = DOM.bip44path.val();
40324 derivationChanged();
40325 }
40326
40327 function toggleIndexes() {
40328 $("td.index span").toggleClass("invisible");
40329 }
40330
40331 function toggleAddresses() {
40332 $("td.address span").toggleClass("invisible");
40333 }
40334
40335 function togglePrivateKeys() {
40336 $("td.privkey span").toggleClass("invisible");
40337 }
40338
40339 // Private methods
40340
40341 function generateRandomPhrase() {
40342 if (!hasStrongRandom()) {
40343 var errorText = "This browser does not support strong randomness";
40344 showValidationError(errorText);
40345 return;
40346 }
40347 var numWords = parseInt(DOM.strength.val());
40348 // Check strength is an integer
40349 if (isNaN(numWords)) {
40350 DOM.strength.val("12");
40351 numWords = 12;
40352 }
40353 // Check strength is a multiple of 32, if not round it down
40354 if (numWords % 3 != 0) {
40355 numWords = Math.floor(numWords / 3) * 3;
40356 DOM.strength.val(numWords);
40357 }
40358 // Check strength is at least 32
40359 if (numWords == 0) {
40360 numWords = 3;
40361 DOM.strength.val(numWords);
40362 }
40363 var strength = numWords / 3 * 32;
40364 var words = mnemonic.generate(strength);
40365 DOM.phrase.val(words);
40366 return words;
40367 }
40368
721b7284
IC
40369 function calcBip32Seed(phrase, passphrase, path) {
40370 var seed = mnemonic.toSeed(phrase, passphrase);
bade1504 40371 bip32RootKey = Bitcoin.HDNode.fromSeedHex(seed, network);
ebd8d4e8
IC
40372 bip32ExtendedKey = bip32RootKey;
40373 // Derive the key from the path
40374 var pathBits = path.split("/");
40375 for (var i=0; i<pathBits.length; i++) {
40376 var bit = pathBits[i];
40377 var index = parseInt(bit);
40378 if (isNaN(index)) {
40379 continue;
40380 }
40381 var hardened = bit[bit.length-1] == "'";
40382 if (hardened) {
40383 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
40384 }
40385 else {
40386 bip32ExtendedKey = bip32ExtendedKey.derive(index);
40387 }
40388 }
40389 }
40390
40391 function showValidationError(errorText) {
40392 DOM.feedback
40393 .text(errorText)
40394 .show();
40395 }
40396
40397 function hideValidationError() {
40398 DOM.feedback
40399 .text("")
40400 .hide();
40401 }
40402
40403 function findPhraseErrors(phrase) {
40404 // TODO make this right
40405 // Preprocess the words
783981de 40406 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
40407 var parts = phrase.split(" ");
40408 var proper = [];
40409 for (var i=0; i<parts.length; i++) {
40410 var part = parts[i];
40411 if (part.length > 0) {
40412 // TODO check that lowercasing is always valid to do
40413 proper.push(part.toLowerCase());
40414 }
40415 }
40416 // TODO some levenstein on the words
40417 var properPhrase = proper.join(' ');
40418 // Check the words are valid
40419 var isValid = mnemonic.check(properPhrase);
40420 if (!isValid) {
40421 return "Invalid mnemonic";
40422 }
40423 return false;
40424 }
40425
40426 function findDerivationPathErrors(path) {
40427 // TODO
40428 return false;
40429 }
40430
40431 function displayBip32Info() {
40432 // Display the key
40433 var rootKey = bip32RootKey.toBase58();
40434 DOM.rootKey.val(rootKey);
40435 var extendedPrivKey = bip32ExtendedKey.toBase58();
40436 DOM.extendedPrivKey.val(extendedPrivKey);
40437 var extendedPubKey = bip32ExtendedKey.toBase58(false);
40438 DOM.extendedPubKey.val(extendedPubKey);
40439 // Display the addresses and privkeys
40440 clearAddressesList();
40441 displayAddresses(0, 20);
40442 }
40443
40444 function displayAddresses(start, total) {
40445 for (var i=0; i<total; i++) {
40446 var index = i+ start;
40447 var key = bip32ExtendedKey.derive(index);
40448 var address = key.getAddress().toString();
ec1e50df 40449 var privkey = key.privKey.toWIF(network);
ebd8d4e8
IC
40450 addAddressToList(index, address, privkey);
40451 }
40452 }
40453
40454 function showMore() {
40455 var start = DOM.addresses.children().length;
40456 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
40457 if (isNaN(rowsToAdd)) {
40458 rowsToAdd = 20;
40459 DOM.rowsToAdd.val("20");
40460 }
40461 if (rowsToAdd > 200) {
40462 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
40463 msg += "Do you want to continue?";
40464 if (!confirm(msg)) {
40465 return;
40466 }
40467 }
40468 showPending();
40469 setTimeout(function() {
40470 displayAddresses(start, rowsToAdd);
40471 hidePending();
40472 }, 50);
40473 }
40474
40475 function clearDisplay() {
40476 clearAddressesList();
40477 clearKey();
40478 hideValidationError();
40479 }
40480
40481 function clearAddressesList() {
40482 DOM.addresses.empty();
40483 }
40484
40485 function clearKey() {
40486 DOM.rootKey.val("");
40487 DOM.extendedPrivKey.val("");
40488 DOM.extendedPubKey.val("");
40489 }
40490
40491 function addAddressToList(index, address, privkey) {
40492 var row = $(addressRowTemplate.html());
40493 row.find(".index span").text(index);
40494 row.find(".address span").text(address);
40495 row.find(".privkey span").text(privkey);
40496 DOM.addresses.append(row);
40497 }
40498
40499 function hasStrongRandom() {
40500 return 'crypto' in window && window['crypto'] !== null;
40501 }
40502
40503 function disableForms() {
40504 $("form").on("submit", function(e) {
40505 e.preventDefault();
40506 });
40507 }
40508
40509 function setBip44DerivationPath() {
40510 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
40511 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
40512 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
40513 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
40514 var path = "m/";
40515 path += purpose + "'/";
40516 path += coin + "'/";
40517 path += account + "'/";
40518 path += change;
40519 DOM.bip44path.val(path);
40520 }
40521
40522 function parseIntNoNaN(val, defaultVal) {
40523 var v = parseInt(val);
40524 if (isNaN(v)) {
40525 return defaultVal;
40526 }
40527 return v;
40528 }
40529
40530 function showPending() {
40531 DOM.feedback
40532 .text("Calculating...")
40533 .show();
40534 }
40535
40536 function hidePending() {
40537 DOM.feedback
40538 .text("")
40539 .hide();
40540 }
40541
40542 init();
40543
40544})();
3af2954a 40545 </script>
ebd8d4e8
IC
40546 </body>
40547</html>