aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Pollastri <pollastri.p@gmail.com>2017-06-01 16:00:20 +0200
committerGitHub <noreply@github.com>2017-06-01 16:00:20 +0200
commit9504fb93936ea7022709f67e84133de940dc06a6 (patch)
tree3cb819bc8d8892e9276cb17fd0aef4585097ead4
parent53aaab270d7031a05ffe66f424529ea84534fb40 (diff)
parent8a1f452d03f81c917182d61895b68a1a5201ca31 (diff)
downloadBIP39-9504fb93936ea7022709f67e84133de940dc06a6.tar.gz
BIP39-9504fb93936ea7022709f67e84133de940dc06a6.tar.zst
BIP39-9504fb93936ea7022709f67e84133de940dc06a6.zip
Merge pull request #1 from amougel/master
Ripple support
-rw-r--r--bip39-standalone.html25204
-rw-r--r--compile.py10
-rw-r--r--readme.md22
-rw-r--r--src/index.html31
-rw-r--r--src/js/basex.js2010
-rw-r--r--src/js/bitcoinjs-extensions.js10
-rw-r--r--src/js/ethereumjs-util.js18762
-rw-r--r--src/js/index.js143
-rw-r--r--src/js/jsbip39.js5
-rw-r--r--src/js/polyfill.es6.js3793
-rw-r--r--src/js/ripple-util.js10
-rw-r--r--src/js/unorm.js442
-rw-r--r--tests.js321
13 files changed, 50674 insertions, 89 deletions
diff --git a/bip39-standalone.html b/bip39-standalone.html
index 3b4f0f2..98a33b2 100644
--- a/bip39-standalone.html
+++ b/bip39-standalone.html
@@ -12,6 +12,7 @@
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" /> 12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" /> 13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" /> 14 <meta content="Ian Coleman" name="author" />
15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
15 16
16 <style> 17 <style>
17 body { 18 body {
@@ -186,9 +187,9 @@
186 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label> 187 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
187 <div class="col-sm-9"> 188 <div class="col-sm-9">
188 <select class="mnemonic-length form-control"> 189 <select class="mnemonic-length form-control">
189 <option value="raw" data-translate>From entropy length (3 words per 32 bits)</option> 190 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
190 <option value="12">12 <span data-translate>Words</span></option> 191 <option value="12">12 <span data-translate>Words</span></option>
191 <option value="15" selected>15 <span data-translate>Words</option> 192 <option value="15">15 <span data-translate>Words</option>
192 <option value="18">18 <span data-translate>Words</span></option> 193 <option value="18">18 <span data-translate>Words</span></option>
193 <option value="21">21 <span data-translate>Words</span></option> 194 <option value="21">21 <span data-translate>Words</span></option>
194 <option value="24">24 <span data-translate>Words</span></option> 195 <option value="24">24 <span data-translate>Words</span></option>
@@ -372,6 +373,15 @@
372 </p> 373 </p>
373 </div> 374 </div>
374 <div class="form-group"> 375 <div class="form-group">
376 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
377 <div class="col-sm-10">
378 <select id="bip32-client" class="client form-control">
379 <option value="custom">Custom derivation path</option>
380 <!-- populated by javascript -->
381 </select>
382 </div>
383 </div>
384 <div class="form-group">
375 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label> 385 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
376 <div class="col-sm-10"> 386 <div class="col-sm-10">
377 <input id="bip32-path" type="text" class="path form-control" value="m/0"> 387 <input id="bip32-path" type="text" class="path form-control" value="m/0">
@@ -397,6 +407,18 @@
397 </div> 407 </div>
398 </div> 408 </div>
399 <div class="form-group"> 409 <div class="form-group">
410 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
411 <div class="col-sm-10">
412 <p class="form-control no-border">
413 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
414 </p>
415 <p class="form-control no-border">
416 <span data-translate>For more info see</span>
417 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
418 </p>
419 </div>
420 </div>
421 <div class="form-group">
400 <label class="col-sm-2 control-label" data-translate>Block Explorers</label> 422 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
401 <div class="col-sm-10"> 423 <div class="col-sm-10">
402 <p class="form-control no-border"> 424 <p class="form-control no-border">
@@ -655,6 +677,6253 @@
655 <td class="privkey"><span data-show-qr></span></td> 677 <td class="privkey"><span data-show-qr></span></td>
656 </tr> 678 </tr>
657 </script> 679 </script>
680 <script>// From
681// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
682// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
683// but is not required in any modern browsers.
684// For more information, see
685// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
686
687//----------------------------------------------------------------------
688//
689// ECMAScript 2015 Polyfills
690//
691//----------------------------------------------------------------------
692
693(function (global) {
694 "use strict";
695
696 // Set this to always override native implementations, for testing
697 // the polyfill in browsers with partial/full ES2015 support.
698 var OVERRIDE_NATIVE_FOR_TESTING = false;
699
700 var undefined = (void 0); // Paranoia
701
702 // Helpers
703
704 function strict(o) {
705 return o === global ? undefined : o;
706 }
707
708 function hook(o, p, f) {
709 var op = o[p];
710 console.assert(typeof op === 'function', 'Hooking a non-function');
711 o[p] = function() {
712 var o = strict(this);
713 var r = f.apply(o, arguments);
714 return r !== undefined ? r : op.apply(o, arguments);
715 };
716 }
717
718 function isSymbol(s) {
719 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
720 }
721
722 function getPropertyDescriptor(target, name) {
723 var desc = Object.getOwnPropertyDescriptor(target, name);
724 var proto = Object.getPrototypeOf(target);
725 while (!desc && proto) {
726 desc = Object.getOwnPropertyDescriptor(proto, name);
727 proto = Object.getPrototypeOf(proto);
728 }
729 return desc;
730 }
731
732 var enqueue = (function(nativePromise, nativeSetImmediate) {
733 if (nativePromise)
734 return function(job) { nativePromise.resolve().then(function() { job(); }); };
735 if (nativeSetImmediate)
736 return function(job) { nativeSetImmediate(job); };
737 return function(job) { setTimeout(job, 0); };
738 }(global['Promise'], global['setImmediate']));
739
740 function define(o, p, v, override) {
741 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
742 return;
743
744 if (typeof v === 'function') {
745 // Sanity check that functions are appropriately named (where possible)
746 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
747 Object.defineProperty(o, p, {
748 value: v,
749 configurable: true,
750 enumerable: false,
751 writable: true
752 });
753 } else {
754 Object.defineProperty(o, p, {
755 value: v,
756 configurable: false,
757 enumerable: false,
758 writable: false
759 });
760 }
761 }
762
763 function set_internal(o, p, v) {
764 Object.defineProperty(o, p, {
765 value: v,
766 configurable: false,
767 enumerable: false,
768 writable: true
769 });
770 }
771
772 // Snapshot intrinsic functions
773 var $isNaN = global.isNaN,
774 $parseInt = global.parseInt,
775 $parseFloat = global.parseFloat;
776
777 var E = Math.E,
778 LOG10E = Math.LOG10E,
779 LOG2E = Math.LOG2E,
780 abs = Math.abs,
781 ceil = Math.ceil,
782 exp = Math.exp,
783 floor = Math.floor,
784 log = Math.log,
785 max = Math.max,
786 min = Math.min,
787 pow = Math.pow,
788 random = Math.random,
789 sqrt = Math.sqrt;
790
791 var orig_match = String.prototype.match,
792 orig_replace = String.prototype.replace,
793 orig_search = String.prototype.search,
794 orig_split = String.prototype.split;
795
796 // These are used for implementing the polyfills, but not exported.
797
798 // Inspired by https://gist.github.com/1638059
799 /** @constructor */
800 function EphemeronTable() {
801 var secretKey = ObjectCreate(null);
802
803 function conceal(o) {
804 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
805 Object.defineProperty(o, 'valueOf', {
806 value: (function(secretKey) {
807 return function (k) {
808 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
809 };
810 }(secretKey)),
811 configurable: true,
812 writeable: true,
813 enumerable: false
814 });
815 return secrets;
816 }
817
818 function reveal(o) {
819 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
820 return v === o ? null : v;
821 }
822
823 return {
824 clear: function() {
825 secretKey = ObjectCreate(null);
826 },
827 remove: function(key) {
828 var secrets = reveal(key);
829 if (secrets && HasOwnProperty(secrets, 'value')) {
830 delete secrets.value;
831 return true;
832 }
833 return false;
834 },
835 get: function(key, defaultValue) {
836 var secrets = reveal(key);
837 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
838 },
839 has: function(key) {
840 var secrets = reveal(key);
841 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
842 },
843 set: function(key, value) {
844 var secrets = reveal(key) || conceal(key);
845 secrets.value = value;
846 }
847 };
848 }
849
850 var empty = Object.create(null);
851
852 //----------------------------------------------------------------------
853 //
854 // ECMAScript 2015
855 // http://www.ecma-international.org/ecma-262/6.0/
856 //
857 //----------------------------------------------------------------------
858
859 // ---------------------------------------
860 // 19.4 Symbol Objects
861 // ---------------------------------------
862
863 // NOTE: Symbols are defined here - out of spec order - since we need the
864 // properties and prototype to be populated for other polyfills.
865
866 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
867
868 var symbolForKey;
869 (function() {
870 var secret = Object.create(null);
871 var symbolMap = {};
872 symbolForKey = function(k) {
873 return symbolMap[k];
874 };
875
876 var GlobalSymbolRegistry = [];
877
878 function unique(bits) {
879 return Array(bits + 1).join('x').replace(/x/g, function() {
880 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
881 });
882 }
883
884 // 19.4.1 The Symbol Constructor
885 // 19.4.1.1 Symbol ( description=undefined )
886 function Symbol(description) {
887 if (!(this instanceof Symbol)) return new Symbol(description, secret);
888 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
889
890 var descString = description === undefined ? undefined : String(description);
891
892 set_internal(this, '[[SymbolData]]', unique(128));
893 set_internal(this, '[[Description]]', descString);
894
895 symbolMap[this] = this;
896 return this;
897 }
898
899 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
900 global.Symbol = Symbol;
901
902 // 19.4.2 Properties of the Symbol Constructor
903
904 // 19.4.2.1 Symbol.for (key)
905 define(Symbol, 'for', function for_(key) {
906 var stringKey = String(key);
907 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
908 var e = GlobalSymbolRegistry[i];
909 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
910 }
911 var newSymbol = Symbol(key);
912 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
913 return newSymbol;
914 });
915
916 // 19.4.2.2 Symbol.hasInstance
917 // 19.4.2.3 Symbol.isConcatSpreadable
918
919 // 19.4.2.4 Symbol.iterator
920 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
921
922 // 19.4.2.5 Symbol.keyFor (sym)
923 define(Symbol, 'keyFor', function keyFor(sym) {
924 if (!(sym instanceof Symbol)) throw TypeError();
925 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
926 var e = GlobalSymbolRegistry[i];
927 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
928 }
929 return undefined;
930 });
931
932 // 19.4.2.6 Symbol.match
933 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
934
935 // 19.4.2.7 Symbol.prototype
936
937 // 19.4.2.8 Symbol.replace
938 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
939
940 // 19.4.2.9 Symbol.search
941 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
942
943 // 19.4.2.10 Symbol.species
944
945 // 19.4.2.11 Symbol.search
946 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
947
948 // 19.4.2.12 Symbol.toPrimitive
949
950 // 19.4.2.13 Symbol.toStringTag
951 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
952
953 // 19.4.2.14 Symbol.unscopables
954
955 // 19.4.3 Properties of the Symbol Prototype Object
956 // 19.4.3.1 Symbol.prototype.constructor
957
958 // 19.4.3.2 Symbol.prototype.toString ( )
959 Object.defineProperty(Symbol.prototype, 'toString', {
960 value: function toString() {
961 var s = strict(this);
962 var desc = s['[[Description]]'];
963 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
964 },
965 configurable: true, writeable: true, enumerable: false });
966
967 // 19.4.3.3 Symbol.prototype.valueOf ( )
968 Object.defineProperty(Symbol.prototype, 'valueOf', {
969 value: function valueOf() {
970 // To prevent automatic string conversion:
971 throw TypeError();
972
973 // Spec has approximately the following:
974 //var s = strict(this);
975 //if (Type(s) === 'symbol') return s;
976 //if (Type(s) !== 'object') throw TypeError();
977 //if (!('[[SymbolData]]' in s)) throw TypeError();
978 //return s['[[SymbolData]]'];
979 },
980 configurable: true, writeable: true, enumerable: false });
981
982 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
983 // (Done later to polyfill partial implementations)
984
985 // 19.4.4 Properties of Symbol Instances
986 }());
987
988 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
989
990 // Defined here so that other prototypes can reference it
991 // 25.1.2 The %IteratorPrototype% Object
992 var $IteratorPrototype$ = {};
993
994 //----------------------------------------
995 // 6 ECMAScript Data Types and Values
996 //----------------------------------------
997
998 // 6.1 ECMAScript Language Types
999
1000 // "Type(x)" is used as shorthand for "the type of x"...
1001 function Type(v) {
1002 switch (typeof v) {
1003 case 'undefined': return 'undefined';
1004 case 'boolean': return 'boolean';
1005 case 'number': return 'number';
1006 case 'string': return 'string';
1007 case 'symbol': return 'symbol';
1008 default:
1009 if (v === null) return 'null';
1010 if (v instanceof global.Symbol) return 'symbol';
1011 return 'object';
1012 }
1013 }
1014
1015 // 6.1.5.1 Well-Known Symbols
1016 var $$iterator = global.Symbol.iterator,
1017 $$match = global.Symbol.match,
1018 $$replace = global.Symbol.replace,
1019 $$search = global.Symbol.search,
1020 $$split = global.Symbol.split,
1021 $$toStringTag = global.Symbol.toStringTag;
1022
1023 //----------------------------------------
1024 // 7 Abstract Operations
1025 //----------------------------------------
1026
1027 //----------------------------------------
1028 // 7.1 Type Conversion
1029 //----------------------------------------
1030
1031 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1032 // just use valueOf()
1033
1034 // 7.1.2 ToBoolean ( argument )
1035 // just use Boolean()
1036
1037 // 7.1.3 ToNumber ( argument )
1038 // just use Number()
1039
1040 // 7.1.4 ToInteger ( argument )
1041 function ToInteger(n) {
1042 n = Number(n);
1043 if ($isNaN(n)) return 0;
1044 if (n === 0 || n === Infinity || n === -Infinity) return n;
1045 return ((n < 0) ? -1 : 1) * floor(abs(n));
1046 }
1047
1048 // 7.1.5 ToInt32 ( argument )
1049 function ToInt32(v) { return v >> 0; }
1050
1051 // 7.1.6 ToUint32 ( argument )
1052 function ToUint32(v) { return v >>> 0; }
1053
1054 // 7.1.7 ToInt16 ( argument )
1055 function ToInt16(v) { return (v << 16) >> 16; }
1056
1057 // 7.1.8 ToUint16 ( argument )
1058 function ToUint16(v) { return v & 0xFFFF; }
1059
1060 // 7.1.9 ToInt8 ( argument )
1061 function ToInt8(v) { return (v << 24) >> 24; }
1062
1063 // 7.1.10 ToUint8 ( argument )
1064 function ToUint8(v) { return v & 0xFF; }
1065
1066 // 7.1.11 ToUint8Clamp ( argument )
1067 function ToUint8Clamp(argument) {
1068 var number = Number(argument);
1069 if ($isNaN(number)) return 0;
1070 if (number <= 0) return 0;
1071 if (number >= 255) return 255;
1072 var f = floor(number);
1073 if ((f + 0.5) < number) return f + 1;
1074 if (number < (f + 0.5)) return f;
1075 if (f % 2) return f + 1;
1076 return f;
1077 }
1078
1079 // 7.1.12 ToString ( argument )
1080 // just use String()
1081
1082 // 7.1.13 ToObject ( argument )
1083 function ToObject(v) {
1084 if (v === null || v === undefined) throw TypeError();
1085 return Object(v);
1086 }
1087
1088 // 7.1.14 ToPropertyKey ( argument )
1089 function ToPropertyKey(v) {
1090 return String(v);
1091 }
1092
1093 // 7.1.15 ToLength ( argument )
1094 function ToLength(v) {
1095 var len = ToInteger(v);
1096 if (len <= 0) return 0;
1097 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1098 return min(len, 0x20000000000000 - 1); // 2^53-1
1099 }
1100
1101 // 7.1.16 CanonicalNumericIndexString ( argument )
1102
1103 //----------------------------------------
1104 // 7.2 Testing and Comparison Operations
1105 //----------------------------------------
1106
1107 // 7.2.1 RequireObjectCoercible ( argument )
1108 // 7.2.2 IsArray ( argument )
1109
1110 // 7.2.3 IsCallable ( argument )
1111 function IsCallable(o) { return typeof o === 'function'; }
1112
1113 // 7.2.4 IsConstructor ( argument )
1114 function IsConstructor(o) {
1115 // Hacks for Safari 7 TypedArray XXXConstructor objects
1116 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1117 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1118 // TODO: Can this be improved on?
1119 return typeof o === 'function';
1120 }
1121
1122 // 7.2.5 IsExtensible (O)
1123 // 7.2.6 IsInteger ( argument )
1124
1125 // 7.2.7 IsPropertyKey ( argument )
1126 function IsPropertyKey(argument) {
1127 if (Type(argument) === 'string') return true;
1128 if (Type(argument) === 'symbol') return true;
1129 return false;
1130 }
1131
1132 // 7.2.8 IsRegExp ( argument )
1133 // 7.2.5 IsConstructor ( argument )
1134
1135 // 7.2.9 SameValue(x, y)
1136 function SameValue(x, y) {
1137 if (typeof x !== typeof y) return false;
1138 switch (typeof x) {
1139 case 'undefined':
1140 return true;
1141 case 'number':
1142 if (x !== x && y !== y) return true;
1143 if (x === 0 && y === 0) return 1/x === 1/y;
1144 return x === y;
1145 case 'boolean':
1146 case 'string':
1147 case 'object':
1148 default:
1149 return x === y;
1150 }
1151 }
1152
1153 // 7.2.10 SameValueZero(x, y)
1154 function SameValueZero(x, y) {
1155 if (typeof x !== typeof y) return false;
1156 switch (typeof x) {
1157 case 'undefined':
1158 return true;
1159 case 'number':
1160 if (x !== x && y !== y) return true;
1161 return x === y;
1162 case 'boolean':
1163 case 'string':
1164 case 'object':
1165 default:
1166 return x === y;
1167 }
1168 }
1169
1170 //----------------------------------------
1171 // 7.3 Operations on Objects
1172 //----------------------------------------
1173
1174 // 7.3.1 Get (O, P)
1175 // - just use o.p or o[p]
1176
1177 // 7.3.2 GetV (V, P)
1178 function GetV(v, p) {
1179 var o = ToObject(v);
1180 return o[p];
1181 }
1182
1183 // 7.3.3 Set (O, P, V, Throw)
1184 // - just use o.p = v or o[p] = v
1185
1186
1187
1188
1189 // 7.3.9 GetMethod (O, P)
1190 function GetMethod(o, p) {
1191 var func = GetV(o, p);
1192 if (func === undefined || func === null) return undefined;
1193 if (!IsCallable(func)) throw TypeError();
1194 return func;
1195 }
1196
1197 // 7.3.10 HasProperty (O, P)
1198 function HasProperty(o, p) {
1199 while (o) {
1200 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1201 if (Type(o) !== 'object') return false;
1202 o = Object.getPrototypeOf(o);
1203 }
1204 return false;
1205 }
1206
1207 // 7.3.11 HasOwnProperty (O, P)
1208 function HasOwnProperty(o, p) {
1209 return Object.prototype.hasOwnProperty.call(o, p);
1210 }
1211
1212 //----------------------------------------
1213 // 7.4 Operations on Iterator Objects
1214 //----------------------------------------
1215
1216 // 7.4.1 GetIterator ( obj, method )
1217 function GetIterator(obj, method) {
1218 if (arguments.length < 2)
1219 method = GetMethod(obj, $$iterator);
1220 var iterator = method.call(obj);
1221 if (Type(iterator) !== 'object') throw TypeError();
1222 return iterator;
1223 }
1224
1225 // 7.4.2 IteratorNext ( iterator, value )
1226 function IteratorNext(iterator, value) {
1227 if (arguments.length < 2)
1228 var result = iterator.next();
1229 else
1230 result = iterator.next(value);
1231 if (Type(result) !== 'object') throw TypeError();
1232 return result;
1233 }
1234
1235 // 7.4.3 IteratorComplete ( iterResult )
1236 function IteratorComplete(iterResult) {
1237 console.assert(Type(iterResult) === 'object');
1238 return Boolean(iterResult.done);
1239 }
1240
1241 // 7.4.4 IteratorValue ( iterResult )
1242 function IteratorValue(iterResult) {
1243 console.assert(Type(iterResult) === 'object');
1244 return iterResult.value;
1245 }
1246
1247 // 7.4.5 IteratorStep ( iterator )
1248 function IteratorStep( iterator, value ) {
1249 var result = IteratorNext(iterator, value);
1250 var done = result['done'];
1251 if (Boolean(done) === true) return false;
1252 return result;
1253 }
1254
1255 // 7.4.6 IteratorClose( iterator, completion )
1256 function IteratorClose( iterator, completion ) {
1257 console.assert(Type(iterator) === 'object');
1258 var _return = GetMethod(iterator, 'return');
1259 if (_return === undefined) return completion;
1260 try {
1261 var innerResult = _return[iterator]();
1262 } catch (result) {
1263 // TODO: If completion.[[type]] is throw, return completion
1264 return result;
1265 }
1266 if (Type(innerResult) !== 'object') throw TypeError();
1267 return completion;
1268 }
1269
1270 // 7.4.7 CreateIterResultObject (value, done)
1271 function CreateIterResultObject(value, done) {
1272 console.assert(Type(done) === 'boolean');
1273 var obj = {};
1274 obj["value"] = value;
1275 obj["done"] = done;
1276 return obj;
1277 }
1278
1279 // 7.4.8 CreateListIterator (list)
1280 // 7.4.8.1 ListIterator next( )
1281 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1282 // 7.4.9.1 CompoundIterator next( )
1283
1284 //----------------------------------------
1285 // 8 Executable Code and Execution Contexts
1286 //----------------------------------------
1287
1288 //----------------------------------------
1289 // 8.4 Jobs and Job Queues
1290 //----------------------------------------
1291
1292 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1293 function EnqueueJob(queueName, job, args) {
1294 var fn = function() { job.apply(undefined, args); };
1295 enqueue(fn);
1296 }
1297
1298 // 8.4.2 NextJob result
1299 function NextJob(result) {
1300 // no-op
1301 }
1302
1303 //----------------------------------------
1304 // 9 Ordinary and Exotic Objects Behaviors
1305 //----------------------------------------
1306
1307 // 9.1.11 [[Enumerate]] ()
1308 function Enumerate(obj) {
1309 var e = [];
1310 if (Object(obj) !== obj) return e;
1311 var visited = new Set;
1312 while (obj !== null) {
1313 Object.getOwnPropertyNames(obj).forEach(function(name) {
1314 if (!visited.has(name)) {
1315 var desc = Object.getOwnPropertyDescriptor(obj, name);
1316 if (desc) {
1317 visited.add(name);
1318 if (desc.enumerable) e.push(name);
1319 }
1320 }
1321 });
1322 obj = Object.getPrototypeOf(obj);
1323 }
1324 return e[$$iterator]();
1325 }
1326
1327 // 9.1.12 [[OwnPropertyKeys]] ( )
1328 function OwnPropertyKeys(o) {
1329 return Object.getOwnPropertyNames(o);
1330 }
1331
1332 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1333 function ObjectCreate(proto, internalSlotsList) {
1334 return Object.create(proto, internalSlotsList);
1335 }
1336
1337 // ---------------------------------------
1338 // 19 Fundamental Objects
1339 // ---------------------------------------
1340
1341 // ---------------------------------------
1342 // 19.1 Object Objects
1343 // ---------------------------------------
1344
1345 // 19.1.1 The Object Constructor
1346 // 19.1.1.1 Object ( [ value ] )
1347 // 19.1.2 Properties of the Object Constructor
1348 // 19.1.2.1 Object.assign ( target, ...sources )
1349 define(
1350 Object, 'assign',
1351 function assign(target, /*...*/sources) {
1352 var to = ToObject(target);
1353 if (arguments.length < 2) return to;
1354
1355 var sourcesIndex = 1;
1356 while (sourcesIndex < arguments.length) {
1357 var nextSource = arguments[sourcesIndex++];
1358 if (nextSource === undefined || nextSource === null) {
1359 var keys = [];
1360 } else {
1361 var from = ToObject(nextSource);
1362 keys = OwnPropertyKeys(from);
1363 }
1364 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1365 var nextKey = keys[keysIndex];
1366 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1367 if (desc !== undefined && desc.enumerable) {
1368 var propValue = from[nextKey];
1369 to[nextKey] = propValue;
1370 }
1371 }
1372 }
1373 return to;
1374 });
1375
1376 // 19.1.2.2 Object.create ( O [ , Properties ] )
1377 // 19.1.2.3 Object.defineProperties ( O, Properties )
1378 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1379 // 19.1.2.5 Object.freeze ( O )
1380 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1381
1382 (function() {
1383 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1384 $getOwnPropertyNames = Object.getOwnPropertyNames,
1385 $keys = Object.keys,
1386 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1387
1388 function isStringKey(k) { return !symbolForKey(k); }
1389
1390 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1391 define(
1392 Object, 'getOwnPropertyNames',
1393 function getOwnPropertyNames(o) {
1394 if (Object.prototype.toString.call(o) === '[object Window]') {
1395 // Workaround for cross-realm calling by IE itself.
1396 // https://github.com/inexorabletash/polyfill/issues/96
1397 try {
1398 return $getOwnPropertyNames(o).filter(isStringKey);
1399 } catch (_) {
1400 return $window_names.slice();
1401 }
1402 }
1403 return $getOwnPropertyNames(o).filter(isStringKey);
1404 }, !nativeSymbols);
1405
1406 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1407 define(
1408 Object, 'getOwnPropertySymbols',
1409 function getOwnPropertySymbols(o) {
1410 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1411 }, !nativeSymbols);
1412
1413 // 19.1.2.14 Object.keys ( O )
1414 define(
1415 Object, 'keys',
1416 function keys(o) {
1417 return $keys(o).filter(isStringKey);
1418 }, !nativeSymbols);
1419 }());
1420
1421 // 19.1.2.9 Object.getPrototypeOf ( O )
1422 // 19.1.2.10 Object.is ( value1, value2 )
1423 define(
1424 Object, 'is',
1425 function is(value1, value2) {
1426 return SameValue(value1, value2);
1427 });
1428
1429 // 19.1.2.11 Object.isExtensible ( O )
1430 // 19.1.2.12 Object.isFrozen ( O )
1431 // 19.1.2.13 Object.isSealed ( O )
1432
1433 // 19.1.2.14 Object.keys ( O )
1434 // see above
1435
1436 // 19.1.2.15 Object.preventExtensions ( O )
1437 // 19.1.2.16 Object.prototype
1438 // 19.1.2.17 Object.seal ( O )
1439
1440 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1441 define(
1442 Object, 'setPrototypeOf',
1443 function setPrototypeOf(o, proto) {
1444 if (Type(o) !== 'object') throw TypeError();
1445 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1446 o.__proto__ = proto;
1447 return o;
1448 }
1449 );
1450
1451 // 19.1.3 Properties of the Object Prototype Object
1452 // 19.1.3.1 Object.prototype.constructor
1453 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1454 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1455 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1456 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1457 // 19.1.3.6 Object.prototype.toString ( )
1458 hook(Object.prototype, 'toString',
1459 function() {
1460 var o = strict(this);
1461 if (o === Object(o) && $$toStringTag in o) {
1462 return '[object ' + o[$$toStringTag] + ']';
1463 }
1464 return undefined;
1465 });
1466
1467 // 19.1.3.7 Object.prototype.valueOf ( )
1468 // 19.1.4 Properties of Object Instances
1469
1470 // ---------------------------------------
1471 // 19.2 Function Objects
1472 // ---------------------------------------
1473
1474 // 19.2.1 The Function Constructor
1475 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1476 // 19.2.2 Properties of the Function Constructor
1477 // 19.2.2.1 Function.length
1478 // 19.2.2.2 Function.prototype
1479 // 19.2.3 Properties of the Function Prototype Object
1480 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1481 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1482 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1483 // 19.2.3.4 Function.prototype.constructor
1484 // 19.2.3.5 Function.prototype.toString ( )
1485 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1486 // 19.2.4 Function Instances
1487 // 19.2.4.1 length
1488 // 19.2.4.2 name
1489 // 19.2.4.3 prototype
1490
1491 // (No polyfillable changes from ES5)
1492
1493 // ---------------------------------------
1494 // 19.3 Boolean Objects
1495 // ---------------------------------------
1496
1497 // 19.3.1 The Boolean Constructor
1498 // 19.3.1.1 Boolean ( value )
1499 // 19.3.2 Properties of the Boolean Constructor
1500 // 19.3.2.1 Boolean.prototype
1501 // 19.3.3 Properties of the Boolean Prototype Object
1502 // 19.3.3.1 Boolean.prototype.constructor
1503 // 19.3.3.2 Boolean.prototype.toString ( )
1504 // 19.3.3.3 Boolean.prototype.valueOf ( )
1505 // 19.3.4 Properties of Boolean Instances
1506
1507 // (No polyfillable changes from ES5)
1508
1509 // ---------------------------------------
1510 // 19.4 Symbol Objects
1511 // ---------------------------------------
1512
1513 // Moved earlier in this script, so that other polyfills can depend on them.
1514
1515 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1516 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1517
1518 // ---------------------------------------
1519 // 19.5 Error Objects
1520 // ---------------------------------------
1521
1522 // 19.5.1 The Error Constructor
1523 // 19.5.1.1 Error ( message )
1524 // 19.5.1.2 new Error( ...argumentsList )
1525 // 19.5.2 Properties of the Error Constructor
1526 // 19.5.2.1 Error.prototype
1527 // 19.5.3 Properties of the Error Prototype Object
1528 // 19.5.3.1 Error.prototype.constructor
1529 // 19.5.3.2 Error.prototype.message
1530 // 19.5.3.3 Error.prototype.name
1531 // 19.5.3.4 Error.prototype.toString ( )
1532 // 19.5.4 Properties of Error Instances
1533 // 19.5.5 Native Error Types Used in This Standard
1534 // 19.5.5.1 EvalError
1535 // 19.5.5.2 RangeError
1536 // 19.5.5.3 ReferenceError
1537 // 19.5.5.4 SyntaxError
1538 // 19.5.5.5 TypeError
1539 // 19.5.5.6 URIError
1540 // 19.5.6 NativeError Object Structure
1541 // 19.5.6.1 NativeError Constructors
1542 // 19.5.6.1.1 NativeError ( message )
1543 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1544 // 19.5.6.2 Properties of the NativeError Constructors
1545 // 19.5.6.2.1 NativeError.prototype
1546 // 19.5.6.3 Properties of the NativeError Prototype Objects
1547 // 19.5.6.4 Properties of NativeError Instances
1548
1549 // (No polyfillable changes from ES5)
1550
1551 // ---------------------------------------
1552 // 20 Numbers and Dates
1553 // ---------------------------------------
1554
1555 // ---------------------------------------
1556 // 20.1 Number Objects
1557 // ---------------------------------------
1558
1559 // 20.1.1 The Number Constructor
1560 // 20.1.1.1 Number ( [ value ] )
1561 // 20.1.1.2 new Number ( ...argumentsList )
1562 // 20.1.2 Properties of the Number Constructor
1563
1564 // 20.1.2.1 Number.EPSILON
1565 define(
1566 Number, 'EPSILON',
1567 (function () {
1568 var next, result;
1569 for (next = 1; 1 + next !== 1; next = next / 2)
1570 result = next;
1571 return result;
1572 }()));
1573
1574 // 20.1.2.2 Number.isFinite ( number )
1575 define(
1576 Number, 'isFinite',
1577 function isFinite(number) {
1578 if (Type(number) !== 'number') return false;
1579 if (number !== number || number === +Infinity || number === -Infinity) return false;
1580 return true;
1581 });
1582
1583 // 20.1.2.3 Number.isInteger ( number )
1584 define(
1585 Number, 'isInteger',
1586 function isInteger(number) {
1587 if (Type(number) !== 'number') return false;
1588 if (number !== number || number === +Infinity || number === -Infinity) return false;
1589 var integer = ToInteger(number);
1590 if (integer !== number) return false;
1591 return true;
1592 });
1593
1594 // 20.1.2.4 Number.isNaN ( number )
1595 define(
1596 Number, 'isNaN',
1597 function isNaN(number) {
1598 if (Type(number) !== 'number') return false;
1599 if (number !== number) return true;
1600 return false;
1601 });
1602
1603 // 20.1.2.5 Number.isSafeInteger ( number )
1604 define(
1605 Number, 'isSafeInteger',
1606 function isSafeInteger(number) {
1607 if (Type(number) !== 'number') return false;
1608 if (number !== number || number === +Infinity || number === -Infinity) return false;
1609 var integer = ToInteger(number);
1610 if (integer !== number) return false;
1611 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1612 return true;
1613 return false;
1614 });
1615
1616 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1617 define(
1618 Number, 'MAX_SAFE_INTEGER',
1619 9007199254740991); // 2^53-1
1620
1621 // 20.1.2.7 Number.MAX_VALUE
1622
1623 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1624 define(
1625 Number, 'MIN_SAFE_INTEGER',
1626 -9007199254740991); // -2^53+1
1627
1628 // 20.1.2.9 Number.MIN_VALUE
1629 // 20.1.2.10 Number.NaN
1630 // 20.1.2.11 Number.NEGATIVE_INFINITY
1631
1632 // 20.1.2.12 Number.parseFloat ( string )
1633 define(Number, 'parseFloat', $parseFloat);
1634
1635 // 20.1.2.13 Number.parseInt ( string, radix )
1636 define(Number, 'parseInt', $parseInt);
1637
1638 // 20.1.2.14 Number.POSITIVE_INFINITY
1639 // 20.1.2.15 Number.prototype
1640
1641 // 20.1.3 Properties of the Number Prototype Object
1642 // 20.1.3.1 Number.prototype.constructor
1643 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1644 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1645 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1646 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1647 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1648 // 20.1.3.7 Number.prototype.valueOf ( )
1649 // 20.1.4 Properties of Number Instances
1650
1651 // ---------------------------------------
1652 // 20.2 The Math Object
1653 // ---------------------------------------
1654
1655 // 20.2.1 Value Properties of the Math Object
1656 // 20.2.1.1 Math.E
1657 // 20.2.1.2 Math.LN10
1658 // 20.2.1.3 Math.LN2
1659 // 20.2.1.4 Math.LOG10E
1660 // 20.2.1.5 Math.LOG2E
1661 // 20.2.1.6 Math.PI
1662 // 20.2.1.7 Math.SQRT1_2
1663 // 20.2.1.8 Math.SQRT2
1664
1665 // 20.2.1.9 Math [ @@toStringTag ]
1666 define(Math, $$toStringTag, 'Math');
1667
1668 // 20.2.2 Function Properties of the Math Object
1669 // 20.2.2.1 Math.abs ( x )
1670 // 20.2.2.2 Math.acos ( x )
1671
1672 // 20.2.2.3 Math.acosh(x)
1673 define(
1674 Math, 'acosh',
1675 function acosh(x) {
1676 x = Number(x);
1677 return log(x + sqrt(x * x - 1));
1678 });
1679
1680 // 20.2.2.4 Math.asin ( x )
1681
1682 // 20.2.2.5 Math.asinh( x )
1683 define(
1684 Math, 'asinh',
1685 function asinh(x) {
1686 x = Number(x);
1687 if (SameValue(x, -0)) {
1688 return x;
1689 }
1690 var s = sqrt(x * x + 1);
1691 return (s === -x) ? log(0) : log(x + s);
1692 });
1693
1694 // 20.2.2.6 Math.atan ( x )
1695
1696 // 20.2.2.7 Math.atanh( x )
1697 define(
1698 Math, 'atanh',
1699 function atanh(x) {
1700 x = Number(x);
1701 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1702 });
1703
1704 // 20.2.2.8 Math.atan2 ( y, x )
1705
1706 // 20.2.2.9 Math.cbrt ( x )
1707 define(
1708 Math, 'cbrt',
1709 function cbrt(x) {
1710 x = Number(x);
1711 if ($isNaN(x/x)) {
1712 return x;
1713 }
1714 var r = pow(abs(x), 1/3);
1715 var t = x/r/r;
1716 return r + (r * (t-r) / (2*r + t));
1717 });
1718
1719 // 20.2.2.10 Math.ceil ( x )
1720
1721 // 20.2.2.11 Math.clz32 ( x )
1722 define(
1723 Math, 'clz32',
1724 function clz32(x) {
1725 function clz8(x) {
1726 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1727 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1728 }
1729 x = ToUint32(x);
1730 return x & 0xff000000 ? clz8(x >> 24) :
1731 x & 0xff0000 ? clz8(x >> 16) + 8 :
1732 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1733 });
1734
1735
1736
1737 // 20.2.2.12 Math.cos ( x )
1738
1739 // 20.2.2.13 Math.cosh ( x )
1740 define(
1741 Math, 'cosh',
1742 function cosh(x) {
1743 x = Number(x);
1744 return (pow(E, x) + pow(E, -x)) / 2;
1745 });
1746
1747 // 20.2.2.14 Math.exp ( x )
1748
1749 // 20.2.2.15 Math.expm1 ( x )
1750 define(
1751 Math, 'expm1',
1752 function expm1(x) {
1753 x = Number(x);
1754 // from: http://www.johndcook.com/cpp_log1p.html
1755 if (SameValue(x, -0)) {
1756 return -0;
1757 } else if (abs(x) < 1e-5) {
1758 return x + 0.5 * x * x; // two terms of Taylor expansion
1759 } else {
1760 return exp(x) - 1;
1761 }
1762 });
1763
1764 // 20.2.2.16 Math.floor ( x )
1765
1766 // 20.2.2.17 Math.fround ( x )
1767 define(
1768 Math, 'fround',
1769 function fround(x) {
1770 if ($isNaN(x)) {
1771 return NaN;
1772 }
1773 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1774 return x;
1775 }
1776 return (new Float32Array([x]))[0];
1777 });
1778
1779 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1780 define(
1781 Math, 'hypot',
1782 function hypot() {
1783 var values = [];
1784 var m = 0, sawNaN = false;
1785 for (var i = 0; i < arguments.length; ++i) {
1786 var n = abs(Number(arguments[i]));
1787 if (n === Infinity) return n;
1788 if (n !== n) sawNaN = true;
1789 if (n > m) m = n;
1790 values[i] = n;
1791 }
1792 if (sawNaN) return NaN;
1793 if (m === 0) return +0;
1794 var sum = +0;
1795 for (i = 0; i < values.length; ++i) {
1796 var r = values[i] / m;
1797 sum = sum + r * r;
1798 }
1799 return m * sqrt(sum);
1800 });
1801
1802 // 20.2.2.19 Math.imul ( x, y )
1803 define(
1804 Math, 'imul',
1805 function imul(x, y) {
1806 var a = ToUint32(x);
1807 var b = ToUint32(y);
1808 // (slow but accurate)
1809 var ah = (a >>> 16) & 0xffff;
1810 var al = a & 0xffff;
1811 var bh = (b >>> 16) & 0xffff;
1812 var bl = b & 0xffff;
1813 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1814 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1815 );
1816
1817 // 20.2.2.20 Math.log ( x )
1818
1819 // 20.2.2.21 Math.log1p ( x )
1820 define(
1821 Math, 'log1p',
1822 function log1p(x) {
1823 x = Number(x);
1824 // from: http://www.johndcook.com/cpp_expm1.html
1825 if (x < -1) {
1826 return NaN;
1827 } else if (SameValue(x, -0)) {
1828 return -0;
1829 } else if (abs(x) > 1e-4) {
1830 return log(1 + x);
1831 } else {
1832 return (-0.5 * x + 1) * x;
1833 }
1834 });
1835
1836 // 20.2.2.22 Math.log10 ( x )
1837 define(
1838 Math, 'log10',
1839 function log10(x) {
1840 x = Number(x);
1841 return log(x) * LOG10E;
1842 });
1843
1844 // 20.2.2.23 Math.log2 ( x )
1845 define(
1846 Math, 'log2',
1847 function log2(x) {
1848 x = Number(x);
1849 return log(x) * LOG2E;
1850 });
1851
1852 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1853 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1854 // 20.2.2.26 Math.pow ( x, y )
1855 // 20.2.2.27 Math.random ( )
1856 // 20.2.2.28 Math.round ( x )
1857
1858 // 20.2.2.29 Math.sign(x)
1859 define(
1860 Math, 'sign',
1861 function sign(x) {
1862 x = Number(x);
1863 return x < 0 ? -1 : x > 0 ? 1 : x;
1864 });
1865
1866 // 20.2.2.30 Math.sin ( x )
1867
1868 // 20.2.2.31 Math.sinh( x )
1869 define(
1870 Math, 'sinh',
1871 function sinh(x) {
1872 x = Number(x);
1873 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1874 });
1875
1876 // 20.2.2.32 Math.sqrt ( x )
1877 // 20.2.2.33 Math.tan ( x )
1878
1879 // 20.2.2.34 Math.tanh ( x )
1880 define(
1881 Math, 'tanh',
1882 function tanh(x) {
1883 x = Number(x);
1884 var n = pow(E, 2 * x) - 1,
1885 d = pow(E, 2 * x) + 1;
1886 if (SameValue(x, -0))
1887 return x;
1888 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1889 });
1890
1891 // 20.2.2.35 Math.trunc ( x )
1892 define(
1893 Math, 'trunc',
1894 function trunc(x) {
1895 x = Number(x);
1896 return $isNaN(x) ? NaN :
1897 x < 0 ? ceil(x) : floor(x);
1898 });
1899
1900 // ---------------------------------------
1901 // 20.3 Date Objects
1902 // ---------------------------------------
1903
1904 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1905 // 20.3.1.1 Time Values and Time Range
1906 // 20.3.1.2 Day Number and Time within Day
1907 // 20.3.1.3 Year Number
1908 // 20.3.1.4 Month Number
1909 // 20.3.1.5 Date Number
1910 // 20.3.1.6 Week Day
1911 // 20.3.1.7 Local Time Zone Adjustment
1912 // 20.3.1.8 Daylight Saving Time Adjustment
1913 // 20.3.1.9 Local Time
1914 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1915 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1916 // 20.3.1.12 MakeDay (year, month, date)
1917 // 20.3.1.13 MakeDate (day, time)
1918 // 20.3.1.14 TimeClip (time)
1919 // 20.3.1.15 Date Time String Format
1920 // 20.3.1.15.1 Extended years
1921 // 20.3.2 The Date Constructor
1922 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1923 // 20.3.2.2 Date ( value )
1924 // 20.3.2.3 Date ( )
1925 // 20.3.3 Properties of the Date Constructor
1926 // 20.3.3.1 Date.now ( )
1927 // 20.3.3.2 Date.parse (string)
1928 // 20.3.3.3 Date.prototype
1929 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1930 // 20.3.4 Properties of the Date Prototype Object
1931 // 20.3.4.1 Date.prototype.constructor
1932 // 20.3.4.2 Date.prototype.getDate ( )
1933 // 20.3.4.3 Date.prototype.getDay ( )
1934 // 20.3.4.4 Date.prototype.getFullYear ( )
1935 // 20.3.4.5 Date.prototype.getHours ( )
1936 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1937 // 20.3.4.7 Date.prototype.getMinutes ( )
1938 // 20.3.4.8 Date.prototype.getMonth ( )
1939 // 20.3.4.9 Date.prototype.getSeconds ( )
1940 // 20.3.4.10 Date.prototype.getTime ( )
1941 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1942 // 20.3.4.12 Date.prototype.getUTCDate ( )
1943 // 20.3.4.13 Date.prototype.getUTCDay ( )
1944 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1945 // 20.3.4.15 Date.prototype.getUTCHours ( )
1946 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1947 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1948 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1949 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1950 // 20.3.4.20 Date.prototype.setDate ( date )
1951 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1952 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1953 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1954 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1955 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1956 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1957 // 20.3.4.27 Date.prototype.setTime ( time )
1958 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1959 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1960 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1961 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1962 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1963 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1964 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1965 // 20.3.4.35 Date.prototype.toDateString ( )
1966 // 20.3.4.36 Date.prototype.toISOString ( )
1967 // 20.3.4.37 Date.prototype.toJSON ( key )
1968 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1969 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1970 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1971 // 20.3.4.41 Date.prototype.toString ( )
1972 // 20.3.4.42 Date.prototype.toTimeString ( )
1973 // 20.3.4.43 Date.prototype.toUTCString ( )
1974 // 20.3.4.44 Date.prototype.valueOf ( )
1975 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1976 // 20.3.5 Properties of Date Instances
1977
1978 // (No polyfillable changes from ES5)
1979
1980 // ---------------------------------------
1981 // 21 Text Processing
1982 // ---------------------------------------
1983
1984 var string_regexp_dispatch = (function() {
1985 var faux = {}, secret = Symbol();
1986 faux[Symbol.match] = function() { return secret; };
1987 return ("").match(faux) === secret;
1988 }());
1989
1990 // 21.1 String Objects
1991 // 21.1.1 The String Constructor
1992 // 21.1.1.1 String ( value )
1993 // 21.1.2 Properties of the String Constructor
1994 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1995
1996 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1997 define(
1998 String, 'fromCodePoint',
1999 function fromCodePoint(/*...codePoints*/) {
2000 var codePoints = arguments,
2001 length = codePoints.length,
2002 elements = [],
2003 nextIndex = 0;
2004 while (nextIndex < length) {
2005 var next = codePoints[nextIndex];
2006 var nextCP = Number(next);
2007 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2008 nextCP < 0 || nextCP > 0x10FFFF) {
2009 throw RangeError('Invalid code point ' + nextCP);
2010 }
2011 if (nextCP < 0x10000) {
2012 elements.push(String.fromCharCode(nextCP));
2013 } else {
2014 nextCP -= 0x10000;
2015 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2016 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2017 }
2018 nextIndex += 1;
2019 }
2020 return elements.join('');
2021 });
2022
2023 // 21.1.2.3 String.prototype
2024
2025 // 21.1.2.4 String.raw ( template , ...substitutions )
2026 define(
2027 String, 'raw',
2028 function raw(template /*, ...substitutions*/) {
2029 var substitutions = [].slice.call(arguments, 1);
2030
2031 var cooked = Object(template);
2032 var rawValue = cooked['raw'];
2033 var raw = Object(rawValue);
2034 var len = raw['length'];
2035 var literalSegments = ToLength(len);
2036 if (literalSegments <= 0) return '';
2037 var stringElements = [];
2038 var nextIndex = 0;
2039 while (true) {
2040 var next = raw[nextIndex];
2041 var nextSeg = String(next);
2042 stringElements.push(nextSeg);
2043 if (nextIndex + 1 === literalSegments)
2044 return stringElements.join('');
2045 next = substitutions[nextIndex];
2046 var nextSub = String(next);
2047 stringElements.push(nextSub);
2048 nextIndex = nextIndex + 1;
2049 }
2050 });
2051
2052 // See https://githib.com/inexorabletash/uate for a more useful version.
2053
2054 // 21.1.3 Properties of the String Prototype Object
2055 // 21.1.3.1 String.prototype.charAt ( pos )
2056 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2057
2058 // 21.1.3.3 String.prototype.codePointAt ( pos )
2059 define(
2060 String.prototype, 'codePointAt',
2061 function codePointAt(pos) {
2062 var o = strict(this);
2063 var s = String(o);
2064 var position = ToInteger(pos);
2065 var size = s.length;
2066 if (position < 0 || position >= size) return undefined;
2067 var first = s.charCodeAt(position);
2068 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2069 var second = s.charCodeAt(position + 1);
2070 if (second < 0xDC00 || second > 0xDFFF) return first;
2071 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2072 });
2073
2074 // 21.1.3.4 String.prototype.concat ( ...args )
2075 // 21.1.3.5 String.prototype.constructor
2076
2077 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2078 define(
2079 String.prototype, 'endsWith',
2080 function endsWith(searchString) {
2081 var endPosition = arguments[1];
2082
2083 var o = strict(this);
2084 var s = String(o);
2085 var searchStr = String(searchString);
2086 var len = s.length;
2087 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2088 var end = min(max(pos, 0), len);
2089 var searchLength = searchStr.length;
2090 var start = end - searchLength;
2091 if (start < 0) return false;
2092 if (s.substring(start, start + searchLength) === searchStr) return true;
2093 return false;
2094 });
2095
2096 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2097 define(
2098 String.prototype, 'includes',
2099 function includes(searchString) {
2100 var position = arguments[1];
2101
2102 var o = strict(this);
2103 var s = String(o);
2104 var searchStr = String(searchString);
2105 var pos = ToInteger(position);
2106 var len = s.length;
2107 var start = min(max(pos, 0), len);
2108 return s.indexOf(searchStr, start) !== -1;
2109 });
2110
2111 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2112 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2113 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2114 // 21.1.3.11 String.prototype.match ( regexp )
2115 define(
2116 String.prototype, 'match',
2117 function match(regexp) {
2118 var o = strict(this);
2119 var s = String(o);
2120 if (HasProperty(regexp, $$match)) var rx = regexp;
2121 else rx = new RegExp(regexp);
2122 return rx[$$match](s);
2123 }, !string_regexp_dispatch);
2124
2125 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2126
2127 // Not practical due to table sizes; if needed, pull in:
2128 // https://github.com/walling/unorm/
2129
2130 // 21.1.3.13 String.prototype.repeat ( count )
2131 define(
2132 String.prototype, 'repeat',
2133 function repeat(count) {
2134 var o = strict(this);
2135 var s = String(o);
2136 var n = ToInteger(count);
2137 if (n < 0) throw RangeError();
2138 if (n === Infinity) throw RangeError();
2139 var t = new Array(n + 1).join(s);
2140 return t;
2141 });
2142
2143 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2144 define(
2145 String.prototype, 'replace',
2146 function replace(searchValue, replaceValue) {
2147 var o = strict(this);
2148 if (HasProperty(searchValue, $$replace))
2149 return searchValue[$$replace](o, replaceValue);
2150 return orig_replace.call(o, searchValue, replaceValue);
2151 }, !string_regexp_dispatch);
2152
2153 // 21.1.3.15 String.prototype.search ( regexp )
2154 define(
2155 String.prototype, 'search',
2156 function search(regexp) {
2157 var o = strict(this);
2158 var string = String(o);
2159 if (HasProperty(regexp, $$search)) var rx = regexp;
2160 else rx = new RegExp(regexp);
2161 return rx[$$search](string);
2162 }, !string_regexp_dispatch);
2163
2164 // 21.1.3.16 String.prototype.slice ( start, end )
2165 // 21.1.3.17 String.prototype.split ( separator, limit )
2166 define(
2167 String.prototype, 'split',
2168 function split(separator, limit) {
2169 var o = strict(this);
2170 if (HasProperty(separator, $$split))
2171 return separator[$$split](o, limit);
2172 return orig_split.call(o, separator, limit);
2173 }, !string_regexp_dispatch);
2174
2175 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2176 define(
2177 String.prototype, 'startsWith',
2178 function startsWith(searchString) {
2179 var position = arguments[1];
2180
2181 var o = strict(this);
2182 var s = String(o);
2183 var searchStr = String(searchString);
2184 var pos = ToInteger(position);
2185 var len = s.length;
2186 var start = min(max(pos, 0), len);
2187 var searchLength = searchStr.length;
2188 if (searchLength + start > len) return false;
2189 if (s.substring(start, start + searchLength) === searchStr) return true;
2190 return false;
2191 });
2192
2193 // 21.1.3.19 String.prototype.substring ( start, end )
2194 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2195 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2196 // 21.1.3.22 String.prototype.toLowerCase ( )
2197 // 21.1.3.23 String.prototype.toString ( )
2198 // 21.1.3.24 String.prototype.toUpperCase ( )
2199 // 21.1.3.25 String.prototype.trim ( )
2200 // 21.1.3.26 String.prototype.valueOf ( )
2201
2202 // 21.1.3.27 String.prototype [ @@iterator ]( )
2203 define(
2204 String.prototype, $$iterator,
2205 function entries() {
2206 return CreateStringIterator(this, 'value');
2207 });
2208
2209 // 21.1.4 Properties of String Instances
2210 // 21.1.4.1 length
2211
2212 // 21.1.5 String Iterator Objects
2213 /** @constructor */
2214 function StringIterator() {}
2215
2216 // 21.1.5.1 CreateStringIterator Abstract Operation
2217 function CreateStringIterator(string, kind) {
2218 var s = String(string);
2219 var iterator = new StringIterator;
2220 set_internal(iterator, '[[IteratedString]]', s);
2221 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2222 set_internal(iterator, '[[StringIterationKind]]', kind);
2223 return iterator;
2224 }
2225
2226 // 21.1.5.2 The %StringIteratorPrototype% Object
2227 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2228 StringIterator.prototype = $StringIteratorPrototype$;
2229
2230 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2231 define(
2232 $StringIteratorPrototype$, 'next',
2233 function next() {
2234 var o = ToObject(this);
2235 var s = String(o['[[IteratedString]]']),
2236 index = o['[[StringIteratorNextIndex]]'],
2237 len = s.length;
2238 if (index >= len) {
2239 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2240 return CreateIterResultObject(undefined, true);
2241 }
2242 var cp = s.codePointAt(index);
2243 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2244 return CreateIterResultObject(String.fromCodePoint(cp), false);
2245 });
2246
2247 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2248 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2249
2250 // 21.1.5.3 Properties of String Iterator Instances
2251
2252 // ---------------------------------------
2253 // 21.2 RegExp (Regular Expression) Objects
2254 // ---------------------------------------
2255
2256 // 21.2.1 Patterns
2257 // 21.2.2 Pattern Semantics
2258 // 21.2.2.1 Notation
2259 // 21.2.2.2 Pattern
2260 // 21.2.2.3 Disjunction
2261 // 21.2.2.4 Alternative
2262 // 21.2.2.5 Term
2263 // 21.2.2.6 Assertion
2264 // 21.2.2.7 Quantifier
2265 // 21.2.2.8 Atom
2266 // 21.2.2.9 AtomEscape
2267 // 21.2.2.10 CharacterEscape
2268 // 21.2.2.11 DecimalEscape
2269 // 21.2.2.12 CharacterClassEscape
2270 // 21.2.2.13 CharacterClass
2271 // 21.2.2.14 ClassRanges
2272 // 21.2.2.15 NonemptyClassRanges
2273 // 21.2.2.16 NonemptyClassRangesNoDash
2274 // 21.2.2.17 ClassAtom
2275 // 21.2.2.18 ClassAtomNoDash
2276 // 21.2.2.19 ClassEscape
2277 // 21.2.3 The RegExp Constructor
2278 // 21.2.3.1 RegExp ( pattern, flags )
2279 // 21.2.3.2 new RegExp( ...argumentsList )
2280 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2281 // 21.2.4 Properties of the RegExp Constructor
2282 // 21.2.4.1 RegExp.prototype
2283 // 21.2.5 Properties of the RegExp Prototype Object
2284 // 21.2.5.1 RegExp.prototype.constructor
2285 // 21.2.5.2 RegExp.prototype.exec ( string )
2286
2287 // 21.2.5.3 get RegExp.prototype.flags
2288 if (!('flags' in RegExp.prototype)) {
2289 Object.defineProperty(
2290 RegExp.prototype, 'flags', {
2291 get: function() {
2292 var s = String(this);
2293 return s.substring(s.lastIndexOf('/') + 1);
2294 }
2295 });
2296 }
2297
2298 // 21.2.5.4 get RegExp.prototype.global
2299 // 21.2.5.5 get RegExp.prototype.ignoreCase
2300
2301 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2302 define(RegExp.prototype, $$match, function(string) {
2303 var o = strict(this);
2304 return orig_match.call(string, o);
2305 });
2306
2307 // 21.2.5.7 get RegExp.prototype.multiline
2308
2309 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2310 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2311 var o = strict(this);
2312 return orig_replace.call(string, o, replaceValue);
2313 });
2314
2315 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2316 define(RegExp.prototype, $$search, function(string) {
2317 var o = strict(this);
2318 return orig_search.call(string, o);
2319 });
2320
2321 // 21.2.5.10 get RegExp.prototype.source
2322
2323 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2324 define(RegExp.prototype, $$split, function(string, limit) {
2325 var o = strict(this);
2326 return orig_split.call(string, o, limit);
2327 });
2328
2329 // 21.2.5.12 get RegExp.prototype.sticky
2330 // 21.2.5.13 RegExp.prototype.test( S )
2331 // 21.2.5.14 RegExp.prototype.toString ( )
2332 // 21.2.5.15 get RegExp.prototype.unicode
2333
2334 // 21.2.6 Properties of RegExp Instances
2335 // 21.2.6.1 lastIndex
2336
2337 // (No polyfillable changes from ES5)
2338
2339 // ---------------------------------------
2340 // 22 Indexed Collections
2341 // ---------------------------------------
2342
2343 // ---------------------------------------
2344 // 22.1 Array Objects
2345 // ---------------------------------------
2346
2347 // 22.1.1 The Array Constructor
2348 // 22.1.1.1 Array ( )
2349 // 22.1.1.2 Array (len)
2350 // 22.1.1.3 Array (...items )
2351
2352 // 22.1.2 Properties of the Array Constructor
2353
2354 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2355 define(
2356 Array, 'from',
2357 function from(items) {
2358 var mapfn = arguments[1];
2359 var thisArg = arguments[2];
2360
2361 var c = strict(this);
2362 if (mapfn === undefined) {
2363 var mapping = false;
2364 } else {
2365 if (!IsCallable(mapfn)) throw TypeError();
2366 var t = thisArg;
2367 mapping = true;
2368 }
2369 var usingIterator = GetMethod(items, $$iterator);
2370 if (usingIterator !== undefined) {
2371 if (IsConstructor(c)) {
2372 var a = new c();
2373 } else {
2374 a = new Array(0);
2375 }
2376 var iterator = GetIterator(items, usingIterator);
2377 var k = 0;
2378 while (true) {
2379 var next = IteratorStep(iterator);
2380 if (next === false) {
2381 a.length = k;
2382 return a;
2383 }
2384 var nextValue = IteratorValue(next);
2385 if (mapping)
2386 var mappedValue = mapfn.call(t, nextValue);
2387 else
2388 mappedValue = nextValue;
2389 a[k] = mappedValue;
2390 k += 1;
2391 }
2392 }
2393 var arrayLike = ToObject(items);
2394 var lenValue = arrayLike.length;
2395 var len = ToLength(lenValue);
2396 if (IsConstructor(c)) {
2397 a = new c(len);
2398 } else {
2399 a = new Array(len);
2400 }
2401 k = 0;
2402 while (k < len) {
2403 var kValue = arrayLike[k];
2404 if (mapping)
2405 mappedValue = mapfn.call(t, kValue, k);
2406 else
2407 mappedValue = kValue;
2408 a[k] = mappedValue;
2409 k += 1;
2410 }
2411 a.length = len;
2412 return a;
2413 });
2414
2415 // 22.1.2.2 Array.isArray ( arg )
2416
2417 // 22.1.2.3 Array.of ( ...items )
2418 define(
2419 Array, 'of',
2420 function of() {
2421 var items = arguments;
2422
2423 var lenValue = items.length;
2424 var len = ToUint32(lenValue);
2425 var c = strict(this), a;
2426 if (IsConstructor(c)) {
2427 a = new c(len);
2428 a = ToObject(a);
2429 } else {
2430 a = new Array(len);
2431 }
2432 var k = 0;
2433 while (k < len) {
2434 a[k] = items[k];
2435 k += 1;
2436 }
2437 a.length = len;
2438 return a;
2439 });
2440
2441 // 22.1.2.4 Array.prototype
2442 // 22.1.2.5 get Array [ @@species ]
2443 // 22.1.3 Properties of the Array Prototype Object
2444 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2445 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2446 // 22.1.3.2 Array.prototype.constructor
2447 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2448 define(
2449 Array.prototype, 'copyWithin',
2450 function copyWithin(target, start/*, end*/) {
2451 var end = arguments[2];
2452
2453 var o = ToObject(this);
2454 var lenVal = o.length;
2455 var len = ToLength(lenVal);
2456 len = max(len, 0);
2457 var relativeTarget = ToInteger(target);
2458 var to;
2459 if (relativeTarget < 0)
2460 to = max(len + relativeTarget, 0);
2461 else
2462 to = min(relativeTarget, len);
2463 var relativeStart = ToInteger(start);
2464 var from;
2465 if (relativeStart < 0)
2466 from = max(len + relativeStart, 0);
2467 else
2468 from = min(relativeStart, len);
2469 var relativeEnd;
2470 if (end === undefined)
2471 relativeEnd = len;
2472 else
2473 relativeEnd = ToInteger(end);
2474 var final;
2475 if (relativeEnd < 0)
2476 final = max(len + relativeEnd, 0);
2477 else
2478 final = min(relativeEnd, len);
2479 var count = min(final - from, len - to);
2480 var direction;
2481 if (from < to && to < from + count) {
2482 direction = -1;
2483 from = from + count - 1;
2484 to = to + count - 1;
2485 } else {
2486 direction = 1;
2487 }
2488 while (count > 0) {
2489 var fromKey = String(from);
2490 var toKey = String(to);
2491 var fromPresent = HasProperty(o, fromKey);
2492 if (fromPresent) {
2493 var fromVal = o[fromKey];
2494 o[toKey] = fromVal;
2495 } else {
2496 delete o[toKey];
2497 }
2498 from = from + direction;
2499 to = to + direction;
2500 count = count - 1;
2501 }
2502 return o;
2503 });
2504
2505 // 22.1.3.4 Array.prototype.entries ( )
2506 var nativeArrayIteratorMethods =
2507 ('entries' in Array.prototype && 'next' in [].entries());
2508
2509 define(
2510 Array.prototype, 'entries',
2511 function entries() {
2512 return CreateArrayIterator(this, 'key+value');
2513 }, !nativeArrayIteratorMethods);
2514
2515 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2516
2517 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2518 define(
2519 Array.prototype, 'fill',
2520 function fill(value/*, start, end*/) {
2521 var start = arguments[1],
2522 end = arguments[2];
2523
2524 var o = ToObject(this);
2525 var lenVal = o.length;
2526 var len = ToLength(lenVal);
2527 len = max(len, 0);
2528 var relativeStart = ToInteger(start);
2529 var k;
2530 if (relativeStart < 0)
2531 k = max((len + relativeStart), 0);
2532 else
2533 k = min(relativeStart, len);
2534 var relativeEnd;
2535 if (end === undefined)
2536 relativeEnd = len;
2537 else
2538 relativeEnd = ToInteger(end);
2539 var final;
2540 if (relativeEnd < 0)
2541 final = max((len + relativeEnd), 0);
2542 else
2543 final = min(relativeEnd, len);
2544 while (k < final) {
2545 var pk = String(k);
2546 o[pk] = value;
2547 k += 1;
2548 }
2549 return o;
2550 });
2551
2552 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2553
2554 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2555 define(
2556 Array.prototype, 'find',
2557 function find(predicate) {
2558 var o = ToObject(this);
2559 var lenValue = o.length;
2560 var len = ToInteger(lenValue);
2561 if (!IsCallable(predicate)) throw TypeError();
2562 var t = arguments.length > 1 ? arguments[1] : undefined;
2563 var k = 0;
2564 while (k < len) {
2565 var pk = String(k);
2566 var kPresent = HasProperty(o, pk);
2567 if (kPresent) {
2568 var kValue = o[pk];
2569 var testResult = predicate.call(t, kValue, k, o);
2570 if (Boolean(testResult)) {
2571 return kValue;
2572 }
2573 }
2574 ++k;
2575 }
2576 return undefined;
2577 });
2578
2579 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2580 define(
2581 Array.prototype, 'findIndex',
2582 function findIndex(predicate) {
2583 var o = ToObject(this);
2584 var lenValue = o.length;
2585 var len = ToLength(lenValue);
2586 if (!IsCallable(predicate)) throw TypeError();
2587 var t = arguments.length > 1 ? arguments[1] : undefined;
2588 var k = 0;
2589 while (k < len) {
2590 var pk = String(k);
2591 var kPresent = HasProperty(o, pk);
2592 if (kPresent) {
2593 var kValue = o[pk];
2594 var testResult = predicate.call(t, kValue, k, o);
2595 if (Boolean(testResult)) {
2596 return k;
2597 }
2598 }
2599 ++k;
2600 }
2601 return -1;
2602 });
2603
2604 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2605 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2606 // 22.1.3.12 Array.prototype.join (separator)
2607
2608 // 22.1.3.13 Array.prototype.keys ( )
2609 define(
2610 Array.prototype, 'keys',
2611 function keys() {
2612 return CreateArrayIterator(this, 'key');
2613 }, !nativeArrayIteratorMethods);
2614
2615 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2616 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2617 // 22.1.3.16 Array.prototype.pop ( )
2618 // 22.1.3.17 Array.prototype.push ( ...items )
2619 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2620 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2621 // 22.1.3.20 Array.prototype.reverse ( )
2622 // 22.1.3.21 Array.prototype.shift ( )
2623 // 22.1.3.22 Array.prototype.slice (start, end)
2624 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2625 // 22.1.3.24 Array.prototype.sort (comparefn)
2626 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2627 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2628 // 22.1.3.27 Array.prototype.toString ( )
2629 // 22.1.3.28 Array.prototype.unshift ( ...items )
2630
2631 // 22.1.3.29 Array.prototype.values ( )
2632 define(
2633 Array.prototype, 'values',
2634 function values() {
2635 return CreateArrayIterator(this, 'value');
2636 }, !nativeArrayIteratorMethods);
2637
2638 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2639 define(
2640 Array.prototype, $$iterator,
2641 Array.prototype.values
2642 );
2643
2644 // 22.1.3.31 Array.prototype [ @@unscopables ]
2645 // 22.1.4 Properties of Array Instances
2646 // 22.1.4.1 length
2647
2648 // 22.1.5 Array Iterator Objects
2649 function ArrayIterator() {}
2650
2651 // 22.1.5.1 CreateArrayIterator Abstract Operation
2652 function CreateArrayIterator(array, kind) {
2653 var o = ToObject(array);
2654 var iterator = new ArrayIterator;
2655 set_internal(iterator, '[[IteratedObject]]', o);
2656 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2657 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2658 return iterator;
2659 }
2660
2661 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2662 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2663 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2664
2665 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2666 define(
2667 $ArrayIteratorPrototype$, 'next',
2668 function next() {
2669 var o = strict(this);
2670 if (Type(o) !== 'object') throw TypeError();
2671 var a = o['[[IteratedObject]]'],
2672 index = o['[[ArrayIteratorNextIndex]]'],
2673 itemKind = o['[[ArrayIterationKind]]'],
2674 lenValue = a.length,
2675 len = ToUint32(lenValue),
2676 elementKey,
2677 elementValue;
2678 if (itemKind.indexOf('sparse') !== -1) {
2679 var found = false;
2680 while (!found && index < len) {
2681 elementKey = String(index);
2682 found = HasProperty(a, elementKey);
2683 if (!found) {
2684 index += 1;
2685 }
2686 }
2687 }
2688 if (index >= len) {
2689 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2690 return CreateIterResultObject(undefined, true);
2691 }
2692 elementKey = index;
2693 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2694 if (itemKind.indexOf('value') !== -1)
2695 elementValue = a[elementKey];
2696 if (itemKind.indexOf('key+value') !== -1)
2697 return CreateIterResultObject([elementKey, elementValue], false);
2698 if (itemKind.indexOf('key') !== -1)
2699 return CreateIterResultObject(elementKey, false);
2700 if (itemKind === 'value')
2701 return CreateIterResultObject(elementValue, false);
2702 throw Error('Internal error');
2703 });
2704
2705 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2706 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2707
2708 // 22.1.5.3 Properties of Array Iterator Instances
2709
2710
2711 // ---------------------------------------
2712 // 22.2 TypedArray Objects
2713 // ---------------------------------------
2714
2715 // See typedarray.js for TypedArray polyfill
2716
2717 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2718 'Int16Array', 'Uint16Array',
2719 'Int32Array', 'Uint32Array',
2720 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2721 if (!($TypedArrayName$ in global))
2722 return;
2723 var $TypedArray$ = global[$TypedArrayName$];
2724
2725 // 22.2.1 The %TypedArray% Intrinsic Object
2726 // 22.2.1.1 %TypedArray% ( length )
2727 // 22.2.1.2 %TypedArray% ( typedArray )
2728 // 22.2.1.3 %TypedArray% ( object )
2729 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2730 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2731 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2732
2733 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2734 define(
2735 $TypedArray$, 'from',
2736 function from(source) {
2737 var mapfn = arguments[1];
2738 var thisArg = arguments[2];
2739
2740 var c = strict(this);
2741 if (!IsConstructor(c)) throw TypeError();
2742 if (mapfn === undefined) {
2743 var mapping = false;
2744 } else {
2745 if (IsCallable(mapfn)) throw TypeError();
2746 var t = thisArg;
2747 mapping = true;
2748 }
2749 var usingIterator = GetMethod(source, $$iterator);
2750 if (usingIterator !== undefined) {
2751 var iterator = GetIterator(source, usingIterator);
2752 var values = [];
2753 var next = true;
2754 while (next !== false) {
2755 next = IteratorStep(iterator);
2756 if (next !== false) {
2757 var nextValue = IteratorValue(next);
2758 values.push(nextValue);
2759 }
2760 }
2761 var len = values.length;
2762 var newObj = new c(len);
2763 var k = 0;
2764 while (k < len) {
2765 var kValue = values.shift();
2766 if (mapping) {
2767 var mappedValue = mapfn.call(t, kValue);
2768 } else {
2769 mappedValue = kValue;
2770 }
2771 newObj[k] = mappedValue;
2772 ++k;
2773 }
2774 console.assert(values.length === 0);
2775 return newObj;
2776 }
2777 var arrayLike = ToObject(source);
2778 var lenValue = arrayLike.length;
2779 len = ToLength(lenValue);
2780 newObj = new c(len);
2781 k = 0;
2782 while (k < len) {
2783 kValue = arrayLike[k];
2784 if (mapping) {
2785 mappedValue = mapfn.call(t, kValue, k);
2786 } else {
2787 mappedValue = kValue;
2788 }
2789 newObj[k] = mappedValue;
2790 ++k;
2791 }
2792 return newObj;
2793 });
2794
2795 // 22.2.2.2 %TypedArray%.of ( ...items )
2796 define(
2797 $TypedArray$, 'of',
2798 function of() {
2799 var items = arguments;
2800
2801 var len = items.length;
2802 var c = strict(this);
2803 var newObj = new c(len);
2804 var k = 0;
2805 while (k < len) {
2806 newObj[k] = items[k];
2807 ++k;
2808 }
2809 return newObj;
2810 });
2811
2812 // 22.2.2.3 %TypedArray%.prototype
2813 // 22.2.2.4 get %TypedArray% [ @@species ]
2814 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2815 // 22.2.3.1 get %TypedArray%.prototype.buffer
2816 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2817 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2818 // 22.2.3.4 %TypedArray%.prototype.constructor
2819
2820 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2821 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2822
2823 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2824 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2825
2826 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2827 define($TypedArray$.prototype, 'every', Array.prototype.every);
2828
2829 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2830 define(
2831 $TypedArray$.prototype, 'fill',
2832 //Array.prototype.fill // Doesn't work in Safari 7
2833 function fill(value/*, start, end*/) {
2834 var start = arguments[1],
2835 end = arguments[2];
2836
2837 var o = ToObject(this);
2838 var lenVal = o.length;
2839 var len = ToLength(lenVal);
2840 len = max(len, 0);
2841 var relativeStart = ToInteger(start);
2842 var k;
2843 if (relativeStart < 0) k = max((len + relativeStart), 0);
2844 else k = min(relativeStart, len);
2845 var relativeEnd;
2846 if (end === undefined) relativeEnd = len;
2847 else relativeEnd = ToInteger(end);
2848 var final;
2849 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2850 else final = min(relativeEnd, len);
2851 while (k < final) {
2852 var pk = String(k);
2853 o[pk] = value;
2854 k += 1;
2855 }
2856 return o;
2857 });
2858
2859 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2860 define(
2861 $TypedArray$.prototype, 'filter',
2862 function filter(callbackfn) {
2863 var thisArg = arguments[1];
2864
2865 var o = ToObject(this);
2866 var lenVal = o.length;
2867 var len = ToLength(lenVal);
2868 if (!IsCallable(callbackfn)) throw TypeError();
2869 var t = thisArg;
2870 var c = o.constructor;
2871 var kept = [];
2872 var k = 0;
2873 var captured = 0;
2874 while (k < len) {
2875 var kValue = o[k];
2876 var selected = callbackfn.call(t, kValue, k, o);
2877 if (selected) {
2878 kept.push(kValue);
2879 ++captured;
2880 }
2881 ++k;
2882 }
2883 var a = new c(captured);
2884 var n = 0;
2885 for (var i = 0; i < kept.length; ++i) {
2886 var e = kept[i];
2887 a[n] = e;
2888 ++n;
2889 }
2890 return a;
2891 });
2892
2893 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2894 define($TypedArray$.prototype, 'find', Array.prototype.find);
2895
2896 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2897 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2898
2899 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2900 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2901
2902 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2903 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2904
2905 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2906 define($TypedArray$.prototype, 'join', Array.prototype.join);
2907
2908 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2909 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2910
2911 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2912 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2913
2914 // 22.2.3.17 get %TypedArray%.prototype.length
2915
2916 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2917 define(
2918 $TypedArray$.prototype, 'map',
2919 function map(callbackfn) {
2920 var thisArg = arguments[1];
2921
2922 var o = ToObject(this);
2923 var lenValue = o.length;
2924 var len = ToLength(lenValue);
2925 if (!IsCallable(callbackfn)) throw TypeError();
2926 var t = thisArg;
2927 var a = undefined;
2928 var c = o.constructor;
2929 if (IsConstructor(c))
2930 a = new c(len);
2931 if (a === undefined)
2932 a = new Array(len);
2933 var k = 0;
2934 while (k < len) {
2935 var kPresent = HasProperty(o, k);
2936 if (kPresent) {
2937 var kValue = o[k];
2938 var mappedValue = callbackfn.call(t, kValue, k, o);
2939 a[k] = mappedValue;
2940 }
2941 ++k;
2942 }
2943 return a;
2944 });
2945
2946 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2947 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2948
2949 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2950 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2951
2952 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2953 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2954
2955 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2956 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2957 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2958
2959 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2960 define(
2961 $TypedArray$.prototype, 'slice',
2962 function slice(start, end) {
2963 var o = ToObject(this);
2964 var lenVal = o.length;
2965 var len = ToLength(lenVal);
2966 var relativeStart = ToInteger(start);
2967 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2968 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2969 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2970 var count = final - k;
2971 var c = o.constructor;
2972 if (IsConstructor(c)) {
2973 var a = new c(count);
2974 } else {
2975 throw TypeError();
2976 }
2977 var n = 0;
2978 while (k < final) {
2979 var kValue = o[k];
2980 a[n] = kValue;
2981 ++k;
2982 ++n;
2983 }
2984 return a;
2985 });
2986
2987 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2988 define($TypedArray$.prototype, 'some', Array.prototype.some);
2989
2990 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2991 define(
2992 $TypedArray$.prototype, 'sort',
2993 function sort() {
2994 var comparefn = arguments[0];
2995
2996 function sortCompare(x, y) {
2997 console.assert(Type(x) === 'number' && Type(y) === 'number');
2998 if (x !== x && y !== y) return +0;
2999 if (x !== x) return 1;
3000 if (y !== y) return -1;
3001 if (comparefn !== undefined) {
3002 return comparefn(x, y);
3003 }
3004 if (x < y) return -1;
3005 if (x > y) return 1;
3006 return +0;
3007 }
3008 return Array.prototype.sort.call(this, sortCompare);
3009 });
3010
3011 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3012 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3013 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3014
3015 // 22.2.3.29 %TypedArray%.prototype.values ( )
3016 define($TypedArray$.prototype, 'values', Array.prototype.values);
3017
3018 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3019 define(
3020 $TypedArray$.prototype, $$iterator,
3021 $TypedArray$.prototype.values
3022 );
3023
3024 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3025 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3026
3027 // 22.2.4 The TypedArray Constructors
3028 // 22.2.4.1TypedArray( ... argumentsList)
3029 // 22.2.5 Properties of the TypedArray Constructors
3030 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3031 // 22.2.5.2 TypedArray.prototype
3032 // 22.2.6 Properties of TypedArray Prototype Objects
3033 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3034 // 22.2.6.2 TypedArray.prototype.constructor
3035 // 22.2.7 Properties of TypedArray Instances
3036 });
3037
3038 // ---------------------------------------
3039 // 23 Keyed Collection
3040 // ---------------------------------------
3041
3042 // ---------------------------------------
3043 // 23.1 Map Objects
3044 // ---------------------------------------
3045
3046 (function() {
3047 // 23.1.1 The Map Constructor
3048
3049 // 23.1.1.1 Map ( [ iterable ] )
3050 /** @constructor */
3051 function Map(/*iterable*/) {
3052 var map = strict(this);
3053 var iterable = arguments[0];
3054
3055 if (Type(map) !== 'object') throw TypeError();
3056 if ('[[MapData]]' in map) throw TypeError();
3057
3058 if (iterable !== undefined) {
3059 var adder = map['set'];
3060 if (!IsCallable(adder)) throw TypeError();
3061 var iter = GetIterator(ToObject(iterable));
3062 }
3063 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3064 if (iter === undefined) return map;
3065 while (true) {
3066 var next = IteratorStep(iter);
3067 if (next === false)
3068 return map;
3069 var nextItem = IteratorValue(next);
3070 if (Type(nextItem) !== 'object') throw TypeError();
3071 var k = nextItem[0];
3072 var v = nextItem[1];
3073 adder.call(map, k, v);
3074 }
3075
3076 return map;
3077 }
3078
3079 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3080 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3081 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3082 (new global.Map([['a', 1]]).size !== 1))
3083 global.Map = Map;
3084
3085
3086 function MapDataIndexOf(mapData, key) {
3087 var i;
3088 if (key === key) return mapData.keys.indexOf(key);
3089 // Slow case for NaN
3090 for (i = 0; i < mapData.keys.length; i += 1)
3091 if (SameValueZero(mapData.keys[i], key)) return i;
3092 return -1;
3093 }
3094
3095 // 23.1.1.2 new Map ( ... argumentsList )
3096 // 23.1.2 Properties of the Map Constructor
3097 // 23.1.2.1 Map.prototype
3098 var $MapPrototype$ = {};
3099 Map.prototype = $MapPrototype$;
3100
3101 // 23.1.2.2 get Map [ @@species ]
3102
3103 // 23.1.3 Properties of the Map Prototype Object
3104 // 23.1.3.1 Map.prototype.clear ()
3105 define(
3106 Map.prototype, 'clear',
3107 function clear() {
3108 var m = strict(this);
3109 if (Type(m) !== 'object') throw TypeError();
3110 if (!('[[MapData]]' in m)) throw TypeError();
3111 if (m['[[MapData]]'] === undefined) throw TypeError();
3112 var entries = m['[[MapData]]'];
3113 entries.keys.length = 0;
3114 entries.values.length = 0;
3115 return undefined;
3116 });
3117
3118 // 23.1.3.2 Map.prototype.constructor
3119
3120 // 23.1.3.3 Map.prototype.delete ( key )
3121 define(
3122 Map.prototype, 'delete',
3123 function delete_(key) {
3124 var m = strict(this);
3125 if (Type(m) !== 'object') throw TypeError();
3126 if (!('[[MapData]]' in m)) throw TypeError();
3127 if (m['[[MapData]]'] === undefined) throw TypeError();
3128 var entries = m['[[MapData]]'];
3129 var i = MapDataIndexOf(entries, key);
3130 if (i < 0) return false;
3131 entries.keys[i] = empty;
3132 entries.values[i] = empty;
3133 return true;
3134 });
3135
3136 // 23.1.3.4 Map.prototype.entries ( )
3137 define(
3138 Map.prototype, 'entries',
3139 function entries() {
3140 var m = strict(this);
3141 if (Type(m) !== 'object') throw TypeError();
3142 return CreateMapIterator(m, 'key+value');
3143 });
3144
3145 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3146 define(
3147 Map.prototype, 'forEach',
3148 function forEach(callbackfn /*, thisArg*/) {
3149 var thisArg = arguments[1];
3150
3151 var m = strict(this);
3152 if (Type(m) !== 'object') throw TypeError();
3153 if (!('[[MapData]]' in m)) throw TypeError();
3154 if (m['[[MapData]]'] === undefined) throw TypeError();
3155 var entries = m['[[MapData]]'];
3156
3157 if (!IsCallable(callbackfn)) {
3158 throw TypeError('First argument to forEach is not callable.');
3159 }
3160 for (var i = 0; i < entries.keys.length; ++i) {
3161 if (entries.keys[i] !== empty) {
3162 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3163 }
3164 }
3165 return undefined;
3166 });
3167
3168 // 23.1.3.6 Map.prototype.get ( key )
3169 define(
3170 Map.prototype, 'get',
3171 function get(key) {
3172 var m = strict(this);
3173 if (Type(m) !== 'object') throw TypeError();
3174 if (!('[[MapData]]' in m)) throw TypeError();
3175 if (m['[[MapData]]'] === undefined) throw TypeError();
3176 var entries = m['[[MapData]]'];
3177 var i = MapDataIndexOf(entries, key);
3178 if (i >= 0) return entries.values[i];
3179 return undefined;
3180 });
3181
3182 // 23.1.3.7 Map.prototype.has ( key )
3183 define(
3184 Map.prototype, 'has',
3185 function has(key) {
3186 var m = strict(this);
3187 if (Type(m) !== 'object') throw TypeError();
3188 if (!('[[MapData]]' in m)) throw TypeError();
3189 if (m['[[MapData]]'] === undefined) throw TypeError();
3190 var entries = m['[[MapData]]'];
3191 if (MapDataIndexOf(entries, key) >= 0) return true;
3192 return false;
3193 });
3194
3195 // 23.1.3.8 Map.prototype.keys ( )
3196 define(
3197 Map.prototype, 'keys',
3198 function keys() {
3199 var m = strict(this);
3200 if (Type(m) !== 'object') throw TypeError();
3201 return CreateMapIterator(m, 'key');
3202 });
3203
3204 // 23.1.3.9 Map.prototype.set ( key , value )
3205 define(
3206 Map.prototype, 'set',
3207 function set(key, value) {
3208 var m = strict(this);
3209 if (Type(m) !== 'object') throw TypeError();
3210 if (!('[[MapData]]' in m)) throw TypeError();
3211 if (m['[[MapData]]'] === undefined) throw TypeError();
3212 var entries = m['[[MapData]]'];
3213 var i = MapDataIndexOf(entries, key);
3214 if (i < 0) i = entries.keys.length;
3215 if (SameValue(key, -0)) key = 0;
3216 entries.keys[i] = key;
3217 entries.values[i] = value;
3218 return m;
3219 });
3220
3221 // 23.1.3.10 get Map.prototype.size
3222 Object.defineProperty(
3223 Map.prototype, 'size', {
3224 get: function() {
3225 var m = strict(this);
3226 if (Type(m) !== 'object') throw TypeError();
3227 if (!('[[MapData]]' in m)) throw TypeError();
3228 if (m['[[MapData]]'] === undefined) throw TypeError();
3229 var entries = m['[[MapData]]'];
3230 var count = 0;
3231 for (var i = 0; i < entries.keys.length; ++i) {
3232 if (entries.keys[i] !== empty)
3233 count = count + 1;
3234 }
3235 return count;
3236 }
3237 });
3238
3239 // 23.1.3.11 Map.prototype.values ( )
3240 define(
3241 Map.prototype, 'values',
3242 function values() {
3243 var m = strict(this);
3244 if (Type(m) !== 'object') throw TypeError();
3245 return CreateMapIterator(m, 'value');
3246 });
3247
3248 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3249 define(
3250 Map.prototype, $$iterator,
3251 function() {
3252 var m = strict(this);
3253 if (Type(m) !== 'object') throw TypeError();
3254 return CreateMapIterator(m, 'key+value');
3255 });
3256
3257 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3258 define(global.Map.prototype, $$toStringTag, 'Map');
3259
3260 // 23.1.4 Properties of Map Instances
3261 // 23.1.5 Map Iterator Objects
3262
3263 /** @constructor */
3264 function MapIterator() {}
3265
3266 // 23.1.5.1 CreateMapIterator Abstract Operation
3267 function CreateMapIterator(map, kind) {
3268 if (Type(map) !== 'object') throw TypeError();
3269 if (!('[[MapData]]' in map)) throw TypeError();
3270 if (map['[[MapData]]'] === undefined) throw TypeError();
3271 var iterator = new MapIterator;
3272 set_internal(iterator, '[[Map]]', map);
3273 set_internal(iterator, '[[MapNextIndex]]', 0);
3274 set_internal(iterator, '[[MapIterationKind]]', kind);
3275 return iterator;
3276 }
3277
3278 // 23.1.5.2 The %MapIteratorPrototype% Object
3279 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3280 MapIterator.prototype = $MapIteratorPrototype$;
3281
3282 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3283 define(
3284 $MapIteratorPrototype$, 'next',
3285 function next() {
3286 var o = strict(this);
3287 if (Type(o) !== 'object') throw TypeError();
3288 var m = o['[[Map]]'],
3289 index = o['[[MapNextIndex]]'],
3290 itemKind = o['[[MapIterationKind]]'],
3291 entries = m['[[MapData]]'];
3292 while (index < entries.keys.length) {
3293 var e = {key: entries.keys[index], value: entries.values[index]};
3294 index = index += 1;
3295 set_internal(o, '[[MapNextIndex]]', index);
3296 if (e.key !== empty) {
3297 if (itemKind === 'key') {
3298 return CreateIterResultObject(e.key, false);
3299 } else if (itemKind === 'value') {
3300 return CreateIterResultObject(e.value, false);
3301 } else {
3302 return CreateIterResultObject([e.key, e.value], false);
3303 }
3304 }
3305 }
3306 return CreateIterResultObject(undefined, true);
3307 });
3308
3309 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3310 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3311
3312 // 23.1.5.3 Properties of Map Iterator Instances
3313 }());
3314
3315 // ---------------------------------------
3316 // 23.2 Set Objects
3317 // ---------------------------------------
3318
3319 (function() {
3320 // 23.2.1 The Set Constructor
3321 // 23.2.1.1 Set ( [ iterable ] )
3322
3323 /** @constructor */
3324 function Set(/*iterable*/) {
3325 var set = strict(this);
3326 var iterable = arguments[0];
3327
3328 if (Type(set) !== 'object') throw TypeError();
3329 if ('[[SetData]]' in set) throw TypeError();
3330
3331 if (iterable !== undefined) {
3332 var adder = set['add'];
3333 if (!IsCallable(adder)) throw TypeError();
3334 var iter = GetIterator(ToObject(iterable));
3335 }
3336 set_internal(set, '[[SetData]]', []);
3337 if (iter === undefined) return set;
3338 while (true) {
3339 var next = IteratorStep(iter);
3340 if (next === false)
3341 return set;
3342 var nextValue = IteratorValue(next);
3343 adder.call(set, nextValue);
3344 }
3345
3346 return set;
3347 }
3348
3349 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3350 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3351 (new global.Set([1]).size !== 1))
3352 global.Set = Set;
3353
3354 function SetDataIndexOf(setData, key) {
3355 var i;
3356 if (key === key)
3357 return setData.indexOf(key);
3358 // Slow case for NaN
3359 for (i = 0; i < setData.length; i += 1)
3360 if (SameValueZero(setData[i], key)) return i;
3361 return -1;
3362 }
3363
3364 // 23.2.1.2 new Set ( ...argumentsList )
3365 // 23.2.2 Properties of the Set Constructor
3366
3367 // 23.2.2.1 Set.prototype
3368 var $SetPrototype$ = {};
3369 Set.prototype = $SetPrototype$;
3370
3371 // 23.2.2.2 get Set [ @@species ]
3372 // 23.2.3 Properties of the Set Prototype Object
3373
3374 // 23.2.3.1 Set.prototype.add (value )
3375 define(
3376 Set.prototype, 'add',
3377 function add(value) {
3378 var s = strict(this);
3379 if (Type(s) !== 'object') throw TypeError();
3380 if (!('[[SetData]]' in s)) throw TypeError();
3381 if (s['[[SetData]]'] === undefined) throw TypeError();
3382 if (SameValue(value, -0)) value = 0;
3383 var entries = s['[[SetData]]'];
3384 var i = SetDataIndexOf(entries, value);
3385 if (i < 0) i = s['[[SetData]]'].length;
3386 s['[[SetData]]'][i] = value;
3387
3388 return s;
3389 });
3390
3391 // 23.2.3.2 Set.prototype.clear ()
3392 define(
3393 Set.prototype, 'clear',
3394 function clear() {
3395 var s = strict(this);
3396 if (Type(s) !== 'object') throw TypeError();
3397 if (!('[[SetData]]' in s)) throw TypeError();
3398 if (s['[[SetData]]'] === undefined) throw TypeError();
3399 var entries = s['[[SetData]]'];
3400 entries.length = 0;
3401 return undefined;
3402 });
3403
3404 // 23.2.3.3 Set.prototype.constructor
3405 // 23.2.3.4 Set.prototype.delete ( value )
3406 define(
3407 Set.prototype, 'delete',
3408 function delete_(value) {
3409 var s = strict(this);
3410 if (Type(s) !== 'object') throw TypeError();
3411 if (!('[[SetData]]' in s)) throw TypeError();
3412 if (s['[[SetData]]'] === undefined) throw TypeError();
3413 var entries = s['[[SetData]]'];
3414 var i = SetDataIndexOf(entries, value);
3415 if (i < 0) return false;
3416 entries[i] = empty;
3417 return true;
3418 });
3419
3420 // 23.2.3.5 Set.prototype.entries ( )
3421 define(
3422 Set.prototype, 'entries',
3423 function entries() {
3424 var s = strict(this);
3425 if (Type(s) !== 'object') throw TypeError();
3426 return CreateSetIterator(s, 'key+value');
3427 });
3428
3429 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3430 define(
3431 Set.prototype, 'forEach',
3432 function forEach(callbackfn/*, thisArg*/) {
3433 var thisArg = arguments[1];
3434
3435 var s = strict(this);
3436 if (Type(s) !== 'object') throw TypeError();
3437 if (!('[[SetData]]' in s)) throw TypeError();
3438 if (s['[[SetData]]'] === undefined) throw TypeError();
3439 var entries = s['[[SetData]]'];
3440
3441 if (!IsCallable(callbackfn)) {
3442 throw TypeError('First argument to forEach is not callable.');
3443 }
3444 for (var i = 0; i < entries.length; ++i) {
3445 if (entries[i] !== empty) {
3446 callbackfn.call(thisArg, entries[i], entries[i], s);
3447 }
3448 }
3449 });
3450
3451 // 23.2.3.7 Set.prototype.has ( value )
3452 define(
3453 Set.prototype, 'has',
3454 function has(key) {
3455 var s = strict(this);
3456 if (Type(s) !== 'object') throw TypeError();
3457 if (!('[[SetData]]' in s)) throw TypeError();
3458 if (s['[[SetData]]'] === undefined) throw TypeError();
3459 var entries = s['[[SetData]]'];
3460 return SetDataIndexOf(entries, key) !== -1;
3461 });
3462
3463 // 23.2.3.8 Set.prototype.keys ( )
3464 // See Set.prototype.values
3465
3466 // 23.2.3.9 get Set.prototype.size
3467 Object.defineProperty(
3468 Set.prototype, 'size', {
3469 get: function() {
3470 var s = strict(this);
3471 if (Type(s) !== 'object') throw TypeError();
3472 if (!('[[SetData]]' in s)) throw TypeError();
3473 if (s['[[SetData]]'] === undefined) throw TypeError();
3474 var entries = s['[[SetData]]'];
3475 var count = 0;
3476 for (var i = 0; i < entries.length; ++i) {
3477 if (entries[i] !== empty)
3478 count = count + 1;
3479 }
3480 return count;
3481 }
3482 });
3483
3484 // 23.2.3.10 Set.prototype.values ( )
3485 define(
3486 Set.prototype, 'values',
3487 function values() {
3488 var s = strict(this);
3489 if (Type(s) !== 'object') throw TypeError();
3490 return CreateSetIterator(s, 'value');
3491 });
3492 // NOTE: function name is still 'values':
3493 Set.prototype.keys = Set.prototype.values;
3494
3495 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3496 define(
3497 Set.prototype, $$iterator,
3498 function() {
3499 var s = strict(this);
3500 if (Type(s) !== 'object') throw TypeError();
3501 return CreateSetIterator(s);
3502 });
3503
3504 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3505 define(global.Set.prototype, $$toStringTag, 'Set');
3506
3507 // 23.2.4 Properties of Set Instances
3508 // 23.2.5 Set Iterator Objects
3509 /** @constructor */
3510 function SetIterator() {}
3511
3512 // 23.2.5.1 CreateSetIterator Abstract Operation
3513 function CreateSetIterator(set, kind) {
3514 if (Type(set) !== 'object') throw TypeError();
3515 if (!('[[SetData]]' in set)) throw TypeError();
3516 if (set['[[SetData]]'] === undefined) throw TypeError();
3517 var iterator = new SetIterator;
3518 set_internal(iterator, '[[IteratedSet]]', set);
3519 set_internal(iterator, '[[SetNextIndex]]', 0);
3520 set_internal(iterator, '[[SetIterationKind]]', kind);
3521 return iterator;
3522 }
3523
3524 // 23.2.5.2 The %SetIteratorPrototype% Object
3525 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3526 SetIterator.prototype = $SetIteratorPrototype$;
3527
3528 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3529 define(
3530 $SetIteratorPrototype$, 'next',
3531 function next() {
3532 var o = strict(this);
3533 if (Type(o) !== 'object') throw TypeError();
3534 var s = o['[[IteratedSet]]'],
3535 index = o['[[SetNextIndex]]'],
3536 itemKind = o['[[SetIterationKind]]'],
3537 entries = s['[[SetData]]'];
3538 while (index < entries.length) {
3539 var e = entries[index];
3540 index = index += 1;
3541 set_internal(o, '[[SetNextIndex]]', index);
3542 if (e !== empty) {
3543 if (itemKind === 'key+value')
3544 return CreateIterResultObject([e, e], false);
3545 return CreateIterResultObject(e, false);
3546 }
3547 }
3548 return CreateIterResultObject(undefined, true);
3549 });
3550
3551 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3552 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3553
3554 // 23.2.5.3 Properties of Set Iterator Instances
3555
3556 }());
3557
3558 // ---------------------------------------
3559 // 23.3 WeakMap Objects
3560 // ---------------------------------------
3561
3562 (function() {
3563 // 23.3.1 The WeakMap Constructor
3564 // 23.3.1.1 WeakMap ( [ iterable ] )
3565 /** @constructor */
3566 function WeakMap(/*iterable*/) {
3567 var map = strict(this);
3568 var iterable = arguments[0];
3569
3570 if (Type(map) !== 'object') throw TypeError();
3571 if ('[[WeakMapData]]' in map) throw TypeError();
3572
3573 if (iterable !== undefined) {
3574 var adder = map['set'];
3575 if (!IsCallable(adder)) throw TypeError();
3576 var iter = GetIterator(ToObject(iterable));
3577 }
3578 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3579 if (iter === undefined) return map;
3580 while (true) {
3581 var next = IteratorStep(iter);
3582 if (next === false)
3583 return map;
3584 var nextValue = IteratorValue(next);
3585 if (Type(nextValue) !== 'object') throw TypeError();
3586 var k = nextValue[0];
3587 var v = nextValue[1];
3588 adder.call(map, k, v);
3589 }
3590
3591 return map;
3592 }
3593
3594 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3595 global.WeakMap = WeakMap;
3596
3597 // 23.3.2 Properties of the WeakMap Constructor
3598 // 23.3.2.1 WeakMap.prototype
3599 var $WeakMapPrototype$ = {};
3600 WeakMap.prototype = $WeakMapPrototype$;
3601
3602
3603
3604 // 23.3.2.2 WeakMap[ @@create ] ( )
3605 // 23.3.3 Properties of the WeakMap Prototype Object
3606
3607 // 23.3.3.1 WeakMap.prototype.constructor
3608
3609 // 23.3.3.2 WeakMap.prototype.delete ( key )
3610 define(
3611 WeakMap.prototype, 'delete',
3612 function delete_(key) {
3613 var M = strict(this);
3614 if (Type(M) !== 'object') throw TypeError();
3615 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3616 if (Type(key) !== 'object') throw TypeError('Expected object');
3617 return M['[[WeakMapData]]'].remove(key);
3618 });
3619
3620 // 23.3.3.3 WeakMap.prototype.get ( key )
3621 define(
3622 WeakMap.prototype, 'get',
3623 function get(key, defaultValue) {
3624 var M = strict(this);
3625 if (Type(M) !== 'object') throw TypeError();
3626 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3627 if (Type(key) !== 'object') throw TypeError('Expected object');
3628 return M['[[WeakMapData]]'].get(key, defaultValue);
3629 });
3630
3631 // 23.3.3.4 WeakMap.prototype.has ( key )
3632 define(
3633 WeakMap.prototype, 'has',
3634 function has(key) {
3635 var M = strict(this);
3636 if (Type(M) !== 'object') throw TypeError();
3637 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3638 if (Type(key) !== 'object') throw TypeError('Expected object');
3639 return M['[[WeakMapData]]'].has(key);
3640 });
3641
3642 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3643 define(
3644 WeakMap.prototype, 'set',
3645 function set(key, value) {
3646 var M = strict(this);
3647 if (Type(M) !== 'object') throw TypeError();
3648 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3649 if (Type(key) !== 'object') throw TypeError('Expected object');
3650 M['[[WeakMapData]]'].set(key, value);
3651 return M;
3652 });
3653
3654 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3655 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3656
3657 // 23.3.4 Properties of WeakMap Instances
3658
3659 // Polyfills for incomplete native implementations:
3660 (function() {
3661 var wm = new global.WeakMap();
3662 var orig = global.WeakMap.prototype.set;
3663 define(global.WeakMap.prototype, 'set', function set() {
3664 orig.apply(this, arguments);
3665 return this;
3666 }, wm.set({}, 0) !== wm);
3667 }());
3668 }());
3669
3670 // ---------------------------------------
3671 // 23.4 WeakSet Objects
3672 // ---------------------------------------
3673
3674 (function() {
3675 // 23.4.1 The WeakSet Constructor
3676 // 23.4.1.1 WeakSet ( [ iterable ] )
3677 /** @constructor */
3678 function WeakSet(/*iterable*/) {
3679 var set = strict(this);
3680 var iterable = arguments[0];
3681
3682 if (Type(set) !== 'object') throw TypeError();
3683 if ('[[WeakSetData]]' in set) throw TypeError();
3684
3685 if (iterable !== undefined) {
3686 var adder = set['add'];
3687 if (!IsCallable(adder)) throw TypeError();
3688 var iter = GetIterator(ToObject(iterable));
3689 }
3690 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3691 if (iter === undefined) return set;
3692 while (true) {
3693 var next = IteratorStep(iter);
3694 if (next === false)
3695 return set;
3696 var nextValue = IteratorValue(next);
3697 adder.call(set, nextValue);
3698 }
3699
3700 return set;
3701 }
3702
3703 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3704 global.WeakSet = WeakSet;
3705
3706 // 23.4.2 Properties of the WeakSet Constructor
3707 // 23.4.2.1 WeakSet.prototype
3708 var $WeakSetPrototype$ = {};
3709 WeakSet.prototype = $WeakSetPrototype$;
3710
3711 // 23.4.3 Properties of the WeakSet Prototype Object
3712 // 23.4.3.1 WeakSet.prototype.add (value )
3713 define(
3714 WeakSet.prototype, 'add',
3715 function add(value) {
3716 var S = strict(this);
3717 if (Type(S) !== 'object') throw TypeError();
3718 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3719 if (Type(value) !== 'object') throw TypeError('Expected object');
3720 S['[[WeakSetData]]'].set(value, true);
3721 return S;
3722 });
3723
3724 // 23.4.3.2 WeakSet.prototype.constructor
3725 // 23.4.3.3 WeakSet.prototype.delete ( value )
3726 define(
3727 WeakSet.prototype, 'delete',
3728 function delete_(value) {
3729 var S = strict(this);
3730 if (Type(S) !== 'object') throw TypeError();
3731 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3732 if (Type(value) !== 'object') throw TypeError('Expected object');
3733 return S['[[WeakSetData]]'].remove(value);
3734 });
3735
3736 // 23.4.3.4 WeakSet.prototype.has ( value )
3737 define(
3738 WeakSet.prototype, 'has',
3739 function has(key) {
3740 var S = strict(this);
3741 if (Type(S) !== 'object') throw TypeError();
3742 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3743 if (Type(key) !== 'object') throw TypeError('Expected object');
3744 return S['[[WeakSetData]]'].has(key);
3745 });
3746
3747 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3748 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3749
3750 // 23.4.4 Properties of WeakSet Instances
3751
3752 // Polyfills for incomplete native implementations:
3753 (function() {
3754 var ws = new global.WeakSet();
3755 var orig = global.WeakSet.prototype.add;
3756 define(global.WeakSet.prototype, 'add', function add() {
3757 orig.apply(this, arguments);
3758 return this;
3759 }, ws.add({}) !== ws);
3760 }());
3761 }());
3762
3763 // ---------------------------------------
3764 // 24 Structured Data
3765 // ---------------------------------------
3766
3767 // ---------------------------------------
3768 // 24.1 ArrayBuffer Objects
3769 // ---------------------------------------
3770
3771 // See typedarray.js for TypedArray polyfill
3772
3773 (function() {
3774 if (!('ArrayBuffer' in global))
3775 return;
3776
3777 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3778 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3779 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3780 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3781 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3782 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3783 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3784 // 24.1.2 The ArrayBuffer Constructor
3785 // 24.1.2.1 ArrayBuffer( length )
3786 // 24.1.3 Properties of the ArrayBuffer Constructor
3787
3788 // 24.1.3.1 ArrayBuffer.isView ( arg )
3789 define(
3790 ArrayBuffer, 'isView',
3791 function isView(arg) {
3792 if (Type(arg) !== 'object') return false;
3793 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3794 return false;
3795 });
3796
3797 // 24.1.3.2 ArrayBuffer.prototype
3798 // 24.1.3.3 get ArrayBuffer [ @@species ]
3799 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3800 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3801 // 24.1.4.2 ArrayBuffer.prototype.constructor
3802 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3803
3804 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3805 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3806
3807 // 24.1.5 Properties of the ArrayBuffer Instances
3808 }());
3809
3810 // ---------------------------------------
3811 // 24.2 DataView Objects
3812 // ---------------------------------------
3813
3814 // See typedarray.js for TypedArray polyfill
3815
3816 (function() {
3817 if (!('DataView' in global))
3818 return;
3819
3820 // 24.2.1 Abstract Operations For DataView Objects
3821 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3822 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3823 // 24.2.2 The DataView Constructor
3824 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3825 // 24.2.3 Properties of the DataView Constructor
3826 // 24.2.3.1 DataView.prototype
3827 // 24.2.4 Properties of the DataView Prototype Object
3828 // 24.2.4.1 get DataView.prototype.buffer
3829 // 24.2.4.2 get DataView.prototype.byteLength
3830 // 24.2.4.3 get DataView.prototype.byteOffset
3831 // 24.2.4.4 DataView.prototype.constructor
3832 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3833 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3834 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3835 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3836 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3837 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3838 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3840 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3841 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3842 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3843 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3844 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3845 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3846 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3847 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3848
3849 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3850 define(DataView.prototype, $$toStringTag, 'DataView');
3851
3852 // 24.2.5 Properties of DataView Instances
3853 }());
3854
3855 // ---------------------------------------
3856 // 24.3 The JSON Object
3857 // ---------------------------------------
3858
3859 // 24.3.1 JSON.parse ( text [ , reviver ] )
3860 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3861 // 24.3.3 JSON [ @@toStringTag ]
3862 define(JSON, $$toStringTag, 'JSON');
3863
3864 // ---------------------------------------
3865 // 25.1 Iteration
3866 // ---------------------------------------
3867
3868 // 25.1.1 Common Iteration Interfaces
3869 // 25.1.1.1 The Iterable Interface
3870 // 25.1.1.2 The Iterator Interface
3871 // 25.1.1.3 The IteratorResult Interface
3872
3873 // 25.1.2 The %IteratorPrototype% Object
3874 // Defined earlier, so other prototypes can reference it.
3875 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3876 define($IteratorPrototype$, $$iterator, function() {
3877 return this;
3878 });
3879
3880
3881 // ---------------------------------------
3882 // 25.4 Promise Objects
3883 // ---------------------------------------
3884
3885 (function() {
3886 // 25.4 Promise Objects
3887
3888 // 25.4.1 Promise Abstract Operations
3889
3890 // 25.4.1.1 PromiseCapability Records
3891 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3892
3893 function IfAbruptRejectPromise(value, capability) {
3894 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3895 return capability['[[Promise]]'];
3896 }
3897
3898 // 25.4.1.2 PromiseReaction Records
3899
3900 // 25.4.1.3 CreateResolvingFunctions ( promise )
3901
3902 function CreateResolvingFunctions(promise) {
3903 var alreadyResolved = {'[[value]]': false};
3904 var resolve = PromiseResolveFunction();
3905 set_internal(resolve, '[[Promise]]', promise);
3906 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3907 var reject = PromiseRejectFunction();
3908 set_internal(reject, '[[Promise]]', promise);
3909 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3910 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3911 }
3912
3913 // 25.4.1.3.1 Promise Reject Functions
3914
3915 function PromiseRejectFunction() {
3916 var F = function(reason) {
3917 console.assert(Type(F['[[Promise]]']) === 'object');
3918 var promise = F['[[Promise]]'];
3919 var alreadyResolved = F['[[AlreadyResolved]]'];
3920 if (alreadyResolved['[[value]]']) return undefined;
3921 set_internal(alreadyResolved, '[[value]]', true);
3922 return RejectPromise(promise, reason);
3923 };
3924 return F;
3925 }
3926
3927 // 25.4.1.3.2 Promise Resolve Functions
3928
3929 function PromiseResolveFunction() {
3930 var F = function(resolution) {
3931 console.assert(Type(F['[[Promise]]']) === 'object');
3932 var promise = F['[[Promise]]'];
3933 var alreadyResolved = F['[[AlreadyResolved]]'];
3934 if (alreadyResolved['[[value]]']) return undefined;
3935 set_internal(alreadyResolved, '[[value]]', true);
3936
3937 if (SameValue(resolution, promise)) {
3938 var selfResolutionError = TypeError();
3939 return RejectPromise(promise, selfResolutionError);
3940 }
3941 if (Type(resolution) !== 'object')
3942 return FulfillPromise(promise, resolution);
3943 try {
3944 var then = resolution['then'];
3945 } catch(then) {
3946 return RejectPromise(promise, then);
3947 }
3948 if (!IsCallable(then))
3949 return FulfillPromise(promise, resolution);
3950 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3951 return undefined;
3952 };
3953 return F;
3954 }
3955
3956 // 25.4.1.4 FulfillPromise ( promise, value )
3957
3958 function FulfillPromise(promise, value) {
3959 console.assert(promise['[[PromiseState]]'] === 'pending');
3960 var reactions = promise['[[PromiseFulfillReactions]]'];
3961 set_internal(promise, '[[PromiseResult]]', value);
3962 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3963 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3964 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3965 return TriggerPromiseReactions(reactions, value);
3966 }
3967
3968 // 25.4.1.5 NewPromiseCapability ( C )
3969
3970 function NewPromiseCapability(c) {
3971 // To keep Promise hermetic, this doesn't look much like the spec.
3972 return CreatePromiseCapabilityRecord(undefined, c);
3973 }
3974
3975 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3976
3977 function CreatePromiseCapabilityRecord(promise, constructor) {
3978 // To keep Promise hermetic, this doesn't look much like the spec.
3979 console.assert(IsConstructor(constructor));
3980 var promiseCapability = {};
3981 set_internal(promiseCapability, '[[Promise]]', promise);
3982 set_internal(promiseCapability, '[[Resolve]]', undefined);
3983 set_internal(promiseCapability, '[[Reject]]', undefined);
3984 var executor = GetCapabilitiesExecutor();
3985 set_internal(executor, '[[Capability]]', promiseCapability);
3986
3987 // NOTE: Differs from spec; object is constructed here
3988 var constructorResult = promise = new constructor(executor);
3989 set_internal(promiseCapability, '[[Promise]]', promise);
3990
3991 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3992 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3993 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3994 return promiseCapability;
3995 }
3996
3997 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3998
3999 function GetCapabilitiesExecutor() {
4000 var F = function(resolve, reject) {
4001 console.assert(F['[[Capability]]']);
4002 var promiseCapability = F['[[Capability]]'];
4003 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4004 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4005 set_internal(promiseCapability, '[[Resolve]]', resolve);
4006 set_internal(promiseCapability, '[[Reject]]', reject);
4007 return undefined;
4008 };
4009 return F;
4010 }
4011
4012 // 25.4.1.6 IsPromise ( x )
4013
4014 function IsPromise(x) {
4015 if (Type(x) !== 'object') return false;
4016 if (!('[[PromiseState]]' in x)) return false;
4017 if (x['[[PromiseState]]'] === undefined) return false;
4018 return true;
4019 }
4020
4021 // 25.4.1.7 RejectPromise ( promise, reason )
4022
4023 function RejectPromise(promise, reason) {
4024 console.assert(promise['[[PromiseState]]'] === 'pending');
4025 var reactions = promise['[[PromiseRejectReactions]]'];
4026 set_internal(promise, '[[PromiseResult]]', reason);
4027 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4028 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4029 set_internal(promise, '[[PromiseState]]', 'rejected');
4030 return TriggerPromiseReactions(reactions, reason);
4031 }
4032
4033 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4034
4035 function TriggerPromiseReactions(reactions, argument) {
4036 for (var i = 0, len = reactions.length; i < len; ++i)
4037 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4038 return undefined;
4039 }
4040
4041 // 25.4.2 Promise Jobs
4042
4043 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4044
4045 function PromiseReactionJob(reaction, argument) {
4046 var promiseCapability = reaction['[[Capabilities]]'];
4047 var handler = reaction['[[Handler]]'];
4048 var handlerResult, status;
4049 try {
4050 if (handler === 'Identity') handlerResult = argument;
4051 else if (handler === 'Thrower') throw argument;
4052 else handlerResult = handler.call(undefined, argument);
4053 } catch (handlerResult) {
4054 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4055 NextJob(status); return;
4056 }
4057 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4058 NextJob(status);
4059 }
4060
4061 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4062
4063 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4064 // SPEC BUG: promise vs. promiseToResolve
4065 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4066 try {
4067 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4068 resolvingFunctions['[[Reject]]']);
4069 } catch (thenCallResult) {
4070 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4071 NextJob(status); return;
4072 }
4073 NextJob(thenCallResult);
4074 }
4075
4076 // 25.4.3 The Promise Constructor
4077
4078 // 25.4.3.1 Promise ( executor )
4079
4080 function Promise(executor) {
4081 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4082 Object.defineProperty(this, '[[PromiseState]]', config);
4083 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4084 Object.defineProperty(this, '[[PromiseResult]]', config);
4085 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4086 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4087
4088 var promise = this;
4089 if (Type(promise) !== 'object') throw new TypeError();
4090 if (!('[[PromiseState]]' in promise)) throw TypeError();
4091 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4092 if (!IsCallable(executor)) throw TypeError();
4093
4094 set_internal(promise, '[[PromiseConstructor]]', Promise);
4095
4096 return InitializePromise(promise, executor);
4097 }
4098
4099 // 25.4.3.1.1 InitializePromise ( promise, executor )
4100
4101 function InitializePromise(promise, executor) {
4102 console.assert('[[PromiseState]]' in promise);
4103 console.assert(IsCallable(executor));
4104 set_internal(promise, '[[PromiseState]]', 'pending');
4105 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4106 set_internal(promise, '[[PromiseRejectReactions]]', []);
4107 var resolvingFunctions = CreateResolvingFunctions(promise);
4108 try {
4109 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4110 resolvingFunctions['[[Reject]]']);
4111 } catch (completion) {
4112 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4113 }
4114 return promise;
4115 }
4116
4117 // 25.4.4 Properties of the Promise Constructor
4118 // 25.4.4.1 Promise.all ( iterable )
4119
4120 define(Promise, 'all', function all(iterable) {
4121 var c = strict(this);
4122 var promiseCapability = NewPromiseCapability(c);
4123 try {
4124 var iterator = GetIterator(iterable);
4125 } catch (value) {
4126 promiseCapability['[[Reject]]'].call(undefined, value);
4127 return promiseCapability['[[Promise]]'];
4128 }
4129 var values = [];
4130 var remainingElementsCount = { value: 1 };
4131 var index = 0;
4132 while (true) {
4133 try {
4134 var next = IteratorStep(iterator);
4135 } catch (value) {
4136 promiseCapability['[[Reject]]'].call(undefined, value);
4137 return promiseCapability['[[Promise]]'];
4138 }
4139 if (!next) {
4140 remainingElementsCount.value -= 1;
4141 if (remainingElementsCount.value === 0) {
4142 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4143
4144
4145 }
4146 return promiseCapability['[[Promise]]'];
4147 }
4148 try {
4149 var nextValue = IteratorValue(next);
4150 } catch (value) {
4151 promiseCapability['[[Reject]]'].call(undefined, value);
4152 return promiseCapability['[[Promise]]'];
4153 }
4154 try {
4155 var nextPromise = c.resolve(nextValue);
4156 } catch (value) {
4157 promiseCapability['[[Reject]]'].call(undefined, value);
4158 return promiseCapability['[[Promise]]'];
4159 }
4160 var resolveElement = PromiseAllResolveElementFunction();
4161 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4162 set_internal(resolveElement, '[[Index]]', index);
4163 set_internal(resolveElement, '[[Values]]', values);
4164 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4165 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4166 remainingElementsCount.value += 1;
4167 try {
4168 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4169 } catch (value) {
4170 promiseCapability['[[Reject]]'].call(undefined, value);
4171 return promiseCapability['[[Promise]]'];
4172 }
4173 index += 1;
4174 }
4175 });
4176
4177 // 25.4.4.1.1 Promise.all Resolve Element Functions
4178
4179 function PromiseAllResolveElementFunction() {
4180 var F = function(x) {
4181 var alreadyCalled = F['[[AlreadyCalled]]'];
4182 if (alreadyCalled.value) return undefined;
4183 alreadyCalled.value = true;
4184 var index = F['[[Index]]'];
4185 var values = F['[[Values]]'];
4186 var promiseCapability = F['[[Capabilities]]'];
4187 var remainingElementsCount = F['[[RemainingElements]]'];
4188 try {
4189 values[index] = x;
4190 } catch (result) {
4191 promiseCapability['[[Reject]]'].call(undefined, result);
4192 return promiseCapability['[[Promise]]'];
4193 }
4194 remainingElementsCount.value -= 1;
4195 if (remainingElementsCount.value === 0)
4196 return promiseCapability['[[Resolve]]'].call(undefined, values);
4197 return undefined;
4198 };
4199 return F;
4200 }
4201
4202 // 25.4.4.2 Promise.prototype
4203
4204 Promise.prototype = {};
4205
4206 // 25.4.4.3 Promise.race ( iterable )
4207
4208 define(Promise, 'race', function race(iterable) {
4209 var c = strict(this);
4210 var promiseCapability = NewPromiseCapability(c);
4211 try {
4212 var iterator = GetIterator(iterable);
4213 } catch (value) {
4214 promiseCapability['[[Reject]]'].call(undefined, value);
4215 return promiseCapability['[[Promise]]'];
4216 }
4217 while (true) {
4218 try {
4219 var next = IteratorStep(iterator);
4220 } catch (value) {
4221 promiseCapability['[[Reject]]'].call(undefined, value);
4222 return promiseCapability['[[Promise]]'];
4223 }
4224 if (!next) return promiseCapability['[[Promise]]'];
4225 try {
4226 var nextValue = IteratorValue(next);
4227 } catch (value) {
4228 promiseCapability['[[Reject]]'].call(undefined, value);
4229 return promiseCapability['[[Promise]]'];
4230 }
4231 try {
4232 var nextPromise = c.resolve(nextValue);
4233 } catch (value) {
4234 promiseCapability['[[Reject]]'].call(undefined, value);
4235 return promiseCapability['[[Promise]]'];
4236 }
4237 try {
4238 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4239 } catch (value) {
4240 promiseCapability['[[Reject]]'].call(undefined, value);
4241 return promiseCapability['[[Promise]]'];
4242 }
4243 }
4244 });
4245
4246 // 25.4.4.4 Promise.reject ( r )
4247
4248 define(Promise, 'reject', function reject(r) {
4249 var c = strict(this);
4250 var promiseCapability = NewPromiseCapability(c);
4251 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4252 return promiseCapability['[[Promise]]'];
4253 });
4254
4255 // 25.4.4.5 Promise.resolve ( x )
4256
4257 define(Promise, 'resolve', function resolve(x) {
4258 var c = strict(this);
4259 if (IsPromise(x)) {
4260 var constructor = x['[[PromiseConstructor]]'];
4261 if (SameValue(constructor, c)) return x;
4262 }
4263 var promiseCapability = NewPromiseCapability(c);
4264 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4265 return promiseCapability['[[Promise]]'];
4266 });
4267
4268 // 25.4.4.6 Promise [ @@create ] ( )
4269 // 25.4.4.6.1 AllocatePromise ( constructor )
4270 // 25.4.5 Properties of the Promise Prototype Object
4271 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4272
4273 define(Promise.prototype, 'catch', function catch_(onRejected) {
4274 var promise = this;
4275 return promise.then(undefined, onRejected);
4276 });
4277
4278 // 25.4.5.2 Promise.prototype.constructor
4279
4280 Promise.prototype.constructor = Promise;
4281
4282 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4283
4284 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4285 var promise = this;
4286 if (!IsPromise(promise)) throw TypeError();
4287 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4288 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4289 var c = promise.constructor;
4290 var promiseCapability = NewPromiseCapability(c);
4291 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4292 '[[Handler]]': onFulfilled };
4293 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4294 '[[Handler]]': onRejected };
4295 if (promise['[[PromiseState]]'] === 'pending') {
4296 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4297 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4298 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4299 var value = promise['[[PromiseResult]]'];
4300 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4301 } else if (promise['[[PromiseState]]'] === 'rejected') {
4302 var reason = promise['[[PromiseResult]]'];
4303 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4304 }
4305 return promiseCapability['[[Promise]]'];
4306 });
4307
4308 // 25.4.6 Properties of Promise Instances
4309
4310 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4311 global.Promise = Promise;
4312
4313 // Patch early Promise.cast vs. Promise.resolve implementations
4314 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4315 }());
4316
4317 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4318 define(Promise.prototype, $$toStringTag, 'Promise');
4319
4320 // ---------------------------------------
4321 // 26 Reflection
4322 // ---------------------------------------
4323
4324 (function() {
4325 // 26.1 The Reflect Object
4326 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4327 global.Reflect = {};
4328
4329 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4330 define(
4331 Reflect, 'apply',
4332 function apply(target, thisArgument, argumentsList) {
4333 if (!IsCallable(target)) throw TypeError();
4334 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4335 });
4336
4337 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4338 define(
4339 Reflect, 'construct',
4340 function construct(target, argumentsList) {
4341 return __cons(target, argumentsList);
4342 });
4343
4344 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4345 define(
4346 Reflect, 'defineProperty',
4347 function defineProperty(target, propertyKey, attributes) {
4348 try {
4349 Object.defineProperty(target, propertyKey, attributes);
4350 return true;
4351 } catch (_) {
4352 return false;
4353 }
4354 });
4355
4356 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4357 define(
4358 Reflect, 'deleteProperty',
4359 function deleteProperty(target,name) {
4360 try {
4361 delete target[name];
4362 return !HasOwnProperty(target, name);
4363 } catch (_) {
4364 return false;
4365 }
4366 });
4367
4368 // 26.1.5 Reflect.enumerate ( target )
4369 define(
4370 Reflect, 'enumerate',
4371 function enumerate(target) {
4372 target = ToObject(target);
4373 var iterator = Enumerate(target);
4374 return iterator;
4375 });
4376
4377 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4378 define(
4379 Reflect, 'get',
4380 function get(target, name, receiver) {
4381 target = ToObject(target);
4382 name = String(name);
4383 receiver = (receiver === undefined) ? target : ToObject(receiver);
4384 var desc = getPropertyDescriptor(target, name);
4385 if (desc && 'get' in desc)
4386 return Function.prototype.call.call(desc['get'], receiver);
4387 return target[name];
4388 });
4389
4390 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4391 define(
4392 Reflect, 'getOwnPropertyDescriptor',
4393 Object.getOwnPropertyDescriptor);
4394
4395 // 26.1.8 Reflect.getPrototypeOf ( target )
4396 define(
4397 Reflect, 'getPrototypeOf',
4398 Object.getPrototypeOf);
4399
4400 // 26.1.9 Reflect.has ( target, propertyKey )
4401 define(
4402 Reflect, 'has',
4403 function has(target,name) {
4404 return String(name) in ToObject(target);
4405 });
4406
4407 // 26.1.10 Reflect.isExtensible (target)
4408 define(
4409 Reflect, 'isExtensible',
4410 Object.isExtensible);
4411
4412 // 26.1.11 Reflect.ownKeys ( target )
4413 define(
4414 Reflect, 'ownKeys',
4415 function ownKeys(target) {
4416 var obj = ToObject(target);
4417 return Object.getOwnPropertyNames(obj);
4418 });
4419
4420 // 26.1.12 Reflect.preventExtensions ( target )
4421 define(
4422 Reflect, 'preventExtensions',
4423 function preventExtensions(target) {
4424 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4425 });
4426
4427 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4428 define(
4429 Reflect, 'set',
4430 function set(target, name, value, receiver) {
4431 target = ToObject(target);
4432 name = String(name);
4433 receiver = (receiver === undefined) ? target : ToObject(receiver);
4434 var desc = getPropertyDescriptor(target, name);
4435 try {
4436 if (desc && 'set' in desc)
4437 Function.prototype.call.call(desc['set'], receiver, value);
4438 else
4439 target[name] = value;
4440 return true;
4441 } catch (_) {
4442 return false;
4443 }
4444 });
4445
4446 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4447 define(
4448 Reflect, 'setPrototypeOf',
4449 function setPrototypeOf(target, proto) {
4450 try {
4451 target.__proto__ = proto;
4452 return Reflect.getPrototypeOf(target) === proto;
4453 } catch(_) {
4454 return false;
4455 }
4456 });
4457
4458 }());
4459
4460 // ---------------------------------------
4461 // 26.2 Proxy Objects
4462 // ---------------------------------------
4463
4464 // Not polyfillable.
4465
4466}(self));
4467
4468// This helper is defined outside the main scope so that the use of
4469// 'eval' does not taint the scope for minifiers.
4470function __cons(t, a) {
4471 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4472}
4473</script>
4474 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
4475'use strict'
4476
4477exports.byteLength = byteLength
4478exports.toByteArray = toByteArray
4479exports.fromByteArray = fromByteArray
4480
4481var lookup = []
4482var revLookup = []
4483var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4484
4485var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4486for (var i = 0, len = code.length; i < len; ++i) {
4487 lookup[i] = code[i]
4488 revLookup[code.charCodeAt(i)] = i
4489}
4490
4491revLookup['-'.charCodeAt(0)] = 62
4492revLookup['_'.charCodeAt(0)] = 63
4493
4494function placeHoldersCount (b64) {
4495 var len = b64.length
4496 if (len % 4 > 0) {
4497 throw new Error('Invalid string. Length must be a multiple of 4')
4498 }
4499
4500 // the number of equal signs (place holders)
4501 // if there are two placeholders, than the two characters before it
4502 // represent one byte
4503 // if there is only one, then the three characters before it represent 2 bytes
4504 // this is just a cheap hack to not do indexOf twice
4505 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4506}
4507
4508function byteLength (b64) {
4509 // base64 is 4/3 + up to two characters of the original data
4510 return b64.length * 3 / 4 - placeHoldersCount(b64)
4511}
4512
4513function toByteArray (b64) {
4514 var i, j, l, tmp, placeHolders, arr
4515 var len = b64.length
4516 placeHolders = placeHoldersCount(b64)
4517
4518 arr = new Arr(len * 3 / 4 - placeHolders)
4519
4520 // if there are placeholders, only get up to the last complete 4 chars
4521 l = placeHolders > 0 ? len - 4 : len
4522
4523 var L = 0
4524
4525 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4526 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4527 arr[L++] = (tmp >> 16) & 0xFF
4528 arr[L++] = (tmp >> 8) & 0xFF
4529 arr[L++] = tmp & 0xFF
4530 }
4531
4532 if (placeHolders === 2) {
4533 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4534 arr[L++] = tmp & 0xFF
4535 } else if (placeHolders === 1) {
4536 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4537 arr[L++] = (tmp >> 8) & 0xFF
4538 arr[L++] = tmp & 0xFF
4539 }
4540
4541 return arr
4542}
4543
4544function tripletToBase64 (num) {
4545 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4546}
4547
4548function encodeChunk (uint8, start, end) {
4549 var tmp
4550 var output = []
4551 for (var i = start; i < end; i += 3) {
4552 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4553 output.push(tripletToBase64(tmp))
4554 }
4555 return output.join('')
4556}
4557
4558function fromByteArray (uint8) {
4559 var tmp
4560 var len = uint8.length
4561 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4562 var output = ''
4563 var parts = []
4564 var maxChunkLength = 16383 // must be multiple of 3
4565
4566 // go through the array every three bytes, we'll deal with trailing stuff later
4567 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4568 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4569 }
4570
4571 // pad the end with zeros, but make sure to not forget the extra bytes
4572 if (extraBytes === 1) {
4573 tmp = uint8[len - 1]
4574 output += lookup[tmp >> 2]
4575 output += lookup[(tmp << 4) & 0x3F]
4576 output += '=='
4577 } else if (extraBytes === 2) {
4578 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4579 output += lookup[tmp >> 10]
4580 output += lookup[(tmp >> 4) & 0x3F]
4581 output += lookup[(tmp << 2) & 0x3F]
4582 output += '='
4583 }
4584
4585 parts.push(output)
4586
4587 return parts.join('')
4588}
4589
4590},{}],2:[function(require,module,exports){
4591/*!
4592 * The buffer module from node.js, for the browser.
4593 *
4594 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4595 * @license MIT
4596 */
4597/* eslint-disable no-proto */
4598
4599'use strict'
4600
4601var base64 = require('base64-js')
4602var ieee754 = require('ieee754')
4603
4604exports.Buffer = Buffer
4605exports.SlowBuffer = SlowBuffer
4606exports.INSPECT_MAX_BYTES = 50
4607
4608var K_MAX_LENGTH = 0x7fffffff
4609exports.kMaxLength = K_MAX_LENGTH
4610
4611/**
4612 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4613 * === true Use Uint8Array implementation (fastest)
4614 * === false Print warning and recommend using `buffer` v4.x which has an Object
4615 * implementation (most compatible, even IE6)
4616 *
4617 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4618 * Opera 11.6+, iOS 4.2+.
4619 *
4620 * We report that the browser does not support typed arrays if the are not subclassable
4621 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4622 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4623 * for __proto__ and has a buggy typed array implementation.
4624 */
4625Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4626
4627if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4628 typeof console.error === 'function') {
4629 console.error(
4630 'This browser lacks typed array (Uint8Array) support which is required by ' +
4631 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4632 )
4633}
4634
4635function typedArraySupport () {
4636 // Can typed array instances can be augmented?
4637 try {
4638 var arr = new Uint8Array(1)
4639 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4640 return arr.foo() === 42
4641 } catch (e) {
4642 return false
4643 }
4644}
4645
4646function createBuffer (length) {
4647 if (length > K_MAX_LENGTH) {
4648 throw new RangeError('Invalid typed array length')
4649 }
4650 // Return an augmented `Uint8Array` instance
4651 var buf = new Uint8Array(length)
4652 buf.__proto__ = Buffer.prototype
4653 return buf
4654}
4655
4656/**
4657 * The Buffer constructor returns instances of `Uint8Array` that have their
4658 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4659 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4660 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4661 * returns a single octet.
4662 *
4663 * The `Uint8Array` prototype remains unmodified.
4664 */
4665
4666function Buffer (arg, encodingOrOffset, length) {
4667 // Common case.
4668 if (typeof arg === 'number') {
4669 if (typeof encodingOrOffset === 'string') {
4670 throw new Error(
4671 'If encoding is specified then the first argument must be a string'
4672 )
4673 }
4674 return allocUnsafe(arg)
4675 }
4676 return from(arg, encodingOrOffset, length)
4677}
4678
4679// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4680if (typeof Symbol !== 'undefined' && Symbol.species &&
4681 Buffer[Symbol.species] === Buffer) {
4682 Object.defineProperty(Buffer, Symbol.species, {
4683 value: null,
4684 configurable: true,
4685 enumerable: false,
4686 writable: false
4687 })
4688}
4689
4690Buffer.poolSize = 8192 // not used by this implementation
4691
4692function from (value, encodingOrOffset, length) {
4693 if (typeof value === 'number') {
4694 throw new TypeError('"value" argument must not be a number')
4695 }
4696
4697 if (value instanceof ArrayBuffer) {
4698 return fromArrayBuffer(value, encodingOrOffset, length)
4699 }
4700
4701 if (typeof value === 'string') {
4702 return fromString(value, encodingOrOffset)
4703 }
4704
4705 return fromObject(value)
4706}
4707
4708/**
4709 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4710 * if value is a number.
4711 * Buffer.from(str[, encoding])
4712 * Buffer.from(array)
4713 * Buffer.from(buffer)
4714 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4715 **/
4716Buffer.from = function (value, encodingOrOffset, length) {
4717 return from(value, encodingOrOffset, length)
4718}
4719
4720// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4721// https://github.com/feross/buffer/pull/148
4722Buffer.prototype.__proto__ = Uint8Array.prototype
4723Buffer.__proto__ = Uint8Array
4724
4725function assertSize (size) {
4726 if (typeof size !== 'number') {
4727 throw new TypeError('"size" argument must be a number')
4728 } else if (size < 0) {
4729 throw new RangeError('"size" argument must not be negative')
4730 }
4731}
4732
4733function alloc (size, fill, encoding) {
4734 assertSize(size)
4735 if (size <= 0) {
4736 return createBuffer(size)
4737 }
4738 if (fill !== undefined) {
4739 // Only pay attention to encoding if it's a string. This
4740 // prevents accidentally sending in a number that would
4741 // be interpretted as a start offset.
4742 return typeof encoding === 'string'
4743 ? createBuffer(size).fill(fill, encoding)
4744 : createBuffer(size).fill(fill)
4745 }
4746 return createBuffer(size)
4747}
4748
4749/**
4750 * Creates a new filled Buffer instance.
4751 * alloc(size[, fill[, encoding]])
4752 **/
4753Buffer.alloc = function (size, fill, encoding) {
4754 return alloc(size, fill, encoding)
4755}
4756
4757function allocUnsafe (size) {
4758 assertSize(size)
4759 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4760}
4761
4762/**
4763 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4764 * */
4765Buffer.allocUnsafe = function (size) {
4766 return allocUnsafe(size)
4767}
4768/**
4769 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4770 */
4771Buffer.allocUnsafeSlow = function (size) {
4772 return allocUnsafe(size)
4773}
4774
4775function fromString (string, encoding) {
4776 if (typeof encoding !== 'string' || encoding === '') {
4777 encoding = 'utf8'
4778 }
4779
4780 if (!Buffer.isEncoding(encoding)) {
4781 throw new TypeError('"encoding" must be a valid string encoding')
4782 }
4783
4784 var length = byteLength(string, encoding) | 0
4785 var buf = createBuffer(length)
4786
4787 var actual = buf.write(string, encoding)
4788
4789 if (actual !== length) {
4790 // Writing a hex string, for example, that contains invalid characters will
4791 // cause everything after the first invalid character to be ignored. (e.g.
4792 // 'abxxcd' will be treated as 'ab')
4793 buf = buf.slice(0, actual)
4794 }
4795
4796 return buf
4797}
4798
4799function fromArrayLike (array) {
4800 var length = array.length < 0 ? 0 : checked(array.length) | 0
4801 var buf = createBuffer(length)
4802 for (var i = 0; i < length; i += 1) {
4803 buf[i] = array[i] & 255
4804 }
4805 return buf
4806}
4807
4808function fromArrayBuffer (array, byteOffset, length) {
4809 if (byteOffset < 0 || array.byteLength < byteOffset) {
4810 throw new RangeError('\'offset\' is out of bounds')
4811 }
4812
4813 if (array.byteLength < byteOffset + (length || 0)) {
4814 throw new RangeError('\'length\' is out of bounds')
4815 }
4816
4817 var buf
4818 if (byteOffset === undefined && length === undefined) {
4819 buf = new Uint8Array(array)
4820 } else if (length === undefined) {
4821 buf = new Uint8Array(array, byteOffset)
4822 } else {
4823 buf = new Uint8Array(array, byteOffset, length)
4824 }
4825
4826 // Return an augmented `Uint8Array` instance
4827 buf.__proto__ = Buffer.prototype
4828 return buf
4829}
4830
4831function fromObject (obj) {
4832 if (Buffer.isBuffer(obj)) {
4833 var len = checked(obj.length) | 0
4834 var buf = createBuffer(len)
4835
4836 if (buf.length === 0) {
4837 return buf
4838 }
4839
4840 obj.copy(buf, 0, 0, len)
4841 return buf
4842 }
4843
4844 if (obj) {
4845 if (isArrayBufferView(obj) || 'length' in obj) {
4846 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4847 return createBuffer(0)
4848 }
4849 return fromArrayLike(obj)
4850 }
4851
4852 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4853 return fromArrayLike(obj.data)
4854 }
4855 }
4856
4857 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
4858}
4859
4860function checked (length) {
4861 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
4862 // length is NaN (which is otherwise coerced to zero.)
4863 if (length >= K_MAX_LENGTH) {
4864 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
4865 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
4866 }
4867 return length | 0
4868}
4869
4870function SlowBuffer (length) {
4871 if (+length != length) { // eslint-disable-line eqeqeq
4872 length = 0
4873 }
4874 return Buffer.alloc(+length)
4875}
4876
4877Buffer.isBuffer = function isBuffer (b) {
4878 return b != null && b._isBuffer === true
4879}
4880
4881Buffer.compare = function compare (a, b) {
4882 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
4883 throw new TypeError('Arguments must be Buffers')
4884 }
4885
4886 if (a === b) return 0
4887
4888 var x = a.length
4889 var y = b.length
4890
4891 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
4892 if (a[i] !== b[i]) {
4893 x = a[i]
4894 y = b[i]
4895 break
4896 }
4897 }
4898
4899 if (x < y) return -1
4900 if (y < x) return 1
4901 return 0
4902}
4903
4904Buffer.isEncoding = function isEncoding (encoding) {
4905 switch (String(encoding).toLowerCase()) {
4906 case 'hex':
4907 case 'utf8':
4908 case 'utf-8':
4909 case 'ascii':
4910 case 'latin1':
4911 case 'binary':
4912 case 'base64':
4913 case 'ucs2':
4914 case 'ucs-2':
4915 case 'utf16le':
4916 case 'utf-16le':
4917 return true
4918 default:
4919 return false
4920 }
4921}
4922
4923Buffer.concat = function concat (list, length) {
4924 if (!Array.isArray(list)) {
4925 throw new TypeError('"list" argument must be an Array of Buffers')
4926 }
4927
4928 if (list.length === 0) {
4929 return Buffer.alloc(0)
4930 }
4931
4932 var i
4933 if (length === undefined) {
4934 length = 0
4935 for (i = 0; i < list.length; ++i) {
4936 length += list[i].length
4937 }
4938 }
4939
4940 var buffer = Buffer.allocUnsafe(length)
4941 var pos = 0
4942 for (i = 0; i < list.length; ++i) {
4943 var buf = list[i]
4944 if (!Buffer.isBuffer(buf)) {
4945 throw new TypeError('"list" argument must be an Array of Buffers')
4946 }
4947 buf.copy(buffer, pos)
4948 pos += buf.length
4949 }
4950 return buffer
4951}
4952
4953function byteLength (string, encoding) {
4954 if (Buffer.isBuffer(string)) {
4955 return string.length
4956 }
4957 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
4958 return string.byteLength
4959 }
4960 if (typeof string !== 'string') {
4961 string = '' + string
4962 }
4963
4964 var len = string.length
4965 if (len === 0) return 0
4966
4967 // Use a for loop to avoid recursion
4968 var loweredCase = false
4969 for (;;) {
4970 switch (encoding) {
4971 case 'ascii':
4972 case 'latin1':
4973 case 'binary':
4974 return len
4975 case 'utf8':
4976 case 'utf-8':
4977 case undefined:
4978 return utf8ToBytes(string).length
4979 case 'ucs2':
4980 case 'ucs-2':
4981 case 'utf16le':
4982 case 'utf-16le':
4983 return len * 2
4984 case 'hex':
4985 return len >>> 1
4986 case 'base64':
4987 return base64ToBytes(string).length
4988 default:
4989 if (loweredCase) return utf8ToBytes(string).length // assume utf8
4990 encoding = ('' + encoding).toLowerCase()
4991 loweredCase = true
4992 }
4993 }
4994}
4995Buffer.byteLength = byteLength
4996
4997function slowToString (encoding, start, end) {
4998 var loweredCase = false
4999
5000 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5001 // property of a typed array.
5002
5003 // This behaves neither like String nor Uint8Array in that we set start/end
5004 // to their upper/lower bounds if the value passed is out of range.
5005 // undefined is handled specially as per ECMA-262 6th Edition,
5006 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5007 if (start === undefined || start < 0) {
5008 start = 0
5009 }
5010 // Return early if start > this.length. Done here to prevent potential uint32
5011 // coercion fail below.
5012 if (start > this.length) {
5013 return ''
5014 }
5015
5016 if (end === undefined || end > this.length) {
5017 end = this.length
5018 }
5019
5020 if (end <= 0) {
5021 return ''
5022 }
5023
5024 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5025 end >>>= 0
5026 start >>>= 0
5027
5028 if (end <= start) {
5029 return ''
5030 }
5031
5032 if (!encoding) encoding = 'utf8'
5033
5034 while (true) {
5035 switch (encoding) {
5036 case 'hex':
5037 return hexSlice(this, start, end)
5038
5039 case 'utf8':
5040 case 'utf-8':
5041 return utf8Slice(this, start, end)
5042
5043 case 'ascii':
5044 return asciiSlice(this, start, end)
5045
5046 case 'latin1':
5047 case 'binary':
5048 return latin1Slice(this, start, end)
5049
5050 case 'base64':
5051 return base64Slice(this, start, end)
5052
5053 case 'ucs2':
5054 case 'ucs-2':
5055 case 'utf16le':
5056 case 'utf-16le':
5057 return utf16leSlice(this, start, end)
5058
5059 default:
5060 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5061 encoding = (encoding + '').toLowerCase()
5062 loweredCase = true
5063 }
5064 }
5065}
5066
5067// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5068// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5069// reliably in a browserify context because there could be multiple different
5070// copies of the 'buffer' package in use. This method works even for Buffer
5071// instances that were created from another copy of the `buffer` package.
5072// See: https://github.com/feross/buffer/issues/154
5073Buffer.prototype._isBuffer = true
5074
5075function swap (b, n, m) {
5076 var i = b[n]
5077 b[n] = b[m]
5078 b[m] = i
5079}
5080
5081Buffer.prototype.swap16 = function swap16 () {
5082 var len = this.length
5083 if (len % 2 !== 0) {
5084 throw new RangeError('Buffer size must be a multiple of 16-bits')
5085 }
5086 for (var i = 0; i < len; i += 2) {
5087 swap(this, i, i + 1)
5088 }
5089 return this
5090}
5091
5092Buffer.prototype.swap32 = function swap32 () {
5093 var len = this.length
5094 if (len % 4 !== 0) {
5095 throw new RangeError('Buffer size must be a multiple of 32-bits')
5096 }
5097 for (var i = 0; i < len; i += 4) {
5098 swap(this, i, i + 3)
5099 swap(this, i + 1, i + 2)
5100 }
5101 return this
5102}
5103
5104Buffer.prototype.swap64 = function swap64 () {
5105 var len = this.length
5106 if (len % 8 !== 0) {
5107 throw new RangeError('Buffer size must be a multiple of 64-bits')
5108 }
5109 for (var i = 0; i < len; i += 8) {
5110 swap(this, i, i + 7)
5111 swap(this, i + 1, i + 6)
5112 swap(this, i + 2, i + 5)
5113 swap(this, i + 3, i + 4)
5114 }
5115 return this
5116}
5117
5118Buffer.prototype.toString = function toString () {
5119 var length = this.length
5120 if (length === 0) return ''
5121 if (arguments.length === 0) return utf8Slice(this, 0, length)
5122 return slowToString.apply(this, arguments)
5123}
5124
5125Buffer.prototype.equals = function equals (b) {
5126 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5127 if (this === b) return true
5128 return Buffer.compare(this, b) === 0
5129}
5130
5131Buffer.prototype.inspect = function inspect () {
5132 var str = ''
5133 var max = exports.INSPECT_MAX_BYTES
5134 if (this.length > 0) {
5135 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5136 if (this.length > max) str += ' ... '
5137 }
5138 return '<Buffer ' + str + '>'
5139}
5140
5141Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5142 if (!Buffer.isBuffer(target)) {
5143 throw new TypeError('Argument must be a Buffer')
5144 }
5145
5146 if (start === undefined) {
5147 start = 0
5148 }
5149 if (end === undefined) {
5150 end = target ? target.length : 0
5151 }
5152 if (thisStart === undefined) {
5153 thisStart = 0
5154 }
5155 if (thisEnd === undefined) {
5156 thisEnd = this.length
5157 }
5158
5159 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5160 throw new RangeError('out of range index')
5161 }
5162
5163 if (thisStart >= thisEnd && start >= end) {
5164 return 0
5165 }
5166 if (thisStart >= thisEnd) {
5167 return -1
5168 }
5169 if (start >= end) {
5170 return 1
5171 }
5172
5173 start >>>= 0
5174 end >>>= 0
5175 thisStart >>>= 0
5176 thisEnd >>>= 0
5177
5178 if (this === target) return 0
5179
5180 var x = thisEnd - thisStart
5181 var y = end - start
5182 var len = Math.min(x, y)
5183
5184 var thisCopy = this.slice(thisStart, thisEnd)
5185 var targetCopy = target.slice(start, end)
5186
5187 for (var i = 0; i < len; ++i) {
5188 if (thisCopy[i] !== targetCopy[i]) {
5189 x = thisCopy[i]
5190 y = targetCopy[i]
5191 break
5192 }
5193 }
5194
5195 if (x < y) return -1
5196 if (y < x) return 1
5197 return 0
5198}
5199
5200// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5201// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5202//
5203// Arguments:
5204// - buffer - a Buffer to search
5205// - val - a string, Buffer, or number
5206// - byteOffset - an index into `buffer`; will be clamped to an int32
5207// - encoding - an optional encoding, relevant is val is a string
5208// - dir - true for indexOf, false for lastIndexOf
5209function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5210 // Empty buffer means no match
5211 if (buffer.length === 0) return -1
5212
5213 // Normalize byteOffset
5214 if (typeof byteOffset === 'string') {
5215 encoding = byteOffset
5216 byteOffset = 0
5217 } else if (byteOffset > 0x7fffffff) {
5218 byteOffset = 0x7fffffff
5219 } else if (byteOffset < -0x80000000) {
5220 byteOffset = -0x80000000
5221 }
5222 byteOffset = +byteOffset // Coerce to Number.
5223 if (numberIsNaN(byteOffset)) {
5224 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5225 byteOffset = dir ? 0 : (buffer.length - 1)
5226 }
5227
5228 // Normalize byteOffset: negative offsets start from the end of the buffer
5229 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5230 if (byteOffset >= buffer.length) {
5231 if (dir) return -1
5232 else byteOffset = buffer.length - 1
5233 } else if (byteOffset < 0) {
5234 if (dir) byteOffset = 0
5235 else return -1
5236 }
5237
5238 // Normalize val
5239 if (typeof val === 'string') {
5240 val = Buffer.from(val, encoding)
5241 }
5242
5243 // Finally, search either indexOf (if dir is true) or lastIndexOf
5244 if (Buffer.isBuffer(val)) {
5245 // Special case: looking for empty string/buffer always fails
5246 if (val.length === 0) {
5247 return -1
5248 }
5249 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5250 } else if (typeof val === 'number') {
5251 val = val & 0xFF // Search for a byte value [0-255]
5252 if (typeof Uint8Array.prototype.indexOf === 'function') {
5253 if (dir) {
5254 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5255 } else {
5256 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5257 }
5258 }
5259 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5260 }
5261
5262 throw new TypeError('val must be string, number or Buffer')
5263}
5264
5265function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5266 var indexSize = 1
5267 var arrLength = arr.length
5268 var valLength = val.length
5269
5270 if (encoding !== undefined) {
5271 encoding = String(encoding).toLowerCase()
5272 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5273 encoding === 'utf16le' || encoding === 'utf-16le') {
5274 if (arr.length < 2 || val.length < 2) {
5275 return -1
5276 }
5277 indexSize = 2
5278 arrLength /= 2
5279 valLength /= 2
5280 byteOffset /= 2
5281 }
5282 }
5283
5284 function read (buf, i) {
5285 if (indexSize === 1) {
5286 return buf[i]
5287 } else {
5288 return buf.readUInt16BE(i * indexSize)
5289 }
5290 }
5291
5292 var i
5293 if (dir) {
5294 var foundIndex = -1
5295 for (i = byteOffset; i < arrLength; i++) {
5296 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5297 if (foundIndex === -1) foundIndex = i
5298 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5299 } else {
5300 if (foundIndex !== -1) i -= i - foundIndex
5301 foundIndex = -1
5302 }
5303 }
5304 } else {
5305 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5306 for (i = byteOffset; i >= 0; i--) {
5307 var found = true
5308 for (var j = 0; j < valLength; j++) {
5309 if (read(arr, i + j) !== read(val, j)) {
5310 found = false
5311 break
5312 }
5313 }
5314 if (found) return i
5315 }
5316 }
5317
5318 return -1
5319}
5320
5321Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5322 return this.indexOf(val, byteOffset, encoding) !== -1
5323}
5324
5325Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5326 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5327}
5328
5329Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5330 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5331}
5332
5333function hexWrite (buf, string, offset, length) {
5334 offset = Number(offset) || 0
5335 var remaining = buf.length - offset
5336 if (!length) {
5337 length = remaining
5338 } else {
5339 length = Number(length)
5340 if (length > remaining) {
5341 length = remaining
5342 }
5343 }
5344
5345 // must be an even number of digits
5346 var strLen = string.length
5347 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5348
5349 if (length > strLen / 2) {
5350 length = strLen / 2
5351 }
5352 for (var i = 0; i < length; ++i) {
5353 var parsed = parseInt(string.substr(i * 2, 2), 16)
5354 if (numberIsNaN(parsed)) return i
5355 buf[offset + i] = parsed
5356 }
5357 return i
5358}
5359
5360function utf8Write (buf, string, offset, length) {
5361 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5362}
5363
5364function asciiWrite (buf, string, offset, length) {
5365 return blitBuffer(asciiToBytes(string), buf, offset, length)
5366}
5367
5368function latin1Write (buf, string, offset, length) {
5369 return asciiWrite(buf, string, offset, length)
5370}
5371
5372function base64Write (buf, string, offset, length) {
5373 return blitBuffer(base64ToBytes(string), buf, offset, length)
5374}
5375
5376function ucs2Write (buf, string, offset, length) {
5377 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5378}
5379
5380Buffer.prototype.write = function write (string, offset, length, encoding) {
5381 // Buffer#write(string)
5382 if (offset === undefined) {
5383 encoding = 'utf8'
5384 length = this.length
5385 offset = 0
5386 // Buffer#write(string, encoding)
5387 } else if (length === undefined && typeof offset === 'string') {
5388 encoding = offset
5389 length = this.length
5390 offset = 0
5391 // Buffer#write(string, offset[, length][, encoding])
5392 } else if (isFinite(offset)) {
5393 offset = offset >>> 0
5394 if (isFinite(length)) {
5395 length = length >>> 0
5396 if (encoding === undefined) encoding = 'utf8'
5397 } else {
5398 encoding = length
5399 length = undefined
5400 }
5401 } else {
5402 throw new Error(
5403 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5404 )
5405 }
5406
5407 var remaining = this.length - offset
5408 if (length === undefined || length > remaining) length = remaining
5409
5410 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5411 throw new RangeError('Attempt to write outside buffer bounds')
5412 }
5413
5414 if (!encoding) encoding = 'utf8'
5415
5416 var loweredCase = false
5417 for (;;) {
5418 switch (encoding) {
5419 case 'hex':
5420 return hexWrite(this, string, offset, length)
5421
5422 case 'utf8':
5423 case 'utf-8':
5424 return utf8Write(this, string, offset, length)
5425
5426 case 'ascii':
5427 return asciiWrite(this, string, offset, length)
5428
5429 case 'latin1':
5430 case 'binary':
5431 return latin1Write(this, string, offset, length)
5432
5433 case 'base64':
5434 // Warning: maxLength not taken into account in base64Write
5435 return base64Write(this, string, offset, length)
5436
5437 case 'ucs2':
5438 case 'ucs-2':
5439 case 'utf16le':
5440 case 'utf-16le':
5441 return ucs2Write(this, string, offset, length)
5442
5443 default:
5444 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5445 encoding = ('' + encoding).toLowerCase()
5446 loweredCase = true
5447 }
5448 }
5449}
5450
5451Buffer.prototype.toJSON = function toJSON () {
5452 return {
5453 type: 'Buffer',
5454 data: Array.prototype.slice.call(this._arr || this, 0)
5455 }
5456}
5457
5458function base64Slice (buf, start, end) {
5459 if (start === 0 && end === buf.length) {
5460 return base64.fromByteArray(buf)
5461 } else {
5462 return base64.fromByteArray(buf.slice(start, end))
5463 }
5464}
5465
5466function utf8Slice (buf, start, end) {
5467 end = Math.min(buf.length, end)
5468 var res = []
5469
5470 var i = start
5471 while (i < end) {
5472 var firstByte = buf[i]
5473 var codePoint = null
5474 var bytesPerSequence = (firstByte > 0xEF) ? 4
5475 : (firstByte > 0xDF) ? 3
5476 : (firstByte > 0xBF) ? 2
5477 : 1
5478
5479 if (i + bytesPerSequence <= end) {
5480 var secondByte, thirdByte, fourthByte, tempCodePoint
5481
5482 switch (bytesPerSequence) {
5483 case 1:
5484 if (firstByte < 0x80) {
5485 codePoint = firstByte
5486 }
5487 break
5488 case 2:
5489 secondByte = buf[i + 1]
5490 if ((secondByte & 0xC0) === 0x80) {
5491 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5492 if (tempCodePoint > 0x7F) {
5493 codePoint = tempCodePoint
5494 }
5495 }
5496 break
5497 case 3:
5498 secondByte = buf[i + 1]
5499 thirdByte = buf[i + 2]
5500 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5501 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5502 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5503 codePoint = tempCodePoint
5504 }
5505 }
5506 break
5507 case 4:
5508 secondByte = buf[i + 1]
5509 thirdByte = buf[i + 2]
5510 fourthByte = buf[i + 3]
5511 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5512 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5513 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5514 codePoint = tempCodePoint
5515 }
5516 }
5517 }
5518 }
5519
5520 if (codePoint === null) {
5521 // we did not generate a valid codePoint so insert a
5522 // replacement char (U+FFFD) and advance only 1 byte
5523 codePoint = 0xFFFD
5524 bytesPerSequence = 1
5525 } else if (codePoint > 0xFFFF) {
5526 // encode to utf16 (surrogate pair dance)
5527 codePoint -= 0x10000
5528 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5529 codePoint = 0xDC00 | codePoint & 0x3FF
5530 }
5531
5532 res.push(codePoint)
5533 i += bytesPerSequence
5534 }
5535
5536 return decodeCodePointsArray(res)
5537}
5538
5539// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5540// the lowest limit is Chrome, with 0x10000 args.
5541// We go 1 magnitude less, for safety
5542var MAX_ARGUMENTS_LENGTH = 0x1000
5543
5544function decodeCodePointsArray (codePoints) {
5545 var len = codePoints.length
5546 if (len <= MAX_ARGUMENTS_LENGTH) {
5547 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5548 }
5549
5550 // Decode in chunks to avoid "call stack size exceeded".
5551 var res = ''
5552 var i = 0
5553 while (i < len) {
5554 res += String.fromCharCode.apply(
5555 String,
5556 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5557 )
5558 }
5559 return res
5560}
5561
5562function asciiSlice (buf, start, end) {
5563 var ret = ''
5564 end = Math.min(buf.length, end)
5565
5566 for (var i = start; i < end; ++i) {
5567 ret += String.fromCharCode(buf[i] & 0x7F)
5568 }
5569 return ret
5570}
5571
5572function latin1Slice (buf, start, end) {
5573 var ret = ''
5574 end = Math.min(buf.length, end)
5575
5576 for (var i = start; i < end; ++i) {
5577 ret += String.fromCharCode(buf[i])
5578 }
5579 return ret
5580}
5581
5582function hexSlice (buf, start, end) {
5583 var len = buf.length
5584
5585 if (!start || start < 0) start = 0
5586 if (!end || end < 0 || end > len) end = len
5587
5588 var out = ''
5589 for (var i = start; i < end; ++i) {
5590 out += toHex(buf[i])
5591 }
5592 return out
5593}
5594
5595function utf16leSlice (buf, start, end) {
5596 var bytes = buf.slice(start, end)
5597 var res = ''
5598 for (var i = 0; i < bytes.length; i += 2) {
5599 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5600 }
5601 return res
5602}
5603
5604Buffer.prototype.slice = function slice (start, end) {
5605 var len = this.length
5606 start = ~~start
5607 end = end === undefined ? len : ~~end
5608
5609 if (start < 0) {
5610 start += len
5611 if (start < 0) start = 0
5612 } else if (start > len) {
5613 start = len
5614 }
5615
5616 if (end < 0) {
5617 end += len
5618 if (end < 0) end = 0
5619 } else if (end > len) {
5620 end = len
5621 }
5622
5623 if (end < start) end = start
5624
5625 var newBuf = this.subarray(start, end)
5626 // Return an augmented `Uint8Array` instance
5627 newBuf.__proto__ = Buffer.prototype
5628 return newBuf
5629}
5630
5631/*
5632 * Need to make sure that buffer isn't trying to write out of bounds.
5633 */
5634function checkOffset (offset, ext, length) {
5635 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5636 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5637}
5638
5639Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5640 offset = offset >>> 0
5641 byteLength = byteLength >>> 0
5642 if (!noAssert) checkOffset(offset, byteLength, this.length)
5643
5644 var val = this[offset]
5645 var mul = 1
5646 var i = 0
5647 while (++i < byteLength && (mul *= 0x100)) {
5648 val += this[offset + i] * mul
5649 }
5650
5651 return val
5652}
5653
5654Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5655 offset = offset >>> 0
5656 byteLength = byteLength >>> 0
5657 if (!noAssert) {
5658 checkOffset(offset, byteLength, this.length)
5659 }
5660
5661 var val = this[offset + --byteLength]
5662 var mul = 1
5663 while (byteLength > 0 && (mul *= 0x100)) {
5664 val += this[offset + --byteLength] * mul
5665 }
5666
5667 return val
5668}
5669
5670Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5671 offset = offset >>> 0
5672 if (!noAssert) checkOffset(offset, 1, this.length)
5673 return this[offset]
5674}
5675
5676Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5677 offset = offset >>> 0
5678 if (!noAssert) checkOffset(offset, 2, this.length)
5679 return this[offset] | (this[offset + 1] << 8)
5680}
5681
5682Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5683 offset = offset >>> 0
5684 if (!noAssert) checkOffset(offset, 2, this.length)
5685 return (this[offset] << 8) | this[offset + 1]
5686}
5687
5688Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5689 offset = offset >>> 0
5690 if (!noAssert) checkOffset(offset, 4, this.length)
5691
5692 return ((this[offset]) |
5693 (this[offset + 1] << 8) |
5694 (this[offset + 2] << 16)) +
5695 (this[offset + 3] * 0x1000000)
5696}
5697
5698Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5699 offset = offset >>> 0
5700 if (!noAssert) checkOffset(offset, 4, this.length)
5701
5702 return (this[offset] * 0x1000000) +
5703 ((this[offset + 1] << 16) |
5704 (this[offset + 2] << 8) |
5705 this[offset + 3])
5706}
5707
5708Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5709 offset = offset >>> 0
5710 byteLength = byteLength >>> 0
5711 if (!noAssert) checkOffset(offset, byteLength, this.length)
5712
5713 var val = this[offset]
5714 var mul = 1
5715 var i = 0
5716 while (++i < byteLength && (mul *= 0x100)) {
5717 val += this[offset + i] * mul
5718 }
5719 mul *= 0x80
5720
5721 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5722
5723 return val
5724}
5725
5726Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5727 offset = offset >>> 0
5728 byteLength = byteLength >>> 0
5729 if (!noAssert) checkOffset(offset, byteLength, this.length)
5730
5731 var i = byteLength
5732 var mul = 1
5733 var val = this[offset + --i]
5734 while (i > 0 && (mul *= 0x100)) {
5735 val += this[offset + --i] * mul
5736 }
5737 mul *= 0x80
5738
5739 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5740
5741 return val
5742}
5743
5744Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5745 offset = offset >>> 0
5746 if (!noAssert) checkOffset(offset, 1, this.length)
5747 if (!(this[offset] & 0x80)) return (this[offset])
5748 return ((0xff - this[offset] + 1) * -1)
5749}
5750
5751Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5752 offset = offset >>> 0
5753 if (!noAssert) checkOffset(offset, 2, this.length)
5754 var val = this[offset] | (this[offset + 1] << 8)
5755 return (val & 0x8000) ? val | 0xFFFF0000 : val
5756}
5757
5758Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5759 offset = offset >>> 0
5760 if (!noAssert) checkOffset(offset, 2, this.length)
5761 var val = this[offset + 1] | (this[offset] << 8)
5762 return (val & 0x8000) ? val | 0xFFFF0000 : val
5763}
5764
5765Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5766 offset = offset >>> 0
5767 if (!noAssert) checkOffset(offset, 4, this.length)
5768
5769 return (this[offset]) |
5770 (this[offset + 1] << 8) |
5771 (this[offset + 2] << 16) |
5772 (this[offset + 3] << 24)
5773}
5774
5775Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5776 offset = offset >>> 0
5777 if (!noAssert) checkOffset(offset, 4, this.length)
5778
5779 return (this[offset] << 24) |
5780 (this[offset + 1] << 16) |
5781 (this[offset + 2] << 8) |
5782 (this[offset + 3])
5783}
5784
5785Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5786 offset = offset >>> 0
5787 if (!noAssert) checkOffset(offset, 4, this.length)
5788 return ieee754.read(this, offset, true, 23, 4)
5789}
5790
5791Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5792 offset = offset >>> 0
5793 if (!noAssert) checkOffset(offset, 4, this.length)
5794 return ieee754.read(this, offset, false, 23, 4)
5795}
5796
5797Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5798 offset = offset >>> 0
5799 if (!noAssert) checkOffset(offset, 8, this.length)
5800 return ieee754.read(this, offset, true, 52, 8)
5801}
5802
5803Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5804 offset = offset >>> 0
5805 if (!noAssert) checkOffset(offset, 8, this.length)
5806 return ieee754.read(this, offset, false, 52, 8)
5807}
5808
5809function checkInt (buf, value, offset, ext, max, min) {
5810 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5811 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5812 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5813}
5814
5815Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5816 value = +value
5817 offset = offset >>> 0
5818 byteLength = byteLength >>> 0
5819 if (!noAssert) {
5820 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5821 checkInt(this, value, offset, byteLength, maxBytes, 0)
5822 }
5823
5824 var mul = 1
5825 var i = 0
5826 this[offset] = value & 0xFF
5827 while (++i < byteLength && (mul *= 0x100)) {
5828 this[offset + i] = (value / mul) & 0xFF
5829 }
5830
5831 return offset + byteLength
5832}
5833
5834Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5835 value = +value
5836 offset = offset >>> 0
5837 byteLength = byteLength >>> 0
5838 if (!noAssert) {
5839 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5840 checkInt(this, value, offset, byteLength, maxBytes, 0)
5841 }
5842
5843 var i = byteLength - 1
5844 var mul = 1
5845 this[offset + i] = value & 0xFF
5846 while (--i >= 0 && (mul *= 0x100)) {
5847 this[offset + i] = (value / mul) & 0xFF
5848 }
5849
5850 return offset + byteLength
5851}
5852
5853Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5854 value = +value
5855 offset = offset >>> 0
5856 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5857 this[offset] = (value & 0xff)
5858 return offset + 1
5859}
5860
5861Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
5862 value = +value
5863 offset = offset >>> 0
5864 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5865 this[offset] = (value & 0xff)
5866 this[offset + 1] = (value >>> 8)
5867 return offset + 2
5868}
5869
5870Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
5871 value = +value
5872 offset = offset >>> 0
5873 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5874 this[offset] = (value >>> 8)
5875 this[offset + 1] = (value & 0xff)
5876 return offset + 2
5877}
5878
5879Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
5880 value = +value
5881 offset = offset >>> 0
5882 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5883 this[offset + 3] = (value >>> 24)
5884 this[offset + 2] = (value >>> 16)
5885 this[offset + 1] = (value >>> 8)
5886 this[offset] = (value & 0xff)
5887 return offset + 4
5888}
5889
5890Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
5891 value = +value
5892 offset = offset >>> 0
5893 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5894 this[offset] = (value >>> 24)
5895 this[offset + 1] = (value >>> 16)
5896 this[offset + 2] = (value >>> 8)
5897 this[offset + 3] = (value & 0xff)
5898 return offset + 4
5899}
5900
5901Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
5902 value = +value
5903 offset = offset >>> 0
5904 if (!noAssert) {
5905 var limit = Math.pow(2, (8 * byteLength) - 1)
5906
5907 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5908 }
5909
5910 var i = 0
5911 var mul = 1
5912 var sub = 0
5913 this[offset] = value & 0xFF
5914 while (++i < byteLength && (mul *= 0x100)) {
5915 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
5916 sub = 1
5917 }
5918 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5919 }
5920
5921 return offset + byteLength
5922}
5923
5924Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
5925 value = +value
5926 offset = offset >>> 0
5927 if (!noAssert) {
5928 var limit = Math.pow(2, (8 * byteLength) - 1)
5929
5930 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5931 }
5932
5933 var i = byteLength - 1
5934 var mul = 1
5935 var sub = 0
5936 this[offset + i] = value & 0xFF
5937 while (--i >= 0 && (mul *= 0x100)) {
5938 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
5939 sub = 1
5940 }
5941 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5942 }
5943
5944 return offset + byteLength
5945}
5946
5947Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
5948 value = +value
5949 offset = offset >>> 0
5950 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
5951 if (value < 0) value = 0xff + value + 1
5952 this[offset] = (value & 0xff)
5953 return offset + 1
5954}
5955
5956Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
5957 value = +value
5958 offset = offset >>> 0
5959 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5960 this[offset] = (value & 0xff)
5961 this[offset + 1] = (value >>> 8)
5962 return offset + 2
5963}
5964
5965Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
5966 value = +value
5967 offset = offset >>> 0
5968 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5969 this[offset] = (value >>> 8)
5970 this[offset + 1] = (value & 0xff)
5971 return offset + 2
5972}
5973
5974Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
5975 value = +value
5976 offset = offset >>> 0
5977 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5978 this[offset] = (value & 0xff)
5979 this[offset + 1] = (value >>> 8)
5980 this[offset + 2] = (value >>> 16)
5981 this[offset + 3] = (value >>> 24)
5982 return offset + 4
5983}
5984
5985Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
5986 value = +value
5987 offset = offset >>> 0
5988 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5989 if (value < 0) value = 0xffffffff + value + 1
5990 this[offset] = (value >>> 24)
5991 this[offset + 1] = (value >>> 16)
5992 this[offset + 2] = (value >>> 8)
5993 this[offset + 3] = (value & 0xff)
5994 return offset + 4
5995}
5996
5997function checkIEEE754 (buf, value, offset, ext, max, min) {
5998 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5999 if (offset < 0) throw new RangeError('Index out of range')
6000}
6001
6002function writeFloat (buf, value, offset, littleEndian, noAssert) {
6003 value = +value
6004 offset = offset >>> 0
6005 if (!noAssert) {
6006 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6007 }
6008 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6009 return offset + 4
6010}
6011
6012Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6013 return writeFloat(this, value, offset, true, noAssert)
6014}
6015
6016Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6017 return writeFloat(this, value, offset, false, noAssert)
6018}
6019
6020function writeDouble (buf, value, offset, littleEndian, noAssert) {
6021 value = +value
6022 offset = offset >>> 0
6023 if (!noAssert) {
6024 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6025 }
6026 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6027 return offset + 8
6028}
6029
6030Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6031 return writeDouble(this, value, offset, true, noAssert)
6032}
6033
6034Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6035 return writeDouble(this, value, offset, false, noAssert)
6036}
6037
6038// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6039Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6040 if (!start) start = 0
6041 if (!end && end !== 0) end = this.length
6042 if (targetStart >= target.length) targetStart = target.length
6043 if (!targetStart) targetStart = 0
6044 if (end > 0 && end < start) end = start
6045
6046 // Copy 0 bytes; we're done
6047 if (end === start) return 0
6048 if (target.length === 0 || this.length === 0) return 0
6049
6050 // Fatal error conditions
6051 if (targetStart < 0) {
6052 throw new RangeError('targetStart out of bounds')
6053 }
6054 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6055 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6056
6057 // Are we oob?
6058 if (end > this.length) end = this.length
6059 if (target.length - targetStart < end - start) {
6060 end = target.length - targetStart + start
6061 }
6062
6063 var len = end - start
6064 var i
6065
6066 if (this === target && start < targetStart && targetStart < end) {
6067 // descending copy from end
6068 for (i = len - 1; i >= 0; --i) {
6069 target[i + targetStart] = this[i + start]
6070 }
6071 } else if (len < 1000) {
6072 // ascending copy from start
6073 for (i = 0; i < len; ++i) {
6074 target[i + targetStart] = this[i + start]
6075 }
6076 } else {
6077 Uint8Array.prototype.set.call(
6078 target,
6079 this.subarray(start, start + len),
6080 targetStart
6081 )
6082 }
6083
6084 return len
6085}
6086
6087// Usage:
6088// buffer.fill(number[, offset[, end]])
6089// buffer.fill(buffer[, offset[, end]])
6090// buffer.fill(string[, offset[, end]][, encoding])
6091Buffer.prototype.fill = function fill (val, start, end, encoding) {
6092 // Handle string cases:
6093 if (typeof val === 'string') {
6094 if (typeof start === 'string') {
6095 encoding = start
6096 start = 0
6097 end = this.length
6098 } else if (typeof end === 'string') {
6099 encoding = end
6100 end = this.length
6101 }
6102 if (val.length === 1) {
6103 var code = val.charCodeAt(0)
6104 if (code < 256) {
6105 val = code
6106 }
6107 }
6108 if (encoding !== undefined && typeof encoding !== 'string') {
6109 throw new TypeError('encoding must be a string')
6110 }
6111 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6112 throw new TypeError('Unknown encoding: ' + encoding)
6113 }
6114 } else if (typeof val === 'number') {
6115 val = val & 255
6116 }
6117
6118 // Invalid ranges are not set to a default, so can range check early.
6119 if (start < 0 || this.length < start || this.length < end) {
6120 throw new RangeError('Out of range index')
6121 }
6122
6123 if (end <= start) {
6124 return this
6125 }
6126
6127 start = start >>> 0
6128 end = end === undefined ? this.length : end >>> 0
6129
6130 if (!val) val = 0
6131
6132 var i
6133 if (typeof val === 'number') {
6134 for (i = start; i < end; ++i) {
6135 this[i] = val
6136 }
6137 } else {
6138 var bytes = Buffer.isBuffer(val)
6139 ? val
6140 : new Buffer(val, encoding)
6141 var len = bytes.length
6142 for (i = 0; i < end - start; ++i) {
6143 this[i + start] = bytes[i % len]
6144 }
6145 }
6146
6147 return this
6148}
6149
6150// HELPER FUNCTIONS
6151// ================
6152
6153var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6154
6155function base64clean (str) {
6156 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6157 str = str.trim().replace(INVALID_BASE64_RE, '')
6158 // Node converts strings with length < 2 to ''
6159 if (str.length < 2) return ''
6160 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6161 while (str.length % 4 !== 0) {
6162 str = str + '='
6163 }
6164 return str
6165}
6166
6167function toHex (n) {
6168 if (n < 16) return '0' + n.toString(16)
6169 return n.toString(16)
6170}
6171
6172function utf8ToBytes (string, units) {
6173 units = units || Infinity
6174 var codePoint
6175 var length = string.length
6176 var leadSurrogate = null
6177 var bytes = []
6178
6179 for (var i = 0; i < length; ++i) {
6180 codePoint = string.charCodeAt(i)
6181
6182 // is surrogate component
6183 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6184 // last char was a lead
6185 if (!leadSurrogate) {
6186 // no lead yet
6187 if (codePoint > 0xDBFF) {
6188 // unexpected trail
6189 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6190 continue
6191 } else if (i + 1 === length) {
6192 // unpaired lead
6193 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6194 continue
6195 }
6196
6197 // valid lead
6198 leadSurrogate = codePoint
6199
6200 continue
6201 }
6202
6203 // 2 leads in a row
6204 if (codePoint < 0xDC00) {
6205 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6206 leadSurrogate = codePoint
6207 continue
6208 }
6209
6210 // valid surrogate pair
6211 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6212 } else if (leadSurrogate) {
6213 // valid bmp char, but last char was a lead
6214 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6215 }
6216
6217 leadSurrogate = null
6218
6219 // encode utf8
6220 if (codePoint < 0x80) {
6221 if ((units -= 1) < 0) break
6222 bytes.push(codePoint)
6223 } else if (codePoint < 0x800) {
6224 if ((units -= 2) < 0) break
6225 bytes.push(
6226 codePoint >> 0x6 | 0xC0,
6227 codePoint & 0x3F | 0x80
6228 )
6229 } else if (codePoint < 0x10000) {
6230 if ((units -= 3) < 0) break
6231 bytes.push(
6232 codePoint >> 0xC | 0xE0,
6233 codePoint >> 0x6 & 0x3F | 0x80,
6234 codePoint & 0x3F | 0x80
6235 )
6236 } else if (codePoint < 0x110000) {
6237 if ((units -= 4) < 0) break
6238 bytes.push(
6239 codePoint >> 0x12 | 0xF0,
6240 codePoint >> 0xC & 0x3F | 0x80,
6241 codePoint >> 0x6 & 0x3F | 0x80,
6242 codePoint & 0x3F | 0x80
6243 )
6244 } else {
6245 throw new Error('Invalid code point')
6246 }
6247 }
6248
6249 return bytes
6250}
6251
6252function asciiToBytes (str) {
6253 var byteArray = []
6254 for (var i = 0; i < str.length; ++i) {
6255 // Node's code seems to be doing this and not & 0x7F..
6256 byteArray.push(str.charCodeAt(i) & 0xFF)
6257 }
6258 return byteArray
6259}
6260
6261function utf16leToBytes (str, units) {
6262 var c, hi, lo
6263 var byteArray = []
6264 for (var i = 0; i < str.length; ++i) {
6265 if ((units -= 2) < 0) break
6266
6267 c = str.charCodeAt(i)
6268 hi = c >> 8
6269 lo = c % 256
6270 byteArray.push(lo)
6271 byteArray.push(hi)
6272 }
6273
6274 return byteArray
6275}
6276
6277function base64ToBytes (str) {
6278 return base64.toByteArray(base64clean(str))
6279}
6280
6281function blitBuffer (src, dst, offset, length) {
6282 for (var i = 0; i < length; ++i) {
6283 if ((i + offset >= dst.length) || (i >= src.length)) break
6284 dst[i + offset] = src[i]
6285 }
6286 return i
6287}
6288
6289// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6290function isArrayBufferView (obj) {
6291 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6292}
6293
6294function numberIsNaN (obj) {
6295 return obj !== obj // eslint-disable-line no-self-compare
6296}
6297
6298},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6299exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6300 var e, m
6301 var eLen = nBytes * 8 - mLen - 1
6302 var eMax = (1 << eLen) - 1
6303 var eBias = eMax >> 1
6304 var nBits = -7
6305 var i = isLE ? (nBytes - 1) : 0
6306 var d = isLE ? -1 : 1
6307 var s = buffer[offset + i]
6308
6309 i += d
6310
6311 e = s & ((1 << (-nBits)) - 1)
6312 s >>= (-nBits)
6313 nBits += eLen
6314 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6315
6316 m = e & ((1 << (-nBits)) - 1)
6317 e >>= (-nBits)
6318 nBits += mLen
6319 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6320
6321 if (e === 0) {
6322 e = 1 - eBias
6323 } else if (e === eMax) {
6324 return m ? NaN : ((s ? -1 : 1) * Infinity)
6325 } else {
6326 m = m + Math.pow(2, mLen)
6327 e = e - eBias
6328 }
6329 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6330}
6331
6332exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6333 var e, m, c
6334 var eLen = nBytes * 8 - mLen - 1
6335 var eMax = (1 << eLen) - 1
6336 var eBias = eMax >> 1
6337 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6338 var i = isLE ? 0 : (nBytes - 1)
6339 var d = isLE ? 1 : -1
6340 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6341
6342 value = Math.abs(value)
6343
6344 if (isNaN(value) || value === Infinity) {
6345 m = isNaN(value) ? 1 : 0
6346 e = eMax
6347 } else {
6348 e = Math.floor(Math.log(value) / Math.LN2)
6349 if (value * (c = Math.pow(2, -e)) < 1) {
6350 e--
6351 c *= 2
6352 }
6353 if (e + eBias >= 1) {
6354 value += rt / c
6355 } else {
6356 value += rt * Math.pow(2, 1 - eBias)
6357 }
6358 if (value * c >= 2) {
6359 e++
6360 c /= 2
6361 }
6362
6363 if (e + eBias >= eMax) {
6364 m = 0
6365 e = eMax
6366 } else if (e + eBias >= 1) {
6367 m = (value * c - 1) * Math.pow(2, mLen)
6368 e = e + eBias
6369 } else {
6370 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6371 e = 0
6372 }
6373 }
6374
6375 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6376
6377 e = (e << mLen) | m
6378 eLen += mLen
6379 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6380
6381 buffer[offset + i - d] |= s * 128
6382}
6383
6384},{}],4:[function(require,module,exports){
6385window.basex = require('base-x')
6386},{"base-x":5}],5:[function(require,module,exports){
6387// base-x encoding
6388// Forked from https://github.com/cryptocoinjs/bs58
6389// Originally written by Mike Hearn for BitcoinJ
6390// Copyright (c) 2011 Google Inc
6391// Ported to JavaScript by Stefan Thomas
6392// Merged Buffer refactorings from base58-native by Stephen Pair
6393// Copyright (c) 2013 BitPay Inc
6394
6395var Buffer = require('safe-buffer').Buffer
6396
6397module.exports = function base (ALPHABET) {
6398 var ALPHABET_MAP = {}
6399 var BASE = ALPHABET.length
6400 var LEADER = ALPHABET.charAt(0)
6401
6402 // pre-compute lookup table
6403 for (var z = 0; z < ALPHABET.length; z++) {
6404 var x = ALPHABET.charAt(z)
6405
6406 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6407 ALPHABET_MAP[x] = z
6408 }
6409
6410 function encode (source) {
6411 if (source.length === 0) return ''
6412
6413 var digits = [0]
6414 for (var i = 0; i < source.length; ++i) {
6415 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6416 carry += digits[j] << 8
6417 digits[j] = carry % BASE
6418 carry = (carry / BASE) | 0
6419 }
6420
6421 while (carry > 0) {
6422 digits.push(carry % BASE)
6423 carry = (carry / BASE) | 0
6424 }
6425 }
6426
6427 var string = ''
6428
6429 // deal with leading zeros
6430 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6431 // convert digits to a string
6432 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6433
6434 return string
6435 }
6436
6437 function decodeUnsafe (string) {
6438 if (string.length === 0) return Buffer.allocUnsafe(0)
6439
6440 var bytes = [0]
6441 for (var i = 0; i < string.length; i++) {
6442 var value = ALPHABET_MAP[string[i]]
6443 if (value === undefined) return
6444
6445 for (var j = 0, carry = value; j < bytes.length; ++j) {
6446 carry += bytes[j] * BASE
6447 bytes[j] = carry & 0xff
6448 carry >>= 8
6449 }
6450
6451 while (carry > 0) {
6452 bytes.push(carry & 0xff)
6453 carry >>= 8
6454 }
6455 }
6456
6457 // deal with leading zeros
6458 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6459 bytes.push(0)
6460 }
6461
6462 return Buffer.from(bytes.reverse())
6463 }
6464
6465 function decode (string) {
6466 var buffer = decodeUnsafe(string)
6467 if (buffer) return buffer
6468
6469 throw new Error('Non-base' + BASE + ' character')
6470 }
6471
6472 return {
6473 encode: encode,
6474 decodeUnsafe: decodeUnsafe,
6475 decode: decode
6476 }
6477}
6478
6479},{"safe-buffer":6}],6:[function(require,module,exports){
6480module.exports = require('buffer')
6481
6482},{"buffer":2}]},{},[4])(4)
6483});</script>
6484 <script>(function (root) {
6485 "use strict";
6486
6487/***** unorm.js *****/
6488
6489/*
6490 * UnicodeNormalizer 1.0.0
6491 * Copyright (c) 2008 Matsuza
6492 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6493 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6494 * $Rev: 13309 $
6495 */
6496
6497 var DEFAULT_FEATURE = [null, 0, {}];
6498 var CACHE_THRESHOLD = 10;
6499 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6500 var NCount = VCount * TCount; // 588
6501 var SCount = LCount * NCount; // 11172
6502
6503 var UChar = function(cp, feature){
6504 this.codepoint = cp;
6505 this.feature = feature;
6506 };
6507
6508 // Strategies
6509 var cache = {};
6510 var cacheCounter = [];
6511 for (var i = 0; i <= 0xFF; ++i){
6512 cacheCounter[i] = 0;
6513 }
6514
6515 function fromCache(next, cp, needFeature){
6516 var ret = cache[cp];
6517 if(!ret){
6518 ret = next(cp, needFeature);
6519 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6520 cache[cp] = ret;
6521 }
6522 }
6523 return ret;
6524 }
6525
6526 function fromData(next, cp, needFeature){
6527 var hash = cp & 0xFF00;
6528 var dunit = UChar.udata[hash] || {};
6529 var f = dunit[cp];
6530 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6531 }
6532 function fromCpOnly(next, cp, needFeature){
6533 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6534 }
6535 function fromRuleBasedJamo(next, cp, needFeature){
6536 var j;
6537 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6538 return next(cp, needFeature);
6539 }
6540 if(LBase <= cp && cp < LBase + LCount){
6541 var c = {};
6542 var base = (cp - LBase) * VCount;
6543 for (j = 0; j < VCount; ++j){
6544 c[VBase + j] = SBase + TCount * (j + base);
6545 }
6546 return new UChar(cp, [,,c]);
6547 }
6548
6549 var SIndex = cp - SBase;
6550 var TIndex = SIndex % TCount;
6551 var feature = [];
6552 if(TIndex !== 0){
6553 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6554 } else {
6555 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6556 feature[2] = {};
6557 for (j = 1; j < TCount; ++j){
6558 feature[2][TBase + j] = cp + j;
6559 }
6560 }
6561 return new UChar(cp, feature);
6562 }
6563 function fromCpFilter(next, cp, needFeature){
6564 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6565 }
6566
6567 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6568
6569 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6570 return function (cp, needFeature) {
6571 return strategy(next, cp, needFeature);
6572 };
6573 }, null);
6574
6575 UChar.isHighSurrogate = function(cp){
6576 return cp >= 0xD800 && cp <= 0xDBFF;
6577 };
6578 UChar.isLowSurrogate = function(cp){
6579 return cp >= 0xDC00 && cp <= 0xDFFF;
6580 };
6581
6582 UChar.prototype.prepFeature = function(){
6583 if(!this.feature){
6584 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6585 }
6586 };
6587
6588 UChar.prototype.toString = function(){
6589 if(this.codepoint < 0x10000){
6590 return String.fromCharCode(this.codepoint);
6591 } else {
6592 var x = this.codepoint - 0x10000;
6593 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6594 }
6595 };
6596
6597 UChar.prototype.getDecomp = function(){
6598 this.prepFeature();
6599 return this.feature[0] || null;
6600 };
6601
6602 UChar.prototype.isCompatibility = function(){
6603 this.prepFeature();
6604 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6605 };
6606 UChar.prototype.isExclude = function(){
6607 this.prepFeature();
6608 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6609 };
6610 UChar.prototype.getCanonicalClass = function(){
6611 this.prepFeature();
6612 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6613 };
6614 UChar.prototype.getComposite = function(following){
6615 this.prepFeature();
6616 if(!this.feature[2]){
6617 return null;
6618 }
6619 var cp = this.feature[2][following.codepoint];
6620 return cp ? UChar.fromCharCode(cp) : null;
6621 };
6622
6623 var UCharIterator = function(str){
6624 this.str = str;
6625 this.cursor = 0;
6626 };
6627 UCharIterator.prototype.next = function(){
6628 if(!!this.str && this.cursor < this.str.length){
6629 var cp = this.str.charCodeAt(this.cursor++);
6630 var d;
6631 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6632 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6633 ++this.cursor;
6634 }
6635 return UChar.fromCharCode(cp);
6636 } else {
6637 this.str = null;
6638 return null;
6639 }
6640 };
6641
6642 var RecursDecompIterator = function(it, cano){
6643 this.it = it;
6644 this.canonical = cano;
6645 this.resBuf = [];
6646 };
6647
6648 RecursDecompIterator.prototype.next = function(){
6649 function recursiveDecomp(cano, uchar){
6650 var decomp = uchar.getDecomp();
6651 if(!!decomp && !(cano && uchar.isCompatibility())){
6652 var ret = [];
6653 for(var i = 0; i < decomp.length; ++i){
6654 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6655 ret = ret.concat(a);
6656 }
6657 return ret;
6658 } else {
6659 return [uchar];
6660 }
6661 }
6662 if(this.resBuf.length === 0){
6663 var uchar = this.it.next();
6664 if(!uchar){
6665 return null;
6666 }
6667 this.resBuf = recursiveDecomp(this.canonical, uchar);
6668 }
6669 return this.resBuf.shift();
6670 };
6671
6672 var DecompIterator = function(it){
6673 this.it = it;
6674 this.resBuf = [];
6675 };
6676
6677 DecompIterator.prototype.next = function(){
6678 var cc;
6679 if(this.resBuf.length === 0){
6680 do{
6681 var uchar = this.it.next();
6682 if(!uchar){
6683 break;
6684 }
6685 cc = uchar.getCanonicalClass();
6686 var inspt = this.resBuf.length;
6687 if(cc !== 0){
6688 for(; inspt > 0; --inspt){
6689 var uchar2 = this.resBuf[inspt - 1];
6690 var cc2 = uchar2.getCanonicalClass();
6691 if(cc2 <= cc){
6692 break;
6693 }
6694 }
6695 }
6696 this.resBuf.splice(inspt, 0, uchar);
6697 } while(cc !== 0);
6698 }
6699 return this.resBuf.shift();
6700 };
6701
6702 var CompIterator = function(it){
6703 this.it = it;
6704 this.procBuf = [];
6705 this.resBuf = [];
6706 this.lastClass = null;
6707 };
6708
6709 CompIterator.prototype.next = function(){
6710 while(this.resBuf.length === 0){
6711 var uchar = this.it.next();
6712 if(!uchar){
6713 this.resBuf = this.procBuf;
6714 this.procBuf = [];
6715 break;
6716 }
6717 if(this.procBuf.length === 0){
6718 this.lastClass = uchar.getCanonicalClass();
6719 this.procBuf.push(uchar);
6720 } else {
6721 var starter = this.procBuf[0];
6722 var composite = starter.getComposite(uchar);
6723 var cc = uchar.getCanonicalClass();
6724 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6725 this.procBuf[0] = composite;
6726 } else {
6727 if(cc === 0){
6728 this.resBuf = this.procBuf;
6729 this.procBuf = [];
6730 }
6731 this.lastClass = cc;
6732 this.procBuf.push(uchar);
6733 }
6734 }
6735 }
6736 return this.resBuf.shift();
6737 };
6738
6739 var createIterator = function(mode, str){
6740 switch(mode){
6741 case "NFD":
6742 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6743 case "NFKD":
6744 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6745 case "NFC":
6746 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6747 case "NFKC":
6748 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6749 }
6750 throw mode + " is invalid";
6751 };
6752 var normalize = function(mode, str){
6753 var it = createIterator(mode, str);
6754 var ret = "";
6755 var uchar;
6756 while(!!(uchar = it.next())){
6757 ret += uchar.toString();
6758 }
6759 return ret;
6760 };
6761
6762 /* API functions */
6763 function nfd(str){
6764 return normalize("NFD", str);
6765 }
6766
6767 function nfkd(str){
6768 return normalize("NFKD", str);
6769 }
6770
6771 function nfc(str){
6772 return normalize("NFC", str);
6773 }
6774
6775 function nfkc(str){
6776 return normalize("NFKC", str);
6777 }
6778
6779/* Unicode data */
6780UChar.udata={
67810:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6782256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6783512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6784768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
67851024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
67861280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
67871536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
67881792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
67892048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
67902304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
67912560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
67922816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
67933072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
67943328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
67953584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
67963840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
67974096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
67984352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
67994608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
68004864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
68015120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
68025376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
68035632:{71231:[,9],71350:[,9],71351:[,7]},
68045888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
68056144:{6313:[,228]},
68066400:{6457:[,222],6458:[,230],6459:[,220]},
68076656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
68086912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
68097168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
68107424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
68117680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
68127936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
68138192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
68148448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
68158704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
68168960:{9001:[[12296]],9002:[[12297]]},
68179216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
681810752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
681911264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
682011520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
682111776:{11935:[[27597],256],12019:[[40863],256]},
682212032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
682312288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
682412544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
682512800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
682613056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
682727136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
682827392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
682942496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
683042752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
683143008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
683243264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
683343520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
683443776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
683548128:{113822:[,1]},
683653504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
683753760:{119362:[,230],119363:[,230],119364:[,230]},
683854272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
683954528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
684054784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
684155040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
684259392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
684360928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
684461696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
684561952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
684663488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
684763744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
684864000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
684964256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
685064512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
685164768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
685265024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
685365280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
6854
6855};
6856
6857 /***** Module to export */
6858 var unorm = {
6859 nfc: nfc,
6860 nfd: nfd,
6861 nfkc: nfkc,
6862 nfkd: nfkd
6863 };
6864
6865 /*globals module:true,define:true*/
6866
6867 // CommonJS
6868 if (typeof module === "object") {
6869 module.exports = unorm;
6870
6871 // AMD
6872 } else if (typeof define === "function" && define.amd) {
6873 define("unorm", function () {
6874 return unorm;
6875 });
6876
6877 // Global
6878 } else {
6879 root.unorm = unorm;
6880 }
6881
6882 /***** Export as shim for String::normalize method *****/
6883 /*
6884 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
6885
6886 21.1.3.12 String.prototype.normalize(form="NFC")
6887 When the normalize method is called with one argument form, the following steps are taken:
6888
6889 1. Let O be CheckObjectCoercible(this value).
6890 2. Let S be ToString(O).
6891 3. ReturnIfAbrupt(S).
6892 4. If form is not provided or undefined let form be "NFC".
6893 5. Let f be ToString(form).
6894 6. ReturnIfAbrupt(f).
6895 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
6896 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
6897 9. Return ns.
6898
6899 The length property of the normalize method is 0.
6900
6901 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
6902 */
6903 unorm.shimApplied = false;
6904
6905 if (!String.prototype.normalize) {
6906 String.prototype.normalize = function(form) {
6907 var str = "" + this;
6908 form = form === undefined ? "NFC" : form;
6909
6910 if (form === "NFC") {
6911 return unorm.nfc(str);
6912 } else if (form === "NFD") {
6913 return unorm.nfd(str);
6914 } else if (form === "NFKC") {
6915 return unorm.nfkc(str);
6916 } else if (form === "NFKD") {
6917 return unorm.nfkd(str);
6918 } else {
6919 throw new RangeError("Invalid normalization form: " + form);
6920 }
6921 };
6922
6923 unorm.shimApplied = true;
6924 }
6925}(this));
6926</script>
658 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 6927 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
659!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) 6928!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
660},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) 6929},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
@@ -13637,6 +19906,16 @@ bitcoin.networks.dash = {
13637 wif: 0xcc, 19906 wif: 0xcc,
13638}; 19907};
13639 19908
19909bitcoin.networks.game = {
19910 bip32: {
19911 public: 0x0488b21e,
19912 private: 0x0488ade4
19913 },
19914 pubKeyHash: 0x26,
19915 scriptHash: 0x05,
19916 wif: 0xa6,
19917};
19918
13640bitcoin.networks.namecoin = { 19919bitcoin.networks.namecoin = {
13641 bip32: { 19920 bip32: {
13642 public: 0x0488b21e, 19921 public: 0x0488b21e,
@@ -13658,6 +19937,18779 @@ bitcoin.networks.peercoin = {
13658}; 19937};
13659 19938
13660</script> 19939</script>
19940 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
19941(function (global){
19942'use strict';
19943
19944// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
19945// original notice:
19946
19947/*!
19948 * The buffer module from node.js, for the browser.
19949 *
19950 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
19951 * @license MIT
19952 */
19953function compare(a, b) {
19954 if (a === b) {
19955 return 0;
19956 }
19957
19958 var x = a.length;
19959 var y = b.length;
19960
19961 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
19962 if (a[i] !== b[i]) {
19963 x = a[i];
19964 y = b[i];
19965 break;
19966 }
19967 }
19968
19969 if (x < y) {
19970 return -1;
19971 }
19972 if (y < x) {
19973 return 1;
19974 }
19975 return 0;
19976}
19977function isBuffer(b) {
19978 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
19979 return global.Buffer.isBuffer(b);
19980 }
19981 return !!(b != null && b._isBuffer);
19982}
19983
19984// based on node assert, original notice:
19985
19986// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
19987//
19988// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
19989//
19990// Originally from narwhal.js (http://narwhaljs.org)
19991// Copyright (c) 2009 Thomas Robinson <280north.com>
19992//
19993// Permission is hereby granted, free of charge, to any person obtaining a copy
19994// of this software and associated documentation files (the 'Software'), to
19995// deal in the Software without restriction, including without limitation the
19996// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
19997// sell copies of the Software, and to permit persons to whom the Software is
19998// furnished to do so, subject to the following conditions:
19999//
20000// The above copyright notice and this permission notice shall be included in
20001// all copies or substantial portions of the Software.
20002//
20003// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20004// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20005// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20006// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20007// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20008// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20009
20010var util = require('util/');
20011var hasOwn = Object.prototype.hasOwnProperty;
20012var pSlice = Array.prototype.slice;
20013var functionsHaveNames = (function () {
20014 return function foo() {}.name === 'foo';
20015}());
20016function pToString (obj) {
20017 return Object.prototype.toString.call(obj);
20018}
20019function isView(arrbuf) {
20020 if (isBuffer(arrbuf)) {
20021 return false;
20022 }
20023 if (typeof global.ArrayBuffer !== 'function') {
20024 return false;
20025 }
20026 if (typeof ArrayBuffer.isView === 'function') {
20027 return ArrayBuffer.isView(arrbuf);
20028 }
20029 if (!arrbuf) {
20030 return false;
20031 }
20032 if (arrbuf instanceof DataView) {
20033 return true;
20034 }
20035 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
20036 return true;
20037 }
20038 return false;
20039}
20040// 1. The assert module provides functions that throw
20041// AssertionError's when particular conditions are not met. The
20042// assert module must conform to the following interface.
20043
20044var assert = module.exports = ok;
20045
20046// 2. The AssertionError is defined in assert.
20047// new assert.AssertionError({ message: message,
20048// actual: actual,
20049// expected: expected })
20050
20051var regex = /\s*function\s+([^\(\s]*)\s*/;
20052// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
20053function getName(func) {
20054 if (!util.isFunction(func)) {
20055 return;
20056 }
20057 if (functionsHaveNames) {
20058 return func.name;
20059 }
20060 var str = func.toString();
20061 var match = str.match(regex);
20062 return match && match[1];
20063}
20064assert.AssertionError = function AssertionError(options) {
20065 this.name = 'AssertionError';
20066 this.actual = options.actual;
20067 this.expected = options.expected;
20068 this.operator = options.operator;
20069 if (options.message) {
20070 this.message = options.message;
20071 this.generatedMessage = false;
20072 } else {
20073 this.message = getMessage(this);
20074 this.generatedMessage = true;
20075 }
20076 var stackStartFunction = options.stackStartFunction || fail;
20077 if (Error.captureStackTrace) {
20078 Error.captureStackTrace(this, stackStartFunction);
20079 } else {
20080 // non v8 browsers so we can have a stacktrace
20081 var err = new Error();
20082 if (err.stack) {
20083 var out = err.stack;
20084
20085 // try to strip useless frames
20086 var fn_name = getName(stackStartFunction);
20087 var idx = out.indexOf('\n' + fn_name);
20088 if (idx >= 0) {
20089 // once we have located the function frame
20090 // we need to strip out everything before it (and its line)
20091 var next_line = out.indexOf('\n', idx + 1);
20092 out = out.substring(next_line + 1);
20093 }
20094
20095 this.stack = out;
20096 }
20097 }
20098};
20099
20100// assert.AssertionError instanceof Error
20101util.inherits(assert.AssertionError, Error);
20102
20103function truncate(s, n) {
20104 if (typeof s === 'string') {
20105 return s.length < n ? s : s.slice(0, n);
20106 } else {
20107 return s;
20108 }
20109}
20110function inspect(something) {
20111 if (functionsHaveNames || !util.isFunction(something)) {
20112 return util.inspect(something);
20113 }
20114 var rawname = getName(something);
20115 var name = rawname ? ': ' + rawname : '';
20116 return '[Function' + name + ']';
20117}
20118function getMessage(self) {
20119 return truncate(inspect(self.actual), 128) + ' ' +
20120 self.operator + ' ' +
20121 truncate(inspect(self.expected), 128);
20122}
20123
20124// At present only the three keys mentioned above are used and
20125// understood by the spec. Implementations or sub modules can pass
20126// other keys to the AssertionError's constructor - they will be
20127// ignored.
20128
20129// 3. All of the following functions must throw an AssertionError
20130// when a corresponding condition is not met, with a message that
20131// may be undefined if not provided. All assertion methods provide
20132// both the actual and expected values to the assertion error for
20133// display purposes.
20134
20135function fail(actual, expected, message, operator, stackStartFunction) {
20136 throw new assert.AssertionError({
20137 message: message,
20138 actual: actual,
20139 expected: expected,
20140 operator: operator,
20141 stackStartFunction: stackStartFunction
20142 });
20143}
20144
20145// EXTENSION! allows for well behaved errors defined elsewhere.
20146assert.fail = fail;
20147
20148// 4. Pure assertion tests whether a value is truthy, as determined
20149// by !!guard.
20150// assert.ok(guard, message_opt);
20151// This statement is equivalent to assert.equal(true, !!guard,
20152// message_opt);. To test strictly for the value true, use
20153// assert.strictEqual(true, guard, message_opt);.
20154
20155function ok(value, message) {
20156 if (!value) fail(value, true, message, '==', assert.ok);
20157}
20158assert.ok = ok;
20159
20160// 5. The equality assertion tests shallow, coercive equality with
20161// ==.
20162// assert.equal(actual, expected, message_opt);
20163
20164assert.equal = function equal(actual, expected, message) {
20165 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
20166};
20167
20168// 6. The non-equality assertion tests for whether two objects are not equal
20169// with != assert.notEqual(actual, expected, message_opt);
20170
20171assert.notEqual = function notEqual(actual, expected, message) {
20172 if (actual == expected) {
20173 fail(actual, expected, message, '!=', assert.notEqual);
20174 }
20175};
20176
20177// 7. The equivalence assertion tests a deep equality relation.
20178// assert.deepEqual(actual, expected, message_opt);
20179
20180assert.deepEqual = function deepEqual(actual, expected, message) {
20181 if (!_deepEqual(actual, expected, false)) {
20182 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
20183 }
20184};
20185
20186assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
20187 if (!_deepEqual(actual, expected, true)) {
20188 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
20189 }
20190};
20191
20192function _deepEqual(actual, expected, strict, memos) {
20193 // 7.1. All identical values are equivalent, as determined by ===.
20194 if (actual === expected) {
20195 return true;
20196 } else if (isBuffer(actual) && isBuffer(expected)) {
20197 return compare(actual, expected) === 0;
20198
20199 // 7.2. If the expected value is a Date object, the actual value is
20200 // equivalent if it is also a Date object that refers to the same time.
20201 } else if (util.isDate(actual) && util.isDate(expected)) {
20202 return actual.getTime() === expected.getTime();
20203
20204 // 7.3 If the expected value is a RegExp object, the actual value is
20205 // equivalent if it is also a RegExp object with the same source and
20206 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
20207 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
20208 return actual.source === expected.source &&
20209 actual.global === expected.global &&
20210 actual.multiline === expected.multiline &&
20211 actual.lastIndex === expected.lastIndex &&
20212 actual.ignoreCase === expected.ignoreCase;
20213
20214 // 7.4. Other pairs that do not both pass typeof value == 'object',
20215 // equivalence is determined by ==.
20216 } else if ((actual === null || typeof actual !== 'object') &&
20217 (expected === null || typeof expected !== 'object')) {
20218 return strict ? actual === expected : actual == expected;
20219
20220 // If both values are instances of typed arrays, wrap their underlying
20221 // ArrayBuffers in a Buffer each to increase performance
20222 // This optimization requires the arrays to have the same type as checked by
20223 // Object.prototype.toString (aka pToString). Never perform binary
20224 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
20225 // bit patterns are not identical.
20226 } else if (isView(actual) && isView(expected) &&
20227 pToString(actual) === pToString(expected) &&
20228 !(actual instanceof Float32Array ||
20229 actual instanceof Float64Array)) {
20230 return compare(new Uint8Array(actual.buffer),
20231 new Uint8Array(expected.buffer)) === 0;
20232
20233 // 7.5 For all other Object pairs, including Array objects, equivalence is
20234 // determined by having the same number of owned properties (as verified
20235 // with Object.prototype.hasOwnProperty.call), the same set of keys
20236 // (although not necessarily the same order), equivalent values for every
20237 // corresponding key, and an identical 'prototype' property. Note: this
20238 // accounts for both named and indexed properties on Arrays.
20239 } else if (isBuffer(actual) !== isBuffer(expected)) {
20240 return false;
20241 } else {
20242 memos = memos || {actual: [], expected: []};
20243
20244 var actualIndex = memos.actual.indexOf(actual);
20245 if (actualIndex !== -1) {
20246 if (actualIndex === memos.expected.indexOf(expected)) {
20247 return true;
20248 }
20249 }
20250
20251 memos.actual.push(actual);
20252 memos.expected.push(expected);
20253
20254 return objEquiv(actual, expected, strict, memos);
20255 }
20256}
20257
20258function isArguments(object) {
20259 return Object.prototype.toString.call(object) == '[object Arguments]';
20260}
20261
20262function objEquiv(a, b, strict, actualVisitedObjects) {
20263 if (a === null || a === undefined || b === null || b === undefined)
20264 return false;
20265 // if one is a primitive, the other must be same
20266 if (util.isPrimitive(a) || util.isPrimitive(b))
20267 return a === b;
20268 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
20269 return false;
20270 var aIsArgs = isArguments(a);
20271 var bIsArgs = isArguments(b);
20272 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
20273 return false;
20274 if (aIsArgs) {
20275 a = pSlice.call(a);
20276 b = pSlice.call(b);
20277 return _deepEqual(a, b, strict);
20278 }
20279 var ka = objectKeys(a);
20280 var kb = objectKeys(b);
20281 var key, i;
20282 // having the same number of owned properties (keys incorporates
20283 // hasOwnProperty)
20284 if (ka.length !== kb.length)
20285 return false;
20286 //the same set of keys (although not necessarily the same order),
20287 ka.sort();
20288 kb.sort();
20289 //~~~cheap key test
20290 for (i = ka.length - 1; i >= 0; i--) {
20291 if (ka[i] !== kb[i])
20292 return false;
20293 }
20294 //equivalent values for every corresponding key, and
20295 //~~~possibly expensive deep test
20296 for (i = ka.length - 1; i >= 0; i--) {
20297 key = ka[i];
20298 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
20299 return false;
20300 }
20301 return true;
20302}
20303
20304// 8. The non-equivalence assertion tests for any deep inequality.
20305// assert.notDeepEqual(actual, expected, message_opt);
20306
20307assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
20308 if (_deepEqual(actual, expected, false)) {
20309 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
20310 }
20311};
20312
20313assert.notDeepStrictEqual = notDeepStrictEqual;
20314function notDeepStrictEqual(actual, expected, message) {
20315 if (_deepEqual(actual, expected, true)) {
20316 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
20317 }
20318}
20319
20320
20321// 9. The strict equality assertion tests strict equality, as determined by ===.
20322// assert.strictEqual(actual, expected, message_opt);
20323
20324assert.strictEqual = function strictEqual(actual, expected, message) {
20325 if (actual !== expected) {
20326 fail(actual, expected, message, '===', assert.strictEqual);
20327 }
20328};
20329
20330// 10. The strict non-equality assertion tests for strict inequality, as
20331// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
20332
20333assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
20334 if (actual === expected) {
20335 fail(actual, expected, message, '!==', assert.notStrictEqual);
20336 }
20337};
20338
20339function expectedException(actual, expected) {
20340 if (!actual || !expected) {
20341 return false;
20342 }
20343
20344 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
20345 return expected.test(actual);
20346 }
20347
20348 try {
20349 if (actual instanceof expected) {
20350 return true;
20351 }
20352 } catch (e) {
20353 // Ignore. The instanceof check doesn't work for arrow functions.
20354 }
20355
20356 if (Error.isPrototypeOf(expected)) {
20357 return false;
20358 }
20359
20360 return expected.call({}, actual) === true;
20361}
20362
20363function _tryBlock(block) {
20364 var error;
20365 try {
20366 block();
20367 } catch (e) {
20368 error = e;
20369 }
20370 return error;
20371}
20372
20373function _throws(shouldThrow, block, expected, message) {
20374 var actual;
20375
20376 if (typeof block !== 'function') {
20377 throw new TypeError('"block" argument must be a function');
20378 }
20379
20380 if (typeof expected === 'string') {
20381 message = expected;
20382 expected = null;
20383 }
20384
20385 actual = _tryBlock(block);
20386
20387 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
20388 (message ? ' ' + message : '.');
20389
20390 if (shouldThrow && !actual) {
20391 fail(actual, expected, 'Missing expected exception' + message);
20392 }
20393
20394 var userProvidedMessage = typeof message === 'string';
20395 var isUnwantedException = !shouldThrow && util.isError(actual);
20396 var isUnexpectedException = !shouldThrow && actual && !expected;
20397
20398 if ((isUnwantedException &&
20399 userProvidedMessage &&
20400 expectedException(actual, expected)) ||
20401 isUnexpectedException) {
20402 fail(actual, expected, 'Got unwanted exception' + message);
20403 }
20404
20405 if ((shouldThrow && actual && expected &&
20406 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
20407 throw actual;
20408 }
20409}
20410
20411// 11. Expected to throw an error:
20412// assert.throws(block, Error_opt, message_opt);
20413
20414assert.throws = function(block, /*optional*/error, /*optional*/message) {
20415 _throws(true, block, error, message);
20416};
20417
20418// EXTENSION! This is annoying to write outside this module.
20419assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
20420 _throws(false, block, error, message);
20421};
20422
20423assert.ifError = function(err) { if (err) throw err; };
20424
20425var objectKeys = Object.keys || function (obj) {
20426 var keys = [];
20427 for (var key in obj) {
20428 if (hasOwn.call(obj, key)) keys.push(key);
20429 }
20430 return keys;
20431};
20432
20433}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20434},{"util/":30}],2:[function(require,module,exports){
20435'use strict'
20436
20437exports.byteLength = byteLength
20438exports.toByteArray = toByteArray
20439exports.fromByteArray = fromByteArray
20440
20441var lookup = []
20442var revLookup = []
20443var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
20444
20445var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
20446for (var i = 0, len = code.length; i < len; ++i) {
20447 lookup[i] = code[i]
20448 revLookup[code.charCodeAt(i)] = i
20449}
20450
20451revLookup['-'.charCodeAt(0)] = 62
20452revLookup['_'.charCodeAt(0)] = 63
20453
20454function placeHoldersCount (b64) {
20455 var len = b64.length
20456 if (len % 4 > 0) {
20457 throw new Error('Invalid string. Length must be a multiple of 4')
20458 }
20459
20460 // the number of equal signs (place holders)
20461 // if there are two placeholders, than the two characters before it
20462 // represent one byte
20463 // if there is only one, then the three characters before it represent 2 bytes
20464 // this is just a cheap hack to not do indexOf twice
20465 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
20466}
20467
20468function byteLength (b64) {
20469 // base64 is 4/3 + up to two characters of the original data
20470 return b64.length * 3 / 4 - placeHoldersCount(b64)
20471}
20472
20473function toByteArray (b64) {
20474 var i, j, l, tmp, placeHolders, arr
20475 var len = b64.length
20476 placeHolders = placeHoldersCount(b64)
20477
20478 arr = new Arr(len * 3 / 4 - placeHolders)
20479
20480 // if there are placeholders, only get up to the last complete 4 chars
20481 l = placeHolders > 0 ? len - 4 : len
20482
20483 var L = 0
20484
20485 for (i = 0, j = 0; i < l; i += 4, j += 3) {
20486 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
20487 arr[L++] = (tmp >> 16) & 0xFF
20488 arr[L++] = (tmp >> 8) & 0xFF
20489 arr[L++] = tmp & 0xFF
20490 }
20491
20492 if (placeHolders === 2) {
20493 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
20494 arr[L++] = tmp & 0xFF
20495 } else if (placeHolders === 1) {
20496 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
20497 arr[L++] = (tmp >> 8) & 0xFF
20498 arr[L++] = tmp & 0xFF
20499 }
20500
20501 return arr
20502}
20503
20504function tripletToBase64 (num) {
20505 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
20506}
20507
20508function encodeChunk (uint8, start, end) {
20509 var tmp
20510 var output = []
20511 for (var i = start; i < end; i += 3) {
20512 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
20513 output.push(tripletToBase64(tmp))
20514 }
20515 return output.join('')
20516}
20517
20518function fromByteArray (uint8) {
20519 var tmp
20520 var len = uint8.length
20521 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
20522 var output = ''
20523 var parts = []
20524 var maxChunkLength = 16383 // must be multiple of 3
20525
20526 // go through the array every three bytes, we'll deal with trailing stuff later
20527 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
20528 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
20529 }
20530
20531 // pad the end with zeros, but make sure to not forget the extra bytes
20532 if (extraBytes === 1) {
20533 tmp = uint8[len - 1]
20534 output += lookup[tmp >> 2]
20535 output += lookup[(tmp << 4) & 0x3F]
20536 output += '=='
20537 } else if (extraBytes === 2) {
20538 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
20539 output += lookup[tmp >> 10]
20540 output += lookup[(tmp >> 4) & 0x3F]
20541 output += lookup[(tmp << 2) & 0x3F]
20542 output += '='
20543 }
20544
20545 parts.push(output)
20546
20547 return parts.join('')
20548}
20549
20550},{}],3:[function(require,module,exports){
20551
20552},{}],4:[function(require,module,exports){
20553(function (global){
20554'use strict';
20555
20556var buffer = require('buffer');
20557var Buffer = buffer.Buffer;
20558var SlowBuffer = buffer.SlowBuffer;
20559var MAX_LEN = buffer.kMaxLength || 2147483647;
20560exports.alloc = function alloc(size, fill, encoding) {
20561 if (typeof Buffer.alloc === 'function') {
20562 return Buffer.alloc(size, fill, encoding);
20563 }
20564 if (typeof encoding === 'number') {
20565 throw new TypeError('encoding must not be number');
20566 }
20567 if (typeof size !== 'number') {
20568 throw new TypeError('size must be a number');
20569 }
20570 if (size > MAX_LEN) {
20571 throw new RangeError('size is too large');
20572 }
20573 var enc = encoding;
20574 var _fill = fill;
20575 if (_fill === undefined) {
20576 enc = undefined;
20577 _fill = 0;
20578 }
20579 var buf = new Buffer(size);
20580 if (typeof _fill === 'string') {
20581 var fillBuf = new Buffer(_fill, enc);
20582 var flen = fillBuf.length;
20583 var i = -1;
20584 while (++i < size) {
20585 buf[i] = fillBuf[i % flen];
20586 }
20587 } else {
20588 buf.fill(_fill);
20589 }
20590 return buf;
20591}
20592exports.allocUnsafe = function allocUnsafe(size) {
20593 if (typeof Buffer.allocUnsafe === 'function') {
20594 return Buffer.allocUnsafe(size);
20595 }
20596 if (typeof size !== 'number') {
20597 throw new TypeError('size must be a number');
20598 }
20599 if (size > MAX_LEN) {
20600 throw new RangeError('size is too large');
20601 }
20602 return new Buffer(size);
20603}
20604exports.from = function from(value, encodingOrOffset, length) {
20605 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
20606 return Buffer.from(value, encodingOrOffset, length);
20607 }
20608 if (typeof value === 'number') {
20609 throw new TypeError('"value" argument must not be a number');
20610 }
20611 if (typeof value === 'string') {
20612 return new Buffer(value, encodingOrOffset);
20613 }
20614 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
20615 var offset = encodingOrOffset;
20616 if (arguments.length === 1) {
20617 return new Buffer(value);
20618 }
20619 if (typeof offset === 'undefined') {
20620 offset = 0;
20621 }
20622 var len = length;
20623 if (typeof len === 'undefined') {
20624 len = value.byteLength - offset;
20625 }
20626 if (offset >= value.byteLength) {
20627 throw new RangeError('\'offset\' is out of bounds');
20628 }
20629 if (len > value.byteLength - offset) {
20630 throw new RangeError('\'length\' is out of bounds');
20631 }
20632 return new Buffer(value.slice(offset, offset + len));
20633 }
20634 if (Buffer.isBuffer(value)) {
20635 var out = new Buffer(value.length);
20636 value.copy(out, 0, 0, value.length);
20637 return out;
20638 }
20639 if (value) {
20640 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
20641 return new Buffer(value);
20642 }
20643 if (value.type === 'Buffer' && Array.isArray(value.data)) {
20644 return new Buffer(value.data);
20645 }
20646 }
20647
20648 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
20649}
20650exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
20651 if (typeof Buffer.allocUnsafeSlow === 'function') {
20652 return Buffer.allocUnsafeSlow(size);
20653 }
20654 if (typeof size !== 'number') {
20655 throw new TypeError('size must be a number');
20656 }
20657 if (size >= MAX_LEN) {
20658 throw new RangeError('size is too large');
20659 }
20660 return new SlowBuffer(size);
20661}
20662
20663}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20664},{"buffer":5}],5:[function(require,module,exports){
20665/*!
20666 * The buffer module from node.js, for the browser.
20667 *
20668 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20669 * @license MIT
20670 */
20671/* eslint-disable no-proto */
20672
20673'use strict'
20674
20675var base64 = require('base64-js')
20676var ieee754 = require('ieee754')
20677
20678exports.Buffer = Buffer
20679exports.SlowBuffer = SlowBuffer
20680exports.INSPECT_MAX_BYTES = 50
20681
20682var K_MAX_LENGTH = 0x7fffffff
20683exports.kMaxLength = K_MAX_LENGTH
20684
20685/**
20686 * If `Buffer.TYPED_ARRAY_SUPPORT`:
20687 * === true Use Uint8Array implementation (fastest)
20688 * === false Print warning and recommend using `buffer` v4.x which has an Object
20689 * implementation (most compatible, even IE6)
20690 *
20691 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
20692 * Opera 11.6+, iOS 4.2+.
20693 *
20694 * We report that the browser does not support typed arrays if the are not subclassable
20695 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
20696 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
20697 * for __proto__ and has a buggy typed array implementation.
20698 */
20699Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
20700
20701if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
20702 typeof console.error === 'function') {
20703 console.error(
20704 'This browser lacks typed array (Uint8Array) support which is required by ' +
20705 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
20706 )
20707}
20708
20709function typedArraySupport () {
20710 // Can typed array instances can be augmented?
20711 try {
20712 var arr = new Uint8Array(1)
20713 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
20714 return arr.foo() === 42
20715 } catch (e) {
20716 return false
20717 }
20718}
20719
20720function createBuffer (length) {
20721 if (length > K_MAX_LENGTH) {
20722 throw new RangeError('Invalid typed array length')
20723 }
20724 // Return an augmented `Uint8Array` instance
20725 var buf = new Uint8Array(length)
20726 buf.__proto__ = Buffer.prototype
20727 return buf
20728}
20729
20730/**
20731 * The Buffer constructor returns instances of `Uint8Array` that have their
20732 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
20733 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
20734 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
20735 * returns a single octet.
20736 *
20737 * The `Uint8Array` prototype remains unmodified.
20738 */
20739
20740function Buffer (arg, encodingOrOffset, length) {
20741 // Common case.
20742 if (typeof arg === 'number') {
20743 if (typeof encodingOrOffset === 'string') {
20744 throw new Error(
20745 'If encoding is specified then the first argument must be a string'
20746 )
20747 }
20748 return allocUnsafe(arg)
20749 }
20750 return from(arg, encodingOrOffset, length)
20751}
20752
20753// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
20754if (typeof Symbol !== 'undefined' && Symbol.species &&
20755 Buffer[Symbol.species] === Buffer) {
20756 Object.defineProperty(Buffer, Symbol.species, {
20757 value: null,
20758 configurable: true,
20759 enumerable: false,
20760 writable: false
20761 })
20762}
20763
20764Buffer.poolSize = 8192 // not used by this implementation
20765
20766function from (value, encodingOrOffset, length) {
20767 if (typeof value === 'number') {
20768 throw new TypeError('"value" argument must not be a number')
20769 }
20770
20771 if (value instanceof ArrayBuffer) {
20772 return fromArrayBuffer(value, encodingOrOffset, length)
20773 }
20774
20775 if (typeof value === 'string') {
20776 return fromString(value, encodingOrOffset)
20777 }
20778
20779 return fromObject(value)
20780}
20781
20782/**
20783 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
20784 * if value is a number.
20785 * Buffer.from(str[, encoding])
20786 * Buffer.from(array)
20787 * Buffer.from(buffer)
20788 * Buffer.from(arrayBuffer[, byteOffset[, length]])
20789 **/
20790Buffer.from = function (value, encodingOrOffset, length) {
20791 return from(value, encodingOrOffset, length)
20792}
20793
20794// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
20795// https://github.com/feross/buffer/pull/148
20796Buffer.prototype.__proto__ = Uint8Array.prototype
20797Buffer.__proto__ = Uint8Array
20798
20799function assertSize (size) {
20800 if (typeof size !== 'number') {
20801 throw new TypeError('"size" argument must be a number')
20802 } else if (size < 0) {
20803 throw new RangeError('"size" argument must not be negative')
20804 }
20805}
20806
20807function alloc (size, fill, encoding) {
20808 assertSize(size)
20809 if (size <= 0) {
20810 return createBuffer(size)
20811 }
20812 if (fill !== undefined) {
20813 // Only pay attention to encoding if it's a string. This
20814 // prevents accidentally sending in a number that would
20815 // be interpretted as a start offset.
20816 return typeof encoding === 'string'
20817 ? createBuffer(size).fill(fill, encoding)
20818 : createBuffer(size).fill(fill)
20819 }
20820 return createBuffer(size)
20821}
20822
20823/**
20824 * Creates a new filled Buffer instance.
20825 * alloc(size[, fill[, encoding]])
20826 **/
20827Buffer.alloc = function (size, fill, encoding) {
20828 return alloc(size, fill, encoding)
20829}
20830
20831function allocUnsafe (size) {
20832 assertSize(size)
20833 return createBuffer(size < 0 ? 0 : checked(size) | 0)
20834}
20835
20836/**
20837 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
20838 * */
20839Buffer.allocUnsafe = function (size) {
20840 return allocUnsafe(size)
20841}
20842/**
20843 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
20844 */
20845Buffer.allocUnsafeSlow = function (size) {
20846 return allocUnsafe(size)
20847}
20848
20849function fromString (string, encoding) {
20850 if (typeof encoding !== 'string' || encoding === '') {
20851 encoding = 'utf8'
20852 }
20853
20854 if (!Buffer.isEncoding(encoding)) {
20855 throw new TypeError('"encoding" must be a valid string encoding')
20856 }
20857
20858 var length = byteLength(string, encoding) | 0
20859 var buf = createBuffer(length)
20860
20861 var actual = buf.write(string, encoding)
20862
20863 if (actual !== length) {
20864 // Writing a hex string, for example, that contains invalid characters will
20865 // cause everything after the first invalid character to be ignored. (e.g.
20866 // 'abxxcd' will be treated as 'ab')
20867 buf = buf.slice(0, actual)
20868 }
20869
20870 return buf
20871}
20872
20873function fromArrayLike (array) {
20874 var length = array.length < 0 ? 0 : checked(array.length) | 0
20875 var buf = createBuffer(length)
20876 for (var i = 0; i < length; i += 1) {
20877 buf[i] = array[i] & 255
20878 }
20879 return buf
20880}
20881
20882function fromArrayBuffer (array, byteOffset, length) {
20883 if (byteOffset < 0 || array.byteLength < byteOffset) {
20884 throw new RangeError('\'offset\' is out of bounds')
20885 }
20886
20887 if (array.byteLength < byteOffset + (length || 0)) {
20888 throw new RangeError('\'length\' is out of bounds')
20889 }
20890
20891 var buf
20892 if (byteOffset === undefined && length === undefined) {
20893 buf = new Uint8Array(array)
20894 } else if (length === undefined) {
20895 buf = new Uint8Array(array, byteOffset)
20896 } else {
20897 buf = new Uint8Array(array, byteOffset, length)
20898 }
20899
20900 // Return an augmented `Uint8Array` instance
20901 buf.__proto__ = Buffer.prototype
20902 return buf
20903}
20904
20905function fromObject (obj) {
20906 if (Buffer.isBuffer(obj)) {
20907 var len = checked(obj.length) | 0
20908 var buf = createBuffer(len)
20909
20910 if (buf.length === 0) {
20911 return buf
20912 }
20913
20914 obj.copy(buf, 0, 0, len)
20915 return buf
20916 }
20917
20918 if (obj) {
20919 if (ArrayBuffer.isView(obj) || 'length' in obj) {
20920 if (typeof obj.length !== 'number' || isnan(obj.length)) {
20921 return createBuffer(0)
20922 }
20923 return fromArrayLike(obj)
20924 }
20925
20926 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
20927 return fromArrayLike(obj.data)
20928 }
20929 }
20930
20931 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
20932}
20933
20934function checked (length) {
20935 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
20936 // length is NaN (which is otherwise coerced to zero.)
20937 if (length >= K_MAX_LENGTH) {
20938 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
20939 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
20940 }
20941 return length | 0
20942}
20943
20944function SlowBuffer (length) {
20945 if (+length != length) { // eslint-disable-line eqeqeq
20946 length = 0
20947 }
20948 return Buffer.alloc(+length)
20949}
20950
20951Buffer.isBuffer = function isBuffer (b) {
20952 return b != null && b._isBuffer === true
20953}
20954
20955Buffer.compare = function compare (a, b) {
20956 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
20957 throw new TypeError('Arguments must be Buffers')
20958 }
20959
20960 if (a === b) return 0
20961
20962 var x = a.length
20963 var y = b.length
20964
20965 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
20966 if (a[i] !== b[i]) {
20967 x = a[i]
20968 y = b[i]
20969 break
20970 }
20971 }
20972
20973 if (x < y) return -1
20974 if (y < x) return 1
20975 return 0
20976}
20977
20978Buffer.isEncoding = function isEncoding (encoding) {
20979 switch (String(encoding).toLowerCase()) {
20980 case 'hex':
20981 case 'utf8':
20982 case 'utf-8':
20983 case 'ascii':
20984 case 'latin1':
20985 case 'binary':
20986 case 'base64':
20987 case 'ucs2':
20988 case 'ucs-2':
20989 case 'utf16le':
20990 case 'utf-16le':
20991 return true
20992 default:
20993 return false
20994 }
20995}
20996
20997Buffer.concat = function concat (list, length) {
20998 if (!Array.isArray(list)) {
20999 throw new TypeError('"list" argument must be an Array of Buffers')
21000 }
21001
21002 if (list.length === 0) {
21003 return Buffer.alloc(0)
21004 }
21005
21006 var i
21007 if (length === undefined) {
21008 length = 0
21009 for (i = 0; i < list.length; ++i) {
21010 length += list[i].length
21011 }
21012 }
21013
21014 var buffer = Buffer.allocUnsafe(length)
21015 var pos = 0
21016 for (i = 0; i < list.length; ++i) {
21017 var buf = list[i]
21018 if (!Buffer.isBuffer(buf)) {
21019 throw new TypeError('"list" argument must be an Array of Buffers')
21020 }
21021 buf.copy(buffer, pos)
21022 pos += buf.length
21023 }
21024 return buffer
21025}
21026
21027function byteLength (string, encoding) {
21028 if (Buffer.isBuffer(string)) {
21029 return string.length
21030 }
21031 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
21032 return string.byteLength
21033 }
21034 if (typeof string !== 'string') {
21035 string = '' + string
21036 }
21037
21038 var len = string.length
21039 if (len === 0) return 0
21040
21041 // Use a for loop to avoid recursion
21042 var loweredCase = false
21043 for (;;) {
21044 switch (encoding) {
21045 case 'ascii':
21046 case 'latin1':
21047 case 'binary':
21048 return len
21049 case 'utf8':
21050 case 'utf-8':
21051 case undefined:
21052 return utf8ToBytes(string).length
21053 case 'ucs2':
21054 case 'ucs-2':
21055 case 'utf16le':
21056 case 'utf-16le':
21057 return len * 2
21058 case 'hex':
21059 return len >>> 1
21060 case 'base64':
21061 return base64ToBytes(string).length
21062 default:
21063 if (loweredCase) return utf8ToBytes(string).length // assume utf8
21064 encoding = ('' + encoding).toLowerCase()
21065 loweredCase = true
21066 }
21067 }
21068}
21069Buffer.byteLength = byteLength
21070
21071function slowToString (encoding, start, end) {
21072 var loweredCase = false
21073
21074 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
21075 // property of a typed array.
21076
21077 // This behaves neither like String nor Uint8Array in that we set start/end
21078 // to their upper/lower bounds if the value passed is out of range.
21079 // undefined is handled specially as per ECMA-262 6th Edition,
21080 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
21081 if (start === undefined || start < 0) {
21082 start = 0
21083 }
21084 // Return early if start > this.length. Done here to prevent potential uint32
21085 // coercion fail below.
21086 if (start > this.length) {
21087 return ''
21088 }
21089
21090 if (end === undefined || end > this.length) {
21091 end = this.length
21092 }
21093
21094 if (end <= 0) {
21095 return ''
21096 }
21097
21098 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
21099 end >>>= 0
21100 start >>>= 0
21101
21102 if (end <= start) {
21103 return ''
21104 }
21105
21106 if (!encoding) encoding = 'utf8'
21107
21108 while (true) {
21109 switch (encoding) {
21110 case 'hex':
21111 return hexSlice(this, start, end)
21112
21113 case 'utf8':
21114 case 'utf-8':
21115 return utf8Slice(this, start, end)
21116
21117 case 'ascii':
21118 return asciiSlice(this, start, end)
21119
21120 case 'latin1':
21121 case 'binary':
21122 return latin1Slice(this, start, end)
21123
21124 case 'base64':
21125 return base64Slice(this, start, end)
21126
21127 case 'ucs2':
21128 case 'ucs-2':
21129 case 'utf16le':
21130 case 'utf-16le':
21131 return utf16leSlice(this, start, end)
21132
21133 default:
21134 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21135 encoding = (encoding + '').toLowerCase()
21136 loweredCase = true
21137 }
21138 }
21139}
21140
21141// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
21142// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
21143// reliably in a browserify context because there could be multiple different
21144// copies of the 'buffer' package in use. This method works even for Buffer
21145// instances that were created from another copy of the `buffer` package.
21146// See: https://github.com/feross/buffer/issues/154
21147Buffer.prototype._isBuffer = true
21148
21149function swap (b, n, m) {
21150 var i = b[n]
21151 b[n] = b[m]
21152 b[m] = i
21153}
21154
21155Buffer.prototype.swap16 = function swap16 () {
21156 var len = this.length
21157 if (len % 2 !== 0) {
21158 throw new RangeError('Buffer size must be a multiple of 16-bits')
21159 }
21160 for (var i = 0; i < len; i += 2) {
21161 swap(this, i, i + 1)
21162 }
21163 return this
21164}
21165
21166Buffer.prototype.swap32 = function swap32 () {
21167 var len = this.length
21168 if (len % 4 !== 0) {
21169 throw new RangeError('Buffer size must be a multiple of 32-bits')
21170 }
21171 for (var i = 0; i < len; i += 4) {
21172 swap(this, i, i + 3)
21173 swap(this, i + 1, i + 2)
21174 }
21175 return this
21176}
21177
21178Buffer.prototype.swap64 = function swap64 () {
21179 var len = this.length
21180 if (len % 8 !== 0) {
21181 throw new RangeError('Buffer size must be a multiple of 64-bits')
21182 }
21183 for (var i = 0; i < len; i += 8) {
21184 swap(this, i, i + 7)
21185 swap(this, i + 1, i + 6)
21186 swap(this, i + 2, i + 5)
21187 swap(this, i + 3, i + 4)
21188 }
21189 return this
21190}
21191
21192Buffer.prototype.toString = function toString () {
21193 var length = this.length
21194 if (length === 0) return ''
21195 if (arguments.length === 0) return utf8Slice(this, 0, length)
21196 return slowToString.apply(this, arguments)
21197}
21198
21199Buffer.prototype.equals = function equals (b) {
21200 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
21201 if (this === b) return true
21202 return Buffer.compare(this, b) === 0
21203}
21204
21205Buffer.prototype.inspect = function inspect () {
21206 var str = ''
21207 var max = exports.INSPECT_MAX_BYTES
21208 if (this.length > 0) {
21209 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
21210 if (this.length > max) str += ' ... '
21211 }
21212 return '<Buffer ' + str + '>'
21213}
21214
21215Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
21216 if (!Buffer.isBuffer(target)) {
21217 throw new TypeError('Argument must be a Buffer')
21218 }
21219
21220 if (start === undefined) {
21221 start = 0
21222 }
21223 if (end === undefined) {
21224 end = target ? target.length : 0
21225 }
21226 if (thisStart === undefined) {
21227 thisStart = 0
21228 }
21229 if (thisEnd === undefined) {
21230 thisEnd = this.length
21231 }
21232
21233 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
21234 throw new RangeError('out of range index')
21235 }
21236
21237 if (thisStart >= thisEnd && start >= end) {
21238 return 0
21239 }
21240 if (thisStart >= thisEnd) {
21241 return -1
21242 }
21243 if (start >= end) {
21244 return 1
21245 }
21246
21247 start >>>= 0
21248 end >>>= 0
21249 thisStart >>>= 0
21250 thisEnd >>>= 0
21251
21252 if (this === target) return 0
21253
21254 var x = thisEnd - thisStart
21255 var y = end - start
21256 var len = Math.min(x, y)
21257
21258 var thisCopy = this.slice(thisStart, thisEnd)
21259 var targetCopy = target.slice(start, end)
21260
21261 for (var i = 0; i < len; ++i) {
21262 if (thisCopy[i] !== targetCopy[i]) {
21263 x = thisCopy[i]
21264 y = targetCopy[i]
21265 break
21266 }
21267 }
21268
21269 if (x < y) return -1
21270 if (y < x) return 1
21271 return 0
21272}
21273
21274// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
21275// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
21276//
21277// Arguments:
21278// - buffer - a Buffer to search
21279// - val - a string, Buffer, or number
21280// - byteOffset - an index into `buffer`; will be clamped to an int32
21281// - encoding - an optional encoding, relevant is val is a string
21282// - dir - true for indexOf, false for lastIndexOf
21283function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
21284 // Empty buffer means no match
21285 if (buffer.length === 0) return -1
21286
21287 // Normalize byteOffset
21288 if (typeof byteOffset === 'string') {
21289 encoding = byteOffset
21290 byteOffset = 0
21291 } else if (byteOffset > 0x7fffffff) {
21292 byteOffset = 0x7fffffff
21293 } else if (byteOffset < -0x80000000) {
21294 byteOffset = -0x80000000
21295 }
21296 byteOffset = +byteOffset // Coerce to Number.
21297 if (isNaN(byteOffset)) {
21298 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
21299 byteOffset = dir ? 0 : (buffer.length - 1)
21300 }
21301
21302 // Normalize byteOffset: negative offsets start from the end of the buffer
21303 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
21304 if (byteOffset >= buffer.length) {
21305 if (dir) return -1
21306 else byteOffset = buffer.length - 1
21307 } else if (byteOffset < 0) {
21308 if (dir) byteOffset = 0
21309 else return -1
21310 }
21311
21312 // Normalize val
21313 if (typeof val === 'string') {
21314 val = Buffer.from(val, encoding)
21315 }
21316
21317 // Finally, search either indexOf (if dir is true) or lastIndexOf
21318 if (Buffer.isBuffer(val)) {
21319 // Special case: looking for empty string/buffer always fails
21320 if (val.length === 0) {
21321 return -1
21322 }
21323 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
21324 } else if (typeof val === 'number') {
21325 val = val & 0xFF // Search for a byte value [0-255]
21326 if (typeof Uint8Array.prototype.indexOf === 'function') {
21327 if (dir) {
21328 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
21329 } else {
21330 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
21331 }
21332 }
21333 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
21334 }
21335
21336 throw new TypeError('val must be string, number or Buffer')
21337}
21338
21339function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
21340 var indexSize = 1
21341 var arrLength = arr.length
21342 var valLength = val.length
21343
21344 if (encoding !== undefined) {
21345 encoding = String(encoding).toLowerCase()
21346 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
21347 encoding === 'utf16le' || encoding === 'utf-16le') {
21348 if (arr.length < 2 || val.length < 2) {
21349 return -1
21350 }
21351 indexSize = 2
21352 arrLength /= 2
21353 valLength /= 2
21354 byteOffset /= 2
21355 }
21356 }
21357
21358 function read (buf, i) {
21359 if (indexSize === 1) {
21360 return buf[i]
21361 } else {
21362 return buf.readUInt16BE(i * indexSize)
21363 }
21364 }
21365
21366 var i
21367 if (dir) {
21368 var foundIndex = -1
21369 for (i = byteOffset; i < arrLength; i++) {
21370 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
21371 if (foundIndex === -1) foundIndex = i
21372 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
21373 } else {
21374 if (foundIndex !== -1) i -= i - foundIndex
21375 foundIndex = -1
21376 }
21377 }
21378 } else {
21379 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
21380 for (i = byteOffset; i >= 0; i--) {
21381 var found = true
21382 for (var j = 0; j < valLength; j++) {
21383 if (read(arr, i + j) !== read(val, j)) {
21384 found = false
21385 break
21386 }
21387 }
21388 if (found) return i
21389 }
21390 }
21391
21392 return -1
21393}
21394
21395Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
21396 return this.indexOf(val, byteOffset, encoding) !== -1
21397}
21398
21399Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
21400 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
21401}
21402
21403Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
21404 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
21405}
21406
21407function hexWrite (buf, string, offset, length) {
21408 offset = Number(offset) || 0
21409 var remaining = buf.length - offset
21410 if (!length) {
21411 length = remaining
21412 } else {
21413 length = Number(length)
21414 if (length > remaining) {
21415 length = remaining
21416 }
21417 }
21418
21419 // must be an even number of digits
21420 var strLen = string.length
21421 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
21422
21423 if (length > strLen / 2) {
21424 length = strLen / 2
21425 }
21426 for (var i = 0; i < length; ++i) {
21427 var parsed = parseInt(string.substr(i * 2, 2), 16)
21428 if (isNaN(parsed)) return i
21429 buf[offset + i] = parsed
21430 }
21431 return i
21432}
21433
21434function utf8Write (buf, string, offset, length) {
21435 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
21436}
21437
21438function asciiWrite (buf, string, offset, length) {
21439 return blitBuffer(asciiToBytes(string), buf, offset, length)
21440}
21441
21442function latin1Write (buf, string, offset, length) {
21443 return asciiWrite(buf, string, offset, length)
21444}
21445
21446function base64Write (buf, string, offset, length) {
21447 return blitBuffer(base64ToBytes(string), buf, offset, length)
21448}
21449
21450function ucs2Write (buf, string, offset, length) {
21451 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
21452}
21453
21454Buffer.prototype.write = function write (string, offset, length, encoding) {
21455 // Buffer#write(string)
21456 if (offset === undefined) {
21457 encoding = 'utf8'
21458 length = this.length
21459 offset = 0
21460 // Buffer#write(string, encoding)
21461 } else if (length === undefined && typeof offset === 'string') {
21462 encoding = offset
21463 length = this.length
21464 offset = 0
21465 // Buffer#write(string, offset[, length][, encoding])
21466 } else if (isFinite(offset)) {
21467 offset = offset >>> 0
21468 if (isFinite(length)) {
21469 length = length >>> 0
21470 if (encoding === undefined) encoding = 'utf8'
21471 } else {
21472 encoding = length
21473 length = undefined
21474 }
21475 } else {
21476 throw new Error(
21477 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
21478 )
21479 }
21480
21481 var remaining = this.length - offset
21482 if (length === undefined || length > remaining) length = remaining
21483
21484 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
21485 throw new RangeError('Attempt to write outside buffer bounds')
21486 }
21487
21488 if (!encoding) encoding = 'utf8'
21489
21490 var loweredCase = false
21491 for (;;) {
21492 switch (encoding) {
21493 case 'hex':
21494 return hexWrite(this, string, offset, length)
21495
21496 case 'utf8':
21497 case 'utf-8':
21498 return utf8Write(this, string, offset, length)
21499
21500 case 'ascii':
21501 return asciiWrite(this, string, offset, length)
21502
21503 case 'latin1':
21504 case 'binary':
21505 return latin1Write(this, string, offset, length)
21506
21507 case 'base64':
21508 // Warning: maxLength not taken into account in base64Write
21509 return base64Write(this, string, offset, length)
21510
21511 case 'ucs2':
21512 case 'ucs-2':
21513 case 'utf16le':
21514 case 'utf-16le':
21515 return ucs2Write(this, string, offset, length)
21516
21517 default:
21518 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21519 encoding = ('' + encoding).toLowerCase()
21520 loweredCase = true
21521 }
21522 }
21523}
21524
21525Buffer.prototype.toJSON = function toJSON () {
21526 return {
21527 type: 'Buffer',
21528 data: Array.prototype.slice.call(this._arr || this, 0)
21529 }
21530}
21531
21532function base64Slice (buf, start, end) {
21533 if (start === 0 && end === buf.length) {
21534 return base64.fromByteArray(buf)
21535 } else {
21536 return base64.fromByteArray(buf.slice(start, end))
21537 }
21538}
21539
21540function utf8Slice (buf, start, end) {
21541 end = Math.min(buf.length, end)
21542 var res = []
21543
21544 var i = start
21545 while (i < end) {
21546 var firstByte = buf[i]
21547 var codePoint = null
21548 var bytesPerSequence = (firstByte > 0xEF) ? 4
21549 : (firstByte > 0xDF) ? 3
21550 : (firstByte > 0xBF) ? 2
21551 : 1
21552
21553 if (i + bytesPerSequence <= end) {
21554 var secondByte, thirdByte, fourthByte, tempCodePoint
21555
21556 switch (bytesPerSequence) {
21557 case 1:
21558 if (firstByte < 0x80) {
21559 codePoint = firstByte
21560 }
21561 break
21562 case 2:
21563 secondByte = buf[i + 1]
21564 if ((secondByte & 0xC0) === 0x80) {
21565 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
21566 if (tempCodePoint > 0x7F) {
21567 codePoint = tempCodePoint
21568 }
21569 }
21570 break
21571 case 3:
21572 secondByte = buf[i + 1]
21573 thirdByte = buf[i + 2]
21574 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
21575 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
21576 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
21577 codePoint = tempCodePoint
21578 }
21579 }
21580 break
21581 case 4:
21582 secondByte = buf[i + 1]
21583 thirdByte = buf[i + 2]
21584 fourthByte = buf[i + 3]
21585 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
21586 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
21587 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
21588 codePoint = tempCodePoint
21589 }
21590 }
21591 }
21592 }
21593
21594 if (codePoint === null) {
21595 // we did not generate a valid codePoint so insert a
21596 // replacement char (U+FFFD) and advance only 1 byte
21597 codePoint = 0xFFFD
21598 bytesPerSequence = 1
21599 } else if (codePoint > 0xFFFF) {
21600 // encode to utf16 (surrogate pair dance)
21601 codePoint -= 0x10000
21602 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
21603 codePoint = 0xDC00 | codePoint & 0x3FF
21604 }
21605
21606 res.push(codePoint)
21607 i += bytesPerSequence
21608 }
21609
21610 return decodeCodePointsArray(res)
21611}
21612
21613// Based on http://stackoverflow.com/a/22747272/680742, the browser with
21614// the lowest limit is Chrome, with 0x10000 args.
21615// We go 1 magnitude less, for safety
21616var MAX_ARGUMENTS_LENGTH = 0x1000
21617
21618function decodeCodePointsArray (codePoints) {
21619 var len = codePoints.length
21620 if (len <= MAX_ARGUMENTS_LENGTH) {
21621 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
21622 }
21623
21624 // Decode in chunks to avoid "call stack size exceeded".
21625 var res = ''
21626 var i = 0
21627 while (i < len) {
21628 res += String.fromCharCode.apply(
21629 String,
21630 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
21631 )
21632 }
21633 return res
21634}
21635
21636function asciiSlice (buf, start, end) {
21637 var ret = ''
21638 end = Math.min(buf.length, end)
21639
21640 for (var i = start; i < end; ++i) {
21641 ret += String.fromCharCode(buf[i] & 0x7F)
21642 }
21643 return ret
21644}
21645
21646function latin1Slice (buf, start, end) {
21647 var ret = ''
21648 end = Math.min(buf.length, end)
21649
21650 for (var i = start; i < end; ++i) {
21651 ret += String.fromCharCode(buf[i])
21652 }
21653 return ret
21654}
21655
21656function hexSlice (buf, start, end) {
21657 var len = buf.length
21658
21659 if (!start || start < 0) start = 0
21660 if (!end || end < 0 || end > len) end = len
21661
21662 var out = ''
21663 for (var i = start; i < end; ++i) {
21664 out += toHex(buf[i])
21665 }
21666 return out
21667}
21668
21669function utf16leSlice (buf, start, end) {
21670 var bytes = buf.slice(start, end)
21671 var res = ''
21672 for (var i = 0; i < bytes.length; i += 2) {
21673 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
21674 }
21675 return res
21676}
21677
21678Buffer.prototype.slice = function slice (start, end) {
21679 var len = this.length
21680 start = ~~start
21681 end = end === undefined ? len : ~~end
21682
21683 if (start < 0) {
21684 start += len
21685 if (start < 0) start = 0
21686 } else if (start > len) {
21687 start = len
21688 }
21689
21690 if (end < 0) {
21691 end += len
21692 if (end < 0) end = 0
21693 } else if (end > len) {
21694 end = len
21695 }
21696
21697 if (end < start) end = start
21698
21699 var newBuf = this.subarray(start, end)
21700 // Return an augmented `Uint8Array` instance
21701 newBuf.__proto__ = Buffer.prototype
21702 return newBuf
21703}
21704
21705/*
21706 * Need to make sure that buffer isn't trying to write out of bounds.
21707 */
21708function checkOffset (offset, ext, length) {
21709 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
21710 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
21711}
21712
21713Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
21714 offset = offset >>> 0
21715 byteLength = byteLength >>> 0
21716 if (!noAssert) checkOffset(offset, byteLength, this.length)
21717
21718 var val = this[offset]
21719 var mul = 1
21720 var i = 0
21721 while (++i < byteLength && (mul *= 0x100)) {
21722 val += this[offset + i] * mul
21723 }
21724
21725 return val
21726}
21727
21728Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
21729 offset = offset >>> 0
21730 byteLength = byteLength >>> 0
21731 if (!noAssert) {
21732 checkOffset(offset, byteLength, this.length)
21733 }
21734
21735 var val = this[offset + --byteLength]
21736 var mul = 1
21737 while (byteLength > 0 && (mul *= 0x100)) {
21738 val += this[offset + --byteLength] * mul
21739 }
21740
21741 return val
21742}
21743
21744Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
21745 offset = offset >>> 0
21746 if (!noAssert) checkOffset(offset, 1, this.length)
21747 return this[offset]
21748}
21749
21750Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
21751 offset = offset >>> 0
21752 if (!noAssert) checkOffset(offset, 2, this.length)
21753 return this[offset] | (this[offset + 1] << 8)
21754}
21755
21756Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
21757 offset = offset >>> 0
21758 if (!noAssert) checkOffset(offset, 2, this.length)
21759 return (this[offset] << 8) | this[offset + 1]
21760}
21761
21762Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
21763 offset = offset >>> 0
21764 if (!noAssert) checkOffset(offset, 4, this.length)
21765
21766 return ((this[offset]) |
21767 (this[offset + 1] << 8) |
21768 (this[offset + 2] << 16)) +
21769 (this[offset + 3] * 0x1000000)
21770}
21771
21772Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
21773 offset = offset >>> 0
21774 if (!noAssert) checkOffset(offset, 4, this.length)
21775
21776 return (this[offset] * 0x1000000) +
21777 ((this[offset + 1] << 16) |
21778 (this[offset + 2] << 8) |
21779 this[offset + 3])
21780}
21781
21782Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
21783 offset = offset >>> 0
21784 byteLength = byteLength >>> 0
21785 if (!noAssert) checkOffset(offset, byteLength, this.length)
21786
21787 var val = this[offset]
21788 var mul = 1
21789 var i = 0
21790 while (++i < byteLength && (mul *= 0x100)) {
21791 val += this[offset + i] * mul
21792 }
21793 mul *= 0x80
21794
21795 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
21796
21797 return val
21798}
21799
21800Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
21801 offset = offset >>> 0
21802 byteLength = byteLength >>> 0
21803 if (!noAssert) checkOffset(offset, byteLength, this.length)
21804
21805 var i = byteLength
21806 var mul = 1
21807 var val = this[offset + --i]
21808 while (i > 0 && (mul *= 0x100)) {
21809 val += this[offset + --i] * mul
21810 }
21811 mul *= 0x80
21812
21813 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
21814
21815 return val
21816}
21817
21818Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
21819 offset = offset >>> 0
21820 if (!noAssert) checkOffset(offset, 1, this.length)
21821 if (!(this[offset] & 0x80)) return (this[offset])
21822 return ((0xff - this[offset] + 1) * -1)
21823}
21824
21825Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
21826 offset = offset >>> 0
21827 if (!noAssert) checkOffset(offset, 2, this.length)
21828 var val = this[offset] | (this[offset + 1] << 8)
21829 return (val & 0x8000) ? val | 0xFFFF0000 : val
21830}
21831
21832Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
21833 offset = offset >>> 0
21834 if (!noAssert) checkOffset(offset, 2, this.length)
21835 var val = this[offset + 1] | (this[offset] << 8)
21836 return (val & 0x8000) ? val | 0xFFFF0000 : val
21837}
21838
21839Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
21840 offset = offset >>> 0
21841 if (!noAssert) checkOffset(offset, 4, this.length)
21842
21843 return (this[offset]) |
21844 (this[offset + 1] << 8) |
21845 (this[offset + 2] << 16) |
21846 (this[offset + 3] << 24)
21847}
21848
21849Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
21850 offset = offset >>> 0
21851 if (!noAssert) checkOffset(offset, 4, this.length)
21852
21853 return (this[offset] << 24) |
21854 (this[offset + 1] << 16) |
21855 (this[offset + 2] << 8) |
21856 (this[offset + 3])
21857}
21858
21859Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
21860 offset = offset >>> 0
21861 if (!noAssert) checkOffset(offset, 4, this.length)
21862 return ieee754.read(this, offset, true, 23, 4)
21863}
21864
21865Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
21866 offset = offset >>> 0
21867 if (!noAssert) checkOffset(offset, 4, this.length)
21868 return ieee754.read(this, offset, false, 23, 4)
21869}
21870
21871Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
21872 offset = offset >>> 0
21873 if (!noAssert) checkOffset(offset, 8, this.length)
21874 return ieee754.read(this, offset, true, 52, 8)
21875}
21876
21877Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
21878 offset = offset >>> 0
21879 if (!noAssert) checkOffset(offset, 8, this.length)
21880 return ieee754.read(this, offset, false, 52, 8)
21881}
21882
21883function checkInt (buf, value, offset, ext, max, min) {
21884 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
21885 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
21886 if (offset + ext > buf.length) throw new RangeError('Index out of range')
21887}
21888
21889Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
21890 value = +value
21891 offset = offset >>> 0
21892 byteLength = byteLength >>> 0
21893 if (!noAssert) {
21894 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21895 checkInt(this, value, offset, byteLength, maxBytes, 0)
21896 }
21897
21898 var mul = 1
21899 var i = 0
21900 this[offset] = value & 0xFF
21901 while (++i < byteLength && (mul *= 0x100)) {
21902 this[offset + i] = (value / mul) & 0xFF
21903 }
21904
21905 return offset + byteLength
21906}
21907
21908Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
21909 value = +value
21910 offset = offset >>> 0
21911 byteLength = byteLength >>> 0
21912 if (!noAssert) {
21913 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21914 checkInt(this, value, offset, byteLength, maxBytes, 0)
21915 }
21916
21917 var i = byteLength - 1
21918 var mul = 1
21919 this[offset + i] = value & 0xFF
21920 while (--i >= 0 && (mul *= 0x100)) {
21921 this[offset + i] = (value / mul) & 0xFF
21922 }
21923
21924 return offset + byteLength
21925}
21926
21927Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
21928 value = +value
21929 offset = offset >>> 0
21930 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
21931 this[offset] = (value & 0xff)
21932 return offset + 1
21933}
21934
21935Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
21936 value = +value
21937 offset = offset >>> 0
21938 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21939 this[offset] = (value & 0xff)
21940 this[offset + 1] = (value >>> 8)
21941 return offset + 2
21942}
21943
21944Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
21945 value = +value
21946 offset = offset >>> 0
21947 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21948 this[offset] = (value >>> 8)
21949 this[offset + 1] = (value & 0xff)
21950 return offset + 2
21951}
21952
21953Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
21954 value = +value
21955 offset = offset >>> 0
21956 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
21957 this[offset + 3] = (value >>> 24)
21958 this[offset + 2] = (value >>> 16)
21959 this[offset + 1] = (value >>> 8)
21960 this[offset] = (value & 0xff)
21961 return offset + 4
21962}
21963
21964Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
21965 value = +value
21966 offset = offset >>> 0
21967 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
21968 this[offset] = (value >>> 24)
21969 this[offset + 1] = (value >>> 16)
21970 this[offset + 2] = (value >>> 8)
21971 this[offset + 3] = (value & 0xff)
21972 return offset + 4
21973}
21974
21975Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
21976 value = +value
21977 offset = offset >>> 0
21978 if (!noAssert) {
21979 var limit = Math.pow(2, (8 * byteLength) - 1)
21980
21981 checkInt(this, value, offset, byteLength, limit - 1, -limit)
21982 }
21983
21984 var i = 0
21985 var mul = 1
21986 var sub = 0
21987 this[offset] = value & 0xFF
21988 while (++i < byteLength && (mul *= 0x100)) {
21989 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
21990 sub = 1
21991 }
21992 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
21993 }
21994
21995 return offset + byteLength
21996}
21997
21998Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
21999 value = +value
22000 offset = offset >>> 0
22001 if (!noAssert) {
22002 var limit = Math.pow(2, (8 * byteLength) - 1)
22003
22004 checkInt(this, value, offset, byteLength, limit - 1, -limit)
22005 }
22006
22007 var i = byteLength - 1
22008 var mul = 1
22009 var sub = 0
22010 this[offset + i] = value & 0xFF
22011 while (--i >= 0 && (mul *= 0x100)) {
22012 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
22013 sub = 1
22014 }
22015 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
22016 }
22017
22018 return offset + byteLength
22019}
22020
22021Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
22022 value = +value
22023 offset = offset >>> 0
22024 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
22025 if (value < 0) value = 0xff + value + 1
22026 this[offset] = (value & 0xff)
22027 return offset + 1
22028}
22029
22030Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
22031 value = +value
22032 offset = offset >>> 0
22033 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22034 this[offset] = (value & 0xff)
22035 this[offset + 1] = (value >>> 8)
22036 return offset + 2
22037}
22038
22039Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
22040 value = +value
22041 offset = offset >>> 0
22042 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22043 this[offset] = (value >>> 8)
22044 this[offset + 1] = (value & 0xff)
22045 return offset + 2
22046}
22047
22048Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
22049 value = +value
22050 offset = offset >>> 0
22051 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22052 this[offset] = (value & 0xff)
22053 this[offset + 1] = (value >>> 8)
22054 this[offset + 2] = (value >>> 16)
22055 this[offset + 3] = (value >>> 24)
22056 return offset + 4
22057}
22058
22059Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
22060 value = +value
22061 offset = offset >>> 0
22062 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22063 if (value < 0) value = 0xffffffff + value + 1
22064 this[offset] = (value >>> 24)
22065 this[offset + 1] = (value >>> 16)
22066 this[offset + 2] = (value >>> 8)
22067 this[offset + 3] = (value & 0xff)
22068 return offset + 4
22069}
22070
22071function checkIEEE754 (buf, value, offset, ext, max, min) {
22072 if (offset + ext > buf.length) throw new RangeError('Index out of range')
22073 if (offset < 0) throw new RangeError('Index out of range')
22074}
22075
22076function writeFloat (buf, value, offset, littleEndian, noAssert) {
22077 value = +value
22078 offset = offset >>> 0
22079 if (!noAssert) {
22080 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
22081 }
22082 ieee754.write(buf, value, offset, littleEndian, 23, 4)
22083 return offset + 4
22084}
22085
22086Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
22087 return writeFloat(this, value, offset, true, noAssert)
22088}
22089
22090Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
22091 return writeFloat(this, value, offset, false, noAssert)
22092}
22093
22094function writeDouble (buf, value, offset, littleEndian, noAssert) {
22095 value = +value
22096 offset = offset >>> 0
22097 if (!noAssert) {
22098 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
22099 }
22100 ieee754.write(buf, value, offset, littleEndian, 52, 8)
22101 return offset + 8
22102}
22103
22104Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
22105 return writeDouble(this, value, offset, true, noAssert)
22106}
22107
22108Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
22109 return writeDouble(this, value, offset, false, noAssert)
22110}
22111
22112// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
22113Buffer.prototype.copy = function copy (target, targetStart, start, end) {
22114 if (!start) start = 0
22115 if (!end && end !== 0) end = this.length
22116 if (targetStart >= target.length) targetStart = target.length
22117 if (!targetStart) targetStart = 0
22118 if (end > 0 && end < start) end = start
22119
22120 // Copy 0 bytes; we're done
22121 if (end === start) return 0
22122 if (target.length === 0 || this.length === 0) return 0
22123
22124 // Fatal error conditions
22125 if (targetStart < 0) {
22126 throw new RangeError('targetStart out of bounds')
22127 }
22128 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
22129 if (end < 0) throw new RangeError('sourceEnd out of bounds')
22130
22131 // Are we oob?
22132 if (end > this.length) end = this.length
22133 if (target.length - targetStart < end - start) {
22134 end = target.length - targetStart + start
22135 }
22136
22137 var len = end - start
22138 var i
22139
22140 if (this === target && start < targetStart && targetStart < end) {
22141 // descending copy from end
22142 for (i = len - 1; i >= 0; --i) {
22143 target[i + targetStart] = this[i + start]
22144 }
22145 } else if (len < 1000) {
22146 // ascending copy from start
22147 for (i = 0; i < len; ++i) {
22148 target[i + targetStart] = this[i + start]
22149 }
22150 } else {
22151 Uint8Array.prototype.set.call(
22152 target,
22153 this.subarray(start, start + len),
22154 targetStart
22155 )
22156 }
22157
22158 return len
22159}
22160
22161// Usage:
22162// buffer.fill(number[, offset[, end]])
22163// buffer.fill(buffer[, offset[, end]])
22164// buffer.fill(string[, offset[, end]][, encoding])
22165Buffer.prototype.fill = function fill (val, start, end, encoding) {
22166 // Handle string cases:
22167 if (typeof val === 'string') {
22168 if (typeof start === 'string') {
22169 encoding = start
22170 start = 0
22171 end = this.length
22172 } else if (typeof end === 'string') {
22173 encoding = end
22174 end = this.length
22175 }
22176 if (val.length === 1) {
22177 var code = val.charCodeAt(0)
22178 if (code < 256) {
22179 val = code
22180 }
22181 }
22182 if (encoding !== undefined && typeof encoding !== 'string') {
22183 throw new TypeError('encoding must be a string')
22184 }
22185 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
22186 throw new TypeError('Unknown encoding: ' + encoding)
22187 }
22188 } else if (typeof val === 'number') {
22189 val = val & 255
22190 }
22191
22192 // Invalid ranges are not set to a default, so can range check early.
22193 if (start < 0 || this.length < start || this.length < end) {
22194 throw new RangeError('Out of range index')
22195 }
22196
22197 if (end <= start) {
22198 return this
22199 }
22200
22201 start = start >>> 0
22202 end = end === undefined ? this.length : end >>> 0
22203
22204 if (!val) val = 0
22205
22206 var i
22207 if (typeof val === 'number') {
22208 for (i = start; i < end; ++i) {
22209 this[i] = val
22210 }
22211 } else {
22212 var bytes = Buffer.isBuffer(val)
22213 ? val
22214 : new Buffer(val, encoding)
22215 var len = bytes.length
22216 for (i = 0; i < end - start; ++i) {
22217 this[i + start] = bytes[i % len]
22218 }
22219 }
22220
22221 return this
22222}
22223
22224// HELPER FUNCTIONS
22225// ================
22226
22227var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
22228
22229function base64clean (str) {
22230 // Node strips out invalid characters like \n and \t from the string, base64-js does not
22231 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
22232 // Node converts strings with length < 2 to ''
22233 if (str.length < 2) return ''
22234 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
22235 while (str.length % 4 !== 0) {
22236 str = str + '='
22237 }
22238 return str
22239}
22240
22241function stringtrim (str) {
22242 if (str.trim) return str.trim()
22243 return str.replace(/^\s+|\s+$/g, '')
22244}
22245
22246function toHex (n) {
22247 if (n < 16) return '0' + n.toString(16)
22248 return n.toString(16)
22249}
22250
22251function utf8ToBytes (string, units) {
22252 units = units || Infinity
22253 var codePoint
22254 var length = string.length
22255 var leadSurrogate = null
22256 var bytes = []
22257
22258 for (var i = 0; i < length; ++i) {
22259 codePoint = string.charCodeAt(i)
22260
22261 // is surrogate component
22262 if (codePoint > 0xD7FF && codePoint < 0xE000) {
22263 // last char was a lead
22264 if (!leadSurrogate) {
22265 // no lead yet
22266 if (codePoint > 0xDBFF) {
22267 // unexpected trail
22268 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22269 continue
22270 } else if (i + 1 === length) {
22271 // unpaired lead
22272 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22273 continue
22274 }
22275
22276 // valid lead
22277 leadSurrogate = codePoint
22278
22279 continue
22280 }
22281
22282 // 2 leads in a row
22283 if (codePoint < 0xDC00) {
22284 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22285 leadSurrogate = codePoint
22286 continue
22287 }
22288
22289 // valid surrogate pair
22290 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
22291 } else if (leadSurrogate) {
22292 // valid bmp char, but last char was a lead
22293 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22294 }
22295
22296 leadSurrogate = null
22297
22298 // encode utf8
22299 if (codePoint < 0x80) {
22300 if ((units -= 1) < 0) break
22301 bytes.push(codePoint)
22302 } else if (codePoint < 0x800) {
22303 if ((units -= 2) < 0) break
22304 bytes.push(
22305 codePoint >> 0x6 | 0xC0,
22306 codePoint & 0x3F | 0x80
22307 )
22308 } else if (codePoint < 0x10000) {
22309 if ((units -= 3) < 0) break
22310 bytes.push(
22311 codePoint >> 0xC | 0xE0,
22312 codePoint >> 0x6 & 0x3F | 0x80,
22313 codePoint & 0x3F | 0x80
22314 )
22315 } else if (codePoint < 0x110000) {
22316 if ((units -= 4) < 0) break
22317 bytes.push(
22318 codePoint >> 0x12 | 0xF0,
22319 codePoint >> 0xC & 0x3F | 0x80,
22320 codePoint >> 0x6 & 0x3F | 0x80,
22321 codePoint & 0x3F | 0x80
22322 )
22323 } else {
22324 throw new Error('Invalid code point')
22325 }
22326 }
22327
22328 return bytes
22329}
22330
22331function asciiToBytes (str) {
22332 var byteArray = []
22333 for (var i = 0; i < str.length; ++i) {
22334 // Node's code seems to be doing this and not & 0x7F..
22335 byteArray.push(str.charCodeAt(i) & 0xFF)
22336 }
22337 return byteArray
22338}
22339
22340function utf16leToBytes (str, units) {
22341 var c, hi, lo
22342 var byteArray = []
22343 for (var i = 0; i < str.length; ++i) {
22344 if ((units -= 2) < 0) break
22345
22346 c = str.charCodeAt(i)
22347 hi = c >> 8
22348 lo = c % 256
22349 byteArray.push(lo)
22350 byteArray.push(hi)
22351 }
22352
22353 return byteArray
22354}
22355
22356function base64ToBytes (str) {
22357 return base64.toByteArray(base64clean(str))
22358}
22359
22360function blitBuffer (src, dst, offset, length) {
22361 for (var i = 0; i < length; ++i) {
22362 if ((i + offset >= dst.length) || (i >= src.length)) break
22363 dst[i + offset] = src[i]
22364 }
22365 return i
22366}
22367
22368function isnan (val) {
22369 return val !== val // eslint-disable-line no-self-compare
22370}
22371
22372},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
22373(function (Buffer){
22374// Copyright Joyent, Inc. and other Node contributors.
22375//
22376// Permission is hereby granted, free of charge, to any person obtaining a
22377// copy of this software and associated documentation files (the
22378// "Software"), to deal in the Software without restriction, including
22379// without limitation the rights to use, copy, modify, merge, publish,
22380// distribute, sublicense, and/or sell copies of the Software, and to permit
22381// persons to whom the Software is furnished to do so, subject to the
22382// following conditions:
22383//
22384// The above copyright notice and this permission notice shall be included
22385// in all copies or substantial portions of the Software.
22386//
22387// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22388// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22389// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22390// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22391// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22392// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22393// USE OR OTHER DEALINGS IN THE SOFTWARE.
22394
22395// NOTE: These type checking functions intentionally don't use `instanceof`
22396// because it is fragile and can be easily faked with `Object.create()`.
22397
22398function isArray(arg) {
22399 if (Array.isArray) {
22400 return Array.isArray(arg);
22401 }
22402 return objectToString(arg) === '[object Array]';
22403}
22404exports.isArray = isArray;
22405
22406function isBoolean(arg) {
22407 return typeof arg === 'boolean';
22408}
22409exports.isBoolean = isBoolean;
22410
22411function isNull(arg) {
22412 return arg === null;
22413}
22414exports.isNull = isNull;
22415
22416function isNullOrUndefined(arg) {
22417 return arg == null;
22418}
22419exports.isNullOrUndefined = isNullOrUndefined;
22420
22421function isNumber(arg) {
22422 return typeof arg === 'number';
22423}
22424exports.isNumber = isNumber;
22425
22426function isString(arg) {
22427 return typeof arg === 'string';
22428}
22429exports.isString = isString;
22430
22431function isSymbol(arg) {
22432 return typeof arg === 'symbol';
22433}
22434exports.isSymbol = isSymbol;
22435
22436function isUndefined(arg) {
22437 return arg === void 0;
22438}
22439exports.isUndefined = isUndefined;
22440
22441function isRegExp(re) {
22442 return objectToString(re) === '[object RegExp]';
22443}
22444exports.isRegExp = isRegExp;
22445
22446function isObject(arg) {
22447 return typeof arg === 'object' && arg !== null;
22448}
22449exports.isObject = isObject;
22450
22451function isDate(d) {
22452 return objectToString(d) === '[object Date]';
22453}
22454exports.isDate = isDate;
22455
22456function isError(e) {
22457 return (objectToString(e) === '[object Error]' || e instanceof Error);
22458}
22459exports.isError = isError;
22460
22461function isFunction(arg) {
22462 return typeof arg === 'function';
22463}
22464exports.isFunction = isFunction;
22465
22466function isPrimitive(arg) {
22467 return arg === null ||
22468 typeof arg === 'boolean' ||
22469 typeof arg === 'number' ||
22470 typeof arg === 'string' ||
22471 typeof arg === 'symbol' || // ES6 symbol
22472 typeof arg === 'undefined';
22473}
22474exports.isPrimitive = isPrimitive;
22475
22476exports.isBuffer = Buffer.isBuffer;
22477
22478function objectToString(o) {
22479 return Object.prototype.toString.call(o);
22480}
22481
22482}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
22483},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
22484// Copyright Joyent, Inc. and other Node contributors.
22485//
22486// Permission is hereby granted, free of charge, to any person obtaining a
22487// copy of this software and associated documentation files (the
22488// "Software"), to deal in the Software without restriction, including
22489// without limitation the rights to use, copy, modify, merge, publish,
22490// distribute, sublicense, and/or sell copies of the Software, and to permit
22491// persons to whom the Software is furnished to do so, subject to the
22492// following conditions:
22493//
22494// The above copyright notice and this permission notice shall be included
22495// in all copies or substantial portions of the Software.
22496//
22497// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22498// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22499// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22500// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22501// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22502// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22503// USE OR OTHER DEALINGS IN THE SOFTWARE.
22504
22505function EventEmitter() {
22506 this._events = this._events || {};
22507 this._maxListeners = this._maxListeners || undefined;
22508}
22509module.exports = EventEmitter;
22510
22511// Backwards-compat with node 0.10.x
22512EventEmitter.EventEmitter = EventEmitter;
22513
22514EventEmitter.prototype._events = undefined;
22515EventEmitter.prototype._maxListeners = undefined;
22516
22517// By default EventEmitters will print a warning if more than 10 listeners are
22518// added to it. This is a useful default which helps finding memory leaks.
22519EventEmitter.defaultMaxListeners = 10;
22520
22521// Obviously not all Emitters should be limited to 10. This function allows
22522// that to be increased. Set to zero for unlimited.
22523EventEmitter.prototype.setMaxListeners = function(n) {
22524 if (!isNumber(n) || n < 0 || isNaN(n))
22525 throw TypeError('n must be a positive number');
22526 this._maxListeners = n;
22527 return this;
22528};
22529
22530EventEmitter.prototype.emit = function(type) {
22531 var er, handler, len, args, i, listeners;
22532
22533 if (!this._events)
22534 this._events = {};
22535
22536 // If there is no 'error' event listener then throw.
22537 if (type === 'error') {
22538 if (!this._events.error ||
22539 (isObject(this._events.error) && !this._events.error.length)) {
22540 er = arguments[1];
22541 if (er instanceof Error) {
22542 throw er; // Unhandled 'error' event
22543 } else {
22544 // At least give some kind of context to the user
22545 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
22546 err.context = er;
22547 throw err;
22548 }
22549 }
22550 }
22551
22552 handler = this._events[type];
22553
22554 if (isUndefined(handler))
22555 return false;
22556
22557 if (isFunction(handler)) {
22558 switch (arguments.length) {
22559 // fast cases
22560 case 1:
22561 handler.call(this);
22562 break;
22563 case 2:
22564 handler.call(this, arguments[1]);
22565 break;
22566 case 3:
22567 handler.call(this, arguments[1], arguments[2]);
22568 break;
22569 // slower
22570 default:
22571 args = Array.prototype.slice.call(arguments, 1);
22572 handler.apply(this, args);
22573 }
22574 } else if (isObject(handler)) {
22575 args = Array.prototype.slice.call(arguments, 1);
22576 listeners = handler.slice();
22577 len = listeners.length;
22578 for (i = 0; i < len; i++)
22579 listeners[i].apply(this, args);
22580 }
22581
22582 return true;
22583};
22584
22585EventEmitter.prototype.addListener = function(type, listener) {
22586 var m;
22587
22588 if (!isFunction(listener))
22589 throw TypeError('listener must be a function');
22590
22591 if (!this._events)
22592 this._events = {};
22593
22594 // To avoid recursion in the case that type === "newListener"! Before
22595 // adding it to the listeners, first emit "newListener".
22596 if (this._events.newListener)
22597 this.emit('newListener', type,
22598 isFunction(listener.listener) ?
22599 listener.listener : listener);
22600
22601 if (!this._events[type])
22602 // Optimize the case of one listener. Don't need the extra array object.
22603 this._events[type] = listener;
22604 else if (isObject(this._events[type]))
22605 // If we've already got an array, just append.
22606 this._events[type].push(listener);
22607 else
22608 // Adding the second element, need to change to array.
22609 this._events[type] = [this._events[type], listener];
22610
22611 // Check for listener leak
22612 if (isObject(this._events[type]) && !this._events[type].warned) {
22613 if (!isUndefined(this._maxListeners)) {
22614 m = this._maxListeners;
22615 } else {
22616 m = EventEmitter.defaultMaxListeners;
22617 }
22618
22619 if (m && m > 0 && this._events[type].length > m) {
22620 this._events[type].warned = true;
22621 console.error('(node) warning: possible EventEmitter memory ' +
22622 'leak detected. %d listeners added. ' +
22623 'Use emitter.setMaxListeners() to increase limit.',
22624 this._events[type].length);
22625 if (typeof console.trace === 'function') {
22626 // not supported in IE 10
22627 console.trace();
22628 }
22629 }
22630 }
22631
22632 return this;
22633};
22634
22635EventEmitter.prototype.on = EventEmitter.prototype.addListener;
22636
22637EventEmitter.prototype.once = function(type, listener) {
22638 if (!isFunction(listener))
22639 throw TypeError('listener must be a function');
22640
22641 var fired = false;
22642
22643 function g() {
22644 this.removeListener(type, g);
22645
22646 if (!fired) {
22647 fired = true;
22648 listener.apply(this, arguments);
22649 }
22650 }
22651
22652 g.listener = listener;
22653 this.on(type, g);
22654
22655 return this;
22656};
22657
22658// emits a 'removeListener' event iff the listener was removed
22659EventEmitter.prototype.removeListener = function(type, listener) {
22660 var list, position, length, i;
22661
22662 if (!isFunction(listener))
22663 throw TypeError('listener must be a function');
22664
22665 if (!this._events || !this._events[type])
22666 return this;
22667
22668 list = this._events[type];
22669 length = list.length;
22670 position = -1;
22671
22672 if (list === listener ||
22673 (isFunction(list.listener) && list.listener === listener)) {
22674 delete this._events[type];
22675 if (this._events.removeListener)
22676 this.emit('removeListener', type, listener);
22677
22678 } else if (isObject(list)) {
22679 for (i = length; i-- > 0;) {
22680 if (list[i] === listener ||
22681 (list[i].listener && list[i].listener === listener)) {
22682 position = i;
22683 break;
22684 }
22685 }
22686
22687 if (position < 0)
22688 return this;
22689
22690 if (list.length === 1) {
22691 list.length = 0;
22692 delete this._events[type];
22693 } else {
22694 list.splice(position, 1);
22695 }
22696
22697 if (this._events.removeListener)
22698 this.emit('removeListener', type, listener);
22699 }
22700
22701 return this;
22702};
22703
22704EventEmitter.prototype.removeAllListeners = function(type) {
22705 var key, listeners;
22706
22707 if (!this._events)
22708 return this;
22709
22710 // not listening for removeListener, no need to emit
22711 if (!this._events.removeListener) {
22712 if (arguments.length === 0)
22713 this._events = {};
22714 else if (this._events[type])
22715 delete this._events[type];
22716 return this;
22717 }
22718
22719 // emit removeListener for all listeners on all events
22720 if (arguments.length === 0) {
22721 for (key in this._events) {
22722 if (key === 'removeListener') continue;
22723 this.removeAllListeners(key);
22724 }
22725 this.removeAllListeners('removeListener');
22726 this._events = {};
22727 return this;
22728 }
22729
22730 listeners = this._events[type];
22731
22732 if (isFunction(listeners)) {
22733 this.removeListener(type, listeners);
22734 } else if (listeners) {
22735 // LIFO order
22736 while (listeners.length)
22737 this.removeListener(type, listeners[listeners.length - 1]);
22738 }
22739 delete this._events[type];
22740
22741 return this;
22742};
22743
22744EventEmitter.prototype.listeners = function(type) {
22745 var ret;
22746 if (!this._events || !this._events[type])
22747 ret = [];
22748 else if (isFunction(this._events[type]))
22749 ret = [this._events[type]];
22750 else
22751 ret = this._events[type].slice();
22752 return ret;
22753};
22754
22755EventEmitter.prototype.listenerCount = function(type) {
22756 if (this._events) {
22757 var evlistener = this._events[type];
22758
22759 if (isFunction(evlistener))
22760 return 1;
22761 else if (evlistener)
22762 return evlistener.length;
22763 }
22764 return 0;
22765};
22766
22767EventEmitter.listenerCount = function(emitter, type) {
22768 return emitter.listenerCount(type);
22769};
22770
22771function isFunction(arg) {
22772 return typeof arg === 'function';
22773}
22774
22775function isNumber(arg) {
22776 return typeof arg === 'number';
22777}
22778
22779function isObject(arg) {
22780 return typeof arg === 'object' && arg !== null;
22781}
22782
22783function isUndefined(arg) {
22784 return arg === void 0;
22785}
22786
22787},{}],8:[function(require,module,exports){
22788exports.read = function (buffer, offset, isLE, mLen, nBytes) {
22789 var e, m
22790 var eLen = nBytes * 8 - mLen - 1
22791 var eMax = (1 << eLen) - 1
22792 var eBias = eMax >> 1
22793 var nBits = -7
22794 var i = isLE ? (nBytes - 1) : 0
22795 var d = isLE ? -1 : 1
22796 var s = buffer[offset + i]
22797
22798 i += d
22799
22800 e = s & ((1 << (-nBits)) - 1)
22801 s >>= (-nBits)
22802 nBits += eLen
22803 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
22804
22805 m = e & ((1 << (-nBits)) - 1)
22806 e >>= (-nBits)
22807 nBits += mLen
22808 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
22809
22810 if (e === 0) {
22811 e = 1 - eBias
22812 } else if (e === eMax) {
22813 return m ? NaN : ((s ? -1 : 1) * Infinity)
22814 } else {
22815 m = m + Math.pow(2, mLen)
22816 e = e - eBias
22817 }
22818 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
22819}
22820
22821exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
22822 var e, m, c
22823 var eLen = nBytes * 8 - mLen - 1
22824 var eMax = (1 << eLen) - 1
22825 var eBias = eMax >> 1
22826 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
22827 var i = isLE ? 0 : (nBytes - 1)
22828 var d = isLE ? 1 : -1
22829 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
22830
22831 value = Math.abs(value)
22832
22833 if (isNaN(value) || value === Infinity) {
22834 m = isNaN(value) ? 1 : 0
22835 e = eMax
22836 } else {
22837 e = Math.floor(Math.log(value) / Math.LN2)
22838 if (value * (c = Math.pow(2, -e)) < 1) {
22839 e--
22840 c *= 2
22841 }
22842 if (e + eBias >= 1) {
22843 value += rt / c
22844 } else {
22845 value += rt * Math.pow(2, 1 - eBias)
22846 }
22847 if (value * c >= 2) {
22848 e++
22849 c /= 2
22850 }
22851
22852 if (e + eBias >= eMax) {
22853 m = 0
22854 e = eMax
22855 } else if (e + eBias >= 1) {
22856 m = (value * c - 1) * Math.pow(2, mLen)
22857 e = e + eBias
22858 } else {
22859 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
22860 e = 0
22861 }
22862 }
22863
22864 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
22865
22866 e = (e << mLen) | m
22867 eLen += mLen
22868 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
22869
22870 buffer[offset + i - d] |= s * 128
22871}
22872
22873},{}],9:[function(require,module,exports){
22874if (typeof Object.create === 'function') {
22875 // implementation from standard node.js 'util' module
22876 module.exports = function inherits(ctor, superCtor) {
22877 ctor.super_ = superCtor
22878 ctor.prototype = Object.create(superCtor.prototype, {
22879 constructor: {
22880 value: ctor,
22881 enumerable: false,
22882 writable: true,
22883 configurable: true
22884 }
22885 });
22886 };
22887} else {
22888 // old school shim for old browsers
22889 module.exports = function inherits(ctor, superCtor) {
22890 ctor.super_ = superCtor
22891 var TempCtor = function () {}
22892 TempCtor.prototype = superCtor.prototype
22893 ctor.prototype = new TempCtor()
22894 ctor.prototype.constructor = ctor
22895 }
22896}
22897
22898},{}],10:[function(require,module,exports){
22899/*!
22900 * Determine if an object is a Buffer
22901 *
22902 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22903 * @license MIT
22904 */
22905
22906// The _isBuffer check is for Safari 5-7 support, because it's missing
22907// Object.prototype.constructor. Remove this eventually
22908module.exports = function (obj) {
22909 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
22910}
22911
22912function isBuffer (obj) {
22913 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
22914}
22915
22916// For Node v0.10 support. Remove this eventually.
22917function isSlowBuffer (obj) {
22918 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
22919}
22920
22921},{}],11:[function(require,module,exports){
22922var toString = {}.toString;
22923
22924module.exports = Array.isArray || function (arr) {
22925 return toString.call(arr) == '[object Array]';
22926};
22927
22928},{}],12:[function(require,module,exports){
22929(function (process){
22930'use strict';
22931
22932if (!process.version ||
22933 process.version.indexOf('v0.') === 0 ||
22934 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
22935 module.exports = nextTick;
22936} else {
22937 module.exports = process.nextTick;
22938}
22939
22940function nextTick(fn, arg1, arg2, arg3) {
22941 if (typeof fn !== 'function') {
22942 throw new TypeError('"callback" argument must be a function');
22943 }
22944 var len = arguments.length;
22945 var args, i;
22946 switch (len) {
22947 case 0:
22948 case 1:
22949 return process.nextTick(fn);
22950 case 2:
22951 return process.nextTick(function afterTickOne() {
22952 fn.call(null, arg1);
22953 });
22954 case 3:
22955 return process.nextTick(function afterTickTwo() {
22956 fn.call(null, arg1, arg2);
22957 });
22958 case 4:
22959 return process.nextTick(function afterTickThree() {
22960 fn.call(null, arg1, arg2, arg3);
22961 });
22962 default:
22963 args = new Array(len - 1);
22964 i = 0;
22965 while (i < args.length) {
22966 args[i++] = arguments[i];
22967 }
22968 return process.nextTick(function afterTick() {
22969 fn.apply(null, args);
22970 });
22971 }
22972}
22973
22974}).call(this,require('_process'))
22975},{"_process":13}],13:[function(require,module,exports){
22976// shim for using process in browser
22977var process = module.exports = {};
22978
22979// cached from whatever global is present so that test runners that stub it
22980// don't break things. But we need to wrap it in a try catch in case it is
22981// wrapped in strict mode code which doesn't define any globals. It's inside a
22982// function because try/catches deoptimize in certain engines.
22983
22984var cachedSetTimeout;
22985var cachedClearTimeout;
22986
22987function defaultSetTimout() {
22988 throw new Error('setTimeout has not been defined');
22989}
22990function defaultClearTimeout () {
22991 throw new Error('clearTimeout has not been defined');
22992}
22993(function () {
22994 try {
22995 if (typeof setTimeout === 'function') {
22996 cachedSetTimeout = setTimeout;
22997 } else {
22998 cachedSetTimeout = defaultSetTimout;
22999 }
23000 } catch (e) {
23001 cachedSetTimeout = defaultSetTimout;
23002 }
23003 try {
23004 if (typeof clearTimeout === 'function') {
23005 cachedClearTimeout = clearTimeout;
23006 } else {
23007 cachedClearTimeout = defaultClearTimeout;
23008 }
23009 } catch (e) {
23010 cachedClearTimeout = defaultClearTimeout;
23011 }
23012} ())
23013function runTimeout(fun) {
23014 if (cachedSetTimeout === setTimeout) {
23015 //normal enviroments in sane situations
23016 return setTimeout(fun, 0);
23017 }
23018 // if setTimeout wasn't available but was latter defined
23019 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
23020 cachedSetTimeout = setTimeout;
23021 return setTimeout(fun, 0);
23022 }
23023 try {
23024 // when when somebody has screwed with setTimeout but no I.E. maddness
23025 return cachedSetTimeout(fun, 0);
23026 } catch(e){
23027 try {
23028 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23029 return cachedSetTimeout.call(null, fun, 0);
23030 } catch(e){
23031 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
23032 return cachedSetTimeout.call(this, fun, 0);
23033 }
23034 }
23035
23036
23037}
23038function runClearTimeout(marker) {
23039 if (cachedClearTimeout === clearTimeout) {
23040 //normal enviroments in sane situations
23041 return clearTimeout(marker);
23042 }
23043 // if clearTimeout wasn't available but was latter defined
23044 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
23045 cachedClearTimeout = clearTimeout;
23046 return clearTimeout(marker);
23047 }
23048 try {
23049 // when when somebody has screwed with setTimeout but no I.E. maddness
23050 return cachedClearTimeout(marker);
23051 } catch (e){
23052 try {
23053 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23054 return cachedClearTimeout.call(null, marker);
23055 } catch (e){
23056 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
23057 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
23058 return cachedClearTimeout.call(this, marker);
23059 }
23060 }
23061
23062
23063
23064}
23065var queue = [];
23066var draining = false;
23067var currentQueue;
23068var queueIndex = -1;
23069
23070function cleanUpNextTick() {
23071 if (!draining || !currentQueue) {
23072 return;
23073 }
23074 draining = false;
23075 if (currentQueue.length) {
23076 queue = currentQueue.concat(queue);
23077 } else {
23078 queueIndex = -1;
23079 }
23080 if (queue.length) {
23081 drainQueue();
23082 }
23083}
23084
23085function drainQueue() {
23086 if (draining) {
23087 return;
23088 }
23089 var timeout = runTimeout(cleanUpNextTick);
23090 draining = true;
23091
23092 var len = queue.length;
23093 while(len) {
23094 currentQueue = queue;
23095 queue = [];
23096 while (++queueIndex < len) {
23097 if (currentQueue) {
23098 currentQueue[queueIndex].run();
23099 }
23100 }
23101 queueIndex = -1;
23102 len = queue.length;
23103 }
23104 currentQueue = null;
23105 draining = false;
23106 runClearTimeout(timeout);
23107}
23108
23109process.nextTick = function (fun) {
23110 var args = new Array(arguments.length - 1);
23111 if (arguments.length > 1) {
23112 for (var i = 1; i < arguments.length; i++) {
23113 args[i - 1] = arguments[i];
23114 }
23115 }
23116 queue.push(new Item(fun, args));
23117 if (queue.length === 1 && !draining) {
23118 runTimeout(drainQueue);
23119 }
23120};
23121
23122// v8 likes predictible objects
23123function Item(fun, array) {
23124 this.fun = fun;
23125 this.array = array;
23126}
23127Item.prototype.run = function () {
23128 this.fun.apply(null, this.array);
23129};
23130process.title = 'browser';
23131process.browser = true;
23132process.env = {};
23133process.argv = [];
23134process.version = ''; // empty string to avoid regexp issues
23135process.versions = {};
23136
23137function noop() {}
23138
23139process.on = noop;
23140process.addListener = noop;
23141process.once = noop;
23142process.off = noop;
23143process.removeListener = noop;
23144process.removeAllListeners = noop;
23145process.emit = noop;
23146
23147process.binding = function (name) {
23148 throw new Error('process.binding is not supported');
23149};
23150
23151process.cwd = function () { return '/' };
23152process.chdir = function (dir) {
23153 throw new Error('process.chdir is not supported');
23154};
23155process.umask = function() { return 0; };
23156
23157},{}],14:[function(require,module,exports){
23158module.exports = require("./lib/_stream_duplex.js")
23159
23160},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
23161// a duplex stream is just a stream that is both readable and writable.
23162// Since JS doesn't have multiple prototypal inheritance, this class
23163// prototypally inherits from Readable, and then parasitically from
23164// Writable.
23165
23166'use strict';
23167
23168/*<replacement>*/
23169
23170var objectKeys = Object.keys || function (obj) {
23171 var keys = [];
23172 for (var key in obj) {
23173 keys.push(key);
23174 }return keys;
23175};
23176/*</replacement>*/
23177
23178module.exports = Duplex;
23179
23180/*<replacement>*/
23181var processNextTick = require('process-nextick-args');
23182/*</replacement>*/
23183
23184/*<replacement>*/
23185var util = require('core-util-is');
23186util.inherits = require('inherits');
23187/*</replacement>*/
23188
23189var Readable = require('./_stream_readable');
23190var Writable = require('./_stream_writable');
23191
23192util.inherits(Duplex, Readable);
23193
23194var keys = objectKeys(Writable.prototype);
23195for (var v = 0; v < keys.length; v++) {
23196 var method = keys[v];
23197 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
23198}
23199
23200function Duplex(options) {
23201 if (!(this instanceof Duplex)) return new Duplex(options);
23202
23203 Readable.call(this, options);
23204 Writable.call(this, options);
23205
23206 if (options && options.readable === false) this.readable = false;
23207
23208 if (options && options.writable === false) this.writable = false;
23209
23210 this.allowHalfOpen = true;
23211 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
23212
23213 this.once('end', onend);
23214}
23215
23216// the no-half-open enforcer
23217function onend() {
23218 // if we allow half-open state, or if the writable side ended,
23219 // then we're ok.
23220 if (this.allowHalfOpen || this._writableState.ended) return;
23221
23222 // no more data can be written.
23223 // But allow more writes to happen in this tick.
23224 processNextTick(onEndNT, this);
23225}
23226
23227function onEndNT(self) {
23228 self.end();
23229}
23230
23231function forEach(xs, f) {
23232 for (var i = 0, l = xs.length; i < l; i++) {
23233 f(xs[i], i);
23234 }
23235}
23236},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
23237// a passthrough stream.
23238// basically just the most minimal sort of Transform stream.
23239// Every written chunk gets output as-is.
23240
23241'use strict';
23242
23243module.exports = PassThrough;
23244
23245var Transform = require('./_stream_transform');
23246
23247/*<replacement>*/
23248var util = require('core-util-is');
23249util.inherits = require('inherits');
23250/*</replacement>*/
23251
23252util.inherits(PassThrough, Transform);
23253
23254function PassThrough(options) {
23255 if (!(this instanceof PassThrough)) return new PassThrough(options);
23256
23257 Transform.call(this, options);
23258}
23259
23260PassThrough.prototype._transform = function (chunk, encoding, cb) {
23261 cb(null, chunk);
23262};
23263},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
23264(function (process){
23265'use strict';
23266
23267module.exports = Readable;
23268
23269/*<replacement>*/
23270var processNextTick = require('process-nextick-args');
23271/*</replacement>*/
23272
23273/*<replacement>*/
23274var isArray = require('isarray');
23275/*</replacement>*/
23276
23277/*<replacement>*/
23278var Duplex;
23279/*</replacement>*/
23280
23281Readable.ReadableState = ReadableState;
23282
23283/*<replacement>*/
23284var EE = require('events').EventEmitter;
23285
23286var EElistenerCount = function (emitter, type) {
23287 return emitter.listeners(type).length;
23288};
23289/*</replacement>*/
23290
23291/*<replacement>*/
23292var Stream;
23293(function () {
23294 try {
23295 Stream = require('st' + 'ream');
23296 } catch (_) {} finally {
23297 if (!Stream) Stream = require('events').EventEmitter;
23298 }
23299})();
23300/*</replacement>*/
23301
23302var Buffer = require('buffer').Buffer;
23303/*<replacement>*/
23304var bufferShim = require('buffer-shims');
23305/*</replacement>*/
23306
23307/*<replacement>*/
23308var util = require('core-util-is');
23309util.inherits = require('inherits');
23310/*</replacement>*/
23311
23312/*<replacement>*/
23313var debugUtil = require('util');
23314var debug = void 0;
23315if (debugUtil && debugUtil.debuglog) {
23316 debug = debugUtil.debuglog('stream');
23317} else {
23318 debug = function () {};
23319}
23320/*</replacement>*/
23321
23322var BufferList = require('./internal/streams/BufferList');
23323var StringDecoder;
23324
23325util.inherits(Readable, Stream);
23326
23327function prependListener(emitter, event, fn) {
23328 // Sadly this is not cacheable as some libraries bundle their own
23329 // event emitter implementation with them.
23330 if (typeof emitter.prependListener === 'function') {
23331 return emitter.prependListener(event, fn);
23332 } else {
23333 // This is a hack to make sure that our error handler is attached before any
23334 // userland ones. NEVER DO THIS. This is here only because this code needs
23335 // to continue to work with older versions of Node.js that do not include
23336 // the prependListener() method. The goal is to eventually remove this hack.
23337 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
23338 }
23339}
23340
23341function ReadableState(options, stream) {
23342 Duplex = Duplex || require('./_stream_duplex');
23343
23344 options = options || {};
23345
23346 // object stream flag. Used to make read(n) ignore n and to
23347 // make all the buffer merging and length checks go away
23348 this.objectMode = !!options.objectMode;
23349
23350 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
23351
23352 // the point at which it stops calling _read() to fill the buffer
23353 // Note: 0 is a valid value, means "don't call _read preemptively ever"
23354 var hwm = options.highWaterMark;
23355 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
23356 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
23357
23358 // cast to ints.
23359 this.highWaterMark = ~ ~this.highWaterMark;
23360
23361 // A linked list is used to store data chunks instead of an array because the
23362 // linked list can remove elements from the beginning faster than
23363 // array.shift()
23364 this.buffer = new BufferList();
23365 this.length = 0;
23366 this.pipes = null;
23367 this.pipesCount = 0;
23368 this.flowing = null;
23369 this.ended = false;
23370 this.endEmitted = false;
23371 this.reading = false;
23372
23373 // a flag to be able to tell if the onwrite cb is called immediately,
23374 // or on a later tick. We set this to true at first, because any
23375 // actions that shouldn't happen until "later" should generally also
23376 // not happen before the first write call.
23377 this.sync = true;
23378
23379 // whenever we return null, then we set a flag to say
23380 // that we're awaiting a 'readable' event emission.
23381 this.needReadable = false;
23382 this.emittedReadable = false;
23383 this.readableListening = false;
23384 this.resumeScheduled = false;
23385
23386 // Crypto is kind of old and crusty. Historically, its default string
23387 // encoding is 'binary' so we have to make this configurable.
23388 // Everything else in the universe uses 'utf8', though.
23389 this.defaultEncoding = options.defaultEncoding || 'utf8';
23390
23391 // when piping, we only care about 'readable' events that happen
23392 // after read()ing all the bytes and not getting any pushback.
23393 this.ranOut = false;
23394
23395 // the number of writers that are awaiting a drain event in .pipe()s
23396 this.awaitDrain = 0;
23397
23398 // if true, a maybeReadMore has been scheduled
23399 this.readingMore = false;
23400
23401 this.decoder = null;
23402 this.encoding = null;
23403 if (options.encoding) {
23404 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23405 this.decoder = new StringDecoder(options.encoding);
23406 this.encoding = options.encoding;
23407 }
23408}
23409
23410function Readable(options) {
23411 Duplex = Duplex || require('./_stream_duplex');
23412
23413 if (!(this instanceof Readable)) return new Readable(options);
23414
23415 this._readableState = new ReadableState(options, this);
23416
23417 // legacy
23418 this.readable = true;
23419
23420 if (options && typeof options.read === 'function') this._read = options.read;
23421
23422 Stream.call(this);
23423}
23424
23425// Manually shove something into the read() buffer.
23426// This returns true if the highWaterMark has not been hit yet,
23427// similar to how Writable.write() returns true if you should
23428// write() some more.
23429Readable.prototype.push = function (chunk, encoding) {
23430 var state = this._readableState;
23431
23432 if (!state.objectMode && typeof chunk === 'string') {
23433 encoding = encoding || state.defaultEncoding;
23434 if (encoding !== state.encoding) {
23435 chunk = bufferShim.from(chunk, encoding);
23436 encoding = '';
23437 }
23438 }
23439
23440 return readableAddChunk(this, state, chunk, encoding, false);
23441};
23442
23443// Unshift should *always* be something directly out of read()
23444Readable.prototype.unshift = function (chunk) {
23445 var state = this._readableState;
23446 return readableAddChunk(this, state, chunk, '', true);
23447};
23448
23449Readable.prototype.isPaused = function () {
23450 return this._readableState.flowing === false;
23451};
23452
23453function readableAddChunk(stream, state, chunk, encoding, addToFront) {
23454 var er = chunkInvalid(state, chunk);
23455 if (er) {
23456 stream.emit('error', er);
23457 } else if (chunk === null) {
23458 state.reading = false;
23459 onEofChunk(stream, state);
23460 } else if (state.objectMode || chunk && chunk.length > 0) {
23461 if (state.ended && !addToFront) {
23462 var e = new Error('stream.push() after EOF');
23463 stream.emit('error', e);
23464 } else if (state.endEmitted && addToFront) {
23465 var _e = new Error('stream.unshift() after end event');
23466 stream.emit('error', _e);
23467 } else {
23468 var skipAdd;
23469 if (state.decoder && !addToFront && !encoding) {
23470 chunk = state.decoder.write(chunk);
23471 skipAdd = !state.objectMode && chunk.length === 0;
23472 }
23473
23474 if (!addToFront) state.reading = false;
23475
23476 // Don't add to the buffer if we've decoded to an empty string chunk and
23477 // we're not in object mode
23478 if (!skipAdd) {
23479 // if we want the data now, just emit it.
23480 if (state.flowing && state.length === 0 && !state.sync) {
23481 stream.emit('data', chunk);
23482 stream.read(0);
23483 } else {
23484 // update the buffer info.
23485 state.length += state.objectMode ? 1 : chunk.length;
23486 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
23487
23488 if (state.needReadable) emitReadable(stream);
23489 }
23490 }
23491
23492 maybeReadMore(stream, state);
23493 }
23494 } else if (!addToFront) {
23495 state.reading = false;
23496 }
23497
23498 return needMoreData(state);
23499}
23500
23501// if it's past the high water mark, we can push in some more.
23502// Also, if we have no data yet, we can stand some
23503// more bytes. This is to work around cases where hwm=0,
23504// such as the repl. Also, if the push() triggered a
23505// readable event, and the user called read(largeNumber) such that
23506// needReadable was set, then we ought to push more, so that another
23507// 'readable' event will be triggered.
23508function needMoreData(state) {
23509 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
23510}
23511
23512// backwards compatibility.
23513Readable.prototype.setEncoding = function (enc) {
23514 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23515 this._readableState.decoder = new StringDecoder(enc);
23516 this._readableState.encoding = enc;
23517 return this;
23518};
23519
23520// Don't raise the hwm > 8MB
23521var MAX_HWM = 0x800000;
23522function computeNewHighWaterMark(n) {
23523 if (n >= MAX_HWM) {
23524 n = MAX_HWM;
23525 } else {
23526 // Get the next highest power of 2 to prevent increasing hwm excessively in
23527 // tiny amounts
23528 n--;
23529 n |= n >>> 1;
23530 n |= n >>> 2;
23531 n |= n >>> 4;
23532 n |= n >>> 8;
23533 n |= n >>> 16;
23534 n++;
23535 }
23536 return n;
23537}
23538
23539// This function is designed to be inlinable, so please take care when making
23540// changes to the function body.
23541function howMuchToRead(n, state) {
23542 if (n <= 0 || state.length === 0 && state.ended) return 0;
23543 if (state.objectMode) return 1;
23544 if (n !== n) {
23545 // Only flow one buffer at a time
23546 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
23547 }
23548 // If we're asking for more than the current hwm, then raise the hwm.
23549 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
23550 if (n <= state.length) return n;
23551 // Don't have enough
23552 if (!state.ended) {
23553 state.needReadable = true;
23554 return 0;
23555 }
23556 return state.length;
23557}
23558
23559// you can override either this method, or the async _read(n) below.
23560Readable.prototype.read = function (n) {
23561 debug('read', n);
23562 n = parseInt(n, 10);
23563 var state = this._readableState;
23564 var nOrig = n;
23565
23566 if (n !== 0) state.emittedReadable = false;
23567
23568 // if we're doing read(0) to trigger a readable event, but we
23569 // already have a bunch of data in the buffer, then just trigger
23570 // the 'readable' event and move on.
23571 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
23572 debug('read: emitReadable', state.length, state.ended);
23573 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
23574 return null;
23575 }
23576
23577 n = howMuchToRead(n, state);
23578
23579 // if we've ended, and we're now clear, then finish it up.
23580 if (n === 0 && state.ended) {
23581 if (state.length === 0) endReadable(this);
23582 return null;
23583 }
23584
23585 // All the actual chunk generation logic needs to be
23586 // *below* the call to _read. The reason is that in certain
23587 // synthetic stream cases, such as passthrough streams, _read
23588 // may be a completely synchronous operation which may change
23589 // the state of the read buffer, providing enough data when
23590 // before there was *not* enough.
23591 //
23592 // So, the steps are:
23593 // 1. Figure out what the state of things will be after we do
23594 // a read from the buffer.
23595 //
23596 // 2. If that resulting state will trigger a _read, then call _read.
23597 // Note that this may be asynchronous, or synchronous. Yes, it is
23598 // deeply ugly to write APIs this way, but that still doesn't mean
23599 // that the Readable class should behave improperly, as streams are
23600 // designed to be sync/async agnostic.
23601 // Take note if the _read call is sync or async (ie, if the read call
23602 // has returned yet), so that we know whether or not it's safe to emit
23603 // 'readable' etc.
23604 //
23605 // 3. Actually pull the requested chunks out of the buffer and return.
23606
23607 // if we need a readable event, then we need to do some reading.
23608 var doRead = state.needReadable;
23609 debug('need readable', doRead);
23610
23611 // if we currently have less than the highWaterMark, then also read some
23612 if (state.length === 0 || state.length - n < state.highWaterMark) {
23613 doRead = true;
23614 debug('length less than watermark', doRead);
23615 }
23616
23617 // however, if we've ended, then there's no point, and if we're already
23618 // reading, then it's unnecessary.
23619 if (state.ended || state.reading) {
23620 doRead = false;
23621 debug('reading or ended', doRead);
23622 } else if (doRead) {
23623 debug('do read');
23624 state.reading = true;
23625 state.sync = true;
23626 // if the length is currently zero, then we *need* a readable event.
23627 if (state.length === 0) state.needReadable = true;
23628 // call internal read method
23629 this._read(state.highWaterMark);
23630 state.sync = false;
23631 // If _read pushed data synchronously, then `reading` will be false,
23632 // and we need to re-evaluate how much data we can return to the user.
23633 if (!state.reading) n = howMuchToRead(nOrig, state);
23634 }
23635
23636 var ret;
23637 if (n > 0) ret = fromList(n, state);else ret = null;
23638
23639 if (ret === null) {
23640 state.needReadable = true;
23641 n = 0;
23642 } else {
23643 state.length -= n;
23644 }
23645
23646 if (state.length === 0) {
23647 // If we have nothing in the buffer, then we want to know
23648 // as soon as we *do* get something into the buffer.
23649 if (!state.ended) state.needReadable = true;
23650
23651 // If we tried to read() past the EOF, then emit end on the next tick.
23652 if (nOrig !== n && state.ended) endReadable(this);
23653 }
23654
23655 if (ret !== null) this.emit('data', ret);
23656
23657 return ret;
23658};
23659
23660function chunkInvalid(state, chunk) {
23661 var er = null;
23662 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
23663 er = new TypeError('Invalid non-string/buffer chunk');
23664 }
23665 return er;
23666}
23667
23668function onEofChunk(stream, state) {
23669 if (state.ended) return;
23670 if (state.decoder) {
23671 var chunk = state.decoder.end();
23672 if (chunk && chunk.length) {
23673 state.buffer.push(chunk);
23674 state.length += state.objectMode ? 1 : chunk.length;
23675 }
23676 }
23677 state.ended = true;
23678
23679 // emit 'readable' now to make sure it gets picked up.
23680 emitReadable(stream);
23681}
23682
23683// Don't emit readable right away in sync mode, because this can trigger
23684// another read() call => stack overflow. This way, it might trigger
23685// a nextTick recursion warning, but that's not so bad.
23686function emitReadable(stream) {
23687 var state = stream._readableState;
23688 state.needReadable = false;
23689 if (!state.emittedReadable) {
23690 debug('emitReadable', state.flowing);
23691 state.emittedReadable = true;
23692 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
23693 }
23694}
23695
23696function emitReadable_(stream) {
23697 debug('emit readable');
23698 stream.emit('readable');
23699 flow(stream);
23700}
23701
23702// at this point, the user has presumably seen the 'readable' event,
23703// and called read() to consume some data. that may have triggered
23704// in turn another _read(n) call, in which case reading = true if
23705// it's in progress.
23706// However, if we're not ended, or reading, and the length < hwm,
23707// then go ahead and try to read some more preemptively.
23708function maybeReadMore(stream, state) {
23709 if (!state.readingMore) {
23710 state.readingMore = true;
23711 processNextTick(maybeReadMore_, stream, state);
23712 }
23713}
23714
23715function maybeReadMore_(stream, state) {
23716 var len = state.length;
23717 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
23718 debug('maybeReadMore read 0');
23719 stream.read(0);
23720 if (len === state.length)
23721 // didn't get any data, stop spinning.
23722 break;else len = state.length;
23723 }
23724 state.readingMore = false;
23725}
23726
23727// abstract method. to be overridden in specific implementation classes.
23728// call cb(er, data) where data is <= n in length.
23729// for virtual (non-string, non-buffer) streams, "length" is somewhat
23730// arbitrary, and perhaps not very meaningful.
23731Readable.prototype._read = function (n) {
23732 this.emit('error', new Error('_read() is not implemented'));
23733};
23734
23735Readable.prototype.pipe = function (dest, pipeOpts) {
23736 var src = this;
23737 var state = this._readableState;
23738
23739 switch (state.pipesCount) {
23740 case 0:
23741 state.pipes = dest;
23742 break;
23743 case 1:
23744 state.pipes = [state.pipes, dest];
23745 break;
23746 default:
23747 state.pipes.push(dest);
23748 break;
23749 }
23750 state.pipesCount += 1;
23751 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
23752
23753 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
23754
23755 var endFn = doEnd ? onend : cleanup;
23756 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
23757
23758 dest.on('unpipe', onunpipe);
23759 function onunpipe(readable) {
23760 debug('onunpipe');
23761 if (readable === src) {
23762 cleanup();
23763 }
23764 }
23765
23766 function onend() {
23767 debug('onend');
23768 dest.end();
23769 }
23770
23771 // when the dest drains, it reduces the awaitDrain counter
23772 // on the source. This would be more elegant with a .once()
23773 // handler in flow(), but adding and removing repeatedly is
23774 // too slow.
23775 var ondrain = pipeOnDrain(src);
23776 dest.on('drain', ondrain);
23777
23778 var cleanedUp = false;
23779 function cleanup() {
23780 debug('cleanup');
23781 // cleanup event handlers once the pipe is broken
23782 dest.removeListener('close', onclose);
23783 dest.removeListener('finish', onfinish);
23784 dest.removeListener('drain', ondrain);
23785 dest.removeListener('error', onerror);
23786 dest.removeListener('unpipe', onunpipe);
23787 src.removeListener('end', onend);
23788 src.removeListener('end', cleanup);
23789 src.removeListener('data', ondata);
23790
23791 cleanedUp = true;
23792
23793 // if the reader is waiting for a drain event from this
23794 // specific writer, then it would cause it to never start
23795 // flowing again.
23796 // So, if this is awaiting a drain, then we just call it now.
23797 // If we don't know, then assume that we are waiting for one.
23798 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
23799 }
23800
23801 // If the user pushes more data while we're writing to dest then we'll end up
23802 // in ondata again. However, we only want to increase awaitDrain once because
23803 // dest will only emit one 'drain' event for the multiple writes.
23804 // => Introduce a guard on increasing awaitDrain.
23805 var increasedAwaitDrain = false;
23806 src.on('data', ondata);
23807 function ondata(chunk) {
23808 debug('ondata');
23809 increasedAwaitDrain = false;
23810 var ret = dest.write(chunk);
23811 if (false === ret && !increasedAwaitDrain) {
23812 // If the user unpiped during `dest.write()`, it is possible
23813 // to get stuck in a permanently paused state if that write
23814 // also returned false.
23815 // => Check whether `dest` is still a piping destination.
23816 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
23817 debug('false write response, pause', src._readableState.awaitDrain);
23818 src._readableState.awaitDrain++;
23819 increasedAwaitDrain = true;
23820 }
23821 src.pause();
23822 }
23823 }
23824
23825 // if the dest has an error, then stop piping into it.
23826 // however, don't suppress the throwing behavior for this.
23827 function onerror(er) {
23828 debug('onerror', er);
23829 unpipe();
23830 dest.removeListener('error', onerror);
23831 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
23832 }
23833
23834 // Make sure our error handler is attached before userland ones.
23835 prependListener(dest, 'error', onerror);
23836
23837 // Both close and finish should trigger unpipe, but only once.
23838 function onclose() {
23839 dest.removeListener('finish', onfinish);
23840 unpipe();
23841 }
23842 dest.once('close', onclose);
23843 function onfinish() {
23844 debug('onfinish');
23845 dest.removeListener('close', onclose);
23846 unpipe();
23847 }
23848 dest.once('finish', onfinish);
23849
23850 function unpipe() {
23851 debug('unpipe');
23852 src.unpipe(dest);
23853 }
23854
23855 // tell the dest that it's being piped to
23856 dest.emit('pipe', src);
23857
23858 // start the flow if it hasn't been started already.
23859 if (!state.flowing) {
23860 debug('pipe resume');
23861 src.resume();
23862 }
23863
23864 return dest;
23865};
23866
23867function pipeOnDrain(src) {
23868 return function () {
23869 var state = src._readableState;
23870 debug('pipeOnDrain', state.awaitDrain);
23871 if (state.awaitDrain) state.awaitDrain--;
23872 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
23873 state.flowing = true;
23874 flow(src);
23875 }
23876 };
23877}
23878
23879Readable.prototype.unpipe = function (dest) {
23880 var state = this._readableState;
23881
23882 // if we're not piping anywhere, then do nothing.
23883 if (state.pipesCount === 0) return this;
23884
23885 // just one destination. most common case.
23886 if (state.pipesCount === 1) {
23887 // passed in one, but it's not the right one.
23888 if (dest && dest !== state.pipes) return this;
23889
23890 if (!dest) dest = state.pipes;
23891
23892 // got a match.
23893 state.pipes = null;
23894 state.pipesCount = 0;
23895 state.flowing = false;
23896 if (dest) dest.emit('unpipe', this);
23897 return this;
23898 }
23899
23900 // slow case. multiple pipe destinations.
23901
23902 if (!dest) {
23903 // remove all.
23904 var dests = state.pipes;
23905 var len = state.pipesCount;
23906 state.pipes = null;
23907 state.pipesCount = 0;
23908 state.flowing = false;
23909
23910 for (var i = 0; i < len; i++) {
23911 dests[i].emit('unpipe', this);
23912 }return this;
23913 }
23914
23915 // try to find the right one.
23916 var index = indexOf(state.pipes, dest);
23917 if (index === -1) return this;
23918
23919 state.pipes.splice(index, 1);
23920 state.pipesCount -= 1;
23921 if (state.pipesCount === 1) state.pipes = state.pipes[0];
23922
23923 dest.emit('unpipe', this);
23924
23925 return this;
23926};
23927
23928// set up data events if they are asked for
23929// Ensure readable listeners eventually get something
23930Readable.prototype.on = function (ev, fn) {
23931 var res = Stream.prototype.on.call(this, ev, fn);
23932
23933 if (ev === 'data') {
23934 // Start flowing on next tick if stream isn't explicitly paused
23935 if (this._readableState.flowing !== false) this.resume();
23936 } else if (ev === 'readable') {
23937 var state = this._readableState;
23938 if (!state.endEmitted && !state.readableListening) {
23939 state.readableListening = state.needReadable = true;
23940 state.emittedReadable = false;
23941 if (!state.reading) {
23942 processNextTick(nReadingNextTick, this);
23943 } else if (state.length) {
23944 emitReadable(this, state);
23945 }
23946 }
23947 }
23948
23949 return res;
23950};
23951Readable.prototype.addListener = Readable.prototype.on;
23952
23953function nReadingNextTick(self) {
23954 debug('readable nexttick read 0');
23955 self.read(0);
23956}
23957
23958// pause() and resume() are remnants of the legacy readable stream API
23959// If the user uses them, then switch into old mode.
23960Readable.prototype.resume = function () {
23961 var state = this._readableState;
23962 if (!state.flowing) {
23963 debug('resume');
23964 state.flowing = true;
23965 resume(this, state);
23966 }
23967 return this;
23968};
23969
23970function resume(stream, state) {
23971 if (!state.resumeScheduled) {
23972 state.resumeScheduled = true;
23973 processNextTick(resume_, stream, state);
23974 }
23975}
23976
23977function resume_(stream, state) {
23978 if (!state.reading) {
23979 debug('resume read 0');
23980 stream.read(0);
23981 }
23982
23983 state.resumeScheduled = false;
23984 state.awaitDrain = 0;
23985 stream.emit('resume');
23986 flow(stream);
23987 if (state.flowing && !state.reading) stream.read(0);
23988}
23989
23990Readable.prototype.pause = function () {
23991 debug('call pause flowing=%j', this._readableState.flowing);
23992 if (false !== this._readableState.flowing) {
23993 debug('pause');
23994 this._readableState.flowing = false;
23995 this.emit('pause');
23996 }
23997 return this;
23998};
23999
24000function flow(stream) {
24001 var state = stream._readableState;
24002 debug('flow', state.flowing);
24003 while (state.flowing && stream.read() !== null) {}
24004}
24005
24006// wrap an old-style stream as the async data source.
24007// This is *not* part of the readable stream interface.
24008// It is an ugly unfortunate mess of history.
24009Readable.prototype.wrap = function (stream) {
24010 var state = this._readableState;
24011 var paused = false;
24012
24013 var self = this;
24014 stream.on('end', function () {
24015 debug('wrapped end');
24016 if (state.decoder && !state.ended) {
24017 var chunk = state.decoder.end();
24018 if (chunk && chunk.length) self.push(chunk);
24019 }
24020
24021 self.push(null);
24022 });
24023
24024 stream.on('data', function (chunk) {
24025 debug('wrapped data');
24026 if (state.decoder) chunk = state.decoder.write(chunk);
24027
24028 // don't skip over falsy values in objectMode
24029 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
24030
24031 var ret = self.push(chunk);
24032 if (!ret) {
24033 paused = true;
24034 stream.pause();
24035 }
24036 });
24037
24038 // proxy all the other methods.
24039 // important when wrapping filters and duplexes.
24040 for (var i in stream) {
24041 if (this[i] === undefined && typeof stream[i] === 'function') {
24042 this[i] = function (method) {
24043 return function () {
24044 return stream[method].apply(stream, arguments);
24045 };
24046 }(i);
24047 }
24048 }
24049
24050 // proxy certain important events.
24051 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
24052 forEach(events, function (ev) {
24053 stream.on(ev, self.emit.bind(self, ev));
24054 });
24055
24056 // when we try to consume some more bytes, simply unpause the
24057 // underlying stream.
24058 self._read = function (n) {
24059 debug('wrapped _read', n);
24060 if (paused) {
24061 paused = false;
24062 stream.resume();
24063 }
24064 };
24065
24066 return self;
24067};
24068
24069// exposed for testing purposes only.
24070Readable._fromList = fromList;
24071
24072// Pluck off n bytes from an array of buffers.
24073// Length is the combined lengths of all the buffers in the list.
24074// This function is designed to be inlinable, so please take care when making
24075// changes to the function body.
24076function fromList(n, state) {
24077 // nothing buffered
24078 if (state.length === 0) return null;
24079
24080 var ret;
24081 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
24082 // read it all, truncate the list
24083 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
24084 state.buffer.clear();
24085 } else {
24086 // read part of list
24087 ret = fromListPartial(n, state.buffer, state.decoder);
24088 }
24089
24090 return ret;
24091}
24092
24093// Extracts only enough buffered data to satisfy the amount requested.
24094// This function is designed to be inlinable, so please take care when making
24095// changes to the function body.
24096function fromListPartial(n, list, hasStrings) {
24097 var ret;
24098 if (n < list.head.data.length) {
24099 // slice is the same for buffers and strings
24100 ret = list.head.data.slice(0, n);
24101 list.head.data = list.head.data.slice(n);
24102 } else if (n === list.head.data.length) {
24103 // first chunk is a perfect match
24104 ret = list.shift();
24105 } else {
24106 // result spans more than one buffer
24107 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
24108 }
24109 return ret;
24110}
24111
24112// Copies a specified amount of characters from the list of buffered data
24113// chunks.
24114// This function is designed to be inlinable, so please take care when making
24115// changes to the function body.
24116function copyFromBufferString(n, list) {
24117 var p = list.head;
24118 var c = 1;
24119 var ret = p.data;
24120 n -= ret.length;
24121 while (p = p.next) {
24122 var str = p.data;
24123 var nb = n > str.length ? str.length : n;
24124 if (nb === str.length) ret += str;else ret += str.slice(0, n);
24125 n -= nb;
24126 if (n === 0) {
24127 if (nb === str.length) {
24128 ++c;
24129 if (p.next) list.head = p.next;else list.head = list.tail = null;
24130 } else {
24131 list.head = p;
24132 p.data = str.slice(nb);
24133 }
24134 break;
24135 }
24136 ++c;
24137 }
24138 list.length -= c;
24139 return ret;
24140}
24141
24142// Copies a specified amount of bytes from the list of buffered data chunks.
24143// This function is designed to be inlinable, so please take care when making
24144// changes to the function body.
24145function copyFromBuffer(n, list) {
24146 var ret = bufferShim.allocUnsafe(n);
24147 var p = list.head;
24148 var c = 1;
24149 p.data.copy(ret);
24150 n -= p.data.length;
24151 while (p = p.next) {
24152 var buf = p.data;
24153 var nb = n > buf.length ? buf.length : n;
24154 buf.copy(ret, ret.length - n, 0, nb);
24155 n -= nb;
24156 if (n === 0) {
24157 if (nb === buf.length) {
24158 ++c;
24159 if (p.next) list.head = p.next;else list.head = list.tail = null;
24160 } else {
24161 list.head = p;
24162 p.data = buf.slice(nb);
24163 }
24164 break;
24165 }
24166 ++c;
24167 }
24168 list.length -= c;
24169 return ret;
24170}
24171
24172function endReadable(stream) {
24173 var state = stream._readableState;
24174
24175 // If we get here before consuming all the bytes, then that is a
24176 // bug in node. Should never happen.
24177 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
24178
24179 if (!state.endEmitted) {
24180 state.ended = true;
24181 processNextTick(endReadableNT, state, stream);
24182 }
24183}
24184
24185function endReadableNT(state, stream) {
24186 // Check that we didn't get one last unshift.
24187 if (!state.endEmitted && state.length === 0) {
24188 state.endEmitted = true;
24189 stream.readable = false;
24190 stream.emit('end');
24191 }
24192}
24193
24194function forEach(xs, f) {
24195 for (var i = 0, l = xs.length; i < l; i++) {
24196 f(xs[i], i);
24197 }
24198}
24199
24200function indexOf(xs, x) {
24201 for (var i = 0, l = xs.length; i < l; i++) {
24202 if (xs[i] === x) return i;
24203 }
24204 return -1;
24205}
24206}).call(this,require('_process'))
24207},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
24208// a transform stream is a readable/writable stream where you do
24209// something with the data. Sometimes it's called a "filter",
24210// but that's not a great name for it, since that implies a thing where
24211// some bits pass through, and others are simply ignored. (That would
24212// be a valid example of a transform, of course.)
24213//
24214// While the output is causally related to the input, it's not a
24215// necessarily symmetric or synchronous transformation. For example,
24216// a zlib stream might take multiple plain-text writes(), and then
24217// emit a single compressed chunk some time in the future.
24218//
24219// Here's how this works:
24220//
24221// The Transform stream has all the aspects of the readable and writable
24222// stream classes. When you write(chunk), that calls _write(chunk,cb)
24223// internally, and returns false if there's a lot of pending writes
24224// buffered up. When you call read(), that calls _read(n) until
24225// there's enough pending readable data buffered up.
24226//
24227// In a transform stream, the written data is placed in a buffer. When
24228// _read(n) is called, it transforms the queued up data, calling the
24229// buffered _write cb's as it consumes chunks. If consuming a single
24230// written chunk would result in multiple output chunks, then the first
24231// outputted bit calls the readcb, and subsequent chunks just go into
24232// the read buffer, and will cause it to emit 'readable' if necessary.
24233//
24234// This way, back-pressure is actually determined by the reading side,
24235// since _read has to be called to start processing a new chunk. However,
24236// a pathological inflate type of transform can cause excessive buffering
24237// here. For example, imagine a stream where every byte of input is
24238// interpreted as an integer from 0-255, and then results in that many
24239// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
24240// 1kb of data being output. In this case, you could write a very small
24241// amount of input, and end up with a very large amount of output. In
24242// such a pathological inflating mechanism, there'd be no way to tell
24243// the system to stop doing the transform. A single 4MB write could
24244// cause the system to run out of memory.
24245//
24246// However, even in such a pathological case, only a single written chunk
24247// would be consumed, and then the rest would wait (un-transformed) until
24248// the results of the previous transformed chunk were consumed.
24249
24250'use strict';
24251
24252module.exports = Transform;
24253
24254var Duplex = require('./_stream_duplex');
24255
24256/*<replacement>*/
24257var util = require('core-util-is');
24258util.inherits = require('inherits');
24259/*</replacement>*/
24260
24261util.inherits(Transform, Duplex);
24262
24263function TransformState(stream) {
24264 this.afterTransform = function (er, data) {
24265 return afterTransform(stream, er, data);
24266 };
24267
24268 this.needTransform = false;
24269 this.transforming = false;
24270 this.writecb = null;
24271 this.writechunk = null;
24272 this.writeencoding = null;
24273}
24274
24275function afterTransform(stream, er, data) {
24276 var ts = stream._transformState;
24277 ts.transforming = false;
24278
24279 var cb = ts.writecb;
24280
24281 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
24282
24283 ts.writechunk = null;
24284 ts.writecb = null;
24285
24286 if (data !== null && data !== undefined) stream.push(data);
24287
24288 cb(er);
24289
24290 var rs = stream._readableState;
24291 rs.reading = false;
24292 if (rs.needReadable || rs.length < rs.highWaterMark) {
24293 stream._read(rs.highWaterMark);
24294 }
24295}
24296
24297function Transform(options) {
24298 if (!(this instanceof Transform)) return new Transform(options);
24299
24300 Duplex.call(this, options);
24301
24302 this._transformState = new TransformState(this);
24303
24304 var stream = this;
24305
24306 // start out asking for a readable event once data is transformed.
24307 this._readableState.needReadable = true;
24308
24309 // we have implemented the _read method, and done the other things
24310 // that Readable wants before the first _read call, so unset the
24311 // sync guard flag.
24312 this._readableState.sync = false;
24313
24314 if (options) {
24315 if (typeof options.transform === 'function') this._transform = options.transform;
24316
24317 if (typeof options.flush === 'function') this._flush = options.flush;
24318 }
24319
24320 // When the writable side finishes, then flush out anything remaining.
24321 this.once('prefinish', function () {
24322 if (typeof this._flush === 'function') this._flush(function (er, data) {
24323 done(stream, er, data);
24324 });else done(stream);
24325 });
24326}
24327
24328Transform.prototype.push = function (chunk, encoding) {
24329 this._transformState.needTransform = false;
24330 return Duplex.prototype.push.call(this, chunk, encoding);
24331};
24332
24333// This is the part where you do stuff!
24334// override this function in implementation classes.
24335// 'chunk' is an input chunk.
24336//
24337// Call `push(newChunk)` to pass along transformed output
24338// to the readable side. You may call 'push' zero or more times.
24339//
24340// Call `cb(err)` when you are done with this chunk. If you pass
24341// an error, then that'll put the hurt on the whole operation. If you
24342// never call cb(), then you'll never get another chunk.
24343Transform.prototype._transform = function (chunk, encoding, cb) {
24344 throw new Error('_transform() is not implemented');
24345};
24346
24347Transform.prototype._write = function (chunk, encoding, cb) {
24348 var ts = this._transformState;
24349 ts.writecb = cb;
24350 ts.writechunk = chunk;
24351 ts.writeencoding = encoding;
24352 if (!ts.transforming) {
24353 var rs = this._readableState;
24354 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
24355 }
24356};
24357
24358// Doesn't matter what the args are here.
24359// _transform does all the work.
24360// That we got here means that the readable side wants more data.
24361Transform.prototype._read = function (n) {
24362 var ts = this._transformState;
24363
24364 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
24365 ts.transforming = true;
24366 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
24367 } else {
24368 // mark that we need a transform, so that any data that comes in
24369 // will get processed, now that we've asked for it.
24370 ts.needTransform = true;
24371 }
24372};
24373
24374function done(stream, er, data) {
24375 if (er) return stream.emit('error', er);
24376
24377 if (data !== null && data !== undefined) stream.push(data);
24378
24379 // if there's nothing in the write buffer, then that means
24380 // that nothing more will ever be provided
24381 var ws = stream._writableState;
24382 var ts = stream._transformState;
24383
24384 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
24385
24386 if (ts.transforming) throw new Error('Calling transform done when still transforming');
24387
24388 return stream.push(null);
24389}
24390},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
24391(function (process){
24392// A bit simpler than readable streams.
24393// Implement an async ._write(chunk, encoding, cb), and it'll handle all
24394// the drain event emission and buffering.
24395
24396'use strict';
24397
24398module.exports = Writable;
24399
24400/*<replacement>*/
24401var processNextTick = require('process-nextick-args');
24402/*</replacement>*/
24403
24404/*<replacement>*/
24405var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
24406/*</replacement>*/
24407
24408/*<replacement>*/
24409var Duplex;
24410/*</replacement>*/
24411
24412Writable.WritableState = WritableState;
24413
24414/*<replacement>*/
24415var util = require('core-util-is');
24416util.inherits = require('inherits');
24417/*</replacement>*/
24418
24419/*<replacement>*/
24420var internalUtil = {
24421 deprecate: require('util-deprecate')
24422};
24423/*</replacement>*/
24424
24425/*<replacement>*/
24426var Stream;
24427(function () {
24428 try {
24429 Stream = require('st' + 'ream');
24430 } catch (_) {} finally {
24431 if (!Stream) Stream = require('events').EventEmitter;
24432 }
24433})();
24434/*</replacement>*/
24435
24436var Buffer = require('buffer').Buffer;
24437/*<replacement>*/
24438var bufferShim = require('buffer-shims');
24439/*</replacement>*/
24440
24441util.inherits(Writable, Stream);
24442
24443function nop() {}
24444
24445function WriteReq(chunk, encoding, cb) {
24446 this.chunk = chunk;
24447 this.encoding = encoding;
24448 this.callback = cb;
24449 this.next = null;
24450}
24451
24452function WritableState(options, stream) {
24453 Duplex = Duplex || require('./_stream_duplex');
24454
24455 options = options || {};
24456
24457 // object stream flag to indicate whether or not this stream
24458 // contains buffers or objects.
24459 this.objectMode = !!options.objectMode;
24460
24461 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
24462
24463 // the point at which write() starts returning false
24464 // Note: 0 is a valid value, means that we always return false if
24465 // the entire buffer is not flushed immediately on write()
24466 var hwm = options.highWaterMark;
24467 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
24468 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
24469
24470 // cast to ints.
24471 this.highWaterMark = ~ ~this.highWaterMark;
24472
24473 // drain event flag.
24474 this.needDrain = false;
24475 // at the start of calling end()
24476 this.ending = false;
24477 // when end() has been called, and returned
24478 this.ended = false;
24479 // when 'finish' is emitted
24480 this.finished = false;
24481
24482 // should we decode strings into buffers before passing to _write?
24483 // this is here so that some node-core streams can optimize string
24484 // handling at a lower level.
24485 var noDecode = options.decodeStrings === false;
24486 this.decodeStrings = !noDecode;
24487
24488 // Crypto is kind of old and crusty. Historically, its default string
24489 // encoding is 'binary' so we have to make this configurable.
24490 // Everything else in the universe uses 'utf8', though.
24491 this.defaultEncoding = options.defaultEncoding || 'utf8';
24492
24493 // not an actual buffer we keep track of, but a measurement
24494 // of how much we're waiting to get pushed to some underlying
24495 // socket or file.
24496 this.length = 0;
24497
24498 // a flag to see when we're in the middle of a write.
24499 this.writing = false;
24500
24501 // when true all writes will be buffered until .uncork() call
24502 this.corked = 0;
24503
24504 // a flag to be able to tell if the onwrite cb is called immediately,
24505 // or on a later tick. We set this to true at first, because any
24506 // actions that shouldn't happen until "later" should generally also
24507 // not happen before the first write call.
24508 this.sync = true;
24509
24510 // a flag to know if we're processing previously buffered items, which
24511 // may call the _write() callback in the same tick, so that we don't
24512 // end up in an overlapped onwrite situation.
24513 this.bufferProcessing = false;
24514
24515 // the callback that's passed to _write(chunk,cb)
24516 this.onwrite = function (er) {
24517 onwrite(stream, er);
24518 };
24519
24520 // the callback that the user supplies to write(chunk,encoding,cb)
24521 this.writecb = null;
24522
24523 // the amount that is being written when _write is called.
24524 this.writelen = 0;
24525
24526 this.bufferedRequest = null;
24527 this.lastBufferedRequest = null;
24528
24529 // number of pending user-supplied write callbacks
24530 // this must be 0 before 'finish' can be emitted
24531 this.pendingcb = 0;
24532
24533 // emit prefinish if the only thing we're waiting for is _write cbs
24534 // This is relevant for synchronous Transform streams
24535 this.prefinished = false;
24536
24537 // True if the error was already emitted and should not be thrown again
24538 this.errorEmitted = false;
24539
24540 // count buffered requests
24541 this.bufferedRequestCount = 0;
24542
24543 // allocate the first CorkedRequest, there is always
24544 // one allocated and free to use, and we maintain at most two
24545 this.corkedRequestsFree = new CorkedRequest(this);
24546}
24547
24548WritableState.prototype.getBuffer = function getBuffer() {
24549 var current = this.bufferedRequest;
24550 var out = [];
24551 while (current) {
24552 out.push(current);
24553 current = current.next;
24554 }
24555 return out;
24556};
24557
24558(function () {
24559 try {
24560 Object.defineProperty(WritableState.prototype, 'buffer', {
24561 get: internalUtil.deprecate(function () {
24562 return this.getBuffer();
24563 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
24564 });
24565 } catch (_) {}
24566})();
24567
24568// Test _writableState for inheritance to account for Duplex streams,
24569// whose prototype chain only points to Readable.
24570var realHasInstance;
24571if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
24572 realHasInstance = Function.prototype[Symbol.hasInstance];
24573 Object.defineProperty(Writable, Symbol.hasInstance, {
24574 value: function (object) {
24575 if (realHasInstance.call(this, object)) return true;
24576
24577 return object && object._writableState instanceof WritableState;
24578 }
24579 });
24580} else {
24581 realHasInstance = function (object) {
24582 return object instanceof this;
24583 };
24584}
24585
24586function Writable(options) {
24587 Duplex = Duplex || require('./_stream_duplex');
24588
24589 // Writable ctor is applied to Duplexes, too.
24590 // `realHasInstance` is necessary because using plain `instanceof`
24591 // would return false, as no `_writableState` property is attached.
24592
24593 // Trying to use the custom `instanceof` for Writable here will also break the
24594 // Node.js LazyTransform implementation, which has a non-trivial getter for
24595 // `_writableState` that would lead to infinite recursion.
24596 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
24597 return new Writable(options);
24598 }
24599
24600 this._writableState = new WritableState(options, this);
24601
24602 // legacy.
24603 this.writable = true;
24604
24605 if (options) {
24606 if (typeof options.write === 'function') this._write = options.write;
24607
24608 if (typeof options.writev === 'function') this._writev = options.writev;
24609 }
24610
24611 Stream.call(this);
24612}
24613
24614// Otherwise people can pipe Writable streams, which is just wrong.
24615Writable.prototype.pipe = function () {
24616 this.emit('error', new Error('Cannot pipe, not readable'));
24617};
24618
24619function writeAfterEnd(stream, cb) {
24620 var er = new Error('write after end');
24621 // TODO: defer error events consistently everywhere, not just the cb
24622 stream.emit('error', er);
24623 processNextTick(cb, er);
24624}
24625
24626// If we get something that is not a buffer, string, null, or undefined,
24627// and we're not in objectMode, then that's an error.
24628// Otherwise stream chunks are all considered to be of length=1, and the
24629// watermarks determine how many objects to keep in the buffer, rather than
24630// how many bytes or characters.
24631function validChunk(stream, state, chunk, cb) {
24632 var valid = true;
24633 var er = false;
24634 // Always throw error if a null is written
24635 // if we are not in object mode then throw
24636 // if it is not a buffer, string, or undefined.
24637 if (chunk === null) {
24638 er = new TypeError('May not write null values to stream');
24639 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
24640 er = new TypeError('Invalid non-string/buffer chunk');
24641 }
24642 if (er) {
24643 stream.emit('error', er);
24644 processNextTick(cb, er);
24645 valid = false;
24646 }
24647 return valid;
24648}
24649
24650Writable.prototype.write = function (chunk, encoding, cb) {
24651 var state = this._writableState;
24652 var ret = false;
24653
24654 if (typeof encoding === 'function') {
24655 cb = encoding;
24656 encoding = null;
24657 }
24658
24659 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
24660
24661 if (typeof cb !== 'function') cb = nop;
24662
24663 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
24664 state.pendingcb++;
24665 ret = writeOrBuffer(this, state, chunk, encoding, cb);
24666 }
24667
24668 return ret;
24669};
24670
24671Writable.prototype.cork = function () {
24672 var state = this._writableState;
24673
24674 state.corked++;
24675};
24676
24677Writable.prototype.uncork = function () {
24678 var state = this._writableState;
24679
24680 if (state.corked) {
24681 state.corked--;
24682
24683 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
24684 }
24685};
24686
24687Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
24688 // node::ParseEncoding() requires lower case.
24689 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
24690 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
24691 this._writableState.defaultEncoding = encoding;
24692 return this;
24693};
24694
24695function decodeChunk(state, chunk, encoding) {
24696 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
24697 chunk = bufferShim.from(chunk, encoding);
24698 }
24699 return chunk;
24700}
24701
24702// if we're already writing something, then just put this
24703// in the queue, and wait our turn. Otherwise, call _write
24704// If we return false, then we need a drain event, so set that flag.
24705function writeOrBuffer(stream, state, chunk, encoding, cb) {
24706 chunk = decodeChunk(state, chunk, encoding);
24707
24708 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
24709 var len = state.objectMode ? 1 : chunk.length;
24710
24711 state.length += len;
24712
24713 var ret = state.length < state.highWaterMark;
24714 // we must ensure that previous needDrain will not be reset to false.
24715 if (!ret) state.needDrain = true;
24716
24717 if (state.writing || state.corked) {
24718 var last = state.lastBufferedRequest;
24719 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
24720 if (last) {
24721 last.next = state.lastBufferedRequest;
24722 } else {
24723 state.bufferedRequest = state.lastBufferedRequest;
24724 }
24725 state.bufferedRequestCount += 1;
24726 } else {
24727 doWrite(stream, state, false, len, chunk, encoding, cb);
24728 }
24729
24730 return ret;
24731}
24732
24733function doWrite(stream, state, writev, len, chunk, encoding, cb) {
24734 state.writelen = len;
24735 state.writecb = cb;
24736 state.writing = true;
24737 state.sync = true;
24738 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
24739 state.sync = false;
24740}
24741
24742function onwriteError(stream, state, sync, er, cb) {
24743 --state.pendingcb;
24744 if (sync) processNextTick(cb, er);else cb(er);
24745
24746 stream._writableState.errorEmitted = true;
24747 stream.emit('error', er);
24748}
24749
24750function onwriteStateUpdate(state) {
24751 state.writing = false;
24752 state.writecb = null;
24753 state.length -= state.writelen;
24754 state.writelen = 0;
24755}
24756
24757function onwrite(stream, er) {
24758 var state = stream._writableState;
24759 var sync = state.sync;
24760 var cb = state.writecb;
24761
24762 onwriteStateUpdate(state);
24763
24764 if (er) onwriteError(stream, state, sync, er, cb);else {
24765 // Check if we're actually ready to finish, but don't emit yet
24766 var finished = needFinish(state);
24767
24768 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
24769 clearBuffer(stream, state);
24770 }
24771
24772 if (sync) {
24773 /*<replacement>*/
24774 asyncWrite(afterWrite, stream, state, finished, cb);
24775 /*</replacement>*/
24776 } else {
24777 afterWrite(stream, state, finished, cb);
24778 }
24779 }
24780}
24781
24782function afterWrite(stream, state, finished, cb) {
24783 if (!finished) onwriteDrain(stream, state);
24784 state.pendingcb--;
24785 cb();
24786 finishMaybe(stream, state);
24787}
24788
24789// Must force callback to be called on nextTick, so that we don't
24790// emit 'drain' before the write() consumer gets the 'false' return
24791// value, and has a chance to attach a 'drain' listener.
24792function onwriteDrain(stream, state) {
24793 if (state.length === 0 && state.needDrain) {
24794 state.needDrain = false;
24795 stream.emit('drain');
24796 }
24797}
24798
24799// if there's something in the buffer waiting, then process it
24800function clearBuffer(stream, state) {
24801 state.bufferProcessing = true;
24802 var entry = state.bufferedRequest;
24803
24804 if (stream._writev && entry && entry.next) {
24805 // Fast case, write everything using _writev()
24806 var l = state.bufferedRequestCount;
24807 var buffer = new Array(l);
24808 var holder = state.corkedRequestsFree;
24809 holder.entry = entry;
24810
24811 var count = 0;
24812 while (entry) {
24813 buffer[count] = entry;
24814 entry = entry.next;
24815 count += 1;
24816 }
24817
24818 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
24819
24820 // doWrite is almost always async, defer these to save a bit of time
24821 // as the hot path ends with doWrite
24822 state.pendingcb++;
24823 state.lastBufferedRequest = null;
24824 if (holder.next) {
24825 state.corkedRequestsFree = holder.next;
24826 holder.next = null;
24827 } else {
24828 state.corkedRequestsFree = new CorkedRequest(state);
24829 }
24830 } else {
24831 // Slow case, write chunks one-by-one
24832 while (entry) {
24833 var chunk = entry.chunk;
24834 var encoding = entry.encoding;
24835 var cb = entry.callback;
24836 var len = state.objectMode ? 1 : chunk.length;
24837
24838 doWrite(stream, state, false, len, chunk, encoding, cb);
24839 entry = entry.next;
24840 // if we didn't call the onwrite immediately, then
24841 // it means that we need to wait until it does.
24842 // also, that means that the chunk and cb are currently
24843 // being processed, so move the buffer counter past them.
24844 if (state.writing) {
24845 break;
24846 }
24847 }
24848
24849 if (entry === null) state.lastBufferedRequest = null;
24850 }
24851
24852 state.bufferedRequestCount = 0;
24853 state.bufferedRequest = entry;
24854 state.bufferProcessing = false;
24855}
24856
24857Writable.prototype._write = function (chunk, encoding, cb) {
24858 cb(new Error('_write() is not implemented'));
24859};
24860
24861Writable.prototype._writev = null;
24862
24863Writable.prototype.end = function (chunk, encoding, cb) {
24864 var state = this._writableState;
24865
24866 if (typeof chunk === 'function') {
24867 cb = chunk;
24868 chunk = null;
24869 encoding = null;
24870 } else if (typeof encoding === 'function') {
24871 cb = encoding;
24872 encoding = null;
24873 }
24874
24875 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
24876
24877 // .end() fully uncorks
24878 if (state.corked) {
24879 state.corked = 1;
24880 this.uncork();
24881 }
24882
24883 // ignore unnecessary end() calls.
24884 if (!state.ending && !state.finished) endWritable(this, state, cb);
24885};
24886
24887function needFinish(state) {
24888 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
24889}
24890
24891function prefinish(stream, state) {
24892 if (!state.prefinished) {
24893 state.prefinished = true;
24894 stream.emit('prefinish');
24895 }
24896}
24897
24898function finishMaybe(stream, state) {
24899 var need = needFinish(state);
24900 if (need) {
24901 if (state.pendingcb === 0) {
24902 prefinish(stream, state);
24903 state.finished = true;
24904 stream.emit('finish');
24905 } else {
24906 prefinish(stream, state);
24907 }
24908 }
24909 return need;
24910}
24911
24912function endWritable(stream, state, cb) {
24913 state.ending = true;
24914 finishMaybe(stream, state);
24915 if (cb) {
24916 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
24917 }
24918 state.ended = true;
24919 stream.writable = false;
24920}
24921
24922// It seems a linked list but it is not
24923// there will be only 2 of these for each stream
24924function CorkedRequest(state) {
24925 var _this = this;
24926
24927 this.next = null;
24928 this.entry = null;
24929
24930 this.finish = function (err) {
24931 var entry = _this.entry;
24932 _this.entry = null;
24933 while (entry) {
24934 var cb = entry.callback;
24935 state.pendingcb--;
24936 cb(err);
24937 entry = entry.next;
24938 }
24939 if (state.corkedRequestsFree) {
24940 state.corkedRequestsFree.next = _this;
24941 } else {
24942 state.corkedRequestsFree = _this;
24943 }
24944 };
24945}
24946}).call(this,require('_process'))
24947},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
24948'use strict';
24949
24950var Buffer = require('buffer').Buffer;
24951/*<replacement>*/
24952var bufferShim = require('buffer-shims');
24953/*</replacement>*/
24954
24955module.exports = BufferList;
24956
24957function BufferList() {
24958 this.head = null;
24959 this.tail = null;
24960 this.length = 0;
24961}
24962
24963BufferList.prototype.push = function (v) {
24964 var entry = { data: v, next: null };
24965 if (this.length > 0) this.tail.next = entry;else this.head = entry;
24966 this.tail = entry;
24967 ++this.length;
24968};
24969
24970BufferList.prototype.unshift = function (v) {
24971 var entry = { data: v, next: this.head };
24972 if (this.length === 0) this.tail = entry;
24973 this.head = entry;
24974 ++this.length;
24975};
24976
24977BufferList.prototype.shift = function () {
24978 if (this.length === 0) return;
24979 var ret = this.head.data;
24980 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
24981 --this.length;
24982 return ret;
24983};
24984
24985BufferList.prototype.clear = function () {
24986 this.head = this.tail = null;
24987 this.length = 0;
24988};
24989
24990BufferList.prototype.join = function (s) {
24991 if (this.length === 0) return '';
24992 var p = this.head;
24993 var ret = '' + p.data;
24994 while (p = p.next) {
24995 ret += s + p.data;
24996 }return ret;
24997};
24998
24999BufferList.prototype.concat = function (n) {
25000 if (this.length === 0) return bufferShim.alloc(0);
25001 if (this.length === 1) return this.head.data;
25002 var ret = bufferShim.allocUnsafe(n >>> 0);
25003 var p = this.head;
25004 var i = 0;
25005 while (p) {
25006 p.data.copy(ret, i);
25007 i += p.data.length;
25008 p = p.next;
25009 }
25010 return ret;
25011};
25012},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
25013module.exports = require("./lib/_stream_passthrough.js")
25014
25015},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
25016(function (process){
25017var Stream = (function (){
25018 try {
25019 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
25020 } catch(_){}
25021}());
25022exports = module.exports = require('./lib/_stream_readable.js');
25023exports.Stream = Stream || exports;
25024exports.Readable = exports;
25025exports.Writable = require('./lib/_stream_writable.js');
25026exports.Duplex = require('./lib/_stream_duplex.js');
25027exports.Transform = require('./lib/_stream_transform.js');
25028exports.PassThrough = require('./lib/_stream_passthrough.js');
25029
25030if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
25031 module.exports = Stream;
25032}
25033
25034}).call(this,require('_process'))
25035},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
25036module.exports = require("./lib/_stream_transform.js")
25037
25038},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
25039module.exports = require("./lib/_stream_writable.js")
25040
25041},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
25042// Copyright Joyent, Inc. and other Node contributors.
25043//
25044// Permission is hereby granted, free of charge, to any person obtaining a
25045// copy of this software and associated documentation files (the
25046// "Software"), to deal in the Software without restriction, including
25047// without limitation the rights to use, copy, modify, merge, publish,
25048// distribute, sublicense, and/or sell copies of the Software, and to permit
25049// persons to whom the Software is furnished to do so, subject to the
25050// following conditions:
25051//
25052// The above copyright notice and this permission notice shall be included
25053// in all copies or substantial portions of the Software.
25054//
25055// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25056// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25057// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25058// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25059// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25060// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25061// USE OR OTHER DEALINGS IN THE SOFTWARE.
25062
25063module.exports = Stream;
25064
25065var EE = require('events').EventEmitter;
25066var inherits = require('inherits');
25067
25068inherits(Stream, EE);
25069Stream.Readable = require('readable-stream/readable.js');
25070Stream.Writable = require('readable-stream/writable.js');
25071Stream.Duplex = require('readable-stream/duplex.js');
25072Stream.Transform = require('readable-stream/transform.js');
25073Stream.PassThrough = require('readable-stream/passthrough.js');
25074
25075// Backwards-compat with node 0.4.x
25076Stream.Stream = Stream;
25077
25078
25079
25080// old-style streams. Note that the pipe method (the only relevant
25081// part of this class) is overridden in the Readable class.
25082
25083function Stream() {
25084 EE.call(this);
25085}
25086
25087Stream.prototype.pipe = function(dest, options) {
25088 var source = this;
25089
25090 function ondata(chunk) {
25091 if (dest.writable) {
25092 if (false === dest.write(chunk) && source.pause) {
25093 source.pause();
25094 }
25095 }
25096 }
25097
25098 source.on('data', ondata);
25099
25100 function ondrain() {
25101 if (source.readable && source.resume) {
25102 source.resume();
25103 }
25104 }
25105
25106 dest.on('drain', ondrain);
25107
25108 // If the 'end' option is not supplied, dest.end() will be called when
25109 // source gets the 'end' or 'close' events. Only dest.end() once.
25110 if (!dest._isStdio && (!options || options.end !== false)) {
25111 source.on('end', onend);
25112 source.on('close', onclose);
25113 }
25114
25115 var didOnEnd = false;
25116 function onend() {
25117 if (didOnEnd) return;
25118 didOnEnd = true;
25119
25120 dest.end();
25121 }
25122
25123
25124 function onclose() {
25125 if (didOnEnd) return;
25126 didOnEnd = true;
25127
25128 if (typeof dest.destroy === 'function') dest.destroy();
25129 }
25130
25131 // don't leave dangling pipes when there are errors.
25132 function onerror(er) {
25133 cleanup();
25134 if (EE.listenerCount(this, 'error') === 0) {
25135 throw er; // Unhandled stream error in pipe.
25136 }
25137 }
25138
25139 source.on('error', onerror);
25140 dest.on('error', onerror);
25141
25142 // remove all the event listeners that were added.
25143 function cleanup() {
25144 source.removeListener('data', ondata);
25145 dest.removeListener('drain', ondrain);
25146
25147 source.removeListener('end', onend);
25148 source.removeListener('close', onclose);
25149
25150 source.removeListener('error', onerror);
25151 dest.removeListener('error', onerror);
25152
25153 source.removeListener('end', cleanup);
25154 source.removeListener('close', cleanup);
25155
25156 dest.removeListener('close', cleanup);
25157 }
25158
25159 source.on('end', cleanup);
25160 source.on('close', cleanup);
25161
25162 dest.on('close', cleanup);
25163
25164 dest.emit('pipe', source);
25165
25166 // Allow for unix-like usage: A.pipe(B).pipe(C)
25167 return dest;
25168};
25169
25170},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
25171// Copyright Joyent, Inc. and other Node contributors.
25172//
25173// Permission is hereby granted, free of charge, to any person obtaining a
25174// copy of this software and associated documentation files (the
25175// "Software"), to deal in the Software without restriction, including
25176// without limitation the rights to use, copy, modify, merge, publish,
25177// distribute, sublicense, and/or sell copies of the Software, and to permit
25178// persons to whom the Software is furnished to do so, subject to the
25179// following conditions:
25180//
25181// The above copyright notice and this permission notice shall be included
25182// in all copies or substantial portions of the Software.
25183//
25184// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25185// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25186// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25187// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25188// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25189// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25190// USE OR OTHER DEALINGS IN THE SOFTWARE.
25191
25192var Buffer = require('buffer').Buffer;
25193
25194var isBufferEncoding = Buffer.isEncoding
25195 || function(encoding) {
25196 switch (encoding && encoding.toLowerCase()) {
25197 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
25198 default: return false;
25199 }
25200 }
25201
25202
25203function assertEncoding(encoding) {
25204 if (encoding && !isBufferEncoding(encoding)) {
25205 throw new Error('Unknown encoding: ' + encoding);
25206 }
25207}
25208
25209// StringDecoder provides an interface for efficiently splitting a series of
25210// buffers into a series of JS strings without breaking apart multi-byte
25211// characters. CESU-8 is handled as part of the UTF-8 encoding.
25212//
25213// @TODO Handling all encodings inside a single object makes it very difficult
25214// to reason about this code, so it should be split up in the future.
25215// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
25216// points as used by CESU-8.
25217var StringDecoder = exports.StringDecoder = function(encoding) {
25218 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
25219 assertEncoding(encoding);
25220 switch (this.encoding) {
25221 case 'utf8':
25222 // CESU-8 represents each of Surrogate Pair by 3-bytes
25223 this.surrogateSize = 3;
25224 break;
25225 case 'ucs2':
25226 case 'utf16le':
25227 // UTF-16 represents each of Surrogate Pair by 2-bytes
25228 this.surrogateSize = 2;
25229 this.detectIncompleteChar = utf16DetectIncompleteChar;
25230 break;
25231 case 'base64':
25232 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
25233 this.surrogateSize = 3;
25234 this.detectIncompleteChar = base64DetectIncompleteChar;
25235 break;
25236 default:
25237 this.write = passThroughWrite;
25238 return;
25239 }
25240
25241 // Enough space to store all bytes of a single character. UTF-8 needs 4
25242 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
25243 this.charBuffer = new Buffer(6);
25244 // Number of bytes received for the current incomplete multi-byte character.
25245 this.charReceived = 0;
25246 // Number of bytes expected for the current incomplete multi-byte character.
25247 this.charLength = 0;
25248};
25249
25250
25251// write decodes the given buffer and returns it as JS string that is
25252// guaranteed to not contain any partial multi-byte characters. Any partial
25253// character found at the end of the buffer is buffered up, and will be
25254// returned when calling write again with the remaining bytes.
25255//
25256// Note: Converting a Buffer containing an orphan surrogate to a String
25257// currently works, but converting a String to a Buffer (via `new Buffer`, or
25258// Buffer#write) will replace incomplete surrogates with the unicode
25259// replacement character. See https://codereview.chromium.org/121173009/ .
25260StringDecoder.prototype.write = function(buffer) {
25261 var charStr = '';
25262 // if our last write ended with an incomplete multibyte character
25263 while (this.charLength) {
25264 // determine how many remaining bytes this buffer has to offer for this char
25265 var available = (buffer.length >= this.charLength - this.charReceived) ?
25266 this.charLength - this.charReceived :
25267 buffer.length;
25268
25269 // add the new bytes to the char buffer
25270 buffer.copy(this.charBuffer, this.charReceived, 0, available);
25271 this.charReceived += available;
25272
25273 if (this.charReceived < this.charLength) {
25274 // still not enough chars in this buffer? wait for more ...
25275 return '';
25276 }
25277
25278 // remove bytes belonging to the current character from the buffer
25279 buffer = buffer.slice(available, buffer.length);
25280
25281 // get the character that was split
25282 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
25283
25284 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25285 var charCode = charStr.charCodeAt(charStr.length - 1);
25286 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25287 this.charLength += this.surrogateSize;
25288 charStr = '';
25289 continue;
25290 }
25291 this.charReceived = this.charLength = 0;
25292
25293 // if there are no more bytes in this buffer, just emit our char
25294 if (buffer.length === 0) {
25295 return charStr;
25296 }
25297 break;
25298 }
25299
25300 // determine and set charLength / charReceived
25301 this.detectIncompleteChar(buffer);
25302
25303 var end = buffer.length;
25304 if (this.charLength) {
25305 // buffer the incomplete character bytes we got
25306 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
25307 end -= this.charReceived;
25308 }
25309
25310 charStr += buffer.toString(this.encoding, 0, end);
25311
25312 var end = charStr.length - 1;
25313 var charCode = charStr.charCodeAt(end);
25314 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25315 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25316 var size = this.surrogateSize;
25317 this.charLength += size;
25318 this.charReceived += size;
25319 this.charBuffer.copy(this.charBuffer, size, 0, size);
25320 buffer.copy(this.charBuffer, 0, 0, size);
25321 return charStr.substring(0, end);
25322 }
25323
25324 // or just emit the charStr
25325 return charStr;
25326};
25327
25328// detectIncompleteChar determines if there is an incomplete UTF-8 character at
25329// the end of the given buffer. If so, it sets this.charLength to the byte
25330// length that character, and sets this.charReceived to the number of bytes
25331// that are available for this character.
25332StringDecoder.prototype.detectIncompleteChar = function(buffer) {
25333 // determine how many bytes we have to check at the end of this buffer
25334 var i = (buffer.length >= 3) ? 3 : buffer.length;
25335
25336 // Figure out if one of the last i bytes of our buffer announces an
25337 // incomplete char.
25338 for (; i > 0; i--) {
25339 var c = buffer[buffer.length - i];
25340
25341 // See http://en.wikipedia.org/wiki/UTF-8#Description
25342
25343 // 110XXXXX
25344 if (i == 1 && c >> 5 == 0x06) {
25345 this.charLength = 2;
25346 break;
25347 }
25348
25349 // 1110XXXX
25350 if (i <= 2 && c >> 4 == 0x0E) {
25351 this.charLength = 3;
25352 break;
25353 }
25354
25355 // 11110XXX
25356 if (i <= 3 && c >> 3 == 0x1E) {
25357 this.charLength = 4;
25358 break;
25359 }
25360 }
25361 this.charReceived = i;
25362};
25363
25364StringDecoder.prototype.end = function(buffer) {
25365 var res = '';
25366 if (buffer && buffer.length)
25367 res = this.write(buffer);
25368
25369 if (this.charReceived) {
25370 var cr = this.charReceived;
25371 var buf = this.charBuffer;
25372 var enc = this.encoding;
25373 res += buf.slice(0, cr).toString(enc);
25374 }
25375
25376 return res;
25377};
25378
25379function passThroughWrite(buffer) {
25380 return buffer.toString(this.encoding);
25381}
25382
25383function utf16DetectIncompleteChar(buffer) {
25384 this.charReceived = buffer.length % 2;
25385 this.charLength = this.charReceived ? 2 : 0;
25386}
25387
25388function base64DetectIncompleteChar(buffer) {
25389 this.charReceived = buffer.length % 3;
25390 this.charLength = this.charReceived ? 3 : 0;
25391}
25392
25393},{"buffer":5}],27:[function(require,module,exports){
25394(function (global){
25395
25396/**
25397 * Module exports.
25398 */
25399
25400module.exports = deprecate;
25401
25402/**
25403 * Mark that a method should not be used.
25404 * Returns a modified function which warns once by default.
25405 *
25406 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
25407 *
25408 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
25409 * will throw an Error when invoked.
25410 *
25411 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
25412 * will invoke `console.trace()` instead of `console.error()`.
25413 *
25414 * @param {Function} fn - the function to deprecate
25415 * @param {String} msg - the string to print to the console when `fn` is invoked
25416 * @returns {Function} a new "deprecated" version of `fn`
25417 * @api public
25418 */
25419
25420function deprecate (fn, msg) {
25421 if (config('noDeprecation')) {
25422 return fn;
25423 }
25424
25425 var warned = false;
25426 function deprecated() {
25427 if (!warned) {
25428 if (config('throwDeprecation')) {
25429 throw new Error(msg);
25430 } else if (config('traceDeprecation')) {
25431 console.trace(msg);
25432 } else {
25433 console.warn(msg);
25434 }
25435 warned = true;
25436 }
25437 return fn.apply(this, arguments);
25438 }
25439
25440 return deprecated;
25441}
25442
25443/**
25444 * Checks `localStorage` for boolean values for the given `name`.
25445 *
25446 * @param {String} name
25447 * @returns {Boolean}
25448 * @api private
25449 */
25450
25451function config (name) {
25452 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
25453 try {
25454 if (!global.localStorage) return false;
25455 } catch (_) {
25456 return false;
25457 }
25458 var val = global.localStorage[name];
25459 if (null == val) return false;
25460 return String(val).toLowerCase() === 'true';
25461}
25462
25463}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
25464},{}],28:[function(require,module,exports){
25465arguments[4][9][0].apply(exports,arguments)
25466},{"dup":9}],29:[function(require,module,exports){
25467module.exports = function isBuffer(arg) {
25468 return arg && typeof arg === 'object'
25469 && typeof arg.copy === 'function'
25470 && typeof arg.fill === 'function'
25471 && typeof arg.readUInt8 === 'function';
25472}
25473},{}],30:[function(require,module,exports){
25474(function (process,global){
25475// Copyright Joyent, Inc. and other Node contributors.
25476//
25477// Permission is hereby granted, free of charge, to any person obtaining a
25478// copy of this software and associated documentation files (the
25479// "Software"), to deal in the Software without restriction, including
25480// without limitation the rights to use, copy, modify, merge, publish,
25481// distribute, sublicense, and/or sell copies of the Software, and to permit
25482// persons to whom the Software is furnished to do so, subject to the
25483// following conditions:
25484//
25485// The above copyright notice and this permission notice shall be included
25486// in all copies or substantial portions of the Software.
25487//
25488// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25489// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25490// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25491// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25492// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25493// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25494// USE OR OTHER DEALINGS IN THE SOFTWARE.
25495
25496var formatRegExp = /%[sdj%]/g;
25497exports.format = function(f) {
25498 if (!isString(f)) {
25499 var objects = [];
25500 for (var i = 0; i < arguments.length; i++) {
25501 objects.push(inspect(arguments[i]));
25502 }
25503 return objects.join(' ');
25504 }
25505
25506 var i = 1;
25507 var args = arguments;
25508 var len = args.length;
25509 var str = String(f).replace(formatRegExp, function(x) {
25510 if (x === '%%') return '%';
25511 if (i >= len) return x;
25512 switch (x) {
25513 case '%s': return String(args[i++]);
25514 case '%d': return Number(args[i++]);
25515 case '%j':
25516 try {
25517 return JSON.stringify(args[i++]);
25518 } catch (_) {
25519 return '[Circular]';
25520 }
25521 default:
25522 return x;
25523 }
25524 });
25525 for (var x = args[i]; i < len; x = args[++i]) {
25526 if (isNull(x) || !isObject(x)) {
25527 str += ' ' + x;
25528 } else {
25529 str += ' ' + inspect(x);
25530 }
25531 }
25532 return str;
25533};
25534
25535
25536// Mark that a method should not be used.
25537// Returns a modified function which warns once by default.
25538// If --no-deprecation is set, then it is a no-op.
25539exports.deprecate = function(fn, msg) {
25540 // Allow for deprecating things in the process of starting up.
25541 if (isUndefined(global.process)) {
25542 return function() {
25543 return exports.deprecate(fn, msg).apply(this, arguments);
25544 };
25545 }
25546
25547 if (process.noDeprecation === true) {
25548 return fn;
25549 }
25550
25551 var warned = false;
25552 function deprecated() {
25553 if (!warned) {
25554 if (process.throwDeprecation) {
25555 throw new Error(msg);
25556 } else if (process.traceDeprecation) {
25557 console.trace(msg);
25558 } else {
25559 console.error(msg);
25560 }
25561 warned = true;
25562 }
25563 return fn.apply(this, arguments);
25564 }
25565
25566 return deprecated;
25567};
25568
25569
25570var debugs = {};
25571var debugEnviron;
25572exports.debuglog = function(set) {
25573 if (isUndefined(debugEnviron))
25574 debugEnviron = process.env.NODE_DEBUG || '';
25575 set = set.toUpperCase();
25576 if (!debugs[set]) {
25577 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
25578 var pid = process.pid;
25579 debugs[set] = function() {
25580 var msg = exports.format.apply(exports, arguments);
25581 console.error('%s %d: %s', set, pid, msg);
25582 };
25583 } else {
25584 debugs[set] = function() {};
25585 }
25586 }
25587 return debugs[set];
25588};
25589
25590
25591/**
25592 * Echos the value of a value. Trys to print the value out
25593 * in the best way possible given the different types.
25594 *
25595 * @param {Object} obj The object to print out.
25596 * @param {Object} opts Optional options object that alters the output.
25597 */
25598/* legacy: obj, showHidden, depth, colors*/
25599function inspect(obj, opts) {
25600 // default options
25601 var ctx = {
25602 seen: [],
25603 stylize: stylizeNoColor
25604 };
25605 // legacy...
25606 if (arguments.length >= 3) ctx.depth = arguments[2];
25607 if (arguments.length >= 4) ctx.colors = arguments[3];
25608 if (isBoolean(opts)) {
25609 // legacy...
25610 ctx.showHidden = opts;
25611 } else if (opts) {
25612 // got an "options" object
25613 exports._extend(ctx, opts);
25614 }
25615 // set default options
25616 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
25617 if (isUndefined(ctx.depth)) ctx.depth = 2;
25618 if (isUndefined(ctx.colors)) ctx.colors = false;
25619 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
25620 if (ctx.colors) ctx.stylize = stylizeWithColor;
25621 return formatValue(ctx, obj, ctx.depth);
25622}
25623exports.inspect = inspect;
25624
25625
25626// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
25627inspect.colors = {
25628 'bold' : [1, 22],
25629 'italic' : [3, 23],
25630 'underline' : [4, 24],
25631 'inverse' : [7, 27],
25632 'white' : [37, 39],
25633 'grey' : [90, 39],
25634 'black' : [30, 39],
25635 'blue' : [34, 39],
25636 'cyan' : [36, 39],
25637 'green' : [32, 39],
25638 'magenta' : [35, 39],
25639 'red' : [31, 39],
25640 'yellow' : [33, 39]
25641};
25642
25643// Don't use 'blue' not visible on cmd.exe
25644inspect.styles = {
25645 'special': 'cyan',
25646 'number': 'yellow',
25647 'boolean': 'yellow',
25648 'undefined': 'grey',
25649 'null': 'bold',
25650 'string': 'green',
25651 'date': 'magenta',
25652 // "name": intentionally not styling
25653 'regexp': 'red'
25654};
25655
25656
25657function stylizeWithColor(str, styleType) {
25658 var style = inspect.styles[styleType];
25659
25660 if (style) {
25661 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
25662 '\u001b[' + inspect.colors[style][1] + 'm';
25663 } else {
25664 return str;
25665 }
25666}
25667
25668
25669function stylizeNoColor(str, styleType) {
25670 return str;
25671}
25672
25673
25674function arrayToHash(array) {
25675 var hash = {};
25676
25677 array.forEach(function(val, idx) {
25678 hash[val] = true;
25679 });
25680
25681 return hash;
25682}
25683
25684
25685function formatValue(ctx, value, recurseTimes) {
25686 // Provide a hook for user-specified inspect functions.
25687 // Check that value is an object with an inspect function on it
25688 if (ctx.customInspect &&
25689 value &&
25690 isFunction(value.inspect) &&
25691 // Filter out the util module, it's inspect function is special
25692 value.inspect !== exports.inspect &&
25693 // Also filter out any prototype objects using the circular check.
25694 !(value.constructor && value.constructor.prototype === value)) {
25695 var ret = value.inspect(recurseTimes, ctx);
25696 if (!isString(ret)) {
25697 ret = formatValue(ctx, ret, recurseTimes);
25698 }
25699 return ret;
25700 }
25701
25702 // Primitive types cannot have properties
25703 var primitive = formatPrimitive(ctx, value);
25704 if (primitive) {
25705 return primitive;
25706 }
25707
25708 // Look up the keys of the object.
25709 var keys = Object.keys(value);
25710 var visibleKeys = arrayToHash(keys);
25711
25712 if (ctx.showHidden) {
25713 keys = Object.getOwnPropertyNames(value);
25714 }
25715
25716 // IE doesn't make error fields non-enumerable
25717 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
25718 if (isError(value)
25719 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
25720 return formatError(value);
25721 }
25722
25723 // Some type of object without properties can be shortcutted.
25724 if (keys.length === 0) {
25725 if (isFunction(value)) {
25726 var name = value.name ? ': ' + value.name : '';
25727 return ctx.stylize('[Function' + name + ']', 'special');
25728 }
25729 if (isRegExp(value)) {
25730 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25731 }
25732 if (isDate(value)) {
25733 return ctx.stylize(Date.prototype.toString.call(value), 'date');
25734 }
25735 if (isError(value)) {
25736 return formatError(value);
25737 }
25738 }
25739
25740 var base = '', array = false, braces = ['{', '}'];
25741
25742 // Make Array say that they are Array
25743 if (isArray(value)) {
25744 array = true;
25745 braces = ['[', ']'];
25746 }
25747
25748 // Make functions say that they are functions
25749 if (isFunction(value)) {
25750 var n = value.name ? ': ' + value.name : '';
25751 base = ' [Function' + n + ']';
25752 }
25753
25754 // Make RegExps say that they are RegExps
25755 if (isRegExp(value)) {
25756 base = ' ' + RegExp.prototype.toString.call(value);
25757 }
25758
25759 // Make dates with properties first say the date
25760 if (isDate(value)) {
25761 base = ' ' + Date.prototype.toUTCString.call(value);
25762 }
25763
25764 // Make error with message first say the error
25765 if (isError(value)) {
25766 base = ' ' + formatError(value);
25767 }
25768
25769 if (keys.length === 0 && (!array || value.length == 0)) {
25770 return braces[0] + base + braces[1];
25771 }
25772
25773 if (recurseTimes < 0) {
25774 if (isRegExp(value)) {
25775 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25776 } else {
25777 return ctx.stylize('[Object]', 'special');
25778 }
25779 }
25780
25781 ctx.seen.push(value);
25782
25783 var output;
25784 if (array) {
25785 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
25786 } else {
25787 output = keys.map(function(key) {
25788 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
25789 });
25790 }
25791
25792 ctx.seen.pop();
25793
25794 return reduceToSingleString(output, base, braces);
25795}
25796
25797
25798function formatPrimitive(ctx, value) {
25799 if (isUndefined(value))
25800 return ctx.stylize('undefined', 'undefined');
25801 if (isString(value)) {
25802 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
25803 .replace(/'/g, "\\'")
25804 .replace(/\\"/g, '"') + '\'';
25805 return ctx.stylize(simple, 'string');
25806 }
25807 if (isNumber(value))
25808 return ctx.stylize('' + value, 'number');
25809 if (isBoolean(value))
25810 return ctx.stylize('' + value, 'boolean');
25811 // For some reason typeof null is "object", so special case here.
25812 if (isNull(value))
25813 return ctx.stylize('null', 'null');
25814}
25815
25816
25817function formatError(value) {
25818 return '[' + Error.prototype.toString.call(value) + ']';
25819}
25820
25821
25822function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
25823 var output = [];
25824 for (var i = 0, l = value.length; i < l; ++i) {
25825 if (hasOwnProperty(value, String(i))) {
25826 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25827 String(i), true));
25828 } else {
25829 output.push('');
25830 }
25831 }
25832 keys.forEach(function(key) {
25833 if (!key.match(/^\d+$/)) {
25834 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25835 key, true));
25836 }
25837 });
25838 return output;
25839}
25840
25841
25842function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
25843 var name, str, desc;
25844 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
25845 if (desc.get) {
25846 if (desc.set) {
25847 str = ctx.stylize('[Getter/Setter]', 'special');
25848 } else {
25849 str = ctx.stylize('[Getter]', 'special');
25850 }
25851 } else {
25852 if (desc.set) {
25853 str = ctx.stylize('[Setter]', 'special');
25854 }
25855 }
25856 if (!hasOwnProperty(visibleKeys, key)) {
25857 name = '[' + key + ']';
25858 }
25859 if (!str) {
25860 if (ctx.seen.indexOf(desc.value) < 0) {
25861 if (isNull(recurseTimes)) {
25862 str = formatValue(ctx, desc.value, null);
25863 } else {
25864 str = formatValue(ctx, desc.value, recurseTimes - 1);
25865 }
25866 if (str.indexOf('\n') > -1) {
25867 if (array) {
25868 str = str.split('\n').map(function(line) {
25869 return ' ' + line;
25870 }).join('\n').substr(2);
25871 } else {
25872 str = '\n' + str.split('\n').map(function(line) {
25873 return ' ' + line;
25874 }).join('\n');
25875 }
25876 }
25877 } else {
25878 str = ctx.stylize('[Circular]', 'special');
25879 }
25880 }
25881 if (isUndefined(name)) {
25882 if (array && key.match(/^\d+$/)) {
25883 return str;
25884 }
25885 name = JSON.stringify('' + key);
25886 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
25887 name = name.substr(1, name.length - 2);
25888 name = ctx.stylize(name, 'name');
25889 } else {
25890 name = name.replace(/'/g, "\\'")
25891 .replace(/\\"/g, '"')
25892 .replace(/(^"|"$)/g, "'");
25893 name = ctx.stylize(name, 'string');
25894 }
25895 }
25896
25897 return name + ': ' + str;
25898}
25899
25900
25901function reduceToSingleString(output, base, braces) {
25902 var numLinesEst = 0;
25903 var length = output.reduce(function(prev, cur) {
25904 numLinesEst++;
25905 if (cur.indexOf('\n') >= 0) numLinesEst++;
25906 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
25907 }, 0);
25908
25909 if (length > 60) {
25910 return braces[0] +
25911 (base === '' ? '' : base + '\n ') +
25912 ' ' +
25913 output.join(',\n ') +
25914 ' ' +
25915 braces[1];
25916 }
25917
25918 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
25919}
25920
25921
25922// NOTE: These type checking functions intentionally don't use `instanceof`
25923// because it is fragile and can be easily faked with `Object.create()`.
25924function isArray(ar) {
25925 return Array.isArray(ar);
25926}
25927exports.isArray = isArray;
25928
25929function isBoolean(arg) {
25930 return typeof arg === 'boolean';
25931}
25932exports.isBoolean = isBoolean;
25933
25934function isNull(arg) {
25935 return arg === null;
25936}
25937exports.isNull = isNull;
25938
25939function isNullOrUndefined(arg) {
25940 return arg == null;
25941}
25942exports.isNullOrUndefined = isNullOrUndefined;
25943
25944function isNumber(arg) {
25945 return typeof arg === 'number';
25946}
25947exports.isNumber = isNumber;
25948
25949function isString(arg) {
25950 return typeof arg === 'string';
25951}
25952exports.isString = isString;
25953
25954function isSymbol(arg) {
25955 return typeof arg === 'symbol';
25956}
25957exports.isSymbol = isSymbol;
25958
25959function isUndefined(arg) {
25960 return arg === void 0;
25961}
25962exports.isUndefined = isUndefined;
25963
25964function isRegExp(re) {
25965 return isObject(re) && objectToString(re) === '[object RegExp]';
25966}
25967exports.isRegExp = isRegExp;
25968
25969function isObject(arg) {
25970 return typeof arg === 'object' && arg !== null;
25971}
25972exports.isObject = isObject;
25973
25974function isDate(d) {
25975 return isObject(d) && objectToString(d) === '[object Date]';
25976}
25977exports.isDate = isDate;
25978
25979function isError(e) {
25980 return isObject(e) &&
25981 (objectToString(e) === '[object Error]' || e instanceof Error);
25982}
25983exports.isError = isError;
25984
25985function isFunction(arg) {
25986 return typeof arg === 'function';
25987}
25988exports.isFunction = isFunction;
25989
25990function isPrimitive(arg) {
25991 return arg === null ||
25992 typeof arg === 'boolean' ||
25993 typeof arg === 'number' ||
25994 typeof arg === 'string' ||
25995 typeof arg === 'symbol' || // ES6 symbol
25996 typeof arg === 'undefined';
25997}
25998exports.isPrimitive = isPrimitive;
25999
26000exports.isBuffer = require('./support/isBuffer');
26001
26002function objectToString(o) {
26003 return Object.prototype.toString.call(o);
26004}
26005
26006
26007function pad(n) {
26008 return n < 10 ? '0' + n.toString(10) : n.toString(10);
26009}
26010
26011
26012var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
26013 'Oct', 'Nov', 'Dec'];
26014
26015// 26 Feb 16:19:34
26016function timestamp() {
26017 var d = new Date();
26018 var time = [pad(d.getHours()),
26019 pad(d.getMinutes()),
26020 pad(d.getSeconds())].join(':');
26021 return [d.getDate(), months[d.getMonth()], time].join(' ');
26022}
26023
26024
26025// log is just a thin wrapper to console.log that prepends a timestamp
26026exports.log = function() {
26027 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
26028};
26029
26030
26031/**
26032 * Inherit the prototype methods from one constructor into another.
26033 *
26034 * The Function.prototype.inherits from lang.js rewritten as a standalone
26035 * function (not on Function.prototype). NOTE: If this file is to be loaded
26036 * during bootstrapping this function needs to be rewritten using some native
26037 * functions as prototype setup using normal JavaScript does not work as
26038 * expected during bootstrapping (see mirror.js in r114903).
26039 *
26040 * @param {function} ctor Constructor function which needs to inherit the
26041 * prototype.
26042 * @param {function} superCtor Constructor function to inherit prototype from.
26043 */
26044exports.inherits = require('inherits');
26045
26046exports._extend = function(origin, add) {
26047 // Don't do anything if add isn't an object
26048 if (!add || !isObject(add)) return origin;
26049
26050 var keys = Object.keys(add);
26051 var i = keys.length;
26052 while (i--) {
26053 origin[keys[i]] = add[keys[i]];
26054 }
26055 return origin;
26056};
26057
26058function hasOwnProperty(obj, prop) {
26059 return Object.prototype.hasOwnProperty.call(obj, prop);
26060}
26061
26062}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
26063},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
26064(function (Buffer){
26065const createKeccakHash = require('keccak')
26066const secp256k1 = require('secp256k1')
26067const assert = require('assert')
26068const rlp = require('rlp')
26069const BN = require('bn.js')
26070const createHash = require('create-hash')
26071Object.assign(exports, require('ethjs-util'))
26072
26073/**
26074 * the max integer that this VM can handle (a ```BN```)
26075 * @var {BN} MAX_INTEGER
26076 */
26077exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
26078
26079/**
26080 * 2^256 (a ```BN```)
26081 * @var {BN} TWO_POW256
26082 */
26083exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
26084
26085/**
26086 * SHA3-256 hash of null (a ```String```)
26087 * @var {String} SHA3_NULL_S
26088 */
26089exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
26090
26091/**
26092 * SHA3-256 hash of null (a ```Buffer```)
26093 * @var {Buffer} SHA3_NULL
26094 */
26095exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
26096
26097/**
26098 * SHA3-256 of an RLP of an empty array (a ```String```)
26099 * @var {String} SHA3_RLP_ARRAY_S
26100 */
26101exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
26102
26103/**
26104 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
26105 * @var {Buffer} SHA3_RLP_ARRAY
26106 */
26107exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
26108
26109/**
26110 * SHA3-256 hash of the RLP of null (a ```String```)
26111 * @var {String} SHA3_RLP_S
26112 */
26113exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
26114
26115/**
26116 * SHA3-256 hash of the RLP of null (a ```Buffer```)
26117 * @var {Buffer} SHA3_RLP
26118 */
26119exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
26120
26121/**
26122 * [`BN`](https://github.com/indutny/bn.js)
26123 * @var {Function}
26124 */
26125exports.BN = BN
26126
26127/**
26128 * [`rlp`](https://github.com/ethereumjs/rlp)
26129 * @var {Function}
26130 */
26131exports.rlp = rlp
26132
26133/**
26134 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
26135 * @var {Object}
26136 */
26137exports.secp256k1 = secp256k1
26138
26139/**
26140 * Returns a buffer filled with 0s
26141 * @method zeros
26142 * @param {Number} bytes the number of bytes the buffer should be
26143 * @return {Buffer}
26144 */
26145exports.zeros = function (bytes) {
26146 return Buffer.allocUnsafe(bytes).fill(0)
26147}
26148
26149/**
26150 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26151 * Or it truncates the beginning if it exceeds.
26152 * @method lsetLength
26153 * @param {Buffer|Array} msg the value to pad
26154 * @param {Number} length the number of bytes the output should be
26155 * @param {Boolean} [right=false] whether to start padding form the left or right
26156 * @return {Buffer|Array}
26157 */
26158exports.setLengthLeft = exports.setLength = function (msg, length, right) {
26159 var buf = exports.zeros(length)
26160 msg = exports.toBuffer(msg)
26161 if (right) {
26162 if (msg.length < length) {
26163 msg.copy(buf)
26164 return buf
26165 }
26166 return msg.slice(0, length)
26167 } else {
26168 if (msg.length < length) {
26169 msg.copy(buf, length - msg.length)
26170 return buf
26171 }
26172 return msg.slice(-length)
26173 }
26174}
26175
26176/**
26177 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26178 * Or it truncates the beginning if it exceeds.
26179 * @param {Buffer|Array} msg the value to pad
26180 * @param {Number} length the number of bytes the output should be
26181 * @return {Buffer|Array}
26182 */
26183exports.setLengthRight = function (msg, length) {
26184 return exports.setLength(msg, length, true)
26185}
26186
26187/**
26188 * Trims leading zeros from a `Buffer` or an `Array`
26189 * @param {Buffer|Array|String} a
26190 * @return {Buffer|Array|String}
26191 */
26192exports.unpad = exports.stripZeros = function (a) {
26193 a = exports.stripHexPrefix(a)
26194 var first = a[0]
26195 while (a.length > 0 && first.toString() === '0') {
26196 a = a.slice(1)
26197 first = a[0]
26198 }
26199 return a
26200}
26201/**
26202 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
26203 * @param {*} v the value
26204 */
26205exports.toBuffer = function (v) {
26206 if (!Buffer.isBuffer(v)) {
26207 if (Array.isArray(v)) {
26208 v = Buffer.from(v)
26209 } else if (typeof v === 'string') {
26210 if (exports.isHexPrefixed(v)) {
26211 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
26212 } else {
26213 v = Buffer.from(v)
26214 }
26215 } else if (typeof v === 'number') {
26216 v = exports.intToBuffer(v)
26217 } else if (v === null || v === undefined) {
26218 v = Buffer.allocUnsafe(0)
26219 } else if (v.toArray) {
26220 // converts a BN to a Buffer
26221 v = Buffer.from(v.toArray())
26222 } else {
26223 throw new Error('invalid type')
26224 }
26225 }
26226 return v
26227}
26228
26229/**
26230 * Converts a `Buffer` to a `Number`
26231 * @param {Buffer} buf
26232 * @return {Number}
26233 * @throws If the input number exceeds 53 bits.
26234 */
26235exports.bufferToInt = function (buf) {
26236 return new BN(exports.toBuffer(buf)).toNumber()
26237}
26238
26239/**
26240 * Converts a `Buffer` into a hex `String`
26241 * @param {Buffer} buf
26242 * @return {String}
26243 */
26244exports.bufferToHex = function (buf) {
26245 buf = exports.toBuffer(buf)
26246 return '0x' + buf.toString('hex')
26247}
26248
26249/**
26250 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
26251 * @param {Buffer} num
26252 * @return {BN}
26253 */
26254exports.fromSigned = function (num) {
26255 return new BN(num).fromTwos(256)
26256}
26257
26258/**
26259 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
26260 * @param {BN} num
26261 * @return {Buffer}
26262 */
26263exports.toUnsigned = function (num) {
26264 return Buffer.from(num.toTwos(256).toArray())
26265}
26266
26267/**
26268 * Creates SHA-3 hash of the input
26269 * @param {Buffer|Array|String|Number} a the input data
26270 * @param {Number} [bits=256] the SHA width
26271 * @return {Buffer}
26272 */
26273exports.sha3 = function (a, bits) {
26274 a = exports.toBuffer(a)
26275 if (!bits) bits = 256
26276
26277 return createKeccakHash('keccak' + bits).update(a).digest()
26278}
26279
26280/**
26281 * Creates SHA256 hash of the input
26282 * @param {Buffer|Array|String|Number} a the input data
26283 * @return {Buffer}
26284 */
26285exports.sha256 = function (a) {
26286 a = exports.toBuffer(a)
26287 return createHash('sha256').update(a).digest()
26288}
26289
26290/**
26291 * Creates RIPEMD160 hash of the input
26292 * @param {Buffer|Array|String|Number} a the input data
26293 * @param {Boolean} padded whether it should be padded to 256 bits or not
26294 * @return {Buffer}
26295 */
26296exports.ripemd160 = function (a, padded) {
26297 a = exports.toBuffer(a)
26298 var hash = createHash('rmd160').update(a).digest()
26299 if (padded === true) {
26300 return exports.setLength(hash, 32)
26301 } else {
26302 return hash
26303 }
26304}
26305
26306/**
26307 * Creates SHA-3 hash of the RLP encoded version of the input
26308 * @param {Buffer|Array|String|Number} a the input data
26309 * @return {Buffer}
26310 */
26311exports.rlphash = function (a) {
26312 return exports.sha3(rlp.encode(a))
26313}
26314
26315/**
26316 * Checks if the private key satisfies the rules of the curve secp256k1.
26317 * @param {Buffer} privateKey
26318 * @return {Boolean}
26319 */
26320exports.isValidPrivate = function (privateKey) {
26321 return secp256k1.privateKeyVerify(privateKey)
26322}
26323
26324/**
26325 * Checks if the public key satisfies the rules of the curve secp256k1
26326 * and the requirements of Ethereum.
26327 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
26328 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26329 * @return {Boolean}
26330 */
26331exports.isValidPublic = function (publicKey, sanitize) {
26332 if (publicKey.length === 64) {
26333 // Convert to SEC1 for secp256k1
26334 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
26335 }
26336
26337 if (!sanitize) {
26338 return false
26339 }
26340
26341 return secp256k1.publicKeyVerify(publicKey)
26342}
26343
26344/**
26345 * Returns the ethereum address of a given public key.
26346 * Accepts "Ethereum public keys" and SEC1 encoded keys.
26347 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
26348 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26349 * @return {Buffer}
26350 */
26351exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
26352 pubKey = exports.toBuffer(pubKey)
26353 if (sanitize && (pubKey.length !== 64)) {
26354 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
26355 }
26356 assert(pubKey.length === 64)
26357 // Only take the lower 160bits of the hash
26358 return exports.sha3(pubKey).slice(-20)
26359}
26360
26361/**
26362 * Returns the ethereum public key of a given private key
26363 * @param {Buffer} privateKey A private key must be 256 bits wide
26364 * @return {Buffer}
26365 */
26366var privateToPublic = exports.privateToPublic = function (privateKey) {
26367 privateKey = exports.toBuffer(privateKey)
26368 // skip the type flag and use the X, Y points
26369 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
26370}
26371
26372/**
26373 * Converts a public key to the Ethereum format.
26374 * @param {Buffer} publicKey
26375 * @return {Buffer}
26376 */
26377exports.importPublic = function (publicKey) {
26378 publicKey = exports.toBuffer(publicKey)
26379 if (publicKey.length !== 64) {
26380 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
26381 }
26382 return publicKey
26383}
26384
26385/**
26386 * ECDSA sign
26387 * @param {Buffer} msgHash
26388 * @param {Buffer} privateKey
26389 * @return {Object}
26390 */
26391exports.ecsign = function (msgHash, privateKey) {
26392 var sig = secp256k1.sign(msgHash, privateKey)
26393
26394 var ret = {}
26395 ret.r = sig.signature.slice(0, 32)
26396 ret.s = sig.signature.slice(32, 64)
26397 ret.v = sig.recovery + 27
26398 return ret
26399}
26400
26401/**
26402 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
26403 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
26404 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
26405 * used to produce the signature.
26406 * @param message
26407 * @returns {Buffer} hash
26408 */
26409exports.hashPersonalMessage = function (message) {
26410 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
26411 return exports.sha3(Buffer.concat([prefix, message]))
26412}
26413
26414/**
26415 * ECDSA public key recovery from signature
26416 * @param {Buffer} msgHash
26417 * @param {Number} v
26418 * @param {Buffer} r
26419 * @param {Buffer} s
26420 * @return {Buffer} publicKey
26421 */
26422exports.ecrecover = function (msgHash, v, r, s) {
26423 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
26424 var recovery = v - 27
26425 if (recovery !== 0 && recovery !== 1) {
26426 throw new Error('Invalid signature v value')
26427 }
26428 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
26429 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
26430}
26431
26432/**
26433 * Convert signature parameters into the format of `eth_sign` RPC method
26434 * @param {Number} v
26435 * @param {Buffer} r
26436 * @param {Buffer} s
26437 * @return {String} sig
26438 */
26439exports.toRpcSig = function (v, r, s) {
26440 // NOTE: with potential introduction of chainId this might need to be updated
26441 if (v !== 27 && v !== 28) {
26442 throw new Error('Invalid recovery id')
26443 }
26444
26445 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
26446 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
26447 return exports.bufferToHex(Buffer.concat([
26448 exports.setLengthLeft(r, 32),
26449 exports.setLengthLeft(s, 32),
26450 exports.toBuffer(v - 27)
26451 ]))
26452}
26453
26454/**
26455 * Convert signature format of the `eth_sign` RPC method to signature parameters
26456 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
26457 * @param {String} sig
26458 * @return {Object}
26459 */
26460exports.fromRpcSig = function (sig) {
26461 sig = exports.toBuffer(sig)
26462
26463 // NOTE: with potential introduction of chainId this might need to be updated
26464 if (sig.length !== 65) {
26465 throw new Error('Invalid signature length')
26466 }
26467
26468 var v = sig[64]
26469 // support both versions of `eth_sign` responses
26470 if (v < 27) {
26471 v += 27
26472 }
26473
26474 return {
26475 v: v,
26476 r: sig.slice(0, 32),
26477 s: sig.slice(32, 64)
26478 }
26479}
26480
26481/**
26482 * Returns the ethereum address of a given private key
26483 * @param {Buffer} privateKey A private key must be 256 bits wide
26484 * @return {Buffer}
26485 */
26486exports.privateToAddress = function (privateKey) {
26487 return exports.publicToAddress(privateToPublic(privateKey))
26488}
26489
26490/**
26491 * Checks if the address is a valid. Accepts checksummed addresses too
26492 * @param {String} address
26493 * @return {Boolean}
26494 */
26495exports.isValidAddress = function (address) {
26496 return /^0x[0-9a-fA-F]{40}$/i.test(address)
26497}
26498
26499/**
26500 * Returns a checksummed address
26501 * @param {String} address
26502 * @return {String}
26503 */
26504exports.toChecksumAddress = function (address) {
26505 address = exports.stripHexPrefix(address).toLowerCase()
26506 var hash = exports.sha3(address).toString('hex')
26507 var ret = '0x'
26508
26509 for (var i = 0; i < address.length; i++) {
26510 if (parseInt(hash[i], 16) >= 8) {
26511 ret += address[i].toUpperCase()
26512 } else {
26513 ret += address[i]
26514 }
26515 }
26516
26517 return ret
26518}
26519
26520/**
26521 * Checks if the address is a valid checksummed address
26522 * @param {Buffer} address
26523 * @return {Boolean}
26524 */
26525exports.isValidChecksumAddress = function (address) {
26526 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
26527}
26528
26529/**
26530 * Generates an address of a newly created contract
26531 * @param {Buffer} from the address which is creating this new address
26532 * @param {Buffer} nonce the nonce of the from account
26533 * @return {Buffer}
26534 */
26535exports.generateAddress = function (from, nonce) {
26536 from = exports.toBuffer(from)
26537 nonce = new BN(nonce)
26538
26539 if (nonce.isZero()) {
26540 // in RLP we want to encode null in the case of zero nonce
26541 // read the RLP documentation for an answer if you dare
26542 nonce = null
26543 } else {
26544 nonce = Buffer.from(nonce.toArray())
26545 }
26546
26547 // Only take the lower 160bits of the hash
26548 return exports.rlphash([from, nonce]).slice(-20)
26549}
26550
26551/**
26552 * Returns true if the supplied address belongs to a precompiled account
26553 * @param {Buffer|String} address
26554 * @return {Boolean}
26555 */
26556exports.isPrecompiled = function (address) {
26557 var a = exports.unpad(address)
26558 return a.length === 1 && a[0] > 0 && a[0] < 5
26559}
26560
26561/**
26562 * Adds "0x" to a given `String` if it does not already start with "0x"
26563 * @param {String} str
26564 * @return {String}
26565 */
26566exports.addHexPrefix = function (str) {
26567 if (typeof str !== 'string') {
26568 return str
26569 }
26570
26571 return exports.isHexPrefixed(str) ? str : '0x' + str
26572}
26573
26574/**
26575 * Validate ECDSA signature
26576 * @method isValidSignature
26577 * @param {Buffer} v
26578 * @param {Buffer} r
26579 * @param {Buffer} s
26580 * @param {Boolean} [homestead=true]
26581 * @return {Boolean}
26582 */
26583
26584exports.isValidSignature = function (v, r, s, homestead) {
26585 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
26586 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
26587
26588 if (r.length !== 32 || s.length !== 32) {
26589 return false
26590 }
26591
26592 if (v !== 27 && v !== 28) {
26593 return false
26594 }
26595
26596 r = new BN(r)
26597 s = new BN(s)
26598
26599 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
26600 return false
26601 }
26602
26603 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
26604 return false
26605 }
26606
26607 return true
26608}
26609
26610/**
26611 * Converts a `Buffer` or `Array` to JSON
26612 * @param {Buffer|Array} ba
26613 * @return {Array|String|null}
26614 */
26615exports.baToJSON = function (ba) {
26616 if (Buffer.isBuffer(ba)) {
26617 return '0x' + ba.toString('hex')
26618 } else if (ba instanceof Array) {
26619 var array = []
26620 for (var i = 0; i < ba.length; i++) {
26621 array.push(exports.baToJSON(ba[i]))
26622 }
26623 return array
26624 }
26625}
26626
26627/**
26628 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
26629 * @param {Object} self the `Object` to define properties on
26630 * @param {Array} fields an array fields to define. Fields can contain:
26631 * * `name` - the name of the properties
26632 * * `length` - the number of bytes the field can have
26633 * * `allowLess` - if the field can be less than the length
26634 * * `allowEmpty`
26635 * @param {*} data data to be validated against the definitions
26636 */
26637exports.defineProperties = function (self, fields, data) {
26638 self.raw = []
26639 self._fields = []
26640
26641 // attach the `toJSON`
26642 self.toJSON = function (label) {
26643 if (label) {
26644 var obj = {}
26645 self._fields.forEach(function (field) {
26646 obj[field] = '0x' + self[field].toString('hex')
26647 })
26648 return obj
26649 }
26650 return exports.baToJSON(this.raw)
26651 }
26652
26653 self.serialize = function serialize () {
26654 return rlp.encode(self.raw)
26655 }
26656
26657 fields.forEach(function (field, i) {
26658 self._fields.push(field.name)
26659 function getter () {
26660 return self.raw[i]
26661 }
26662 function setter (v) {
26663 v = exports.toBuffer(v)
26664
26665 if (v.toString('hex') === '00' && !field.allowZero) {
26666 v = Buffer.allocUnsafe(0)
26667 }
26668
26669 if (field.allowLess && field.length) {
26670 v = exports.stripZeros(v)
26671 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
26672 } else if (!(field.allowZero && v.length === 0) && field.length) {
26673 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
26674 }
26675
26676 self.raw[i] = v
26677 }
26678
26679 Object.defineProperty(self, field.name, {
26680 enumerable: true,
26681 configurable: true,
26682 get: getter,
26683 set: setter
26684 })
26685
26686 if (field.default) {
26687 self[field.name] = field.default
26688 }
26689
26690 // attach alias
26691 if (field.alias) {
26692 Object.defineProperty(self, field.alias, {
26693 enumerable: false,
26694 configurable: true,
26695 set: setter,
26696 get: getter
26697 })
26698 }
26699 })
26700
26701 // if the constuctor is passed data
26702 if (data) {
26703 if (typeof data === 'string') {
26704 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
26705 }
26706
26707 if (Buffer.isBuffer(data)) {
26708 data = rlp.decode(data)
26709 }
26710
26711 if (Array.isArray(data)) {
26712 if (data.length > self._fields.length) {
26713 throw (new Error('wrong number of fields in data'))
26714 }
26715
26716 // make sure all the items are buffers
26717 data.forEach(function (d, i) {
26718 self[self._fields[i]] = exports.toBuffer(d)
26719 })
26720 } else if (typeof data === 'object') {
26721 const keys = Object.keys(data)
26722 fields.forEach(function (field) {
26723 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
26724 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
26725 })
26726 } else {
26727 throw new Error('invalid data')
26728 }
26729 }
26730}
26731
26732}).call(this,require("buffer").Buffer)
26733},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
26734(function (Buffer){
26735// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
26736// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26737// NOTE: SIGHASH byte ignored AND restricted, truncate before use
26738
26739function check (buffer) {
26740 if (buffer.length < 8) return false
26741 if (buffer.length > 72) return false
26742 if (buffer[0] !== 0x30) return false
26743 if (buffer[1] !== buffer.length - 2) return false
26744 if (buffer[2] !== 0x02) return false
26745
26746 var lenR = buffer[3]
26747 if (lenR === 0) return false
26748 if (5 + lenR >= buffer.length) return false
26749 if (buffer[4 + lenR] !== 0x02) return false
26750
26751 var lenS = buffer[5 + lenR]
26752 if (lenS === 0) return false
26753 if ((6 + lenR + lenS) !== buffer.length) return false
26754
26755 if (buffer[4] & 0x80) return false
26756 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
26757
26758 if (buffer[lenR + 6] & 0x80) return false
26759 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
26760 return true
26761}
26762
26763function decode (buffer) {
26764 if (buffer.length < 8) throw new Error('DER sequence length is too short')
26765 if (buffer.length > 72) throw new Error('DER sequence length is too long')
26766 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
26767 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
26768 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
26769
26770 var lenR = buffer[3]
26771 if (lenR === 0) throw new Error('R length is zero')
26772 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
26773 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
26774
26775 var lenS = buffer[5 + lenR]
26776 if (lenS === 0) throw new Error('S length is zero')
26777 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
26778
26779 if (buffer[4] & 0x80) throw new Error('R value is negative')
26780 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
26781
26782 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
26783 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
26784
26785 // non-BIP66 - extract R, S values
26786 return {
26787 r: buffer.slice(4, 4 + lenR),
26788 s: buffer.slice(6 + lenR)
26789 }
26790}
26791
26792/*
26793 * Expects r and s to be positive DER integers.
26794 *
26795 * The DER format uses the most significant bit as a sign bit (& 0x80).
26796 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
26797 *
26798 * Examples:
26799 *
26800 * 0 => 0x00
26801 * 1 => 0x01
26802 * -1 => 0xff
26803 * 127 => 0x7f
26804 * -127 => 0x81
26805 * 128 => 0x0080
26806 * -128 => 0x80
26807 * 255 => 0x00ff
26808 * -255 => 0xff01
26809 * 16300 => 0x3fac
26810 * -16300 => 0xc054
26811 * 62300 => 0x00f35c
26812 * -62300 => 0xff0ca4
26813*/
26814function encode (r, s) {
26815 var lenR = r.length
26816 var lenS = s.length
26817 if (lenR === 0) throw new Error('R length is zero')
26818 if (lenS === 0) throw new Error('S length is zero')
26819 if (lenR > 33) throw new Error('R length is too long')
26820 if (lenS > 33) throw new Error('S length is too long')
26821 if (r[0] & 0x80) throw new Error('R value is negative')
26822 if (s[0] & 0x80) throw new Error('S value is negative')
26823 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
26824 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
26825
26826 var signature = new Buffer(6 + lenR + lenS)
26827
26828 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26829 signature[0] = 0x30
26830 signature[1] = signature.length - 2
26831 signature[2] = 0x02
26832 signature[3] = r.length
26833 r.copy(signature, 4)
26834 signature[4 + lenR] = 0x02
26835 signature[5 + lenR] = s.length
26836 s.copy(signature, 6 + lenR)
26837
26838 return signature
26839}
26840
26841module.exports = {
26842 check: check,
26843 decode: decode,
26844 encode: encode
26845}
26846
26847}).call(this,require("buffer").Buffer)
26848},{"buffer":5}],33:[function(require,module,exports){
26849(function (module, exports) {
26850 'use strict';
26851
26852 // Utils
26853 function assert (val, msg) {
26854 if (!val) throw new Error(msg || 'Assertion failed');
26855 }
26856
26857 // Could use `inherits` module, but don't want to move from single file
26858 // architecture yet.
26859 function inherits (ctor, superCtor) {
26860 ctor.super_ = superCtor;
26861 var TempCtor = function () {};
26862 TempCtor.prototype = superCtor.prototype;
26863 ctor.prototype = new TempCtor();
26864 ctor.prototype.constructor = ctor;
26865 }
26866
26867 // BN
26868
26869 function BN (number, base, endian) {
26870 if (BN.isBN(number)) {
26871 return number;
26872 }
26873
26874 this.negative = 0;
26875 this.words = null;
26876 this.length = 0;
26877
26878 // Reduction context
26879 this.red = null;
26880
26881 if (number !== null) {
26882 if (base === 'le' || base === 'be') {
26883 endian = base;
26884 base = 10;
26885 }
26886
26887 this._init(number || 0, base || 10, endian || 'be');
26888 }
26889 }
26890 if (typeof module === 'object') {
26891 module.exports = BN;
26892 } else {
26893 exports.BN = BN;
26894 }
26895
26896 BN.BN = BN;
26897 BN.wordSize = 26;
26898
26899 var Buffer;
26900 try {
26901 Buffer = require('buf' + 'fer').Buffer;
26902 } catch (e) {
26903 }
26904
26905 BN.isBN = function isBN (num) {
26906 if (num instanceof BN) {
26907 return true;
26908 }
26909
26910 return num !== null && typeof num === 'object' &&
26911 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
26912 };
26913
26914 BN.max = function max (left, right) {
26915 if (left.cmp(right) > 0) return left;
26916 return right;
26917 };
26918
26919 BN.min = function min (left, right) {
26920 if (left.cmp(right) < 0) return left;
26921 return right;
26922 };
26923
26924 BN.prototype._init = function init (number, base, endian) {
26925 if (typeof number === 'number') {
26926 return this._initNumber(number, base, endian);
26927 }
26928
26929 if (typeof number === 'object') {
26930 return this._initArray(number, base, endian);
26931 }
26932
26933 if (base === 'hex') {
26934 base = 16;
26935 }
26936 assert(base === (base | 0) && base >= 2 && base <= 36);
26937
26938 number = number.toString().replace(/\s+/g, '');
26939 var start = 0;
26940 if (number[0] === '-') {
26941 start++;
26942 }
26943
26944 if (base === 16) {
26945 this._parseHex(number, start);
26946 } else {
26947 this._parseBase(number, base, start);
26948 }
26949
26950 if (number[0] === '-') {
26951 this.negative = 1;
26952 }
26953
26954 this.strip();
26955
26956 if (endian !== 'le') return;
26957
26958 this._initArray(this.toArray(), base, endian);
26959 };
26960
26961 BN.prototype._initNumber = function _initNumber (number, base, endian) {
26962 if (number < 0) {
26963 this.negative = 1;
26964 number = -number;
26965 }
26966 if (number < 0x4000000) {
26967 this.words = [ number & 0x3ffffff ];
26968 this.length = 1;
26969 } else if (number < 0x10000000000000) {
26970 this.words = [
26971 number & 0x3ffffff,
26972 (number / 0x4000000) & 0x3ffffff
26973 ];
26974 this.length = 2;
26975 } else {
26976 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
26977 this.words = [
26978 number & 0x3ffffff,
26979 (number / 0x4000000) & 0x3ffffff,
26980 1
26981 ];
26982 this.length = 3;
26983 }
26984
26985 if (endian !== 'le') return;
26986
26987 // Reverse the bytes
26988 this._initArray(this.toArray(), base, endian);
26989 };
26990
26991 BN.prototype._initArray = function _initArray (number, base, endian) {
26992 // Perhaps a Uint8Array
26993 assert(typeof number.length === 'number');
26994 if (number.length <= 0) {
26995 this.words = [ 0 ];
26996 this.length = 1;
26997 return this;
26998 }
26999
27000 this.length = Math.ceil(number.length / 3);
27001 this.words = new Array(this.length);
27002 for (var i = 0; i < this.length; i++) {
27003 this.words[i] = 0;
27004 }
27005
27006 var j, w;
27007 var off = 0;
27008 if (endian === 'be') {
27009 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
27010 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
27011 this.words[j] |= (w << off) & 0x3ffffff;
27012 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27013 off += 24;
27014 if (off >= 26) {
27015 off -= 26;
27016 j++;
27017 }
27018 }
27019 } else if (endian === 'le') {
27020 for (i = 0, j = 0; i < number.length; i += 3) {
27021 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
27022 this.words[j] |= (w << off) & 0x3ffffff;
27023 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27024 off += 24;
27025 if (off >= 26) {
27026 off -= 26;
27027 j++;
27028 }
27029 }
27030 }
27031 return this.strip();
27032 };
27033
27034 function parseHex (str, start, end) {
27035 var r = 0;
27036 var len = Math.min(str.length, end);
27037 for (var i = start; i < len; i++) {
27038 var c = str.charCodeAt(i) - 48;
27039
27040 r <<= 4;
27041
27042 // 'a' - 'f'
27043 if (c >= 49 && c <= 54) {
27044 r |= c - 49 + 0xa;
27045
27046 // 'A' - 'F'
27047 } else if (c >= 17 && c <= 22) {
27048 r |= c - 17 + 0xa;
27049
27050 // '0' - '9'
27051 } else {
27052 r |= c & 0xf;
27053 }
27054 }
27055 return r;
27056 }
27057
27058 BN.prototype._parseHex = function _parseHex (number, start) {
27059 // Create possibly bigger array to ensure that it fits the number
27060 this.length = Math.ceil((number.length - start) / 6);
27061 this.words = new Array(this.length);
27062 for (var i = 0; i < this.length; i++) {
27063 this.words[i] = 0;
27064 }
27065
27066 var j, w;
27067 // Scan 24-bit chunks and add them to the number
27068 var off = 0;
27069 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
27070 w = parseHex(number, i, i + 6);
27071 this.words[j] |= (w << off) & 0x3ffffff;
27072 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
27073 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27074 off += 24;
27075 if (off >= 26) {
27076 off -= 26;
27077 j++;
27078 }
27079 }
27080 if (i + 6 !== start) {
27081 w = parseHex(number, start, i + 6);
27082 this.words[j] |= (w << off) & 0x3ffffff;
27083 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27084 }
27085 this.strip();
27086 };
27087
27088 function parseBase (str, start, end, mul) {
27089 var r = 0;
27090 var len = Math.min(str.length, end);
27091 for (var i = start; i < len; i++) {
27092 var c = str.charCodeAt(i) - 48;
27093
27094 r *= mul;
27095
27096 // 'a'
27097 if (c >= 49) {
27098 r += c - 49 + 0xa;
27099
27100 // 'A'
27101 } else if (c >= 17) {
27102 r += c - 17 + 0xa;
27103
27104 // '0' - '9'
27105 } else {
27106 r += c;
27107 }
27108 }
27109 return r;
27110 }
27111
27112 BN.prototype._parseBase = function _parseBase (number, base, start) {
27113 // Initialize as zero
27114 this.words = [ 0 ];
27115 this.length = 1;
27116
27117 // Find length of limb in base
27118 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
27119 limbLen++;
27120 }
27121 limbLen--;
27122 limbPow = (limbPow / base) | 0;
27123
27124 var total = number.length - start;
27125 var mod = total % limbLen;
27126 var end = Math.min(total, total - mod) + start;
27127
27128 var word = 0;
27129 for (var i = start; i < end; i += limbLen) {
27130 word = parseBase(number, i, i + limbLen, base);
27131
27132 this.imuln(limbPow);
27133 if (this.words[0] + word < 0x4000000) {
27134 this.words[0] += word;
27135 } else {
27136 this._iaddn(word);
27137 }
27138 }
27139
27140 if (mod !== 0) {
27141 var pow = 1;
27142 word = parseBase(number, i, number.length, base);
27143
27144 for (i = 0; i < mod; i++) {
27145 pow *= base;
27146 }
27147
27148 this.imuln(pow);
27149 if (this.words[0] + word < 0x4000000) {
27150 this.words[0] += word;
27151 } else {
27152 this._iaddn(word);
27153 }
27154 }
27155 };
27156
27157 BN.prototype.copy = function copy (dest) {
27158 dest.words = new Array(this.length);
27159 for (var i = 0; i < this.length; i++) {
27160 dest.words[i] = this.words[i];
27161 }
27162 dest.length = this.length;
27163 dest.negative = this.negative;
27164 dest.red = this.red;
27165 };
27166
27167 BN.prototype.clone = function clone () {
27168 var r = new BN(null);
27169 this.copy(r);
27170 return r;
27171 };
27172
27173 BN.prototype._expand = function _expand (size) {
27174 while (this.length < size) {
27175 this.words[this.length++] = 0;
27176 }
27177 return this;
27178 };
27179
27180 // Remove leading `0` from `this`
27181 BN.prototype.strip = function strip () {
27182 while (this.length > 1 && this.words[this.length - 1] === 0) {
27183 this.length--;
27184 }
27185 return this._normSign();
27186 };
27187
27188 BN.prototype._normSign = function _normSign () {
27189 // -0 = 0
27190 if (this.length === 1 && this.words[0] === 0) {
27191 this.negative = 0;
27192 }
27193 return this;
27194 };
27195
27196 BN.prototype.inspect = function inspect () {
27197 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
27198 };
27199
27200 /*
27201
27202 var zeros = [];
27203 var groupSizes = [];
27204 var groupBases = [];
27205
27206 var s = '';
27207 var i = -1;
27208 while (++i < BN.wordSize) {
27209 zeros[i] = s;
27210 s += '0';
27211 }
27212 groupSizes[0] = 0;
27213 groupSizes[1] = 0;
27214 groupBases[0] = 0;
27215 groupBases[1] = 0;
27216 var base = 2 - 1;
27217 while (++base < 36 + 1) {
27218 var groupSize = 0;
27219 var groupBase = 1;
27220 while (groupBase < (1 << BN.wordSize) / base) {
27221 groupBase *= base;
27222 groupSize += 1;
27223 }
27224 groupSizes[base] = groupSize;
27225 groupBases[base] = groupBase;
27226 }
27227
27228 */
27229
27230 var zeros = [
27231 '',
27232 '0',
27233 '00',
27234 '000',
27235 '0000',
27236 '00000',
27237 '000000',
27238 '0000000',
27239 '00000000',
27240 '000000000',
27241 '0000000000',
27242 '00000000000',
27243 '000000000000',
27244 '0000000000000',
27245 '00000000000000',
27246 '000000000000000',
27247 '0000000000000000',
27248 '00000000000000000',
27249 '000000000000000000',
27250 '0000000000000000000',
27251 '00000000000000000000',
27252 '000000000000000000000',
27253 '0000000000000000000000',
27254 '00000000000000000000000',
27255 '000000000000000000000000',
27256 '0000000000000000000000000'
27257 ];
27258
27259 var groupSizes = [
27260 0, 0,
27261 25, 16, 12, 11, 10, 9, 8,
27262 8, 7, 7, 7, 7, 6, 6,
27263 6, 6, 6, 6, 6, 5, 5,
27264 5, 5, 5, 5, 5, 5, 5,
27265 5, 5, 5, 5, 5, 5, 5
27266 ];
27267
27268 var groupBases = [
27269 0, 0,
27270 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
27271 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
27272 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
27273 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
27274 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
27275 ];
27276
27277 BN.prototype.toString = function toString (base, padding) {
27278 base = base || 10;
27279 padding = padding | 0 || 1;
27280
27281 var out;
27282 if (base === 16 || base === 'hex') {
27283 out = '';
27284 var off = 0;
27285 var carry = 0;
27286 for (var i = 0; i < this.length; i++) {
27287 var w = this.words[i];
27288 var word = (((w << off) | carry) & 0xffffff).toString(16);
27289 carry = (w >>> (24 - off)) & 0xffffff;
27290 if (carry !== 0 || i !== this.length - 1) {
27291 out = zeros[6 - word.length] + word + out;
27292 } else {
27293 out = word + out;
27294 }
27295 off += 2;
27296 if (off >= 26) {
27297 off -= 26;
27298 i--;
27299 }
27300 }
27301 if (carry !== 0) {
27302 out = carry.toString(16) + out;
27303 }
27304 while (out.length % padding !== 0) {
27305 out = '0' + out;
27306 }
27307 if (this.negative !== 0) {
27308 out = '-' + out;
27309 }
27310 return out;
27311 }
27312
27313 if (base === (base | 0) && base >= 2 && base <= 36) {
27314 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
27315 var groupSize = groupSizes[base];
27316 // var groupBase = Math.pow(base, groupSize);
27317 var groupBase = groupBases[base];
27318 out = '';
27319 var c = this.clone();
27320 c.negative = 0;
27321 while (!c.isZero()) {
27322 var r = c.modn(groupBase).toString(base);
27323 c = c.idivn(groupBase);
27324
27325 if (!c.isZero()) {
27326 out = zeros[groupSize - r.length] + r + out;
27327 } else {
27328 out = r + out;
27329 }
27330 }
27331 if (this.isZero()) {
27332 out = '0' + out;
27333 }
27334 while (out.length % padding !== 0) {
27335 out = '0' + out;
27336 }
27337 if (this.negative !== 0) {
27338 out = '-' + out;
27339 }
27340 return out;
27341 }
27342
27343 assert(false, 'Base should be between 2 and 36');
27344 };
27345
27346 BN.prototype.toNumber = function toNumber () {
27347 var ret = this.words[0];
27348 if (this.length === 2) {
27349 ret += this.words[1] * 0x4000000;
27350 } else if (this.length === 3 && this.words[2] === 0x01) {
27351 // NOTE: at this stage it is known that the top bit is set
27352 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
27353 } else if (this.length > 2) {
27354 assert(false, 'Number can only safely store up to 53 bits');
27355 }
27356 return (this.negative !== 0) ? -ret : ret;
27357 };
27358
27359 BN.prototype.toJSON = function toJSON () {
27360 return this.toString(16);
27361 };
27362
27363 BN.prototype.toBuffer = function toBuffer (endian, length) {
27364 assert(typeof Buffer !== 'undefined');
27365 return this.toArrayLike(Buffer, endian, length);
27366 };
27367
27368 BN.prototype.toArray = function toArray (endian, length) {
27369 return this.toArrayLike(Array, endian, length);
27370 };
27371
27372 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
27373 var byteLength = this.byteLength();
27374 var reqLength = length || Math.max(1, byteLength);
27375 assert(byteLength <= reqLength, 'byte array longer than desired length');
27376 assert(reqLength > 0, 'Requested array length <= 0');
27377
27378 this.strip();
27379 var littleEndian = endian === 'le';
27380 var res = new ArrayType(reqLength);
27381
27382 var b, i;
27383 var q = this.clone();
27384 if (!littleEndian) {
27385 // Assume big-endian
27386 for (i = 0; i < reqLength - byteLength; i++) {
27387 res[i] = 0;
27388 }
27389
27390 for (i = 0; !q.isZero(); i++) {
27391 b = q.andln(0xff);
27392 q.iushrn(8);
27393
27394 res[reqLength - i - 1] = b;
27395 }
27396 } else {
27397 for (i = 0; !q.isZero(); i++) {
27398 b = q.andln(0xff);
27399 q.iushrn(8);
27400
27401 res[i] = b;
27402 }
27403
27404 for (; i < reqLength; i++) {
27405 res[i] = 0;
27406 }
27407 }
27408
27409 return res;
27410 };
27411
27412 if (Math.clz32) {
27413 BN.prototype._countBits = function _countBits (w) {
27414 return 32 - Math.clz32(w);
27415 };
27416 } else {
27417 BN.prototype._countBits = function _countBits (w) {
27418 var t = w;
27419 var r = 0;
27420 if (t >= 0x1000) {
27421 r += 13;
27422 t >>>= 13;
27423 }
27424 if (t >= 0x40) {
27425 r += 7;
27426 t >>>= 7;
27427 }
27428 if (t >= 0x8) {
27429 r += 4;
27430 t >>>= 4;
27431 }
27432 if (t >= 0x02) {
27433 r += 2;
27434 t >>>= 2;
27435 }
27436 return r + t;
27437 };
27438 }
27439
27440 BN.prototype._zeroBits = function _zeroBits (w) {
27441 // Short-cut
27442 if (w === 0) return 26;
27443
27444 var t = w;
27445 var r = 0;
27446 if ((t & 0x1fff) === 0) {
27447 r += 13;
27448 t >>>= 13;
27449 }
27450 if ((t & 0x7f) === 0) {
27451 r += 7;
27452 t >>>= 7;
27453 }
27454 if ((t & 0xf) === 0) {
27455 r += 4;
27456 t >>>= 4;
27457 }
27458 if ((t & 0x3) === 0) {
27459 r += 2;
27460 t >>>= 2;
27461 }
27462 if ((t & 0x1) === 0) {
27463 r++;
27464 }
27465 return r;
27466 };
27467
27468 // Return number of used bits in a BN
27469 BN.prototype.bitLength = function bitLength () {
27470 var w = this.words[this.length - 1];
27471 var hi = this._countBits(w);
27472 return (this.length - 1) * 26 + hi;
27473 };
27474
27475 function toBitArray (num) {
27476 var w = new Array(num.bitLength());
27477
27478 for (var bit = 0; bit < w.length; bit++) {
27479 var off = (bit / 26) | 0;
27480 var wbit = bit % 26;
27481
27482 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
27483 }
27484
27485 return w;
27486 }
27487
27488 // Number of trailing zero bits
27489 BN.prototype.zeroBits = function zeroBits () {
27490 if (this.isZero()) return 0;
27491
27492 var r = 0;
27493 for (var i = 0; i < this.length; i++) {
27494 var b = this._zeroBits(this.words[i]);
27495 r += b;
27496 if (b !== 26) break;
27497 }
27498 return r;
27499 };
27500
27501 BN.prototype.byteLength = function byteLength () {
27502 return Math.ceil(this.bitLength() / 8);
27503 };
27504
27505 BN.prototype.toTwos = function toTwos (width) {
27506 if (this.negative !== 0) {
27507 return this.abs().inotn(width).iaddn(1);
27508 }
27509 return this.clone();
27510 };
27511
27512 BN.prototype.fromTwos = function fromTwos (width) {
27513 if (this.testn(width - 1)) {
27514 return this.notn(width).iaddn(1).ineg();
27515 }
27516 return this.clone();
27517 };
27518
27519 BN.prototype.isNeg = function isNeg () {
27520 return this.negative !== 0;
27521 };
27522
27523 // Return negative clone of `this`
27524 BN.prototype.neg = function neg () {
27525 return this.clone().ineg();
27526 };
27527
27528 BN.prototype.ineg = function ineg () {
27529 if (!this.isZero()) {
27530 this.negative ^= 1;
27531 }
27532
27533 return this;
27534 };
27535
27536 // Or `num` with `this` in-place
27537 BN.prototype.iuor = function iuor (num) {
27538 while (this.length < num.length) {
27539 this.words[this.length++] = 0;
27540 }
27541
27542 for (var i = 0; i < num.length; i++) {
27543 this.words[i] = this.words[i] | num.words[i];
27544 }
27545
27546 return this.strip();
27547 };
27548
27549 BN.prototype.ior = function ior (num) {
27550 assert((this.negative | num.negative) === 0);
27551 return this.iuor(num);
27552 };
27553
27554 // Or `num` with `this`
27555 BN.prototype.or = function or (num) {
27556 if (this.length > num.length) return this.clone().ior(num);
27557 return num.clone().ior(this);
27558 };
27559
27560 BN.prototype.uor = function uor (num) {
27561 if (this.length > num.length) return this.clone().iuor(num);
27562 return num.clone().iuor(this);
27563 };
27564
27565 // And `num` with `this` in-place
27566 BN.prototype.iuand = function iuand (num) {
27567 // b = min-length(num, this)
27568 var b;
27569 if (this.length > num.length) {
27570 b = num;
27571 } else {
27572 b = this;
27573 }
27574
27575 for (var i = 0; i < b.length; i++) {
27576 this.words[i] = this.words[i] & num.words[i];
27577 }
27578
27579 this.length = b.length;
27580
27581 return this.strip();
27582 };
27583
27584 BN.prototype.iand = function iand (num) {
27585 assert((this.negative | num.negative) === 0);
27586 return this.iuand(num);
27587 };
27588
27589 // And `num` with `this`
27590 BN.prototype.and = function and (num) {
27591 if (this.length > num.length) return this.clone().iand(num);
27592 return num.clone().iand(this);
27593 };
27594
27595 BN.prototype.uand = function uand (num) {
27596 if (this.length > num.length) return this.clone().iuand(num);
27597 return num.clone().iuand(this);
27598 };
27599
27600 // Xor `num` with `this` in-place
27601 BN.prototype.iuxor = function iuxor (num) {
27602 // a.length > b.length
27603 var a;
27604 var b;
27605 if (this.length > num.length) {
27606 a = this;
27607 b = num;
27608 } else {
27609 a = num;
27610 b = this;
27611 }
27612
27613 for (var i = 0; i < b.length; i++) {
27614 this.words[i] = a.words[i] ^ b.words[i];
27615 }
27616
27617 if (this !== a) {
27618 for (; i < a.length; i++) {
27619 this.words[i] = a.words[i];
27620 }
27621 }
27622
27623 this.length = a.length;
27624
27625 return this.strip();
27626 };
27627
27628 BN.prototype.ixor = function ixor (num) {
27629 assert((this.negative | num.negative) === 0);
27630 return this.iuxor(num);
27631 };
27632
27633 // Xor `num` with `this`
27634 BN.prototype.xor = function xor (num) {
27635 if (this.length > num.length) return this.clone().ixor(num);
27636 return num.clone().ixor(this);
27637 };
27638
27639 BN.prototype.uxor = function uxor (num) {
27640 if (this.length > num.length) return this.clone().iuxor(num);
27641 return num.clone().iuxor(this);
27642 };
27643
27644 // Not ``this`` with ``width`` bitwidth
27645 BN.prototype.inotn = function inotn (width) {
27646 assert(typeof width === 'number' && width >= 0);
27647
27648 var bytesNeeded = Math.ceil(width / 26) | 0;
27649 var bitsLeft = width % 26;
27650
27651 // Extend the buffer with leading zeroes
27652 this._expand(bytesNeeded);
27653
27654 if (bitsLeft > 0) {
27655 bytesNeeded--;
27656 }
27657
27658 // Handle complete words
27659 for (var i = 0; i < bytesNeeded; i++) {
27660 this.words[i] = ~this.words[i] & 0x3ffffff;
27661 }
27662
27663 // Handle the residue
27664 if (bitsLeft > 0) {
27665 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
27666 }
27667
27668 // And remove leading zeroes
27669 return this.strip();
27670 };
27671
27672 BN.prototype.notn = function notn (width) {
27673 return this.clone().inotn(width);
27674 };
27675
27676 // Set `bit` of `this`
27677 BN.prototype.setn = function setn (bit, val) {
27678 assert(typeof bit === 'number' && bit >= 0);
27679
27680 var off = (bit / 26) | 0;
27681 var wbit = bit % 26;
27682
27683 this._expand(off + 1);
27684
27685 if (val) {
27686 this.words[off] = this.words[off] | (1 << wbit);
27687 } else {
27688 this.words[off] = this.words[off] & ~(1 << wbit);
27689 }
27690
27691 return this.strip();
27692 };
27693
27694 // Add `num` to `this` in-place
27695 BN.prototype.iadd = function iadd (num) {
27696 var r;
27697
27698 // negative + positive
27699 if (this.negative !== 0 && num.negative === 0) {
27700 this.negative = 0;
27701 r = this.isub(num);
27702 this.negative ^= 1;
27703 return this._normSign();
27704
27705 // positive + negative
27706 } else if (this.negative === 0 && num.negative !== 0) {
27707 num.negative = 0;
27708 r = this.isub(num);
27709 num.negative = 1;
27710 return r._normSign();
27711 }
27712
27713 // a.length > b.length
27714 var a, b;
27715 if (this.length > num.length) {
27716 a = this;
27717 b = num;
27718 } else {
27719 a = num;
27720 b = this;
27721 }
27722
27723 var carry = 0;
27724 for (var i = 0; i < b.length; i++) {
27725 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
27726 this.words[i] = r & 0x3ffffff;
27727 carry = r >>> 26;
27728 }
27729 for (; carry !== 0 && i < a.length; i++) {
27730 r = (a.words[i] | 0) + carry;
27731 this.words[i] = r & 0x3ffffff;
27732 carry = r >>> 26;
27733 }
27734
27735 this.length = a.length;
27736 if (carry !== 0) {
27737 this.words[this.length] = carry;
27738 this.length++;
27739 // Copy the rest of the words
27740 } else if (a !== this) {
27741 for (; i < a.length; i++) {
27742 this.words[i] = a.words[i];
27743 }
27744 }
27745
27746 return this;
27747 };
27748
27749 // Add `num` to `this`
27750 BN.prototype.add = function add (num) {
27751 var res;
27752 if (num.negative !== 0 && this.negative === 0) {
27753 num.negative = 0;
27754 res = this.sub(num);
27755 num.negative ^= 1;
27756 return res;
27757 } else if (num.negative === 0 && this.negative !== 0) {
27758 this.negative = 0;
27759 res = num.sub(this);
27760 this.negative = 1;
27761 return res;
27762 }
27763
27764 if (this.length > num.length) return this.clone().iadd(num);
27765
27766 return num.clone().iadd(this);
27767 };
27768
27769 // Subtract `num` from `this` in-place
27770 BN.prototype.isub = function isub (num) {
27771 // this - (-num) = this + num
27772 if (num.negative !== 0) {
27773 num.negative = 0;
27774 var r = this.iadd(num);
27775 num.negative = 1;
27776 return r._normSign();
27777
27778 // -this - num = -(this + num)
27779 } else if (this.negative !== 0) {
27780 this.negative = 0;
27781 this.iadd(num);
27782 this.negative = 1;
27783 return this._normSign();
27784 }
27785
27786 // At this point both numbers are positive
27787 var cmp = this.cmp(num);
27788
27789 // Optimization - zeroify
27790 if (cmp === 0) {
27791 this.negative = 0;
27792 this.length = 1;
27793 this.words[0] = 0;
27794 return this;
27795 }
27796
27797 // a > b
27798 var a, b;
27799 if (cmp > 0) {
27800 a = this;
27801 b = num;
27802 } else {
27803 a = num;
27804 b = this;
27805 }
27806
27807 var carry = 0;
27808 for (var i = 0; i < b.length; i++) {
27809 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
27810 carry = r >> 26;
27811 this.words[i] = r & 0x3ffffff;
27812 }
27813 for (; carry !== 0 && i < a.length; i++) {
27814 r = (a.words[i] | 0) + carry;
27815 carry = r >> 26;
27816 this.words[i] = r & 0x3ffffff;
27817 }
27818
27819 // Copy rest of the words
27820 if (carry === 0 && i < a.length && a !== this) {
27821 for (; i < a.length; i++) {
27822 this.words[i] = a.words[i];
27823 }
27824 }
27825
27826 this.length = Math.max(this.length, i);
27827
27828 if (a !== this) {
27829 this.negative = 1;
27830 }
27831
27832 return this.strip();
27833 };
27834
27835 // Subtract `num` from `this`
27836 BN.prototype.sub = function sub (num) {
27837 return this.clone().isub(num);
27838 };
27839
27840 function smallMulTo (self, num, out) {
27841 out.negative = num.negative ^ self.negative;
27842 var len = (self.length + num.length) | 0;
27843 out.length = len;
27844 len = (len - 1) | 0;
27845
27846 // Peel one iteration (compiler can't do it, because of code complexity)
27847 var a = self.words[0] | 0;
27848 var b = num.words[0] | 0;
27849 var r = a * b;
27850
27851 var lo = r & 0x3ffffff;
27852 var carry = (r / 0x4000000) | 0;
27853 out.words[0] = lo;
27854
27855 for (var k = 1; k < len; k++) {
27856 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
27857 // note that ncarry could be >= 0x3ffffff
27858 var ncarry = carry >>> 26;
27859 var rword = carry & 0x3ffffff;
27860 var maxJ = Math.min(k, num.length - 1);
27861 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
27862 var i = (k - j) | 0;
27863 a = self.words[i] | 0;
27864 b = num.words[j] | 0;
27865 r = a * b + rword;
27866 ncarry += (r / 0x4000000) | 0;
27867 rword = r & 0x3ffffff;
27868 }
27869 out.words[k] = rword | 0;
27870 carry = ncarry | 0;
27871 }
27872 if (carry !== 0) {
27873 out.words[k] = carry | 0;
27874 } else {
27875 out.length--;
27876 }
27877
27878 return out.strip();
27879 }
27880
27881 // TODO(indutny): it may be reasonable to omit it for users who don't need
27882 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
27883 // multiplication (like elliptic secp256k1).
27884 var comb10MulTo = function comb10MulTo (self, num, out) {
27885 var a = self.words;
27886 var b = num.words;
27887 var o = out.words;
27888 var c = 0;
27889 var lo;
27890 var mid;
27891 var hi;
27892 var a0 = a[0] | 0;
27893 var al0 = a0 & 0x1fff;
27894 var ah0 = a0 >>> 13;
27895 var a1 = a[1] | 0;
27896 var al1 = a1 & 0x1fff;
27897 var ah1 = a1 >>> 13;
27898 var a2 = a[2] | 0;
27899 var al2 = a2 & 0x1fff;
27900 var ah2 = a2 >>> 13;
27901 var a3 = a[3] | 0;
27902 var al3 = a3 & 0x1fff;
27903 var ah3 = a3 >>> 13;
27904 var a4 = a[4] | 0;
27905 var al4 = a4 & 0x1fff;
27906 var ah4 = a4 >>> 13;
27907 var a5 = a[5] | 0;
27908 var al5 = a5 & 0x1fff;
27909 var ah5 = a5 >>> 13;
27910 var a6 = a[6] | 0;
27911 var al6 = a6 & 0x1fff;
27912 var ah6 = a6 >>> 13;
27913 var a7 = a[7] | 0;
27914 var al7 = a7 & 0x1fff;
27915 var ah7 = a7 >>> 13;
27916 var a8 = a[8] | 0;
27917 var al8 = a8 & 0x1fff;
27918 var ah8 = a8 >>> 13;
27919 var a9 = a[9] | 0;
27920 var al9 = a9 & 0x1fff;
27921 var ah9 = a9 >>> 13;
27922 var b0 = b[0] | 0;
27923 var bl0 = b0 & 0x1fff;
27924 var bh0 = b0 >>> 13;
27925 var b1 = b[1] | 0;
27926 var bl1 = b1 & 0x1fff;
27927 var bh1 = b1 >>> 13;
27928 var b2 = b[2] | 0;
27929 var bl2 = b2 & 0x1fff;
27930 var bh2 = b2 >>> 13;
27931 var b3 = b[3] | 0;
27932 var bl3 = b3 & 0x1fff;
27933 var bh3 = b3 >>> 13;
27934 var b4 = b[4] | 0;
27935 var bl4 = b4 & 0x1fff;
27936 var bh4 = b4 >>> 13;
27937 var b5 = b[5] | 0;
27938 var bl5 = b5 & 0x1fff;
27939 var bh5 = b5 >>> 13;
27940 var b6 = b[6] | 0;
27941 var bl6 = b6 & 0x1fff;
27942 var bh6 = b6 >>> 13;
27943 var b7 = b[7] | 0;
27944 var bl7 = b7 & 0x1fff;
27945 var bh7 = b7 >>> 13;
27946 var b8 = b[8] | 0;
27947 var bl8 = b8 & 0x1fff;
27948 var bh8 = b8 >>> 13;
27949 var b9 = b[9] | 0;
27950 var bl9 = b9 & 0x1fff;
27951 var bh9 = b9 >>> 13;
27952
27953 out.negative = self.negative ^ num.negative;
27954 out.length = 19;
27955 /* k = 0 */
27956 lo = Math.imul(al0, bl0);
27957 mid = Math.imul(al0, bh0);
27958 mid = (mid + Math.imul(ah0, bl0)) | 0;
27959 hi = Math.imul(ah0, bh0);
27960 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
27961 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
27962 w0 &= 0x3ffffff;
27963 /* k = 1 */
27964 lo = Math.imul(al1, bl0);
27965 mid = Math.imul(al1, bh0);
27966 mid = (mid + Math.imul(ah1, bl0)) | 0;
27967 hi = Math.imul(ah1, bh0);
27968 lo = (lo + Math.imul(al0, bl1)) | 0;
27969 mid = (mid + Math.imul(al0, bh1)) | 0;
27970 mid = (mid + Math.imul(ah0, bl1)) | 0;
27971 hi = (hi + Math.imul(ah0, bh1)) | 0;
27972 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
27973 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
27974 w1 &= 0x3ffffff;
27975 /* k = 2 */
27976 lo = Math.imul(al2, bl0);
27977 mid = Math.imul(al2, bh0);
27978 mid = (mid + Math.imul(ah2, bl0)) | 0;
27979 hi = Math.imul(ah2, bh0);
27980 lo = (lo + Math.imul(al1, bl1)) | 0;
27981 mid = (mid + Math.imul(al1, bh1)) | 0;
27982 mid = (mid + Math.imul(ah1, bl1)) | 0;
27983 hi = (hi + Math.imul(ah1, bh1)) | 0;
27984 lo = (lo + Math.imul(al0, bl2)) | 0;
27985 mid = (mid + Math.imul(al0, bh2)) | 0;
27986 mid = (mid + Math.imul(ah0, bl2)) | 0;
27987 hi = (hi + Math.imul(ah0, bh2)) | 0;
27988 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
27989 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
27990 w2 &= 0x3ffffff;
27991 /* k = 3 */
27992 lo = Math.imul(al3, bl0);
27993 mid = Math.imul(al3, bh0);
27994 mid = (mid + Math.imul(ah3, bl0)) | 0;
27995 hi = Math.imul(ah3, bh0);
27996 lo = (lo + Math.imul(al2, bl1)) | 0;
27997 mid = (mid + Math.imul(al2, bh1)) | 0;
27998 mid = (mid + Math.imul(ah2, bl1)) | 0;
27999 hi = (hi + Math.imul(ah2, bh1)) | 0;
28000 lo = (lo + Math.imul(al1, bl2)) | 0;
28001 mid = (mid + Math.imul(al1, bh2)) | 0;
28002 mid = (mid + Math.imul(ah1, bl2)) | 0;
28003 hi = (hi + Math.imul(ah1, bh2)) | 0;
28004 lo = (lo + Math.imul(al0, bl3)) | 0;
28005 mid = (mid + Math.imul(al0, bh3)) | 0;
28006 mid = (mid + Math.imul(ah0, bl3)) | 0;
28007 hi = (hi + Math.imul(ah0, bh3)) | 0;
28008 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28009 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
28010 w3 &= 0x3ffffff;
28011 /* k = 4 */
28012 lo = Math.imul(al4, bl0);
28013 mid = Math.imul(al4, bh0);
28014 mid = (mid + Math.imul(ah4, bl0)) | 0;
28015 hi = Math.imul(ah4, bh0);
28016 lo = (lo + Math.imul(al3, bl1)) | 0;
28017 mid = (mid + Math.imul(al3, bh1)) | 0;
28018 mid = (mid + Math.imul(ah3, bl1)) | 0;
28019 hi = (hi + Math.imul(ah3, bh1)) | 0;
28020 lo = (lo + Math.imul(al2, bl2)) | 0;
28021 mid = (mid + Math.imul(al2, bh2)) | 0;
28022 mid = (mid + Math.imul(ah2, bl2)) | 0;
28023 hi = (hi + Math.imul(ah2, bh2)) | 0;
28024 lo = (lo + Math.imul(al1, bl3)) | 0;
28025 mid = (mid + Math.imul(al1, bh3)) | 0;
28026 mid = (mid + Math.imul(ah1, bl3)) | 0;
28027 hi = (hi + Math.imul(ah1, bh3)) | 0;
28028 lo = (lo + Math.imul(al0, bl4)) | 0;
28029 mid = (mid + Math.imul(al0, bh4)) | 0;
28030 mid = (mid + Math.imul(ah0, bl4)) | 0;
28031 hi = (hi + Math.imul(ah0, bh4)) | 0;
28032 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28033 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
28034 w4 &= 0x3ffffff;
28035 /* k = 5 */
28036 lo = Math.imul(al5, bl0);
28037 mid = Math.imul(al5, bh0);
28038 mid = (mid + Math.imul(ah5, bl0)) | 0;
28039 hi = Math.imul(ah5, bh0);
28040 lo = (lo + Math.imul(al4, bl1)) | 0;
28041 mid = (mid + Math.imul(al4, bh1)) | 0;
28042 mid = (mid + Math.imul(ah4, bl1)) | 0;
28043 hi = (hi + Math.imul(ah4, bh1)) | 0;
28044 lo = (lo + Math.imul(al3, bl2)) | 0;
28045 mid = (mid + Math.imul(al3, bh2)) | 0;
28046 mid = (mid + Math.imul(ah3, bl2)) | 0;
28047 hi = (hi + Math.imul(ah3, bh2)) | 0;
28048 lo = (lo + Math.imul(al2, bl3)) | 0;
28049 mid = (mid + Math.imul(al2, bh3)) | 0;
28050 mid = (mid + Math.imul(ah2, bl3)) | 0;
28051 hi = (hi + Math.imul(ah2, bh3)) | 0;
28052 lo = (lo + Math.imul(al1, bl4)) | 0;
28053 mid = (mid + Math.imul(al1, bh4)) | 0;
28054 mid = (mid + Math.imul(ah1, bl4)) | 0;
28055 hi = (hi + Math.imul(ah1, bh4)) | 0;
28056 lo = (lo + Math.imul(al0, bl5)) | 0;
28057 mid = (mid + Math.imul(al0, bh5)) | 0;
28058 mid = (mid + Math.imul(ah0, bl5)) | 0;
28059 hi = (hi + Math.imul(ah0, bh5)) | 0;
28060 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28061 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
28062 w5 &= 0x3ffffff;
28063 /* k = 6 */
28064 lo = Math.imul(al6, bl0);
28065 mid = Math.imul(al6, bh0);
28066 mid = (mid + Math.imul(ah6, bl0)) | 0;
28067 hi = Math.imul(ah6, bh0);
28068 lo = (lo + Math.imul(al5, bl1)) | 0;
28069 mid = (mid + Math.imul(al5, bh1)) | 0;
28070 mid = (mid + Math.imul(ah5, bl1)) | 0;
28071 hi = (hi + Math.imul(ah5, bh1)) | 0;
28072 lo = (lo + Math.imul(al4, bl2)) | 0;
28073 mid = (mid + Math.imul(al4, bh2)) | 0;
28074 mid = (mid + Math.imul(ah4, bl2)) | 0;
28075 hi = (hi + Math.imul(ah4, bh2)) | 0;
28076 lo = (lo + Math.imul(al3, bl3)) | 0;
28077 mid = (mid + Math.imul(al3, bh3)) | 0;
28078 mid = (mid + Math.imul(ah3, bl3)) | 0;
28079 hi = (hi + Math.imul(ah3, bh3)) | 0;
28080 lo = (lo + Math.imul(al2, bl4)) | 0;
28081 mid = (mid + Math.imul(al2, bh4)) | 0;
28082 mid = (mid + Math.imul(ah2, bl4)) | 0;
28083 hi = (hi + Math.imul(ah2, bh4)) | 0;
28084 lo = (lo + Math.imul(al1, bl5)) | 0;
28085 mid = (mid + Math.imul(al1, bh5)) | 0;
28086 mid = (mid + Math.imul(ah1, bl5)) | 0;
28087 hi = (hi + Math.imul(ah1, bh5)) | 0;
28088 lo = (lo + Math.imul(al0, bl6)) | 0;
28089 mid = (mid + Math.imul(al0, bh6)) | 0;
28090 mid = (mid + Math.imul(ah0, bl6)) | 0;
28091 hi = (hi + Math.imul(ah0, bh6)) | 0;
28092 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28093 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
28094 w6 &= 0x3ffffff;
28095 /* k = 7 */
28096 lo = Math.imul(al7, bl0);
28097 mid = Math.imul(al7, bh0);
28098 mid = (mid + Math.imul(ah7, bl0)) | 0;
28099 hi = Math.imul(ah7, bh0);
28100 lo = (lo + Math.imul(al6, bl1)) | 0;
28101 mid = (mid + Math.imul(al6, bh1)) | 0;
28102 mid = (mid + Math.imul(ah6, bl1)) | 0;
28103 hi = (hi + Math.imul(ah6, bh1)) | 0;
28104 lo = (lo + Math.imul(al5, bl2)) | 0;
28105 mid = (mid + Math.imul(al5, bh2)) | 0;
28106 mid = (mid + Math.imul(ah5, bl2)) | 0;
28107 hi = (hi + Math.imul(ah5, bh2)) | 0;
28108 lo = (lo + Math.imul(al4, bl3)) | 0;
28109 mid = (mid + Math.imul(al4, bh3)) | 0;
28110 mid = (mid + Math.imul(ah4, bl3)) | 0;
28111 hi = (hi + Math.imul(ah4, bh3)) | 0;
28112 lo = (lo + Math.imul(al3, bl4)) | 0;
28113 mid = (mid + Math.imul(al3, bh4)) | 0;
28114 mid = (mid + Math.imul(ah3, bl4)) | 0;
28115 hi = (hi + Math.imul(ah3, bh4)) | 0;
28116 lo = (lo + Math.imul(al2, bl5)) | 0;
28117 mid = (mid + Math.imul(al2, bh5)) | 0;
28118 mid = (mid + Math.imul(ah2, bl5)) | 0;
28119 hi = (hi + Math.imul(ah2, bh5)) | 0;
28120 lo = (lo + Math.imul(al1, bl6)) | 0;
28121 mid = (mid + Math.imul(al1, bh6)) | 0;
28122 mid = (mid + Math.imul(ah1, bl6)) | 0;
28123 hi = (hi + Math.imul(ah1, bh6)) | 0;
28124 lo = (lo + Math.imul(al0, bl7)) | 0;
28125 mid = (mid + Math.imul(al0, bh7)) | 0;
28126 mid = (mid + Math.imul(ah0, bl7)) | 0;
28127 hi = (hi + Math.imul(ah0, bh7)) | 0;
28128 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28129 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
28130 w7 &= 0x3ffffff;
28131 /* k = 8 */
28132 lo = Math.imul(al8, bl0);
28133 mid = Math.imul(al8, bh0);
28134 mid = (mid + Math.imul(ah8, bl0)) | 0;
28135 hi = Math.imul(ah8, bh0);
28136 lo = (lo + Math.imul(al7, bl1)) | 0;
28137 mid = (mid + Math.imul(al7, bh1)) | 0;
28138 mid = (mid + Math.imul(ah7, bl1)) | 0;
28139 hi = (hi + Math.imul(ah7, bh1)) | 0;
28140 lo = (lo + Math.imul(al6, bl2)) | 0;
28141 mid = (mid + Math.imul(al6, bh2)) | 0;
28142 mid = (mid + Math.imul(ah6, bl2)) | 0;
28143 hi = (hi + Math.imul(ah6, bh2)) | 0;
28144 lo = (lo + Math.imul(al5, bl3)) | 0;
28145 mid = (mid + Math.imul(al5, bh3)) | 0;
28146 mid = (mid + Math.imul(ah5, bl3)) | 0;
28147 hi = (hi + Math.imul(ah5, bh3)) | 0;
28148 lo = (lo + Math.imul(al4, bl4)) | 0;
28149 mid = (mid + Math.imul(al4, bh4)) | 0;
28150 mid = (mid + Math.imul(ah4, bl4)) | 0;
28151 hi = (hi + Math.imul(ah4, bh4)) | 0;
28152 lo = (lo + Math.imul(al3, bl5)) | 0;
28153 mid = (mid + Math.imul(al3, bh5)) | 0;
28154 mid = (mid + Math.imul(ah3, bl5)) | 0;
28155 hi = (hi + Math.imul(ah3, bh5)) | 0;
28156 lo = (lo + Math.imul(al2, bl6)) | 0;
28157 mid = (mid + Math.imul(al2, bh6)) | 0;
28158 mid = (mid + Math.imul(ah2, bl6)) | 0;
28159 hi = (hi + Math.imul(ah2, bh6)) | 0;
28160 lo = (lo + Math.imul(al1, bl7)) | 0;
28161 mid = (mid + Math.imul(al1, bh7)) | 0;
28162 mid = (mid + Math.imul(ah1, bl7)) | 0;
28163 hi = (hi + Math.imul(ah1, bh7)) | 0;
28164 lo = (lo + Math.imul(al0, bl8)) | 0;
28165 mid = (mid + Math.imul(al0, bh8)) | 0;
28166 mid = (mid + Math.imul(ah0, bl8)) | 0;
28167 hi = (hi + Math.imul(ah0, bh8)) | 0;
28168 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28169 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
28170 w8 &= 0x3ffffff;
28171 /* k = 9 */
28172 lo = Math.imul(al9, bl0);
28173 mid = Math.imul(al9, bh0);
28174 mid = (mid + Math.imul(ah9, bl0)) | 0;
28175 hi = Math.imul(ah9, bh0);
28176 lo = (lo + Math.imul(al8, bl1)) | 0;
28177 mid = (mid + Math.imul(al8, bh1)) | 0;
28178 mid = (mid + Math.imul(ah8, bl1)) | 0;
28179 hi = (hi + Math.imul(ah8, bh1)) | 0;
28180 lo = (lo + Math.imul(al7, bl2)) | 0;
28181 mid = (mid + Math.imul(al7, bh2)) | 0;
28182 mid = (mid + Math.imul(ah7, bl2)) | 0;
28183 hi = (hi + Math.imul(ah7, bh2)) | 0;
28184 lo = (lo + Math.imul(al6, bl3)) | 0;
28185 mid = (mid + Math.imul(al6, bh3)) | 0;
28186 mid = (mid + Math.imul(ah6, bl3)) | 0;
28187 hi = (hi + Math.imul(ah6, bh3)) | 0;
28188 lo = (lo + Math.imul(al5, bl4)) | 0;
28189 mid = (mid + Math.imul(al5, bh4)) | 0;
28190 mid = (mid + Math.imul(ah5, bl4)) | 0;
28191 hi = (hi + Math.imul(ah5, bh4)) | 0;
28192 lo = (lo + Math.imul(al4, bl5)) | 0;
28193 mid = (mid + Math.imul(al4, bh5)) | 0;
28194 mid = (mid + Math.imul(ah4, bl5)) | 0;
28195 hi = (hi + Math.imul(ah4, bh5)) | 0;
28196 lo = (lo + Math.imul(al3, bl6)) | 0;
28197 mid = (mid + Math.imul(al3, bh6)) | 0;
28198 mid = (mid + Math.imul(ah3, bl6)) | 0;
28199 hi = (hi + Math.imul(ah3, bh6)) | 0;
28200 lo = (lo + Math.imul(al2, bl7)) | 0;
28201 mid = (mid + Math.imul(al2, bh7)) | 0;
28202 mid = (mid + Math.imul(ah2, bl7)) | 0;
28203 hi = (hi + Math.imul(ah2, bh7)) | 0;
28204 lo = (lo + Math.imul(al1, bl8)) | 0;
28205 mid = (mid + Math.imul(al1, bh8)) | 0;
28206 mid = (mid + Math.imul(ah1, bl8)) | 0;
28207 hi = (hi + Math.imul(ah1, bh8)) | 0;
28208 lo = (lo + Math.imul(al0, bl9)) | 0;
28209 mid = (mid + Math.imul(al0, bh9)) | 0;
28210 mid = (mid + Math.imul(ah0, bl9)) | 0;
28211 hi = (hi + Math.imul(ah0, bh9)) | 0;
28212 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28213 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
28214 w9 &= 0x3ffffff;
28215 /* k = 10 */
28216 lo = Math.imul(al9, bl1);
28217 mid = Math.imul(al9, bh1);
28218 mid = (mid + Math.imul(ah9, bl1)) | 0;
28219 hi = Math.imul(ah9, bh1);
28220 lo = (lo + Math.imul(al8, bl2)) | 0;
28221 mid = (mid + Math.imul(al8, bh2)) | 0;
28222 mid = (mid + Math.imul(ah8, bl2)) | 0;
28223 hi = (hi + Math.imul(ah8, bh2)) | 0;
28224 lo = (lo + Math.imul(al7, bl3)) | 0;
28225 mid = (mid + Math.imul(al7, bh3)) | 0;
28226 mid = (mid + Math.imul(ah7, bl3)) | 0;
28227 hi = (hi + Math.imul(ah7, bh3)) | 0;
28228 lo = (lo + Math.imul(al6, bl4)) | 0;
28229 mid = (mid + Math.imul(al6, bh4)) | 0;
28230 mid = (mid + Math.imul(ah6, bl4)) | 0;
28231 hi = (hi + Math.imul(ah6, bh4)) | 0;
28232 lo = (lo + Math.imul(al5, bl5)) | 0;
28233 mid = (mid + Math.imul(al5, bh5)) | 0;
28234 mid = (mid + Math.imul(ah5, bl5)) | 0;
28235 hi = (hi + Math.imul(ah5, bh5)) | 0;
28236 lo = (lo + Math.imul(al4, bl6)) | 0;
28237 mid = (mid + Math.imul(al4, bh6)) | 0;
28238 mid = (mid + Math.imul(ah4, bl6)) | 0;
28239 hi = (hi + Math.imul(ah4, bh6)) | 0;
28240 lo = (lo + Math.imul(al3, bl7)) | 0;
28241 mid = (mid + Math.imul(al3, bh7)) | 0;
28242 mid = (mid + Math.imul(ah3, bl7)) | 0;
28243 hi = (hi + Math.imul(ah3, bh7)) | 0;
28244 lo = (lo + Math.imul(al2, bl8)) | 0;
28245 mid = (mid + Math.imul(al2, bh8)) | 0;
28246 mid = (mid + Math.imul(ah2, bl8)) | 0;
28247 hi = (hi + Math.imul(ah2, bh8)) | 0;
28248 lo = (lo + Math.imul(al1, bl9)) | 0;
28249 mid = (mid + Math.imul(al1, bh9)) | 0;
28250 mid = (mid + Math.imul(ah1, bl9)) | 0;
28251 hi = (hi + Math.imul(ah1, bh9)) | 0;
28252 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28253 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
28254 w10 &= 0x3ffffff;
28255 /* k = 11 */
28256 lo = Math.imul(al9, bl2);
28257 mid = Math.imul(al9, bh2);
28258 mid = (mid + Math.imul(ah9, bl2)) | 0;
28259 hi = Math.imul(ah9, bh2);
28260 lo = (lo + Math.imul(al8, bl3)) | 0;
28261 mid = (mid + Math.imul(al8, bh3)) | 0;
28262 mid = (mid + Math.imul(ah8, bl3)) | 0;
28263 hi = (hi + Math.imul(ah8, bh3)) | 0;
28264 lo = (lo + Math.imul(al7, bl4)) | 0;
28265 mid = (mid + Math.imul(al7, bh4)) | 0;
28266 mid = (mid + Math.imul(ah7, bl4)) | 0;
28267 hi = (hi + Math.imul(ah7, bh4)) | 0;
28268 lo = (lo + Math.imul(al6, bl5)) | 0;
28269 mid = (mid + Math.imul(al6, bh5)) | 0;
28270 mid = (mid + Math.imul(ah6, bl5)) | 0;
28271 hi = (hi + Math.imul(ah6, bh5)) | 0;
28272 lo = (lo + Math.imul(al5, bl6)) | 0;
28273 mid = (mid + Math.imul(al5, bh6)) | 0;
28274 mid = (mid + Math.imul(ah5, bl6)) | 0;
28275 hi = (hi + Math.imul(ah5, bh6)) | 0;
28276 lo = (lo + Math.imul(al4, bl7)) | 0;
28277 mid = (mid + Math.imul(al4, bh7)) | 0;
28278 mid = (mid + Math.imul(ah4, bl7)) | 0;
28279 hi = (hi + Math.imul(ah4, bh7)) | 0;
28280 lo = (lo + Math.imul(al3, bl8)) | 0;
28281 mid = (mid + Math.imul(al3, bh8)) | 0;
28282 mid = (mid + Math.imul(ah3, bl8)) | 0;
28283 hi = (hi + Math.imul(ah3, bh8)) | 0;
28284 lo = (lo + Math.imul(al2, bl9)) | 0;
28285 mid = (mid + Math.imul(al2, bh9)) | 0;
28286 mid = (mid + Math.imul(ah2, bl9)) | 0;
28287 hi = (hi + Math.imul(ah2, bh9)) | 0;
28288 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28289 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
28290 w11 &= 0x3ffffff;
28291 /* k = 12 */
28292 lo = Math.imul(al9, bl3);
28293 mid = Math.imul(al9, bh3);
28294 mid = (mid + Math.imul(ah9, bl3)) | 0;
28295 hi = Math.imul(ah9, bh3);
28296 lo = (lo + Math.imul(al8, bl4)) | 0;
28297 mid = (mid + Math.imul(al8, bh4)) | 0;
28298 mid = (mid + Math.imul(ah8, bl4)) | 0;
28299 hi = (hi + Math.imul(ah8, bh4)) | 0;
28300 lo = (lo + Math.imul(al7, bl5)) | 0;
28301 mid = (mid + Math.imul(al7, bh5)) | 0;
28302 mid = (mid + Math.imul(ah7, bl5)) | 0;
28303 hi = (hi + Math.imul(ah7, bh5)) | 0;
28304 lo = (lo + Math.imul(al6, bl6)) | 0;
28305 mid = (mid + Math.imul(al6, bh6)) | 0;
28306 mid = (mid + Math.imul(ah6, bl6)) | 0;
28307 hi = (hi + Math.imul(ah6, bh6)) | 0;
28308 lo = (lo + Math.imul(al5, bl7)) | 0;
28309 mid = (mid + Math.imul(al5, bh7)) | 0;
28310 mid = (mid + Math.imul(ah5, bl7)) | 0;
28311 hi = (hi + Math.imul(ah5, bh7)) | 0;
28312 lo = (lo + Math.imul(al4, bl8)) | 0;
28313 mid = (mid + Math.imul(al4, bh8)) | 0;
28314 mid = (mid + Math.imul(ah4, bl8)) | 0;
28315 hi = (hi + Math.imul(ah4, bh8)) | 0;
28316 lo = (lo + Math.imul(al3, bl9)) | 0;
28317 mid = (mid + Math.imul(al3, bh9)) | 0;
28318 mid = (mid + Math.imul(ah3, bl9)) | 0;
28319 hi = (hi + Math.imul(ah3, bh9)) | 0;
28320 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28321 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
28322 w12 &= 0x3ffffff;
28323 /* k = 13 */
28324 lo = Math.imul(al9, bl4);
28325 mid = Math.imul(al9, bh4);
28326 mid = (mid + Math.imul(ah9, bl4)) | 0;
28327 hi = Math.imul(ah9, bh4);
28328 lo = (lo + Math.imul(al8, bl5)) | 0;
28329 mid = (mid + Math.imul(al8, bh5)) | 0;
28330 mid = (mid + Math.imul(ah8, bl5)) | 0;
28331 hi = (hi + Math.imul(ah8, bh5)) | 0;
28332 lo = (lo + Math.imul(al7, bl6)) | 0;
28333 mid = (mid + Math.imul(al7, bh6)) | 0;
28334 mid = (mid + Math.imul(ah7, bl6)) | 0;
28335 hi = (hi + Math.imul(ah7, bh6)) | 0;
28336 lo = (lo + Math.imul(al6, bl7)) | 0;
28337 mid = (mid + Math.imul(al6, bh7)) | 0;
28338 mid = (mid + Math.imul(ah6, bl7)) | 0;
28339 hi = (hi + Math.imul(ah6, bh7)) | 0;
28340 lo = (lo + Math.imul(al5, bl8)) | 0;
28341 mid = (mid + Math.imul(al5, bh8)) | 0;
28342 mid = (mid + Math.imul(ah5, bl8)) | 0;
28343 hi = (hi + Math.imul(ah5, bh8)) | 0;
28344 lo = (lo + Math.imul(al4, bl9)) | 0;
28345 mid = (mid + Math.imul(al4, bh9)) | 0;
28346 mid = (mid + Math.imul(ah4, bl9)) | 0;
28347 hi = (hi + Math.imul(ah4, bh9)) | 0;
28348 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28349 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
28350 w13 &= 0x3ffffff;
28351 /* k = 14 */
28352 lo = Math.imul(al9, bl5);
28353 mid = Math.imul(al9, bh5);
28354 mid = (mid + Math.imul(ah9, bl5)) | 0;
28355 hi = Math.imul(ah9, bh5);
28356 lo = (lo + Math.imul(al8, bl6)) | 0;
28357 mid = (mid + Math.imul(al8, bh6)) | 0;
28358 mid = (mid + Math.imul(ah8, bl6)) | 0;
28359 hi = (hi + Math.imul(ah8, bh6)) | 0;
28360 lo = (lo + Math.imul(al7, bl7)) | 0;
28361 mid = (mid + Math.imul(al7, bh7)) | 0;
28362 mid = (mid + Math.imul(ah7, bl7)) | 0;
28363 hi = (hi + Math.imul(ah7, bh7)) | 0;
28364 lo = (lo + Math.imul(al6, bl8)) | 0;
28365 mid = (mid + Math.imul(al6, bh8)) | 0;
28366 mid = (mid + Math.imul(ah6, bl8)) | 0;
28367 hi = (hi + Math.imul(ah6, bh8)) | 0;
28368 lo = (lo + Math.imul(al5, bl9)) | 0;
28369 mid = (mid + Math.imul(al5, bh9)) | 0;
28370 mid = (mid + Math.imul(ah5, bl9)) | 0;
28371 hi = (hi + Math.imul(ah5, bh9)) | 0;
28372 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28373 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
28374 w14 &= 0x3ffffff;
28375 /* k = 15 */
28376 lo = Math.imul(al9, bl6);
28377 mid = Math.imul(al9, bh6);
28378 mid = (mid + Math.imul(ah9, bl6)) | 0;
28379 hi = Math.imul(ah9, bh6);
28380 lo = (lo + Math.imul(al8, bl7)) | 0;
28381 mid = (mid + Math.imul(al8, bh7)) | 0;
28382 mid = (mid + Math.imul(ah8, bl7)) | 0;
28383 hi = (hi + Math.imul(ah8, bh7)) | 0;
28384 lo = (lo + Math.imul(al7, bl8)) | 0;
28385 mid = (mid + Math.imul(al7, bh8)) | 0;
28386 mid = (mid + Math.imul(ah7, bl8)) | 0;
28387 hi = (hi + Math.imul(ah7, bh8)) | 0;
28388 lo = (lo + Math.imul(al6, bl9)) | 0;
28389 mid = (mid + Math.imul(al6, bh9)) | 0;
28390 mid = (mid + Math.imul(ah6, bl9)) | 0;
28391 hi = (hi + Math.imul(ah6, bh9)) | 0;
28392 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28393 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
28394 w15 &= 0x3ffffff;
28395 /* k = 16 */
28396 lo = Math.imul(al9, bl7);
28397 mid = Math.imul(al9, bh7);
28398 mid = (mid + Math.imul(ah9, bl7)) | 0;
28399 hi = Math.imul(ah9, bh7);
28400 lo = (lo + Math.imul(al8, bl8)) | 0;
28401 mid = (mid + Math.imul(al8, bh8)) | 0;
28402 mid = (mid + Math.imul(ah8, bl8)) | 0;
28403 hi = (hi + Math.imul(ah8, bh8)) | 0;
28404 lo = (lo + Math.imul(al7, bl9)) | 0;
28405 mid = (mid + Math.imul(al7, bh9)) | 0;
28406 mid = (mid + Math.imul(ah7, bl9)) | 0;
28407 hi = (hi + Math.imul(ah7, bh9)) | 0;
28408 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28409 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
28410 w16 &= 0x3ffffff;
28411 /* k = 17 */
28412 lo = Math.imul(al9, bl8);
28413 mid = Math.imul(al9, bh8);
28414 mid = (mid + Math.imul(ah9, bl8)) | 0;
28415 hi = Math.imul(ah9, bh8);
28416 lo = (lo + Math.imul(al8, bl9)) | 0;
28417 mid = (mid + Math.imul(al8, bh9)) | 0;
28418 mid = (mid + Math.imul(ah8, bl9)) | 0;
28419 hi = (hi + Math.imul(ah8, bh9)) | 0;
28420 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28421 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
28422 w17 &= 0x3ffffff;
28423 /* k = 18 */
28424 lo = Math.imul(al9, bl9);
28425 mid = Math.imul(al9, bh9);
28426 mid = (mid + Math.imul(ah9, bl9)) | 0;
28427 hi = Math.imul(ah9, bh9);
28428 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28429 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
28430 w18 &= 0x3ffffff;
28431 o[0] = w0;
28432 o[1] = w1;
28433 o[2] = w2;
28434 o[3] = w3;
28435 o[4] = w4;
28436 o[5] = w5;
28437 o[6] = w6;
28438 o[7] = w7;
28439 o[8] = w8;
28440 o[9] = w9;
28441 o[10] = w10;
28442 o[11] = w11;
28443 o[12] = w12;
28444 o[13] = w13;
28445 o[14] = w14;
28446 o[15] = w15;
28447 o[16] = w16;
28448 o[17] = w17;
28449 o[18] = w18;
28450 if (c !== 0) {
28451 o[19] = c;
28452 out.length++;
28453 }
28454 return out;
28455 };
28456
28457 // Polyfill comb
28458 if (!Math.imul) {
28459 comb10MulTo = smallMulTo;
28460 }
28461
28462 function bigMulTo (self, num, out) {
28463 out.negative = num.negative ^ self.negative;
28464 out.length = self.length + num.length;
28465
28466 var carry = 0;
28467 var hncarry = 0;
28468 for (var k = 0; k < out.length - 1; k++) {
28469 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
28470 // note that ncarry could be >= 0x3ffffff
28471 var ncarry = hncarry;
28472 hncarry = 0;
28473 var rword = carry & 0x3ffffff;
28474 var maxJ = Math.min(k, num.length - 1);
28475 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
28476 var i = k - j;
28477 var a = self.words[i] | 0;
28478 var b = num.words[j] | 0;
28479 var r = a * b;
28480
28481 var lo = r & 0x3ffffff;
28482 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
28483 lo = (lo + rword) | 0;
28484 rword = lo & 0x3ffffff;
28485 ncarry = (ncarry + (lo >>> 26)) | 0;
28486
28487 hncarry += ncarry >>> 26;
28488 ncarry &= 0x3ffffff;
28489 }
28490 out.words[k] = rword;
28491 carry = ncarry;
28492 ncarry = hncarry;
28493 }
28494 if (carry !== 0) {
28495 out.words[k] = carry;
28496 } else {
28497 out.length--;
28498 }
28499
28500 return out.strip();
28501 }
28502
28503 function jumboMulTo (self, num, out) {
28504 var fftm = new FFTM();
28505 return fftm.mulp(self, num, out);
28506 }
28507
28508 BN.prototype.mulTo = function mulTo (num, out) {
28509 var res;
28510 var len = this.length + num.length;
28511 if (this.length === 10 && num.length === 10) {
28512 res = comb10MulTo(this, num, out);
28513 } else if (len < 63) {
28514 res = smallMulTo(this, num, out);
28515 } else if (len < 1024) {
28516 res = bigMulTo(this, num, out);
28517 } else {
28518 res = jumboMulTo(this, num, out);
28519 }
28520
28521 return res;
28522 };
28523
28524 // Cooley-Tukey algorithm for FFT
28525 // slightly revisited to rely on looping instead of recursion
28526
28527 function FFTM (x, y) {
28528 this.x = x;
28529 this.y = y;
28530 }
28531
28532 FFTM.prototype.makeRBT = function makeRBT (N) {
28533 var t = new Array(N);
28534 var l = BN.prototype._countBits(N) - 1;
28535 for (var i = 0; i < N; i++) {
28536 t[i] = this.revBin(i, l, N);
28537 }
28538
28539 return t;
28540 };
28541
28542 // Returns binary-reversed representation of `x`
28543 FFTM.prototype.revBin = function revBin (x, l, N) {
28544 if (x === 0 || x === N - 1) return x;
28545
28546 var rb = 0;
28547 for (var i = 0; i < l; i++) {
28548 rb |= (x & 1) << (l - i - 1);
28549 x >>= 1;
28550 }
28551
28552 return rb;
28553 };
28554
28555 // Performs "tweedling" phase, therefore 'emulating'
28556 // behaviour of the recursive algorithm
28557 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
28558 for (var i = 0; i < N; i++) {
28559 rtws[i] = rws[rbt[i]];
28560 itws[i] = iws[rbt[i]];
28561 }
28562 };
28563
28564 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
28565 this.permute(rbt, rws, iws, rtws, itws, N);
28566
28567 for (var s = 1; s < N; s <<= 1) {
28568 var l = s << 1;
28569
28570 var rtwdf = Math.cos(2 * Math.PI / l);
28571 var itwdf = Math.sin(2 * Math.PI / l);
28572
28573 for (var p = 0; p < N; p += l) {
28574 var rtwdf_ = rtwdf;
28575 var itwdf_ = itwdf;
28576
28577 for (var j = 0; j < s; j++) {
28578 var re = rtws[p + j];
28579 var ie = itws[p + j];
28580
28581 var ro = rtws[p + j + s];
28582 var io = itws[p + j + s];
28583
28584 var rx = rtwdf_ * ro - itwdf_ * io;
28585
28586 io = rtwdf_ * io + itwdf_ * ro;
28587 ro = rx;
28588
28589 rtws[p + j] = re + ro;
28590 itws[p + j] = ie + io;
28591
28592 rtws[p + j + s] = re - ro;
28593 itws[p + j + s] = ie - io;
28594
28595 /* jshint maxdepth : false */
28596 if (j !== l) {
28597 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
28598
28599 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
28600 rtwdf_ = rx;
28601 }
28602 }
28603 }
28604 }
28605 };
28606
28607 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
28608 var N = Math.max(m, n) | 1;
28609 var odd = N & 1;
28610 var i = 0;
28611 for (N = N / 2 | 0; N; N = N >>> 1) {
28612 i++;
28613 }
28614
28615 return 1 << i + 1 + odd;
28616 };
28617
28618 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
28619 if (N <= 1) return;
28620
28621 for (var i = 0; i < N / 2; i++) {
28622 var t = rws[i];
28623
28624 rws[i] = rws[N - i - 1];
28625 rws[N - i - 1] = t;
28626
28627 t = iws[i];
28628
28629 iws[i] = -iws[N - i - 1];
28630 iws[N - i - 1] = -t;
28631 }
28632 };
28633
28634 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
28635 var carry = 0;
28636 for (var i = 0; i < N / 2; i++) {
28637 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
28638 Math.round(ws[2 * i] / N) +
28639 carry;
28640
28641 ws[i] = w & 0x3ffffff;
28642
28643 if (w < 0x4000000) {
28644 carry = 0;
28645 } else {
28646 carry = w / 0x4000000 | 0;
28647 }
28648 }
28649
28650 return ws;
28651 };
28652
28653 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
28654 var carry = 0;
28655 for (var i = 0; i < len; i++) {
28656 carry = carry + (ws[i] | 0);
28657
28658 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
28659 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
28660 }
28661
28662 // Pad with zeroes
28663 for (i = 2 * len; i < N; ++i) {
28664 rws[i] = 0;
28665 }
28666
28667 assert(carry === 0);
28668 assert((carry & ~0x1fff) === 0);
28669 };
28670
28671 FFTM.prototype.stub = function stub (N) {
28672 var ph = new Array(N);
28673 for (var i = 0; i < N; i++) {
28674 ph[i] = 0;
28675 }
28676
28677 return ph;
28678 };
28679
28680 FFTM.prototype.mulp = function mulp (x, y, out) {
28681 var N = 2 * this.guessLen13b(x.length, y.length);
28682
28683 var rbt = this.makeRBT(N);
28684
28685 var _ = this.stub(N);
28686
28687 var rws = new Array(N);
28688 var rwst = new Array(N);
28689 var iwst = new Array(N);
28690
28691 var nrws = new Array(N);
28692 var nrwst = new Array(N);
28693 var niwst = new Array(N);
28694
28695 var rmws = out.words;
28696 rmws.length = N;
28697
28698 this.convert13b(x.words, x.length, rws, N);
28699 this.convert13b(y.words, y.length, nrws, N);
28700
28701 this.transform(rws, _, rwst, iwst, N, rbt);
28702 this.transform(nrws, _, nrwst, niwst, N, rbt);
28703
28704 for (var i = 0; i < N; i++) {
28705 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
28706 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
28707 rwst[i] = rx;
28708 }
28709
28710 this.conjugate(rwst, iwst, N);
28711 this.transform(rwst, iwst, rmws, _, N, rbt);
28712 this.conjugate(rmws, _, N);
28713 this.normalize13b(rmws, N);
28714
28715 out.negative = x.negative ^ y.negative;
28716 out.length = x.length + y.length;
28717 return out.strip();
28718 };
28719
28720 // Multiply `this` by `num`
28721 BN.prototype.mul = function mul (num) {
28722 var out = new BN(null);
28723 out.words = new Array(this.length + num.length);
28724 return this.mulTo(num, out);
28725 };
28726
28727 // Multiply employing FFT
28728 BN.prototype.mulf = function mulf (num) {
28729 var out = new BN(null);
28730 out.words = new Array(this.length + num.length);
28731 return jumboMulTo(this, num, out);
28732 };
28733
28734 // In-place Multiplication
28735 BN.prototype.imul = function imul (num) {
28736 return this.clone().mulTo(num, this);
28737 };
28738
28739 BN.prototype.imuln = function imuln (num) {
28740 assert(typeof num === 'number');
28741 assert(num < 0x4000000);
28742
28743 // Carry
28744 var carry = 0;
28745 for (var i = 0; i < this.length; i++) {
28746 var w = (this.words[i] | 0) * num;
28747 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
28748 carry >>= 26;
28749 carry += (w / 0x4000000) | 0;
28750 // NOTE: lo is 27bit maximum
28751 carry += lo >>> 26;
28752 this.words[i] = lo & 0x3ffffff;
28753 }
28754
28755 if (carry !== 0) {
28756 this.words[i] = carry;
28757 this.length++;
28758 }
28759
28760 return this;
28761 };
28762
28763 BN.prototype.muln = function muln (num) {
28764 return this.clone().imuln(num);
28765 };
28766
28767 // `this` * `this`
28768 BN.prototype.sqr = function sqr () {
28769 return this.mul(this);
28770 };
28771
28772 // `this` * `this` in-place
28773 BN.prototype.isqr = function isqr () {
28774 return this.imul(this.clone());
28775 };
28776
28777 // Math.pow(`this`, `num`)
28778 BN.prototype.pow = function pow (num) {
28779 var w = toBitArray(num);
28780 if (w.length === 0) return new BN(1);
28781
28782 // Skip leading zeroes
28783 var res = this;
28784 for (var i = 0; i < w.length; i++, res = res.sqr()) {
28785 if (w[i] !== 0) break;
28786 }
28787
28788 if (++i < w.length) {
28789 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
28790 if (w[i] === 0) continue;
28791
28792 res = res.mul(q);
28793 }
28794 }
28795
28796 return res;
28797 };
28798
28799 // Shift-left in-place
28800 BN.prototype.iushln = function iushln (bits) {
28801 assert(typeof bits === 'number' && bits >= 0);
28802 var r = bits % 26;
28803 var s = (bits - r) / 26;
28804 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
28805 var i;
28806
28807 if (r !== 0) {
28808 var carry = 0;
28809
28810 for (i = 0; i < this.length; i++) {
28811 var newCarry = this.words[i] & carryMask;
28812 var c = ((this.words[i] | 0) - newCarry) << r;
28813 this.words[i] = c | carry;
28814 carry = newCarry >>> (26 - r);
28815 }
28816
28817 if (carry) {
28818 this.words[i] = carry;
28819 this.length++;
28820 }
28821 }
28822
28823 if (s !== 0) {
28824 for (i = this.length - 1; i >= 0; i--) {
28825 this.words[i + s] = this.words[i];
28826 }
28827
28828 for (i = 0; i < s; i++) {
28829 this.words[i] = 0;
28830 }
28831
28832 this.length += s;
28833 }
28834
28835 return this.strip();
28836 };
28837
28838 BN.prototype.ishln = function ishln (bits) {
28839 // TODO(indutny): implement me
28840 assert(this.negative === 0);
28841 return this.iushln(bits);
28842 };
28843
28844 // Shift-right in-place
28845 // NOTE: `hint` is a lowest bit before trailing zeroes
28846 // NOTE: if `extended` is present - it will be filled with destroyed bits
28847 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
28848 assert(typeof bits === 'number' && bits >= 0);
28849 var h;
28850 if (hint) {
28851 h = (hint - (hint % 26)) / 26;
28852 } else {
28853 h = 0;
28854 }
28855
28856 var r = bits % 26;
28857 var s = Math.min((bits - r) / 26, this.length);
28858 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
28859 var maskedWords = extended;
28860
28861 h -= s;
28862 h = Math.max(0, h);
28863
28864 // Extended mode, copy masked part
28865 if (maskedWords) {
28866 for (var i = 0; i < s; i++) {
28867 maskedWords.words[i] = this.words[i];
28868 }
28869 maskedWords.length = s;
28870 }
28871
28872 if (s === 0) {
28873 // No-op, we should not move anything at all
28874 } else if (this.length > s) {
28875 this.length -= s;
28876 for (i = 0; i < this.length; i++) {
28877 this.words[i] = this.words[i + s];
28878 }
28879 } else {
28880 this.words[0] = 0;
28881 this.length = 1;
28882 }
28883
28884 var carry = 0;
28885 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
28886 var word = this.words[i] | 0;
28887 this.words[i] = (carry << (26 - r)) | (word >>> r);
28888 carry = word & mask;
28889 }
28890
28891 // Push carried bits as a mask
28892 if (maskedWords && carry !== 0) {
28893 maskedWords.words[maskedWords.length++] = carry;
28894 }
28895
28896 if (this.length === 0) {
28897 this.words[0] = 0;
28898 this.length = 1;
28899 }
28900
28901 return this.strip();
28902 };
28903
28904 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
28905 // TODO(indutny): implement me
28906 assert(this.negative === 0);
28907 return this.iushrn(bits, hint, extended);
28908 };
28909
28910 // Shift-left
28911 BN.prototype.shln = function shln (bits) {
28912 return this.clone().ishln(bits);
28913 };
28914
28915 BN.prototype.ushln = function ushln (bits) {
28916 return this.clone().iushln(bits);
28917 };
28918
28919 // Shift-right
28920 BN.prototype.shrn = function shrn (bits) {
28921 return this.clone().ishrn(bits);
28922 };
28923
28924 BN.prototype.ushrn = function ushrn (bits) {
28925 return this.clone().iushrn(bits);
28926 };
28927
28928 // Test if n bit is set
28929 BN.prototype.testn = function testn (bit) {
28930 assert(typeof bit === 'number' && bit >= 0);
28931 var r = bit % 26;
28932 var s = (bit - r) / 26;
28933 var q = 1 << r;
28934
28935 // Fast case: bit is much higher than all existing words
28936 if (this.length <= s) return false;
28937
28938 // Check bit and return
28939 var w = this.words[s];
28940
28941 return !!(w & q);
28942 };
28943
28944 // Return only lowers bits of number (in-place)
28945 BN.prototype.imaskn = function imaskn (bits) {
28946 assert(typeof bits === 'number' && bits >= 0);
28947 var r = bits % 26;
28948 var s = (bits - r) / 26;
28949
28950 assert(this.negative === 0, 'imaskn works only with positive numbers');
28951
28952 if (this.length <= s) {
28953 return this;
28954 }
28955
28956 if (r !== 0) {
28957 s++;
28958 }
28959 this.length = Math.min(s, this.length);
28960
28961 if (r !== 0) {
28962 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
28963 this.words[this.length - 1] &= mask;
28964 }
28965
28966 return this.strip();
28967 };
28968
28969 // Return only lowers bits of number
28970 BN.prototype.maskn = function maskn (bits) {
28971 return this.clone().imaskn(bits);
28972 };
28973
28974 // Add plain number `num` to `this`
28975 BN.prototype.iaddn = function iaddn (num) {
28976 assert(typeof num === 'number');
28977 assert(num < 0x4000000);
28978 if (num < 0) return this.isubn(-num);
28979
28980 // Possible sign change
28981 if (this.negative !== 0) {
28982 if (this.length === 1 && (this.words[0] | 0) < num) {
28983 this.words[0] = num - (this.words[0] | 0);
28984 this.negative = 0;
28985 return this;
28986 }
28987
28988 this.negative = 0;
28989 this.isubn(num);
28990 this.negative = 1;
28991 return this;
28992 }
28993
28994 // Add without checks
28995 return this._iaddn(num);
28996 };
28997
28998 BN.prototype._iaddn = function _iaddn (num) {
28999 this.words[0] += num;
29000
29001 // Carry
29002 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
29003 this.words[i] -= 0x4000000;
29004 if (i === this.length - 1) {
29005 this.words[i + 1] = 1;
29006 } else {
29007 this.words[i + 1]++;
29008 }
29009 }
29010 this.length = Math.max(this.length, i + 1);
29011
29012 return this;
29013 };
29014
29015 // Subtract plain number `num` from `this`
29016 BN.prototype.isubn = function isubn (num) {
29017 assert(typeof num === 'number');
29018 assert(num < 0x4000000);
29019 if (num < 0) return this.iaddn(-num);
29020
29021 if (this.negative !== 0) {
29022 this.negative = 0;
29023 this.iaddn(num);
29024 this.negative = 1;
29025 return this;
29026 }
29027
29028 this.words[0] -= num;
29029
29030 if (this.length === 1 && this.words[0] < 0) {
29031 this.words[0] = -this.words[0];
29032 this.negative = 1;
29033 } else {
29034 // Carry
29035 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
29036 this.words[i] += 0x4000000;
29037 this.words[i + 1] -= 1;
29038 }
29039 }
29040
29041 return this.strip();
29042 };
29043
29044 BN.prototype.addn = function addn (num) {
29045 return this.clone().iaddn(num);
29046 };
29047
29048 BN.prototype.subn = function subn (num) {
29049 return this.clone().isubn(num);
29050 };
29051
29052 BN.prototype.iabs = function iabs () {
29053 this.negative = 0;
29054
29055 return this;
29056 };
29057
29058 BN.prototype.abs = function abs () {
29059 return this.clone().iabs();
29060 };
29061
29062 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
29063 var len = num.length + shift;
29064 var i;
29065
29066 this._expand(len);
29067
29068 var w;
29069 var carry = 0;
29070 for (i = 0; i < num.length; i++) {
29071 w = (this.words[i + shift] | 0) + carry;
29072 var right = (num.words[i] | 0) * mul;
29073 w -= right & 0x3ffffff;
29074 carry = (w >> 26) - ((right / 0x4000000) | 0);
29075 this.words[i + shift] = w & 0x3ffffff;
29076 }
29077 for (; i < this.length - shift; i++) {
29078 w = (this.words[i + shift] | 0) + carry;
29079 carry = w >> 26;
29080 this.words[i + shift] = w & 0x3ffffff;
29081 }
29082
29083 if (carry === 0) return this.strip();
29084
29085 // Subtraction overflow
29086 assert(carry === -1);
29087 carry = 0;
29088 for (i = 0; i < this.length; i++) {
29089 w = -(this.words[i] | 0) + carry;
29090 carry = w >> 26;
29091 this.words[i] = w & 0x3ffffff;
29092 }
29093 this.negative = 1;
29094
29095 return this.strip();
29096 };
29097
29098 BN.prototype._wordDiv = function _wordDiv (num, mode) {
29099 var shift = this.length - num.length;
29100
29101 var a = this.clone();
29102 var b = num;
29103
29104 // Normalize
29105 var bhi = b.words[b.length - 1] | 0;
29106 var bhiBits = this._countBits(bhi);
29107 shift = 26 - bhiBits;
29108 if (shift !== 0) {
29109 b = b.ushln(shift);
29110 a.iushln(shift);
29111 bhi = b.words[b.length - 1] | 0;
29112 }
29113
29114 // Initialize quotient
29115 var m = a.length - b.length;
29116 var q;
29117
29118 if (mode !== 'mod') {
29119 q = new BN(null);
29120 q.length = m + 1;
29121 q.words = new Array(q.length);
29122 for (var i = 0; i < q.length; i++) {
29123 q.words[i] = 0;
29124 }
29125 }
29126
29127 var diff = a.clone()._ishlnsubmul(b, 1, m);
29128 if (diff.negative === 0) {
29129 a = diff;
29130 if (q) {
29131 q.words[m] = 1;
29132 }
29133 }
29134
29135 for (var j = m - 1; j >= 0; j--) {
29136 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
29137 (a.words[b.length + j - 1] | 0);
29138
29139 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
29140 // (0x7ffffff)
29141 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
29142
29143 a._ishlnsubmul(b, qj, j);
29144 while (a.negative !== 0) {
29145 qj--;
29146 a.negative = 0;
29147 a._ishlnsubmul(b, 1, j);
29148 if (!a.isZero()) {
29149 a.negative ^= 1;
29150 }
29151 }
29152 if (q) {
29153 q.words[j] = qj;
29154 }
29155 }
29156 if (q) {
29157 q.strip();
29158 }
29159 a.strip();
29160
29161 // Denormalize
29162 if (mode !== 'div' && shift !== 0) {
29163 a.iushrn(shift);
29164 }
29165
29166 return {
29167 div: q || null,
29168 mod: a
29169 };
29170 };
29171
29172 // NOTE: 1) `mode` can be set to `mod` to request mod only,
29173 // to `div` to request div only, or be absent to
29174 // request both div & mod
29175 // 2) `positive` is true if unsigned mod is requested
29176 BN.prototype.divmod = function divmod (num, mode, positive) {
29177 assert(!num.isZero());
29178
29179 if (this.isZero()) {
29180 return {
29181 div: new BN(0),
29182 mod: new BN(0)
29183 };
29184 }
29185
29186 var div, mod, res;
29187 if (this.negative !== 0 && num.negative === 0) {
29188 res = this.neg().divmod(num, mode);
29189
29190 if (mode !== 'mod') {
29191 div = res.div.neg();
29192 }
29193
29194 if (mode !== 'div') {
29195 mod = res.mod.neg();
29196 if (positive && mod.negative !== 0) {
29197 mod.iadd(num);
29198 }
29199 }
29200
29201 return {
29202 div: div,
29203 mod: mod
29204 };
29205 }
29206
29207 if (this.negative === 0 && num.negative !== 0) {
29208 res = this.divmod(num.neg(), mode);
29209
29210 if (mode !== 'mod') {
29211 div = res.div.neg();
29212 }
29213
29214 return {
29215 div: div,
29216 mod: res.mod
29217 };
29218 }
29219
29220 if ((this.negative & num.negative) !== 0) {
29221 res = this.neg().divmod(num.neg(), mode);
29222
29223 if (mode !== 'div') {
29224 mod = res.mod.neg();
29225 if (positive && mod.negative !== 0) {
29226 mod.isub(num);
29227 }
29228 }
29229
29230 return {
29231 div: res.div,
29232 mod: mod
29233 };
29234 }
29235
29236 // Both numbers are positive at this point
29237
29238 // Strip both numbers to approximate shift value
29239 if (num.length > this.length || this.cmp(num) < 0) {
29240 return {
29241 div: new BN(0),
29242 mod: this
29243 };
29244 }
29245
29246 // Very short reduction
29247 if (num.length === 1) {
29248 if (mode === 'div') {
29249 return {
29250 div: this.divn(num.words[0]),
29251 mod: null
29252 };
29253 }
29254
29255 if (mode === 'mod') {
29256 return {
29257 div: null,
29258 mod: new BN(this.modn(num.words[0]))
29259 };
29260 }
29261
29262 return {
29263 div: this.divn(num.words[0]),
29264 mod: new BN(this.modn(num.words[0]))
29265 };
29266 }
29267
29268 return this._wordDiv(num, mode);
29269 };
29270
29271 // Find `this` / `num`
29272 BN.prototype.div = function div (num) {
29273 return this.divmod(num, 'div', false).div;
29274 };
29275
29276 // Find `this` % `num`
29277 BN.prototype.mod = function mod (num) {
29278 return this.divmod(num, 'mod', false).mod;
29279 };
29280
29281 BN.prototype.umod = function umod (num) {
29282 return this.divmod(num, 'mod', true).mod;
29283 };
29284
29285 // Find Round(`this` / `num`)
29286 BN.prototype.divRound = function divRound (num) {
29287 var dm = this.divmod(num);
29288
29289 // Fast case - exact division
29290 if (dm.mod.isZero()) return dm.div;
29291
29292 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
29293
29294 var half = num.ushrn(1);
29295 var r2 = num.andln(1);
29296 var cmp = mod.cmp(half);
29297
29298 // Round down
29299 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
29300
29301 // Round up
29302 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
29303 };
29304
29305 BN.prototype.modn = function modn (num) {
29306 assert(num <= 0x3ffffff);
29307 var p = (1 << 26) % num;
29308
29309 var acc = 0;
29310 for (var i = this.length - 1; i >= 0; i--) {
29311 acc = (p * acc + (this.words[i] | 0)) % num;
29312 }
29313
29314 return acc;
29315 };
29316
29317 // In-place division by number
29318 BN.prototype.idivn = function idivn (num) {
29319 assert(num <= 0x3ffffff);
29320
29321 var carry = 0;
29322 for (var i = this.length - 1; i >= 0; i--) {
29323 var w = (this.words[i] | 0) + carry * 0x4000000;
29324 this.words[i] = (w / num) | 0;
29325 carry = w % num;
29326 }
29327
29328 return this.strip();
29329 };
29330
29331 BN.prototype.divn = function divn (num) {
29332 return this.clone().idivn(num);
29333 };
29334
29335 BN.prototype.egcd = function egcd (p) {
29336 assert(p.negative === 0);
29337 assert(!p.isZero());
29338
29339 var x = this;
29340 var y = p.clone();
29341
29342 if (x.negative !== 0) {
29343 x = x.umod(p);
29344 } else {
29345 x = x.clone();
29346 }
29347
29348 // A * x + B * y = x
29349 var A = new BN(1);
29350 var B = new BN(0);
29351
29352 // C * x + D * y = y
29353 var C = new BN(0);
29354 var D = new BN(1);
29355
29356 var g = 0;
29357
29358 while (x.isEven() && y.isEven()) {
29359 x.iushrn(1);
29360 y.iushrn(1);
29361 ++g;
29362 }
29363
29364 var yp = y.clone();
29365 var xp = x.clone();
29366
29367 while (!x.isZero()) {
29368 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29369 if (i > 0) {
29370 x.iushrn(i);
29371 while (i-- > 0) {
29372 if (A.isOdd() || B.isOdd()) {
29373 A.iadd(yp);
29374 B.isub(xp);
29375 }
29376
29377 A.iushrn(1);
29378 B.iushrn(1);
29379 }
29380 }
29381
29382 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29383 if (j > 0) {
29384 y.iushrn(j);
29385 while (j-- > 0) {
29386 if (C.isOdd() || D.isOdd()) {
29387 C.iadd(yp);
29388 D.isub(xp);
29389 }
29390
29391 C.iushrn(1);
29392 D.iushrn(1);
29393 }
29394 }
29395
29396 if (x.cmp(y) >= 0) {
29397 x.isub(y);
29398 A.isub(C);
29399 B.isub(D);
29400 } else {
29401 y.isub(x);
29402 C.isub(A);
29403 D.isub(B);
29404 }
29405 }
29406
29407 return {
29408 a: C,
29409 b: D,
29410 gcd: y.iushln(g)
29411 };
29412 };
29413
29414 // This is reduced incarnation of the binary EEA
29415 // above, designated to invert members of the
29416 // _prime_ fields F(p) at a maximal speed
29417 BN.prototype._invmp = function _invmp (p) {
29418 assert(p.negative === 0);
29419 assert(!p.isZero());
29420
29421 var a = this;
29422 var b = p.clone();
29423
29424 if (a.negative !== 0) {
29425 a = a.umod(p);
29426 } else {
29427 a = a.clone();
29428 }
29429
29430 var x1 = new BN(1);
29431 var x2 = new BN(0);
29432
29433 var delta = b.clone();
29434
29435 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
29436 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29437 if (i > 0) {
29438 a.iushrn(i);
29439 while (i-- > 0) {
29440 if (x1.isOdd()) {
29441 x1.iadd(delta);
29442 }
29443
29444 x1.iushrn(1);
29445 }
29446 }
29447
29448 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29449 if (j > 0) {
29450 b.iushrn(j);
29451 while (j-- > 0) {
29452 if (x2.isOdd()) {
29453 x2.iadd(delta);
29454 }
29455
29456 x2.iushrn(1);
29457 }
29458 }
29459
29460 if (a.cmp(b) >= 0) {
29461 a.isub(b);
29462 x1.isub(x2);
29463 } else {
29464 b.isub(a);
29465 x2.isub(x1);
29466 }
29467 }
29468
29469 var res;
29470 if (a.cmpn(1) === 0) {
29471 res = x1;
29472 } else {
29473 res = x2;
29474 }
29475
29476 if (res.cmpn(0) < 0) {
29477 res.iadd(p);
29478 }
29479
29480 return res;
29481 };
29482
29483 BN.prototype.gcd = function gcd (num) {
29484 if (this.isZero()) return num.abs();
29485 if (num.isZero()) return this.abs();
29486
29487 var a = this.clone();
29488 var b = num.clone();
29489 a.negative = 0;
29490 b.negative = 0;
29491
29492 // Remove common factor of two
29493 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
29494 a.iushrn(1);
29495 b.iushrn(1);
29496 }
29497
29498 do {
29499 while (a.isEven()) {
29500 a.iushrn(1);
29501 }
29502 while (b.isEven()) {
29503 b.iushrn(1);
29504 }
29505
29506 var r = a.cmp(b);
29507 if (r < 0) {
29508 // Swap `a` and `b` to make `a` always bigger than `b`
29509 var t = a;
29510 a = b;
29511 b = t;
29512 } else if (r === 0 || b.cmpn(1) === 0) {
29513 break;
29514 }
29515
29516 a.isub(b);
29517 } while (true);
29518
29519 return b.iushln(shift);
29520 };
29521
29522 // Invert number in the field F(num)
29523 BN.prototype.invm = function invm (num) {
29524 return this.egcd(num).a.umod(num);
29525 };
29526
29527 BN.prototype.isEven = function isEven () {
29528 return (this.words[0] & 1) === 0;
29529 };
29530
29531 BN.prototype.isOdd = function isOdd () {
29532 return (this.words[0] & 1) === 1;
29533 };
29534
29535 // And first word and num
29536 BN.prototype.andln = function andln (num) {
29537 return this.words[0] & num;
29538 };
29539
29540 // Increment at the bit position in-line
29541 BN.prototype.bincn = function bincn (bit) {
29542 assert(typeof bit === 'number');
29543 var r = bit % 26;
29544 var s = (bit - r) / 26;
29545 var q = 1 << r;
29546
29547 // Fast case: bit is much higher than all existing words
29548 if (this.length <= s) {
29549 this._expand(s + 1);
29550 this.words[s] |= q;
29551 return this;
29552 }
29553
29554 // Add bit and propagate, if needed
29555 var carry = q;
29556 for (var i = s; carry !== 0 && i < this.length; i++) {
29557 var w = this.words[i] | 0;
29558 w += carry;
29559 carry = w >>> 26;
29560 w &= 0x3ffffff;
29561 this.words[i] = w;
29562 }
29563 if (carry !== 0) {
29564 this.words[i] = carry;
29565 this.length++;
29566 }
29567 return this;
29568 };
29569
29570 BN.prototype.isZero = function isZero () {
29571 return this.length === 1 && this.words[0] === 0;
29572 };
29573
29574 BN.prototype.cmpn = function cmpn (num) {
29575 var negative = num < 0;
29576
29577 if (this.negative !== 0 && !negative) return -1;
29578 if (this.negative === 0 && negative) return 1;
29579
29580 this.strip();
29581
29582 var res;
29583 if (this.length > 1) {
29584 res = 1;
29585 } else {
29586 if (negative) {
29587 num = -num;
29588 }
29589
29590 assert(num <= 0x3ffffff, 'Number is too big');
29591
29592 var w = this.words[0] | 0;
29593 res = w === num ? 0 : w < num ? -1 : 1;
29594 }
29595 if (this.negative !== 0) return -res | 0;
29596 return res;
29597 };
29598
29599 // Compare two numbers and return:
29600 // 1 - if `this` > `num`
29601 // 0 - if `this` == `num`
29602 // -1 - if `this` < `num`
29603 BN.prototype.cmp = function cmp (num) {
29604 if (this.negative !== 0 && num.negative === 0) return -1;
29605 if (this.negative === 0 && num.negative !== 0) return 1;
29606
29607 var res = this.ucmp(num);
29608 if (this.negative !== 0) return -res | 0;
29609 return res;
29610 };
29611
29612 // Unsigned comparison
29613 BN.prototype.ucmp = function ucmp (num) {
29614 // At this point both numbers have the same sign
29615 if (this.length > num.length) return 1;
29616 if (this.length < num.length) return -1;
29617
29618 var res = 0;
29619 for (var i = this.length - 1; i >= 0; i--) {
29620 var a = this.words[i] | 0;
29621 var b = num.words[i] | 0;
29622
29623 if (a === b) continue;
29624 if (a < b) {
29625 res = -1;
29626 } else if (a > b) {
29627 res = 1;
29628 }
29629 break;
29630 }
29631 return res;
29632 };
29633
29634 BN.prototype.gtn = function gtn (num) {
29635 return this.cmpn(num) === 1;
29636 };
29637
29638 BN.prototype.gt = function gt (num) {
29639 return this.cmp(num) === 1;
29640 };
29641
29642 BN.prototype.gten = function gten (num) {
29643 return this.cmpn(num) >= 0;
29644 };
29645
29646 BN.prototype.gte = function gte (num) {
29647 return this.cmp(num) >= 0;
29648 };
29649
29650 BN.prototype.ltn = function ltn (num) {
29651 return this.cmpn(num) === -1;
29652 };
29653
29654 BN.prototype.lt = function lt (num) {
29655 return this.cmp(num) === -1;
29656 };
29657
29658 BN.prototype.lten = function lten (num) {
29659 return this.cmpn(num) <= 0;
29660 };
29661
29662 BN.prototype.lte = function lte (num) {
29663 return this.cmp(num) <= 0;
29664 };
29665
29666 BN.prototype.eqn = function eqn (num) {
29667 return this.cmpn(num) === 0;
29668 };
29669
29670 BN.prototype.eq = function eq (num) {
29671 return this.cmp(num) === 0;
29672 };
29673
29674 //
29675 // A reduce context, could be using montgomery or something better, depending
29676 // on the `m` itself.
29677 //
29678 BN.red = function red (num) {
29679 return new Red(num);
29680 };
29681
29682 BN.prototype.toRed = function toRed (ctx) {
29683 assert(!this.red, 'Already a number in reduction context');
29684 assert(this.negative === 0, 'red works only with positives');
29685 return ctx.convertTo(this)._forceRed(ctx);
29686 };
29687
29688 BN.prototype.fromRed = function fromRed () {
29689 assert(this.red, 'fromRed works only with numbers in reduction context');
29690 return this.red.convertFrom(this);
29691 };
29692
29693 BN.prototype._forceRed = function _forceRed (ctx) {
29694 this.red = ctx;
29695 return this;
29696 };
29697
29698 BN.prototype.forceRed = function forceRed (ctx) {
29699 assert(!this.red, 'Already a number in reduction context');
29700 return this._forceRed(ctx);
29701 };
29702
29703 BN.prototype.redAdd = function redAdd (num) {
29704 assert(this.red, 'redAdd works only with red numbers');
29705 return this.red.add(this, num);
29706 };
29707
29708 BN.prototype.redIAdd = function redIAdd (num) {
29709 assert(this.red, 'redIAdd works only with red numbers');
29710 return this.red.iadd(this, num);
29711 };
29712
29713 BN.prototype.redSub = function redSub (num) {
29714 assert(this.red, 'redSub works only with red numbers');
29715 return this.red.sub(this, num);
29716 };
29717
29718 BN.prototype.redISub = function redISub (num) {
29719 assert(this.red, 'redISub works only with red numbers');
29720 return this.red.isub(this, num);
29721 };
29722
29723 BN.prototype.redShl = function redShl (num) {
29724 assert(this.red, 'redShl works only with red numbers');
29725 return this.red.shl(this, num);
29726 };
29727
29728 BN.prototype.redMul = function redMul (num) {
29729 assert(this.red, 'redMul works only with red numbers');
29730 this.red._verify2(this, num);
29731 return this.red.mul(this, num);
29732 };
29733
29734 BN.prototype.redIMul = function redIMul (num) {
29735 assert(this.red, 'redMul works only with red numbers');
29736 this.red._verify2(this, num);
29737 return this.red.imul(this, num);
29738 };
29739
29740 BN.prototype.redSqr = function redSqr () {
29741 assert(this.red, 'redSqr works only with red numbers');
29742 this.red._verify1(this);
29743 return this.red.sqr(this);
29744 };
29745
29746 BN.prototype.redISqr = function redISqr () {
29747 assert(this.red, 'redISqr works only with red numbers');
29748 this.red._verify1(this);
29749 return this.red.isqr(this);
29750 };
29751
29752 // Square root over p
29753 BN.prototype.redSqrt = function redSqrt () {
29754 assert(this.red, 'redSqrt works only with red numbers');
29755 this.red._verify1(this);
29756 return this.red.sqrt(this);
29757 };
29758
29759 BN.prototype.redInvm = function redInvm () {
29760 assert(this.red, 'redInvm works only with red numbers');
29761 this.red._verify1(this);
29762 return this.red.invm(this);
29763 };
29764
29765 // Return negative clone of `this` % `red modulo`
29766 BN.prototype.redNeg = function redNeg () {
29767 assert(this.red, 'redNeg works only with red numbers');
29768 this.red._verify1(this);
29769 return this.red.neg(this);
29770 };
29771
29772 BN.prototype.redPow = function redPow (num) {
29773 assert(this.red && !num.red, 'redPow(normalNum)');
29774 this.red._verify1(this);
29775 return this.red.pow(this, num);
29776 };
29777
29778 // Prime numbers with efficient reduction
29779 var primes = {
29780 k256: null,
29781 p224: null,
29782 p192: null,
29783 p25519: null
29784 };
29785
29786 // Pseudo-Mersenne prime
29787 function MPrime (name, p) {
29788 // P = 2 ^ N - K
29789 this.name = name;
29790 this.p = new BN(p, 16);
29791 this.n = this.p.bitLength();
29792 this.k = new BN(1).iushln(this.n).isub(this.p);
29793
29794 this.tmp = this._tmp();
29795 }
29796
29797 MPrime.prototype._tmp = function _tmp () {
29798 var tmp = new BN(null);
29799 tmp.words = new Array(Math.ceil(this.n / 13));
29800 return tmp;
29801 };
29802
29803 MPrime.prototype.ireduce = function ireduce (num) {
29804 // Assumes that `num` is less than `P^2`
29805 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
29806 var r = num;
29807 var rlen;
29808
29809 do {
29810 this.split(r, this.tmp);
29811 r = this.imulK(r);
29812 r = r.iadd(this.tmp);
29813 rlen = r.bitLength();
29814 } while (rlen > this.n);
29815
29816 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
29817 if (cmp === 0) {
29818 r.words[0] = 0;
29819 r.length = 1;
29820 } else if (cmp > 0) {
29821 r.isub(this.p);
29822 } else {
29823 r.strip();
29824 }
29825
29826 return r;
29827 };
29828
29829 MPrime.prototype.split = function split (input, out) {
29830 input.iushrn(this.n, 0, out);
29831 };
29832
29833 MPrime.prototype.imulK = function imulK (num) {
29834 return num.imul(this.k);
29835 };
29836
29837 function K256 () {
29838 MPrime.call(
29839 this,
29840 'k256',
29841 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
29842 }
29843 inherits(K256, MPrime);
29844
29845 K256.prototype.split = function split (input, output) {
29846 // 256 = 9 * 26 + 22
29847 var mask = 0x3fffff;
29848
29849 var outLen = Math.min(input.length, 9);
29850 for (var i = 0; i < outLen; i++) {
29851 output.words[i] = input.words[i];
29852 }
29853 output.length = outLen;
29854
29855 if (input.length <= 9) {
29856 input.words[0] = 0;
29857 input.length = 1;
29858 return;
29859 }
29860
29861 // Shift by 9 limbs
29862 var prev = input.words[9];
29863 output.words[output.length++] = prev & mask;
29864
29865 for (i = 10; i < input.length; i++) {
29866 var next = input.words[i] | 0;
29867 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
29868 prev = next;
29869 }
29870 prev >>>= 22;
29871 input.words[i - 10] = prev;
29872 if (prev === 0 && input.length > 10) {
29873 input.length -= 10;
29874 } else {
29875 input.length -= 9;
29876 }
29877 };
29878
29879 K256.prototype.imulK = function imulK (num) {
29880 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
29881 num.words[num.length] = 0;
29882 num.words[num.length + 1] = 0;
29883 num.length += 2;
29884
29885 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
29886 var lo = 0;
29887 for (var i = 0; i < num.length; i++) {
29888 var w = num.words[i] | 0;
29889 lo += w * 0x3d1;
29890 num.words[i] = lo & 0x3ffffff;
29891 lo = w * 0x40 + ((lo / 0x4000000) | 0);
29892 }
29893
29894 // Fast length reduction
29895 if (num.words[num.length - 1] === 0) {
29896 num.length--;
29897 if (num.words[num.length - 1] === 0) {
29898 num.length--;
29899 }
29900 }
29901 return num;
29902 };
29903
29904 function P224 () {
29905 MPrime.call(
29906 this,
29907 'p224',
29908 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
29909 }
29910 inherits(P224, MPrime);
29911
29912 function P192 () {
29913 MPrime.call(
29914 this,
29915 'p192',
29916 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
29917 }
29918 inherits(P192, MPrime);
29919
29920 function P25519 () {
29921 // 2 ^ 255 - 19
29922 MPrime.call(
29923 this,
29924 '25519',
29925 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
29926 }
29927 inherits(P25519, MPrime);
29928
29929 P25519.prototype.imulK = function imulK (num) {
29930 // K = 0x13
29931 var carry = 0;
29932 for (var i = 0; i < num.length; i++) {
29933 var hi = (num.words[i] | 0) * 0x13 + carry;
29934 var lo = hi & 0x3ffffff;
29935 hi >>>= 26;
29936
29937 num.words[i] = lo;
29938 carry = hi;
29939 }
29940 if (carry !== 0) {
29941 num.words[num.length++] = carry;
29942 }
29943 return num;
29944 };
29945
29946 // Exported mostly for testing purposes, use plain name instead
29947 BN._prime = function prime (name) {
29948 // Cached version of prime
29949 if (primes[name]) return primes[name];
29950
29951 var prime;
29952 if (name === 'k256') {
29953 prime = new K256();
29954 } else if (name === 'p224') {
29955 prime = new P224();
29956 } else if (name === 'p192') {
29957 prime = new P192();
29958 } else if (name === 'p25519') {
29959 prime = new P25519();
29960 } else {
29961 throw new Error('Unknown prime ' + name);
29962 }
29963 primes[name] = prime;
29964
29965 return prime;
29966 };
29967
29968 //
29969 // Base reduction engine
29970 //
29971 function Red (m) {
29972 if (typeof m === 'string') {
29973 var prime = BN._prime(m);
29974 this.m = prime.p;
29975 this.prime = prime;
29976 } else {
29977 assert(m.gtn(1), 'modulus must be greater than 1');
29978 this.m = m;
29979 this.prime = null;
29980 }
29981 }
29982
29983 Red.prototype._verify1 = function _verify1 (a) {
29984 assert(a.negative === 0, 'red works only with positives');
29985 assert(a.red, 'red works only with red numbers');
29986 };
29987
29988 Red.prototype._verify2 = function _verify2 (a, b) {
29989 assert((a.negative | b.negative) === 0, 'red works only with positives');
29990 assert(a.red && a.red === b.red,
29991 'red works only with red numbers');
29992 };
29993
29994 Red.prototype.imod = function imod (a) {
29995 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
29996 return a.umod(this.m)._forceRed(this);
29997 };
29998
29999 Red.prototype.neg = function neg (a) {
30000 if (a.isZero()) {
30001 return a.clone();
30002 }
30003
30004 return this.m.sub(a)._forceRed(this);
30005 };
30006
30007 Red.prototype.add = function add (a, b) {
30008 this._verify2(a, b);
30009
30010 var res = a.add(b);
30011 if (res.cmp(this.m) >= 0) {
30012 res.isub(this.m);
30013 }
30014 return res._forceRed(this);
30015 };
30016
30017 Red.prototype.iadd = function iadd (a, b) {
30018 this._verify2(a, b);
30019
30020 var res = a.iadd(b);
30021 if (res.cmp(this.m) >= 0) {
30022 res.isub(this.m);
30023 }
30024 return res;
30025 };
30026
30027 Red.prototype.sub = function sub (a, b) {
30028 this._verify2(a, b);
30029
30030 var res = a.sub(b);
30031 if (res.cmpn(0) < 0) {
30032 res.iadd(this.m);
30033 }
30034 return res._forceRed(this);
30035 };
30036
30037 Red.prototype.isub = function isub (a, b) {
30038 this._verify2(a, b);
30039
30040 var res = a.isub(b);
30041 if (res.cmpn(0) < 0) {
30042 res.iadd(this.m);
30043 }
30044 return res;
30045 };
30046
30047 Red.prototype.shl = function shl (a, num) {
30048 this._verify1(a);
30049 return this.imod(a.ushln(num));
30050 };
30051
30052 Red.prototype.imul = function imul (a, b) {
30053 this._verify2(a, b);
30054 return this.imod(a.imul(b));
30055 };
30056
30057 Red.prototype.mul = function mul (a, b) {
30058 this._verify2(a, b);
30059 return this.imod(a.mul(b));
30060 };
30061
30062 Red.prototype.isqr = function isqr (a) {
30063 return this.imul(a, a.clone());
30064 };
30065
30066 Red.prototype.sqr = function sqr (a) {
30067 return this.mul(a, a);
30068 };
30069
30070 Red.prototype.sqrt = function sqrt (a) {
30071 if (a.isZero()) return a.clone();
30072
30073 var mod3 = this.m.andln(3);
30074 assert(mod3 % 2 === 1);
30075
30076 // Fast case
30077 if (mod3 === 3) {
30078 var pow = this.m.add(new BN(1)).iushrn(2);
30079 return this.pow(a, pow);
30080 }
30081
30082 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
30083 //
30084 // Find Q and S, that Q * 2 ^ S = (P - 1)
30085 var q = this.m.subn(1);
30086 var s = 0;
30087 while (!q.isZero() && q.andln(1) === 0) {
30088 s++;
30089 q.iushrn(1);
30090 }
30091 assert(!q.isZero());
30092
30093 var one = new BN(1).toRed(this);
30094 var nOne = one.redNeg();
30095
30096 // Find quadratic non-residue
30097 // NOTE: Max is such because of generalized Riemann hypothesis.
30098 var lpow = this.m.subn(1).iushrn(1);
30099 var z = this.m.bitLength();
30100 z = new BN(2 * z * z).toRed(this);
30101
30102 while (this.pow(z, lpow).cmp(nOne) !== 0) {
30103 z.redIAdd(nOne);
30104 }
30105
30106 var c = this.pow(z, q);
30107 var r = this.pow(a, q.addn(1).iushrn(1));
30108 var t = this.pow(a, q);
30109 var m = s;
30110 while (t.cmp(one) !== 0) {
30111 var tmp = t;
30112 for (var i = 0; tmp.cmp(one) !== 0; i++) {
30113 tmp = tmp.redSqr();
30114 }
30115 assert(i < m);
30116 var b = this.pow(c, new BN(1).iushln(m - i - 1));
30117
30118 r = r.redMul(b);
30119 c = b.redSqr();
30120 t = t.redMul(c);
30121 m = i;
30122 }
30123
30124 return r;
30125 };
30126
30127 Red.prototype.invm = function invm (a) {
30128 var inv = a._invmp(this.m);
30129 if (inv.negative !== 0) {
30130 inv.negative = 0;
30131 return this.imod(inv).redNeg();
30132 } else {
30133 return this.imod(inv);
30134 }
30135 };
30136
30137 Red.prototype.pow = function pow (a, num) {
30138 if (num.isZero()) return new BN(1);
30139 if (num.cmpn(1) === 0) return a.clone();
30140
30141 var windowSize = 4;
30142 var wnd = new Array(1 << windowSize);
30143 wnd[0] = new BN(1).toRed(this);
30144 wnd[1] = a;
30145 for (var i = 2; i < wnd.length; i++) {
30146 wnd[i] = this.mul(wnd[i - 1], a);
30147 }
30148
30149 var res = wnd[0];
30150 var current = 0;
30151 var currentLen = 0;
30152 var start = num.bitLength() % 26;
30153 if (start === 0) {
30154 start = 26;
30155 }
30156
30157 for (i = num.length - 1; i >= 0; i--) {
30158 var word = num.words[i];
30159 for (var j = start - 1; j >= 0; j--) {
30160 var bit = (word >> j) & 1;
30161 if (res !== wnd[0]) {
30162 res = this.sqr(res);
30163 }
30164
30165 if (bit === 0 && current === 0) {
30166 currentLen = 0;
30167 continue;
30168 }
30169
30170 current <<= 1;
30171 current |= bit;
30172 currentLen++;
30173 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
30174
30175 res = this.mul(res, wnd[current]);
30176 currentLen = 0;
30177 current = 0;
30178 }
30179 start = 26;
30180 }
30181
30182 return res;
30183 };
30184
30185 Red.prototype.convertTo = function convertTo (num) {
30186 var r = num.umod(this.m);
30187
30188 return r === num ? r.clone() : r;
30189 };
30190
30191 Red.prototype.convertFrom = function convertFrom (num) {
30192 var res = num.clone();
30193 res.red = null;
30194 return res;
30195 };
30196
30197 //
30198 // Montgomery method engine
30199 //
30200
30201 BN.mont = function mont (num) {
30202 return new Mont(num);
30203 };
30204
30205 function Mont (m) {
30206 Red.call(this, m);
30207
30208 this.shift = this.m.bitLength();
30209 if (this.shift % 26 !== 0) {
30210 this.shift += 26 - (this.shift % 26);
30211 }
30212
30213 this.r = new BN(1).iushln(this.shift);
30214 this.r2 = this.imod(this.r.sqr());
30215 this.rinv = this.r._invmp(this.m);
30216
30217 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
30218 this.minv = this.minv.umod(this.r);
30219 this.minv = this.r.sub(this.minv);
30220 }
30221 inherits(Mont, Red);
30222
30223 Mont.prototype.convertTo = function convertTo (num) {
30224 return this.imod(num.ushln(this.shift));
30225 };
30226
30227 Mont.prototype.convertFrom = function convertFrom (num) {
30228 var r = this.imod(num.mul(this.rinv));
30229 r.red = null;
30230 return r;
30231 };
30232
30233 Mont.prototype.imul = function imul (a, b) {
30234 if (a.isZero() || b.isZero()) {
30235 a.words[0] = 0;
30236 a.length = 1;
30237 return a;
30238 }
30239
30240 var t = a.imul(b);
30241 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30242 var u = t.isub(c).iushrn(this.shift);
30243 var res = u;
30244
30245 if (u.cmp(this.m) >= 0) {
30246 res = u.isub(this.m);
30247 } else if (u.cmpn(0) < 0) {
30248 res = u.iadd(this.m);
30249 }
30250
30251 return res._forceRed(this);
30252 };
30253
30254 Mont.prototype.mul = function mul (a, b) {
30255 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
30256
30257 var t = a.mul(b);
30258 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30259 var u = t.isub(c).iushrn(this.shift);
30260 var res = u;
30261 if (u.cmp(this.m) >= 0) {
30262 res = u.isub(this.m);
30263 } else if (u.cmpn(0) < 0) {
30264 res = u.iadd(this.m);
30265 }
30266
30267 return res._forceRed(this);
30268 };
30269
30270 Mont.prototype.invm = function invm (a) {
30271 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
30272 var res = this.imod(a._invmp(this.m).mul(this.r2));
30273 return res._forceRed(this);
30274 };
30275})(typeof module === 'undefined' || module, this);
30276
30277},{}],34:[function(require,module,exports){
30278var r;
30279
30280module.exports = function rand(len) {
30281 if (!r)
30282 r = new Rand(null);
30283
30284 return r.generate(len);
30285};
30286
30287function Rand(rand) {
30288 this.rand = rand;
30289}
30290module.exports.Rand = Rand;
30291
30292Rand.prototype.generate = function generate(len) {
30293 return this._rand(len);
30294};
30295
30296if (typeof self === 'object') {
30297 if (self.crypto && self.crypto.getRandomValues) {
30298 // Modern browsers
30299 Rand.prototype._rand = function _rand(n) {
30300 var arr = new Uint8Array(n);
30301 self.crypto.getRandomValues(arr);
30302 return arr;
30303 };
30304 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
30305 // IE
30306 Rand.prototype._rand = function _rand(n) {
30307 var arr = new Uint8Array(n);
30308 self.msCrypto.getRandomValues(arr);
30309 return arr;
30310 };
30311 } else {
30312 // Old junk
30313 Rand.prototype._rand = function() {
30314 throw new Error('Not implemented yet');
30315 };
30316 }
30317} else {
30318 // Node.js or Web worker with no crypto support
30319 try {
30320 var crypto = require('crypto');
30321
30322 Rand.prototype._rand = function _rand(n) {
30323 return crypto.randomBytes(n);
30324 };
30325 } catch (e) {
30326 // Emulate crypto API using randy
30327 Rand.prototype._rand = function _rand(n) {
30328 var res = new Uint8Array(n);
30329 for (var i = 0; i < res.length; i++)
30330 res[i] = this.rand.getByte();
30331 return res;
30332 };
30333 }
30334}
30335
30336},{"crypto":3}],35:[function(require,module,exports){
30337(function (Buffer){
30338var Transform = require('stream').Transform
30339var inherits = require('inherits')
30340var StringDecoder = require('string_decoder').StringDecoder
30341module.exports = CipherBase
30342inherits(CipherBase, Transform)
30343function CipherBase (hashMode) {
30344 Transform.call(this)
30345 this.hashMode = typeof hashMode === 'string'
30346 if (this.hashMode) {
30347 this[hashMode] = this._finalOrDigest
30348 } else {
30349 this.final = this._finalOrDigest
30350 }
30351 this._decoder = null
30352 this._encoding = null
30353}
30354CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
30355 if (typeof data === 'string') {
30356 data = new Buffer(data, inputEnc)
30357 }
30358 var outData = this._update(data)
30359 if (this.hashMode) {
30360 return this
30361 }
30362 if (outputEnc) {
30363 outData = this._toString(outData, outputEnc)
30364 }
30365 return outData
30366}
30367
30368CipherBase.prototype.setAutoPadding = function () {}
30369
30370CipherBase.prototype.getAuthTag = function () {
30371 throw new Error('trying to get auth tag in unsupported state')
30372}
30373
30374CipherBase.prototype.setAuthTag = function () {
30375 throw new Error('trying to set auth tag in unsupported state')
30376}
30377
30378CipherBase.prototype.setAAD = function () {
30379 throw new Error('trying to set aad in unsupported state')
30380}
30381
30382CipherBase.prototype._transform = function (data, _, next) {
30383 var err
30384 try {
30385 if (this.hashMode) {
30386 this._update(data)
30387 } else {
30388 this.push(this._update(data))
30389 }
30390 } catch (e) {
30391 err = e
30392 } finally {
30393 next(err)
30394 }
30395}
30396CipherBase.prototype._flush = function (done) {
30397 var err
30398 try {
30399 this.push(this._final())
30400 } catch (e) {
30401 err = e
30402 } finally {
30403 done(err)
30404 }
30405}
30406CipherBase.prototype._finalOrDigest = function (outputEnc) {
30407 var outData = this._final() || new Buffer('')
30408 if (outputEnc) {
30409 outData = this._toString(outData, outputEnc, true)
30410 }
30411 return outData
30412}
30413
30414CipherBase.prototype._toString = function (value, enc, fin) {
30415 if (!this._decoder) {
30416 this._decoder = new StringDecoder(enc)
30417 this._encoding = enc
30418 }
30419 if (this._encoding !== enc) {
30420 throw new Error('can\'t switch encodings')
30421 }
30422 var out = this._decoder.write(value)
30423 if (fin) {
30424 out += this._decoder.end()
30425 }
30426 return out
30427}
30428
30429}).call(this,require("buffer").Buffer)
30430},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
30431(function (Buffer){
30432'use strict';
30433var inherits = require('inherits')
30434var md5 = require('./md5')
30435var rmd160 = require('ripemd160')
30436var sha = require('sha.js')
30437
30438var Base = require('cipher-base')
30439
30440function HashNoConstructor(hash) {
30441 Base.call(this, 'digest')
30442
30443 this._hash = hash
30444 this.buffers = []
30445}
30446
30447inherits(HashNoConstructor, Base)
30448
30449HashNoConstructor.prototype._update = function (data) {
30450 this.buffers.push(data)
30451}
30452
30453HashNoConstructor.prototype._final = function () {
30454 var buf = Buffer.concat(this.buffers)
30455 var r = this._hash(buf)
30456 this.buffers = null
30457
30458 return r
30459}
30460
30461function Hash(hash) {
30462 Base.call(this, 'digest')
30463
30464 this._hash = hash
30465}
30466
30467inherits(Hash, Base)
30468
30469Hash.prototype._update = function (data) {
30470 this._hash.update(data)
30471}
30472
30473Hash.prototype._final = function () {
30474 return this._hash.digest()
30475}
30476
30477module.exports = function createHash (alg) {
30478 alg = alg.toLowerCase()
30479 if ('md5' === alg) return new HashNoConstructor(md5)
30480 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
30481
30482 return new Hash(sha(alg))
30483}
30484
30485}).call(this,require("buffer").Buffer)
30486},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
30487(function (Buffer){
30488'use strict';
30489var intSize = 4;
30490var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
30491var chrsz = 8;
30492
30493function toArray(buf, bigEndian) {
30494 if ((buf.length % intSize) !== 0) {
30495 var len = buf.length + (intSize - (buf.length % intSize));
30496 buf = Buffer.concat([buf, zeroBuffer], len);
30497 }
30498
30499 var arr = [];
30500 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
30501 for (var i = 0; i < buf.length; i += intSize) {
30502 arr.push(fn.call(buf, i));
30503 }
30504 return arr;
30505}
30506
30507function toBuffer(arr, size, bigEndian) {
30508 var buf = new Buffer(size);
30509 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
30510 for (var i = 0; i < arr.length; i++) {
30511 fn.call(buf, arr[i], i * 4, true);
30512 }
30513 return buf;
30514}
30515
30516function hash(buf, fn, hashSize, bigEndian) {
30517 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
30518 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
30519 return toBuffer(arr, hashSize, bigEndian);
30520}
30521exports.hash = hash;
30522}).call(this,require("buffer").Buffer)
30523},{"buffer":5}],38:[function(require,module,exports){
30524'use strict';
30525/*
30526 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
30527 * Digest Algorithm, as defined in RFC 1321.
30528 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
30529 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30530 * Distributed under the BSD License
30531 * See http://pajhome.org.uk/crypt/md5 for more info.
30532 */
30533
30534var helpers = require('./helpers');
30535
30536/*
30537 * Calculate the MD5 of an array of little-endian words, and a bit length
30538 */
30539function core_md5(x, len)
30540{
30541 /* append padding */
30542 x[len >> 5] |= 0x80 << ((len) % 32);
30543 x[(((len + 64) >>> 9) << 4) + 14] = len;
30544
30545 var a = 1732584193;
30546 var b = -271733879;
30547 var c = -1732584194;
30548 var d = 271733878;
30549
30550 for(var i = 0; i < x.length; i += 16)
30551 {
30552 var olda = a;
30553 var oldb = b;
30554 var oldc = c;
30555 var oldd = d;
30556
30557 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
30558 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
30559 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
30560 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
30561 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
30562 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
30563 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
30564 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
30565 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
30566 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
30567 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
30568 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
30569 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
30570 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
30571 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
30572 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
30573
30574 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
30575 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
30576 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
30577 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
30578 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
30579 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
30580 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
30581 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
30582 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
30583 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
30584 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
30585 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
30586 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
30587 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
30588 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
30589 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
30590
30591 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
30592 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
30593 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
30594 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
30595 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
30596 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
30597 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
30598 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
30599 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
30600 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
30601 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
30602 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
30603 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
30604 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
30605 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
30606 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
30607
30608 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
30609 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
30610 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
30611 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
30612 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
30613 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
30614 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
30615 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
30616 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
30617 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
30618 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
30619 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
30620 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
30621 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
30622 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
30623 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
30624
30625 a = safe_add(a, olda);
30626 b = safe_add(b, oldb);
30627 c = safe_add(c, oldc);
30628 d = safe_add(d, oldd);
30629 }
30630 return Array(a, b, c, d);
30631
30632}
30633
30634/*
30635 * These functions implement the four basic operations the algorithm uses.
30636 */
30637function md5_cmn(q, a, b, x, s, t)
30638{
30639 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
30640}
30641function md5_ff(a, b, c, d, x, s, t)
30642{
30643 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
30644}
30645function md5_gg(a, b, c, d, x, s, t)
30646{
30647 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
30648}
30649function md5_hh(a, b, c, d, x, s, t)
30650{
30651 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
30652}
30653function md5_ii(a, b, c, d, x, s, t)
30654{
30655 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
30656}
30657
30658/*
30659 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
30660 * to work around bugs in some JS interpreters.
30661 */
30662function safe_add(x, y)
30663{
30664 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
30665 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
30666 return (msw << 16) | (lsw & 0xFFFF);
30667}
30668
30669/*
30670 * Bitwise rotate a 32-bit number to the left.
30671 */
30672function bit_rol(num, cnt)
30673{
30674 return (num << cnt) | (num >>> (32 - cnt));
30675}
30676
30677module.exports = function md5(buf) {
30678 return helpers.hash(buf, core_md5, 16);
30679};
30680},{"./helpers":37}],39:[function(require,module,exports){
30681'use strict';
30682
30683var elliptic = exports;
30684
30685elliptic.version = require('../package.json').version;
30686elliptic.utils = require('./elliptic/utils');
30687elliptic.rand = require('brorand');
30688elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
30689elliptic.curve = require('./elliptic/curve');
30690elliptic.curves = require('./elliptic/curves');
30691
30692// Protocols
30693elliptic.ec = require('./elliptic/ec');
30694elliptic.eddsa = require('./elliptic/eddsa');
30695
30696},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
30697'use strict';
30698
30699var BN = require('bn.js');
30700var elliptic = require('../../elliptic');
30701var utils = elliptic.utils;
30702var getNAF = utils.getNAF;
30703var getJSF = utils.getJSF;
30704var assert = utils.assert;
30705
30706function BaseCurve(type, conf) {
30707 this.type = type;
30708 this.p = new BN(conf.p, 16);
30709
30710 // Use Montgomery, when there is no fast reduction for the prime
30711 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
30712
30713 // Useful for many curves
30714 this.zero = new BN(0).toRed(this.red);
30715 this.one = new BN(1).toRed(this.red);
30716 this.two = new BN(2).toRed(this.red);
30717
30718 // Curve configuration, optional
30719 this.n = conf.n && new BN(conf.n, 16);
30720 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
30721
30722 // Temporary arrays
30723 this._wnafT1 = new Array(4);
30724 this._wnafT2 = new Array(4);
30725 this._wnafT3 = new Array(4);
30726 this._wnafT4 = new Array(4);
30727
30728 // Generalized Greg Maxwell's trick
30729 var adjustCount = this.n && this.p.div(this.n);
30730 if (!adjustCount || adjustCount.cmpn(100) > 0) {
30731 this.redN = null;
30732 } else {
30733 this._maxwellTrick = true;
30734 this.redN = this.n.toRed(this.red);
30735 }
30736}
30737module.exports = BaseCurve;
30738
30739BaseCurve.prototype.point = function point() {
30740 throw new Error('Not implemented');
30741};
30742
30743BaseCurve.prototype.validate = function validate() {
30744 throw new Error('Not implemented');
30745};
30746
30747BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
30748 assert(p.precomputed);
30749 var doubles = p._getDoubles();
30750
30751 var naf = getNAF(k, 1);
30752 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
30753 I /= 3;
30754
30755 // Translate into more windowed form
30756 var repr = [];
30757 for (var j = 0; j < naf.length; j += doubles.step) {
30758 var nafW = 0;
30759 for (var k = j + doubles.step - 1; k >= j; k--)
30760 nafW = (nafW << 1) + naf[k];
30761 repr.push(nafW);
30762 }
30763
30764 var a = this.jpoint(null, null, null);
30765 var b = this.jpoint(null, null, null);
30766 for (var i = I; i > 0; i--) {
30767 for (var j = 0; j < repr.length; j++) {
30768 var nafW = repr[j];
30769 if (nafW === i)
30770 b = b.mixedAdd(doubles.points[j]);
30771 else if (nafW === -i)
30772 b = b.mixedAdd(doubles.points[j].neg());
30773 }
30774 a = a.add(b);
30775 }
30776 return a.toP();
30777};
30778
30779BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
30780 var w = 4;
30781
30782 // Precompute window
30783 var nafPoints = p._getNAFPoints(w);
30784 w = nafPoints.wnd;
30785 var wnd = nafPoints.points;
30786
30787 // Get NAF form
30788 var naf = getNAF(k, w);
30789
30790 // Add `this`*(N+1) for every w-NAF index
30791 var acc = this.jpoint(null, null, null);
30792 for (var i = naf.length - 1; i >= 0; i--) {
30793 // Count zeroes
30794 for (var k = 0; i >= 0 && naf[i] === 0; i--)
30795 k++;
30796 if (i >= 0)
30797 k++;
30798 acc = acc.dblp(k);
30799
30800 if (i < 0)
30801 break;
30802 var z = naf[i];
30803 assert(z !== 0);
30804 if (p.type === 'affine') {
30805 // J +- P
30806 if (z > 0)
30807 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
30808 else
30809 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
30810 } else {
30811 // J +- J
30812 if (z > 0)
30813 acc = acc.add(wnd[(z - 1) >> 1]);
30814 else
30815 acc = acc.add(wnd[(-z - 1) >> 1].neg());
30816 }
30817 }
30818 return p.type === 'affine' ? acc.toP() : acc;
30819};
30820
30821BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
30822 points,
30823 coeffs,
30824 len,
30825 jacobianResult) {
30826 var wndWidth = this._wnafT1;
30827 var wnd = this._wnafT2;
30828 var naf = this._wnafT3;
30829
30830 // Fill all arrays
30831 var max = 0;
30832 for (var i = 0; i < len; i++) {
30833 var p = points[i];
30834 var nafPoints = p._getNAFPoints(defW);
30835 wndWidth[i] = nafPoints.wnd;
30836 wnd[i] = nafPoints.points;
30837 }
30838
30839 // Comb small window NAFs
30840 for (var i = len - 1; i >= 1; i -= 2) {
30841 var a = i - 1;
30842 var b = i;
30843 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
30844 naf[a] = getNAF(coeffs[a], wndWidth[a]);
30845 naf[b] = getNAF(coeffs[b], wndWidth[b]);
30846 max = Math.max(naf[a].length, max);
30847 max = Math.max(naf[b].length, max);
30848 continue;
30849 }
30850
30851 var comb = [
30852 points[a], /* 1 */
30853 null, /* 3 */
30854 null, /* 5 */
30855 points[b] /* 7 */
30856 ];
30857
30858 // Try to avoid Projective points, if possible
30859 if (points[a].y.cmp(points[b].y) === 0) {
30860 comb[1] = points[a].add(points[b]);
30861 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30862 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
30863 comb[1] = points[a].toJ().mixedAdd(points[b]);
30864 comb[2] = points[a].add(points[b].neg());
30865 } else {
30866 comb[1] = points[a].toJ().mixedAdd(points[b]);
30867 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30868 }
30869
30870 var index = [
30871 -3, /* -1 -1 */
30872 -1, /* -1 0 */
30873 -5, /* -1 1 */
30874 -7, /* 0 -1 */
30875 0, /* 0 0 */
30876 7, /* 0 1 */
30877 5, /* 1 -1 */
30878 1, /* 1 0 */
30879 3 /* 1 1 */
30880 ];
30881
30882 var jsf = getJSF(coeffs[a], coeffs[b]);
30883 max = Math.max(jsf[0].length, max);
30884 naf[a] = new Array(max);
30885 naf[b] = new Array(max);
30886 for (var j = 0; j < max; j++) {
30887 var ja = jsf[0][j] | 0;
30888 var jb = jsf[1][j] | 0;
30889
30890 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
30891 naf[b][j] = 0;
30892 wnd[a] = comb;
30893 }
30894 }
30895
30896 var acc = this.jpoint(null, null, null);
30897 var tmp = this._wnafT4;
30898 for (var i = max; i >= 0; i--) {
30899 var k = 0;
30900
30901 while (i >= 0) {
30902 var zero = true;
30903 for (var j = 0; j < len; j++) {
30904 tmp[j] = naf[j][i] | 0;
30905 if (tmp[j] !== 0)
30906 zero = false;
30907 }
30908 if (!zero)
30909 break;
30910 k++;
30911 i--;
30912 }
30913 if (i >= 0)
30914 k++;
30915 acc = acc.dblp(k);
30916 if (i < 0)
30917 break;
30918
30919 for (var j = 0; j < len; j++) {
30920 var z = tmp[j];
30921 var p;
30922 if (z === 0)
30923 continue;
30924 else if (z > 0)
30925 p = wnd[j][(z - 1) >> 1];
30926 else if (z < 0)
30927 p = wnd[j][(-z - 1) >> 1].neg();
30928
30929 if (p.type === 'affine')
30930 acc = acc.mixedAdd(p);
30931 else
30932 acc = acc.add(p);
30933 }
30934 }
30935 // Zeroify references
30936 for (var i = 0; i < len; i++)
30937 wnd[i] = null;
30938
30939 if (jacobianResult)
30940 return acc;
30941 else
30942 return acc.toP();
30943};
30944
30945function BasePoint(curve, type) {
30946 this.curve = curve;
30947 this.type = type;
30948 this.precomputed = null;
30949}
30950BaseCurve.BasePoint = BasePoint;
30951
30952BasePoint.prototype.eq = function eq(/*other*/) {
30953 throw new Error('Not implemented');
30954};
30955
30956BasePoint.prototype.validate = function validate() {
30957 return this.curve.validate(this);
30958};
30959
30960BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
30961 bytes = utils.toArray(bytes, enc);
30962
30963 var len = this.p.byteLength();
30964
30965 // uncompressed, hybrid-odd, hybrid-even
30966 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
30967 bytes.length - 1 === 2 * len) {
30968 if (bytes[0] === 0x06)
30969 assert(bytes[bytes.length - 1] % 2 === 0);
30970 else if (bytes[0] === 0x07)
30971 assert(bytes[bytes.length - 1] % 2 === 1);
30972
30973 var res = this.point(bytes.slice(1, 1 + len),
30974 bytes.slice(1 + len, 1 + 2 * len));
30975
30976 return res;
30977 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
30978 bytes.length - 1 === len) {
30979 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
30980 }
30981 throw new Error('Unknown point format');
30982};
30983
30984BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
30985 return this.encode(enc, true);
30986};
30987
30988BasePoint.prototype._encode = function _encode(compact) {
30989 var len = this.curve.p.byteLength();
30990 var x = this.getX().toArray('be', len);
30991
30992 if (compact)
30993 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
30994
30995 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
30996};
30997
30998BasePoint.prototype.encode = function encode(enc, compact) {
30999 return utils.encode(this._encode(compact), enc);
31000};
31001
31002BasePoint.prototype.precompute = function precompute(power) {
31003 if (this.precomputed)
31004 return this;
31005
31006 var precomputed = {
31007 doubles: null,
31008 naf: null,
31009 beta: null
31010 };
31011 precomputed.naf = this._getNAFPoints(8);
31012 precomputed.doubles = this._getDoubles(4, power);
31013 precomputed.beta = this._getBeta();
31014 this.precomputed = precomputed;
31015
31016 return this;
31017};
31018
31019BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
31020 if (!this.precomputed)
31021 return false;
31022
31023 var doubles = this.precomputed.doubles;
31024 if (!doubles)
31025 return false;
31026
31027 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
31028};
31029
31030BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
31031 if (this.precomputed && this.precomputed.doubles)
31032 return this.precomputed.doubles;
31033
31034 var doubles = [ this ];
31035 var acc = this;
31036 for (var i = 0; i < power; i += step) {
31037 for (var j = 0; j < step; j++)
31038 acc = acc.dbl();
31039 doubles.push(acc);
31040 }
31041 return {
31042 step: step,
31043 points: doubles
31044 };
31045};
31046
31047BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
31048 if (this.precomputed && this.precomputed.naf)
31049 return this.precomputed.naf;
31050
31051 var res = [ this ];
31052 var max = (1 << wnd) - 1;
31053 var dbl = max === 1 ? null : this.dbl();
31054 for (var i = 1; i < max; i++)
31055 res[i] = res[i - 1].add(dbl);
31056 return {
31057 wnd: wnd,
31058 points: res
31059 };
31060};
31061
31062BasePoint.prototype._getBeta = function _getBeta() {
31063 return null;
31064};
31065
31066BasePoint.prototype.dblp = function dblp(k) {
31067 var r = this;
31068 for (var i = 0; i < k; i++)
31069 r = r.dbl();
31070 return r;
31071};
31072
31073},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
31074'use strict';
31075
31076var curve = require('../curve');
31077var elliptic = require('../../elliptic');
31078var BN = require('bn.js');
31079var inherits = require('inherits');
31080var Base = curve.base;
31081
31082var assert = elliptic.utils.assert;
31083
31084function EdwardsCurve(conf) {
31085 // NOTE: Important as we are creating point in Base.call()
31086 this.twisted = (conf.a | 0) !== 1;
31087 this.mOneA = this.twisted && (conf.a | 0) === -1;
31088 this.extended = this.mOneA;
31089
31090 Base.call(this, 'edwards', conf);
31091
31092 this.a = new BN(conf.a, 16).umod(this.red.m);
31093 this.a = this.a.toRed(this.red);
31094 this.c = new BN(conf.c, 16).toRed(this.red);
31095 this.c2 = this.c.redSqr();
31096 this.d = new BN(conf.d, 16).toRed(this.red);
31097 this.dd = this.d.redAdd(this.d);
31098
31099 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
31100 this.oneC = (conf.c | 0) === 1;
31101}
31102inherits(EdwardsCurve, Base);
31103module.exports = EdwardsCurve;
31104
31105EdwardsCurve.prototype._mulA = function _mulA(num) {
31106 if (this.mOneA)
31107 return num.redNeg();
31108 else
31109 return this.a.redMul(num);
31110};
31111
31112EdwardsCurve.prototype._mulC = function _mulC(num) {
31113 if (this.oneC)
31114 return num;
31115 else
31116 return this.c.redMul(num);
31117};
31118
31119// Just for compatibility with Short curve
31120EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
31121 return this.point(x, y, z, t);
31122};
31123
31124EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
31125 x = new BN(x, 16);
31126 if (!x.red)
31127 x = x.toRed(this.red);
31128
31129 var x2 = x.redSqr();
31130 var rhs = this.c2.redSub(this.a.redMul(x2));
31131 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
31132
31133 var y2 = rhs.redMul(lhs.redInvm());
31134 var y = y2.redSqrt();
31135 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31136 throw new Error('invalid point');
31137
31138 var isOdd = y.fromRed().isOdd();
31139 if (odd && !isOdd || !odd && isOdd)
31140 y = y.redNeg();
31141
31142 return this.point(x, y);
31143};
31144
31145EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
31146 y = new BN(y, 16);
31147 if (!y.red)
31148 y = y.toRed(this.red);
31149
31150 // x^2 = (y^2 - 1) / (d y^2 + 1)
31151 var y2 = y.redSqr();
31152 var lhs = y2.redSub(this.one);
31153 var rhs = y2.redMul(this.d).redAdd(this.one);
31154 var x2 = lhs.redMul(rhs.redInvm());
31155
31156 if (x2.cmp(this.zero) === 0) {
31157 if (odd)
31158 throw new Error('invalid point');
31159 else
31160 return this.point(this.zero, y);
31161 }
31162
31163 var x = x2.redSqrt();
31164 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
31165 throw new Error('invalid point');
31166
31167 if (x.isOdd() !== odd)
31168 x = x.redNeg();
31169
31170 return this.point(x, y);
31171};
31172
31173EdwardsCurve.prototype.validate = function validate(point) {
31174 if (point.isInfinity())
31175 return true;
31176
31177 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
31178 point.normalize();
31179
31180 var x2 = point.x.redSqr();
31181 var y2 = point.y.redSqr();
31182 var lhs = x2.redMul(this.a).redAdd(y2);
31183 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
31184
31185 return lhs.cmp(rhs) === 0;
31186};
31187
31188function Point(curve, x, y, z, t) {
31189 Base.BasePoint.call(this, curve, 'projective');
31190 if (x === null && y === null && z === null) {
31191 this.x = this.curve.zero;
31192 this.y = this.curve.one;
31193 this.z = this.curve.one;
31194 this.t = this.curve.zero;
31195 this.zOne = true;
31196 } else {
31197 this.x = new BN(x, 16);
31198 this.y = new BN(y, 16);
31199 this.z = z ? new BN(z, 16) : this.curve.one;
31200 this.t = t && new BN(t, 16);
31201 if (!this.x.red)
31202 this.x = this.x.toRed(this.curve.red);
31203 if (!this.y.red)
31204 this.y = this.y.toRed(this.curve.red);
31205 if (!this.z.red)
31206 this.z = this.z.toRed(this.curve.red);
31207 if (this.t && !this.t.red)
31208 this.t = this.t.toRed(this.curve.red);
31209 this.zOne = this.z === this.curve.one;
31210
31211 // Use extended coordinates
31212 if (this.curve.extended && !this.t) {
31213 this.t = this.x.redMul(this.y);
31214 if (!this.zOne)
31215 this.t = this.t.redMul(this.z.redInvm());
31216 }
31217 }
31218}
31219inherits(Point, Base.BasePoint);
31220
31221EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31222 return Point.fromJSON(this, obj);
31223};
31224
31225EdwardsCurve.prototype.point = function point(x, y, z, t) {
31226 return new Point(this, x, y, z, t);
31227};
31228
31229Point.fromJSON = function fromJSON(curve, obj) {
31230 return new Point(curve, obj[0], obj[1], obj[2]);
31231};
31232
31233Point.prototype.inspect = function inspect() {
31234 if (this.isInfinity())
31235 return '<EC Point Infinity>';
31236 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31237 ' y: ' + this.y.fromRed().toString(16, 2) +
31238 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31239};
31240
31241Point.prototype.isInfinity = function isInfinity() {
31242 // XXX This code assumes that zero is always zero in red
31243 return this.x.cmpn(0) === 0 &&
31244 this.y.cmp(this.z) === 0;
31245};
31246
31247Point.prototype._extDbl = function _extDbl() {
31248 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31249 // #doubling-dbl-2008-hwcd
31250 // 4M + 4S
31251
31252 // A = X1^2
31253 var a = this.x.redSqr();
31254 // B = Y1^2
31255 var b = this.y.redSqr();
31256 // C = 2 * Z1^2
31257 var c = this.z.redSqr();
31258 c = c.redIAdd(c);
31259 // D = a * A
31260 var d = this.curve._mulA(a);
31261 // E = (X1 + Y1)^2 - A - B
31262 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
31263 // G = D + B
31264 var g = d.redAdd(b);
31265 // F = G - C
31266 var f = g.redSub(c);
31267 // H = D - B
31268 var h = d.redSub(b);
31269 // X3 = E * F
31270 var nx = e.redMul(f);
31271 // Y3 = G * H
31272 var ny = g.redMul(h);
31273 // T3 = E * H
31274 var nt = e.redMul(h);
31275 // Z3 = F * G
31276 var nz = f.redMul(g);
31277 return this.curve.point(nx, ny, nz, nt);
31278};
31279
31280Point.prototype._projDbl = function _projDbl() {
31281 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31282 // #doubling-dbl-2008-bbjlp
31283 // #doubling-dbl-2007-bl
31284 // and others
31285 // Generally 3M + 4S or 2M + 4S
31286
31287 // B = (X1 + Y1)^2
31288 var b = this.x.redAdd(this.y).redSqr();
31289 // C = X1^2
31290 var c = this.x.redSqr();
31291 // D = Y1^2
31292 var d = this.y.redSqr();
31293
31294 var nx;
31295 var ny;
31296 var nz;
31297 if (this.curve.twisted) {
31298 // E = a * C
31299 var e = this.curve._mulA(c);
31300 // F = E + D
31301 var f = e.redAdd(d);
31302 if (this.zOne) {
31303 // X3 = (B - C - D) * (F - 2)
31304 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
31305 // Y3 = F * (E - D)
31306 ny = f.redMul(e.redSub(d));
31307 // Z3 = F^2 - 2 * F
31308 nz = f.redSqr().redSub(f).redSub(f);
31309 } else {
31310 // H = Z1^2
31311 var h = this.z.redSqr();
31312 // J = F - 2 * H
31313 var j = f.redSub(h).redISub(h);
31314 // X3 = (B-C-D)*J
31315 nx = b.redSub(c).redISub(d).redMul(j);
31316 // Y3 = F * (E - D)
31317 ny = f.redMul(e.redSub(d));
31318 // Z3 = F * J
31319 nz = f.redMul(j);
31320 }
31321 } else {
31322 // E = C + D
31323 var e = c.redAdd(d);
31324 // H = (c * Z1)^2
31325 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
31326 // J = E - 2 * H
31327 var j = e.redSub(h).redSub(h);
31328 // X3 = c * (B - E) * J
31329 nx = this.curve._mulC(b.redISub(e)).redMul(j);
31330 // Y3 = c * E * (C - D)
31331 ny = this.curve._mulC(e).redMul(c.redISub(d));
31332 // Z3 = E * J
31333 nz = e.redMul(j);
31334 }
31335 return this.curve.point(nx, ny, nz);
31336};
31337
31338Point.prototype.dbl = function dbl() {
31339 if (this.isInfinity())
31340 return this;
31341
31342 // Double in extended coordinates
31343 if (this.curve.extended)
31344 return this._extDbl();
31345 else
31346 return this._projDbl();
31347};
31348
31349Point.prototype._extAdd = function _extAdd(p) {
31350 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31351 // #addition-add-2008-hwcd-3
31352 // 8M
31353
31354 // A = (Y1 - X1) * (Y2 - X2)
31355 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
31356 // B = (Y1 + X1) * (Y2 + X2)
31357 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
31358 // C = T1 * k * T2
31359 var c = this.t.redMul(this.curve.dd).redMul(p.t);
31360 // D = Z1 * 2 * Z2
31361 var d = this.z.redMul(p.z.redAdd(p.z));
31362 // E = B - A
31363 var e = b.redSub(a);
31364 // F = D - C
31365 var f = d.redSub(c);
31366 // G = D + C
31367 var g = d.redAdd(c);
31368 // H = B + A
31369 var h = b.redAdd(a);
31370 // X3 = E * F
31371 var nx = e.redMul(f);
31372 // Y3 = G * H
31373 var ny = g.redMul(h);
31374 // T3 = E * H
31375 var nt = e.redMul(h);
31376 // Z3 = F * G
31377 var nz = f.redMul(g);
31378 return this.curve.point(nx, ny, nz, nt);
31379};
31380
31381Point.prototype._projAdd = function _projAdd(p) {
31382 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31383 // #addition-add-2008-bbjlp
31384 // #addition-add-2007-bl
31385 // 10M + 1S
31386
31387 // A = Z1 * Z2
31388 var a = this.z.redMul(p.z);
31389 // B = A^2
31390 var b = a.redSqr();
31391 // C = X1 * X2
31392 var c = this.x.redMul(p.x);
31393 // D = Y1 * Y2
31394 var d = this.y.redMul(p.y);
31395 // E = d * C * D
31396 var e = this.curve.d.redMul(c).redMul(d);
31397 // F = B - E
31398 var f = b.redSub(e);
31399 // G = B + E
31400 var g = b.redAdd(e);
31401 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
31402 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
31403 var nx = a.redMul(f).redMul(tmp);
31404 var ny;
31405 var nz;
31406 if (this.curve.twisted) {
31407 // Y3 = A * G * (D - a * C)
31408 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
31409 // Z3 = F * G
31410 nz = f.redMul(g);
31411 } else {
31412 // Y3 = A * G * (D - C)
31413 ny = a.redMul(g).redMul(d.redSub(c));
31414 // Z3 = c * F * G
31415 nz = this.curve._mulC(f).redMul(g);
31416 }
31417 return this.curve.point(nx, ny, nz);
31418};
31419
31420Point.prototype.add = function add(p) {
31421 if (this.isInfinity())
31422 return p;
31423 if (p.isInfinity())
31424 return this;
31425
31426 if (this.curve.extended)
31427 return this._extAdd(p);
31428 else
31429 return this._projAdd(p);
31430};
31431
31432Point.prototype.mul = function mul(k) {
31433 if (this._hasDoubles(k))
31434 return this.curve._fixedNafMul(this, k);
31435 else
31436 return this.curve._wnafMul(this, k);
31437};
31438
31439Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
31440 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
31441};
31442
31443Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
31444 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
31445};
31446
31447Point.prototype.normalize = function normalize() {
31448 if (this.zOne)
31449 return this;
31450
31451 // Normalize coordinates
31452 var zi = this.z.redInvm();
31453 this.x = this.x.redMul(zi);
31454 this.y = this.y.redMul(zi);
31455 if (this.t)
31456 this.t = this.t.redMul(zi);
31457 this.z = this.curve.one;
31458 this.zOne = true;
31459 return this;
31460};
31461
31462Point.prototype.neg = function neg() {
31463 return this.curve.point(this.x.redNeg(),
31464 this.y,
31465 this.z,
31466 this.t && this.t.redNeg());
31467};
31468
31469Point.prototype.getX = function getX() {
31470 this.normalize();
31471 return this.x.fromRed();
31472};
31473
31474Point.prototype.getY = function getY() {
31475 this.normalize();
31476 return this.y.fromRed();
31477};
31478
31479Point.prototype.eq = function eq(other) {
31480 return this === other ||
31481 this.getX().cmp(other.getX()) === 0 &&
31482 this.getY().cmp(other.getY()) === 0;
31483};
31484
31485Point.prototype.eqXToP = function eqXToP(x) {
31486 var rx = x.toRed(this.curve.red).redMul(this.z);
31487 if (this.x.cmp(rx) === 0)
31488 return true;
31489
31490 var xc = x.clone();
31491 var t = this.curve.redN.redMul(this.z);
31492 for (;;) {
31493 xc.iadd(this.curve.n);
31494 if (xc.cmp(this.curve.p) >= 0)
31495 return false;
31496
31497 rx.redIAdd(t);
31498 if (this.x.cmp(rx) === 0)
31499 return true;
31500 }
31501 return false;
31502};
31503
31504// Compatibility with BaseCurve
31505Point.prototype.toP = Point.prototype.normalize;
31506Point.prototype.mixedAdd = Point.prototype.add;
31507
31508},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
31509'use strict';
31510
31511var curve = exports;
31512
31513curve.base = require('./base');
31514curve.short = require('./short');
31515curve.mont = require('./mont');
31516curve.edwards = require('./edwards');
31517
31518},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
31519'use strict';
31520
31521var curve = require('../curve');
31522var BN = require('bn.js');
31523var inherits = require('inherits');
31524var Base = curve.base;
31525
31526var elliptic = require('../../elliptic');
31527var utils = elliptic.utils;
31528
31529function MontCurve(conf) {
31530 Base.call(this, 'mont', conf);
31531
31532 this.a = new BN(conf.a, 16).toRed(this.red);
31533 this.b = new BN(conf.b, 16).toRed(this.red);
31534 this.i4 = new BN(4).toRed(this.red).redInvm();
31535 this.two = new BN(2).toRed(this.red);
31536 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
31537}
31538inherits(MontCurve, Base);
31539module.exports = MontCurve;
31540
31541MontCurve.prototype.validate = function validate(point) {
31542 var x = point.normalize().x;
31543 var x2 = x.redSqr();
31544 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
31545 var y = rhs.redSqrt();
31546
31547 return y.redSqr().cmp(rhs) === 0;
31548};
31549
31550function Point(curve, x, z) {
31551 Base.BasePoint.call(this, curve, 'projective');
31552 if (x === null && z === null) {
31553 this.x = this.curve.one;
31554 this.z = this.curve.zero;
31555 } else {
31556 this.x = new BN(x, 16);
31557 this.z = new BN(z, 16);
31558 if (!this.x.red)
31559 this.x = this.x.toRed(this.curve.red);
31560 if (!this.z.red)
31561 this.z = this.z.toRed(this.curve.red);
31562 }
31563}
31564inherits(Point, Base.BasePoint);
31565
31566MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
31567 return this.point(utils.toArray(bytes, enc), 1);
31568};
31569
31570MontCurve.prototype.point = function point(x, z) {
31571 return new Point(this, x, z);
31572};
31573
31574MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31575 return Point.fromJSON(this, obj);
31576};
31577
31578Point.prototype.precompute = function precompute() {
31579 // No-op
31580};
31581
31582Point.prototype._encode = function _encode() {
31583 return this.getX().toArray('be', this.curve.p.byteLength());
31584};
31585
31586Point.fromJSON = function fromJSON(curve, obj) {
31587 return new Point(curve, obj[0], obj[1] || curve.one);
31588};
31589
31590Point.prototype.inspect = function inspect() {
31591 if (this.isInfinity())
31592 return '<EC Point Infinity>';
31593 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31594 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31595};
31596
31597Point.prototype.isInfinity = function isInfinity() {
31598 // XXX This code assumes that zero is always zero in red
31599 return this.z.cmpn(0) === 0;
31600};
31601
31602Point.prototype.dbl = function dbl() {
31603 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
31604 // 2M + 2S + 4A
31605
31606 // A = X1 + Z1
31607 var a = this.x.redAdd(this.z);
31608 // AA = A^2
31609 var aa = a.redSqr();
31610 // B = X1 - Z1
31611 var b = this.x.redSub(this.z);
31612 // BB = B^2
31613 var bb = b.redSqr();
31614 // C = AA - BB
31615 var c = aa.redSub(bb);
31616 // X3 = AA * BB
31617 var nx = aa.redMul(bb);
31618 // Z3 = C * (BB + A24 * C)
31619 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
31620 return this.curve.point(nx, nz);
31621};
31622
31623Point.prototype.add = function add() {
31624 throw new Error('Not supported on Montgomery curve');
31625};
31626
31627Point.prototype.diffAdd = function diffAdd(p, diff) {
31628 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
31629 // 4M + 2S + 6A
31630
31631 // A = X2 + Z2
31632 var a = this.x.redAdd(this.z);
31633 // B = X2 - Z2
31634 var b = this.x.redSub(this.z);
31635 // C = X3 + Z3
31636 var c = p.x.redAdd(p.z);
31637 // D = X3 - Z3
31638 var d = p.x.redSub(p.z);
31639 // DA = D * A
31640 var da = d.redMul(a);
31641 // CB = C * B
31642 var cb = c.redMul(b);
31643 // X5 = Z1 * (DA + CB)^2
31644 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
31645 // Z5 = X1 * (DA - CB)^2
31646 var nz = diff.x.redMul(da.redISub(cb).redSqr());
31647 return this.curve.point(nx, nz);
31648};
31649
31650Point.prototype.mul = function mul(k) {
31651 var t = k.clone();
31652 var a = this; // (N / 2) * Q + Q
31653 var b = this.curve.point(null, null); // (N / 2) * Q
31654 var c = this; // Q
31655
31656 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
31657 bits.push(t.andln(1));
31658
31659 for (var i = bits.length - 1; i >= 0; i--) {
31660 if (bits[i] === 0) {
31661 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
31662 a = a.diffAdd(b, c);
31663 // N * Q = 2 * ((N / 2) * Q + Q))
31664 b = b.dbl();
31665 } else {
31666 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
31667 b = a.diffAdd(b, c);
31668 // N * Q + Q = 2 * ((N / 2) * Q + Q)
31669 a = a.dbl();
31670 }
31671 }
31672 return b;
31673};
31674
31675Point.prototype.mulAdd = function mulAdd() {
31676 throw new Error('Not supported on Montgomery curve');
31677};
31678
31679Point.prototype.jumlAdd = function jumlAdd() {
31680 throw new Error('Not supported on Montgomery curve');
31681};
31682
31683Point.prototype.eq = function eq(other) {
31684 return this.getX().cmp(other.getX()) === 0;
31685};
31686
31687Point.prototype.normalize = function normalize() {
31688 this.x = this.x.redMul(this.z.redInvm());
31689 this.z = this.curve.one;
31690 return this;
31691};
31692
31693Point.prototype.getX = function getX() {
31694 // Normalize coordinates
31695 this.normalize();
31696
31697 return this.x.fromRed();
31698};
31699
31700},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
31701'use strict';
31702
31703var curve = require('../curve');
31704var elliptic = require('../../elliptic');
31705var BN = require('bn.js');
31706var inherits = require('inherits');
31707var Base = curve.base;
31708
31709var assert = elliptic.utils.assert;
31710
31711function ShortCurve(conf) {
31712 Base.call(this, 'short', conf);
31713
31714 this.a = new BN(conf.a, 16).toRed(this.red);
31715 this.b = new BN(conf.b, 16).toRed(this.red);
31716 this.tinv = this.two.redInvm();
31717
31718 this.zeroA = this.a.fromRed().cmpn(0) === 0;
31719 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
31720
31721 // If the curve is endomorphic, precalculate beta and lambda
31722 this.endo = this._getEndomorphism(conf);
31723 this._endoWnafT1 = new Array(4);
31724 this._endoWnafT2 = new Array(4);
31725}
31726inherits(ShortCurve, Base);
31727module.exports = ShortCurve;
31728
31729ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
31730 // No efficient endomorphism
31731 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
31732 return;
31733
31734 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
31735 var beta;
31736 var lambda;
31737 if (conf.beta) {
31738 beta = new BN(conf.beta, 16).toRed(this.red);
31739 } else {
31740 var betas = this._getEndoRoots(this.p);
31741 // Choose the smallest beta
31742 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
31743 beta = beta.toRed(this.red);
31744 }
31745 if (conf.lambda) {
31746 lambda = new BN(conf.lambda, 16);
31747 } else {
31748 // Choose the lambda that is matching selected beta
31749 var lambdas = this._getEndoRoots(this.n);
31750 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
31751 lambda = lambdas[0];
31752 } else {
31753 lambda = lambdas[1];
31754 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
31755 }
31756 }
31757
31758 // Get basis vectors, used for balanced length-two representation
31759 var basis;
31760 if (conf.basis) {
31761 basis = conf.basis.map(function(vec) {
31762 return {
31763 a: new BN(vec.a, 16),
31764 b: new BN(vec.b, 16)
31765 };
31766 });
31767 } else {
31768 basis = this._getEndoBasis(lambda);
31769 }
31770
31771 return {
31772 beta: beta,
31773 lambda: lambda,
31774 basis: basis
31775 };
31776};
31777
31778ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
31779 // Find roots of for x^2 + x + 1 in F
31780 // Root = (-1 +- Sqrt(-3)) / 2
31781 //
31782 var red = num === this.p ? this.red : BN.mont(num);
31783 var tinv = new BN(2).toRed(red).redInvm();
31784 var ntinv = tinv.redNeg();
31785
31786 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
31787
31788 var l1 = ntinv.redAdd(s).fromRed();
31789 var l2 = ntinv.redSub(s).fromRed();
31790 return [ l1, l2 ];
31791};
31792
31793ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
31794 // aprxSqrt >= sqrt(this.n)
31795 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
31796
31797 // 3.74
31798 // Run EGCD, until r(L + 1) < aprxSqrt
31799 var u = lambda;
31800 var v = this.n.clone();
31801 var x1 = new BN(1);
31802 var y1 = new BN(0);
31803 var x2 = new BN(0);
31804 var y2 = new BN(1);
31805
31806 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
31807 var a0;
31808 var b0;
31809 // First vector
31810 var a1;
31811 var b1;
31812 // Second vector
31813 var a2;
31814 var b2;
31815
31816 var prevR;
31817 var i = 0;
31818 var r;
31819 var x;
31820 while (u.cmpn(0) !== 0) {
31821 var q = v.div(u);
31822 r = v.sub(q.mul(u));
31823 x = x2.sub(q.mul(x1));
31824 var y = y2.sub(q.mul(y1));
31825
31826 if (!a1 && r.cmp(aprxSqrt) < 0) {
31827 a0 = prevR.neg();
31828 b0 = x1;
31829 a1 = r.neg();
31830 b1 = x;
31831 } else if (a1 && ++i === 2) {
31832 break;
31833 }
31834 prevR = r;
31835
31836 v = u;
31837 u = r;
31838 x2 = x1;
31839 x1 = x;
31840 y2 = y1;
31841 y1 = y;
31842 }
31843 a2 = r.neg();
31844 b2 = x;
31845
31846 var len1 = a1.sqr().add(b1.sqr());
31847 var len2 = a2.sqr().add(b2.sqr());
31848 if (len2.cmp(len1) >= 0) {
31849 a2 = a0;
31850 b2 = b0;
31851 }
31852
31853 // Normalize signs
31854 if (a1.negative) {
31855 a1 = a1.neg();
31856 b1 = b1.neg();
31857 }
31858 if (a2.negative) {
31859 a2 = a2.neg();
31860 b2 = b2.neg();
31861 }
31862
31863 return [
31864 { a: a1, b: b1 },
31865 { a: a2, b: b2 }
31866 ];
31867};
31868
31869ShortCurve.prototype._endoSplit = function _endoSplit(k) {
31870 var basis = this.endo.basis;
31871 var v1 = basis[0];
31872 var v2 = basis[1];
31873
31874 var c1 = v2.b.mul(k).divRound(this.n);
31875 var c2 = v1.b.neg().mul(k).divRound(this.n);
31876
31877 var p1 = c1.mul(v1.a);
31878 var p2 = c2.mul(v2.a);
31879 var q1 = c1.mul(v1.b);
31880 var q2 = c2.mul(v2.b);
31881
31882 // Calculate answer
31883 var k1 = k.sub(p1).sub(p2);
31884 var k2 = q1.add(q2).neg();
31885 return { k1: k1, k2: k2 };
31886};
31887
31888ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
31889 x = new BN(x, 16);
31890 if (!x.red)
31891 x = x.toRed(this.red);
31892
31893 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
31894 var y = y2.redSqrt();
31895 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31896 throw new Error('invalid point');
31897
31898 // XXX Is there any way to tell if the number is odd without converting it
31899 // to non-red form?
31900 var isOdd = y.fromRed().isOdd();
31901 if (odd && !isOdd || !odd && isOdd)
31902 y = y.redNeg();
31903
31904 return this.point(x, y);
31905};
31906
31907ShortCurve.prototype.validate = function validate(point) {
31908 if (point.inf)
31909 return true;
31910
31911 var x = point.x;
31912 var y = point.y;
31913
31914 var ax = this.a.redMul(x);
31915 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
31916 return y.redSqr().redISub(rhs).cmpn(0) === 0;
31917};
31918
31919ShortCurve.prototype._endoWnafMulAdd =
31920 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
31921 var npoints = this._endoWnafT1;
31922 var ncoeffs = this._endoWnafT2;
31923 for (var i = 0; i < points.length; i++) {
31924 var split = this._endoSplit(coeffs[i]);
31925 var p = points[i];
31926 var beta = p._getBeta();
31927
31928 if (split.k1.negative) {
31929 split.k1.ineg();
31930 p = p.neg(true);
31931 }
31932 if (split.k2.negative) {
31933 split.k2.ineg();
31934 beta = beta.neg(true);
31935 }
31936
31937 npoints[i * 2] = p;
31938 npoints[i * 2 + 1] = beta;
31939 ncoeffs[i * 2] = split.k1;
31940 ncoeffs[i * 2 + 1] = split.k2;
31941 }
31942 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
31943
31944 // Clean-up references to points and coefficients
31945 for (var j = 0; j < i * 2; j++) {
31946 npoints[j] = null;
31947 ncoeffs[j] = null;
31948 }
31949 return res;
31950};
31951
31952function Point(curve, x, y, isRed) {
31953 Base.BasePoint.call(this, curve, 'affine');
31954 if (x === null && y === null) {
31955 this.x = null;
31956 this.y = null;
31957 this.inf = true;
31958 } else {
31959 this.x = new BN(x, 16);
31960 this.y = new BN(y, 16);
31961 // Force redgomery representation when loading from JSON
31962 if (isRed) {
31963 this.x.forceRed(this.curve.red);
31964 this.y.forceRed(this.curve.red);
31965 }
31966 if (!this.x.red)
31967 this.x = this.x.toRed(this.curve.red);
31968 if (!this.y.red)
31969 this.y = this.y.toRed(this.curve.red);
31970 this.inf = false;
31971 }
31972}
31973inherits(Point, Base.BasePoint);
31974
31975ShortCurve.prototype.point = function point(x, y, isRed) {
31976 return new Point(this, x, y, isRed);
31977};
31978
31979ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
31980 return Point.fromJSON(this, obj, red);
31981};
31982
31983Point.prototype._getBeta = function _getBeta() {
31984 if (!this.curve.endo)
31985 return;
31986
31987 var pre = this.precomputed;
31988 if (pre && pre.beta)
31989 return pre.beta;
31990
31991 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
31992 if (pre) {
31993 var curve = this.curve;
31994 var endoMul = function(p) {
31995 return curve.point(p.x.redMul(curve.endo.beta), p.y);
31996 };
31997 pre.beta = beta;
31998 beta.precomputed = {
31999 beta: null,
32000 naf: pre.naf && {
32001 wnd: pre.naf.wnd,
32002 points: pre.naf.points.map(endoMul)
32003 },
32004 doubles: pre.doubles && {
32005 step: pre.doubles.step,
32006 points: pre.doubles.points.map(endoMul)
32007 }
32008 };
32009 }
32010 return beta;
32011};
32012
32013Point.prototype.toJSON = function toJSON() {
32014 if (!this.precomputed)
32015 return [ this.x, this.y ];
32016
32017 return [ this.x, this.y, this.precomputed && {
32018 doubles: this.precomputed.doubles && {
32019 step: this.precomputed.doubles.step,
32020 points: this.precomputed.doubles.points.slice(1)
32021 },
32022 naf: this.precomputed.naf && {
32023 wnd: this.precomputed.naf.wnd,
32024 points: this.precomputed.naf.points.slice(1)
32025 }
32026 } ];
32027};
32028
32029Point.fromJSON = function fromJSON(curve, obj, red) {
32030 if (typeof obj === 'string')
32031 obj = JSON.parse(obj);
32032 var res = curve.point(obj[0], obj[1], red);
32033 if (!obj[2])
32034 return res;
32035
32036 function obj2point(obj) {
32037 return curve.point(obj[0], obj[1], red);
32038 }
32039
32040 var pre = obj[2];
32041 res.precomputed = {
32042 beta: null,
32043 doubles: pre.doubles && {
32044 step: pre.doubles.step,
32045 points: [ res ].concat(pre.doubles.points.map(obj2point))
32046 },
32047 naf: pre.naf && {
32048 wnd: pre.naf.wnd,
32049 points: [ res ].concat(pre.naf.points.map(obj2point))
32050 }
32051 };
32052 return res;
32053};
32054
32055Point.prototype.inspect = function inspect() {
32056 if (this.isInfinity())
32057 return '<EC Point Infinity>';
32058 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
32059 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
32060};
32061
32062Point.prototype.isInfinity = function isInfinity() {
32063 return this.inf;
32064};
32065
32066Point.prototype.add = function add(p) {
32067 // O + P = P
32068 if (this.inf)
32069 return p;
32070
32071 // P + O = P
32072 if (p.inf)
32073 return this;
32074
32075 // P + P = 2P
32076 if (this.eq(p))
32077 return this.dbl();
32078
32079 // P + (-P) = O
32080 if (this.neg().eq(p))
32081 return this.curve.point(null, null);
32082
32083 // P + Q = O
32084 if (this.x.cmp(p.x) === 0)
32085 return this.curve.point(null, null);
32086
32087 var c = this.y.redSub(p.y);
32088 if (c.cmpn(0) !== 0)
32089 c = c.redMul(this.x.redSub(p.x).redInvm());
32090 var nx = c.redSqr().redISub(this.x).redISub(p.x);
32091 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32092 return this.curve.point(nx, ny);
32093};
32094
32095Point.prototype.dbl = function dbl() {
32096 if (this.inf)
32097 return this;
32098
32099 // 2P = O
32100 var ys1 = this.y.redAdd(this.y);
32101 if (ys1.cmpn(0) === 0)
32102 return this.curve.point(null, null);
32103
32104 var a = this.curve.a;
32105
32106 var x2 = this.x.redSqr();
32107 var dyinv = ys1.redInvm();
32108 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
32109
32110 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
32111 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32112 return this.curve.point(nx, ny);
32113};
32114
32115Point.prototype.getX = function getX() {
32116 return this.x.fromRed();
32117};
32118
32119Point.prototype.getY = function getY() {
32120 return this.y.fromRed();
32121};
32122
32123Point.prototype.mul = function mul(k) {
32124 k = new BN(k, 16);
32125
32126 if (this._hasDoubles(k))
32127 return this.curve._fixedNafMul(this, k);
32128 else if (this.curve.endo)
32129 return this.curve._endoWnafMulAdd([ this ], [ k ]);
32130 else
32131 return this.curve._wnafMul(this, k);
32132};
32133
32134Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
32135 var points = [ this, p2 ];
32136 var coeffs = [ k1, k2 ];
32137 if (this.curve.endo)
32138 return this.curve._endoWnafMulAdd(points, coeffs);
32139 else
32140 return this.curve._wnafMulAdd(1, points, coeffs, 2);
32141};
32142
32143Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
32144 var points = [ this, p2 ];
32145 var coeffs = [ k1, k2 ];
32146 if (this.curve.endo)
32147 return this.curve._endoWnafMulAdd(points, coeffs, true);
32148 else
32149 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
32150};
32151
32152Point.prototype.eq = function eq(p) {
32153 return this === p ||
32154 this.inf === p.inf &&
32155 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
32156};
32157
32158Point.prototype.neg = function neg(_precompute) {
32159 if (this.inf)
32160 return this;
32161
32162 var res = this.curve.point(this.x, this.y.redNeg());
32163 if (_precompute && this.precomputed) {
32164 var pre = this.precomputed;
32165 var negate = function(p) {
32166 return p.neg();
32167 };
32168 res.precomputed = {
32169 naf: pre.naf && {
32170 wnd: pre.naf.wnd,
32171 points: pre.naf.points.map(negate)
32172 },
32173 doubles: pre.doubles && {
32174 step: pre.doubles.step,
32175 points: pre.doubles.points.map(negate)
32176 }
32177 };
32178 }
32179 return res;
32180};
32181
32182Point.prototype.toJ = function toJ() {
32183 if (this.inf)
32184 return this.curve.jpoint(null, null, null);
32185
32186 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
32187 return res;
32188};
32189
32190function JPoint(curve, x, y, z) {
32191 Base.BasePoint.call(this, curve, 'jacobian');
32192 if (x === null && y === null && z === null) {
32193 this.x = this.curve.one;
32194 this.y = this.curve.one;
32195 this.z = new BN(0);
32196 } else {
32197 this.x = new BN(x, 16);
32198 this.y = new BN(y, 16);
32199 this.z = new BN(z, 16);
32200 }
32201 if (!this.x.red)
32202 this.x = this.x.toRed(this.curve.red);
32203 if (!this.y.red)
32204 this.y = this.y.toRed(this.curve.red);
32205 if (!this.z.red)
32206 this.z = this.z.toRed(this.curve.red);
32207
32208 this.zOne = this.z === this.curve.one;
32209}
32210inherits(JPoint, Base.BasePoint);
32211
32212ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
32213 return new JPoint(this, x, y, z);
32214};
32215
32216JPoint.prototype.toP = function toP() {
32217 if (this.isInfinity())
32218 return this.curve.point(null, null);
32219
32220 var zinv = this.z.redInvm();
32221 var zinv2 = zinv.redSqr();
32222 var ax = this.x.redMul(zinv2);
32223 var ay = this.y.redMul(zinv2).redMul(zinv);
32224
32225 return this.curve.point(ax, ay);
32226};
32227
32228JPoint.prototype.neg = function neg() {
32229 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
32230};
32231
32232JPoint.prototype.add = function add(p) {
32233 // O + P = P
32234 if (this.isInfinity())
32235 return p;
32236
32237 // P + O = P
32238 if (p.isInfinity())
32239 return this;
32240
32241 // 12M + 4S + 7A
32242 var pz2 = p.z.redSqr();
32243 var z2 = this.z.redSqr();
32244 var u1 = this.x.redMul(pz2);
32245 var u2 = p.x.redMul(z2);
32246 var s1 = this.y.redMul(pz2.redMul(p.z));
32247 var s2 = p.y.redMul(z2.redMul(this.z));
32248
32249 var h = u1.redSub(u2);
32250 var r = s1.redSub(s2);
32251 if (h.cmpn(0) === 0) {
32252 if (r.cmpn(0) !== 0)
32253 return this.curve.jpoint(null, null, null);
32254 else
32255 return this.dbl();
32256 }
32257
32258 var h2 = h.redSqr();
32259 var h3 = h2.redMul(h);
32260 var v = u1.redMul(h2);
32261
32262 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32263 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32264 var nz = this.z.redMul(p.z).redMul(h);
32265
32266 return this.curve.jpoint(nx, ny, nz);
32267};
32268
32269JPoint.prototype.mixedAdd = function mixedAdd(p) {
32270 // O + P = P
32271 if (this.isInfinity())
32272 return p.toJ();
32273
32274 // P + O = P
32275 if (p.isInfinity())
32276 return this;
32277
32278 // 8M + 3S + 7A
32279 var z2 = this.z.redSqr();
32280 var u1 = this.x;
32281 var u2 = p.x.redMul(z2);
32282 var s1 = this.y;
32283 var s2 = p.y.redMul(z2).redMul(this.z);
32284
32285 var h = u1.redSub(u2);
32286 var r = s1.redSub(s2);
32287 if (h.cmpn(0) === 0) {
32288 if (r.cmpn(0) !== 0)
32289 return this.curve.jpoint(null, null, null);
32290 else
32291 return this.dbl();
32292 }
32293
32294 var h2 = h.redSqr();
32295 var h3 = h2.redMul(h);
32296 var v = u1.redMul(h2);
32297
32298 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32299 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32300 var nz = this.z.redMul(h);
32301
32302 return this.curve.jpoint(nx, ny, nz);
32303};
32304
32305JPoint.prototype.dblp = function dblp(pow) {
32306 if (pow === 0)
32307 return this;
32308 if (this.isInfinity())
32309 return this;
32310 if (!pow)
32311 return this.dbl();
32312
32313 if (this.curve.zeroA || this.curve.threeA) {
32314 var r = this;
32315 for (var i = 0; i < pow; i++)
32316 r = r.dbl();
32317 return r;
32318 }
32319
32320 // 1M + 2S + 1A + N * (4S + 5M + 8A)
32321 // N = 1 => 6M + 6S + 9A
32322 var a = this.curve.a;
32323 var tinv = this.curve.tinv;
32324
32325 var jx = this.x;
32326 var jy = this.y;
32327 var jz = this.z;
32328 var jz4 = jz.redSqr().redSqr();
32329
32330 // Reuse results
32331 var jyd = jy.redAdd(jy);
32332 for (var i = 0; i < pow; i++) {
32333 var jx2 = jx.redSqr();
32334 var jyd2 = jyd.redSqr();
32335 var jyd4 = jyd2.redSqr();
32336 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
32337
32338 var t1 = jx.redMul(jyd2);
32339 var nx = c.redSqr().redISub(t1.redAdd(t1));
32340 var t2 = t1.redISub(nx);
32341 var dny = c.redMul(t2);
32342 dny = dny.redIAdd(dny).redISub(jyd4);
32343 var nz = jyd.redMul(jz);
32344 if (i + 1 < pow)
32345 jz4 = jz4.redMul(jyd4);
32346
32347 jx = nx;
32348 jz = nz;
32349 jyd = dny;
32350 }
32351
32352 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
32353};
32354
32355JPoint.prototype.dbl = function dbl() {
32356 if (this.isInfinity())
32357 return this;
32358
32359 if (this.curve.zeroA)
32360 return this._zeroDbl();
32361 else if (this.curve.threeA)
32362 return this._threeDbl();
32363 else
32364 return this._dbl();
32365};
32366
32367JPoint.prototype._zeroDbl = function _zeroDbl() {
32368 var nx;
32369 var ny;
32370 var nz;
32371 // Z = 1
32372 if (this.zOne) {
32373 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32374 // #doubling-mdbl-2007-bl
32375 // 1M + 5S + 14A
32376
32377 // XX = X1^2
32378 var xx = this.x.redSqr();
32379 // YY = Y1^2
32380 var yy = this.y.redSqr();
32381 // YYYY = YY^2
32382 var yyyy = yy.redSqr();
32383 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32384 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32385 s = s.redIAdd(s);
32386 // M = 3 * XX + a; a = 0
32387 var m = xx.redAdd(xx).redIAdd(xx);
32388 // T = M ^ 2 - 2*S
32389 var t = m.redSqr().redISub(s).redISub(s);
32390
32391 // 8 * YYYY
32392 var yyyy8 = yyyy.redIAdd(yyyy);
32393 yyyy8 = yyyy8.redIAdd(yyyy8);
32394 yyyy8 = yyyy8.redIAdd(yyyy8);
32395
32396 // X3 = T
32397 nx = t;
32398 // Y3 = M * (S - T) - 8 * YYYY
32399 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32400 // Z3 = 2*Y1
32401 nz = this.y.redAdd(this.y);
32402 } else {
32403 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32404 // #doubling-dbl-2009-l
32405 // 2M + 5S + 13A
32406
32407 // A = X1^2
32408 var a = this.x.redSqr();
32409 // B = Y1^2
32410 var b = this.y.redSqr();
32411 // C = B^2
32412 var c = b.redSqr();
32413 // D = 2 * ((X1 + B)^2 - A - C)
32414 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
32415 d = d.redIAdd(d);
32416 // E = 3 * A
32417 var e = a.redAdd(a).redIAdd(a);
32418 // F = E^2
32419 var f = e.redSqr();
32420
32421 // 8 * C
32422 var c8 = c.redIAdd(c);
32423 c8 = c8.redIAdd(c8);
32424 c8 = c8.redIAdd(c8);
32425
32426 // X3 = F - 2 * D
32427 nx = f.redISub(d).redISub(d);
32428 // Y3 = E * (D - X3) - 8 * C
32429 ny = e.redMul(d.redISub(nx)).redISub(c8);
32430 // Z3 = 2 * Y1 * Z1
32431 nz = this.y.redMul(this.z);
32432 nz = nz.redIAdd(nz);
32433 }
32434
32435 return this.curve.jpoint(nx, ny, nz);
32436};
32437
32438JPoint.prototype._threeDbl = function _threeDbl() {
32439 var nx;
32440 var ny;
32441 var nz;
32442 // Z = 1
32443 if (this.zOne) {
32444 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
32445 // #doubling-mdbl-2007-bl
32446 // 1M + 5S + 15A
32447
32448 // XX = X1^2
32449 var xx = this.x.redSqr();
32450 // YY = Y1^2
32451 var yy = this.y.redSqr();
32452 // YYYY = YY^2
32453 var yyyy = yy.redSqr();
32454 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32455 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32456 s = s.redIAdd(s);
32457 // M = 3 * XX + a
32458 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
32459 // T = M^2 - 2 * S
32460 var t = m.redSqr().redISub(s).redISub(s);
32461 // X3 = T
32462 nx = t;
32463 // Y3 = M * (S - T) - 8 * YYYY
32464 var yyyy8 = yyyy.redIAdd(yyyy);
32465 yyyy8 = yyyy8.redIAdd(yyyy8);
32466 yyyy8 = yyyy8.redIAdd(yyyy8);
32467 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32468 // Z3 = 2 * Y1
32469 nz = this.y.redAdd(this.y);
32470 } else {
32471 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
32472 // 3M + 5S
32473
32474 // delta = Z1^2
32475 var delta = this.z.redSqr();
32476 // gamma = Y1^2
32477 var gamma = this.y.redSqr();
32478 // beta = X1 * gamma
32479 var beta = this.x.redMul(gamma);
32480 // alpha = 3 * (X1 - delta) * (X1 + delta)
32481 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
32482 alpha = alpha.redAdd(alpha).redIAdd(alpha);
32483 // X3 = alpha^2 - 8 * beta
32484 var beta4 = beta.redIAdd(beta);
32485 beta4 = beta4.redIAdd(beta4);
32486 var beta8 = beta4.redAdd(beta4);
32487 nx = alpha.redSqr().redISub(beta8);
32488 // Z3 = (Y1 + Z1)^2 - gamma - delta
32489 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
32490 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
32491 var ggamma8 = gamma.redSqr();
32492 ggamma8 = ggamma8.redIAdd(ggamma8);
32493 ggamma8 = ggamma8.redIAdd(ggamma8);
32494 ggamma8 = ggamma8.redIAdd(ggamma8);
32495 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
32496 }
32497
32498 return this.curve.jpoint(nx, ny, nz);
32499};
32500
32501JPoint.prototype._dbl = function _dbl() {
32502 var a = this.curve.a;
32503
32504 // 4M + 6S + 10A
32505 var jx = this.x;
32506 var jy = this.y;
32507 var jz = this.z;
32508 var jz4 = jz.redSqr().redSqr();
32509
32510 var jx2 = jx.redSqr();
32511 var jy2 = jy.redSqr();
32512
32513 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
32514
32515 var jxd4 = jx.redAdd(jx);
32516 jxd4 = jxd4.redIAdd(jxd4);
32517 var t1 = jxd4.redMul(jy2);
32518 var nx = c.redSqr().redISub(t1.redAdd(t1));
32519 var t2 = t1.redISub(nx);
32520
32521 var jyd8 = jy2.redSqr();
32522 jyd8 = jyd8.redIAdd(jyd8);
32523 jyd8 = jyd8.redIAdd(jyd8);
32524 jyd8 = jyd8.redIAdd(jyd8);
32525 var ny = c.redMul(t2).redISub(jyd8);
32526 var nz = jy.redAdd(jy).redMul(jz);
32527
32528 return this.curve.jpoint(nx, ny, nz);
32529};
32530
32531JPoint.prototype.trpl = function trpl() {
32532 if (!this.curve.zeroA)
32533 return this.dbl().add(this);
32534
32535 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
32536 // 5M + 10S + ...
32537
32538 // XX = X1^2
32539 var xx = this.x.redSqr();
32540 // YY = Y1^2
32541 var yy = this.y.redSqr();
32542 // ZZ = Z1^2
32543 var zz = this.z.redSqr();
32544 // YYYY = YY^2
32545 var yyyy = yy.redSqr();
32546 // M = 3 * XX + a * ZZ2; a = 0
32547 var m = xx.redAdd(xx).redIAdd(xx);
32548 // MM = M^2
32549 var mm = m.redSqr();
32550 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
32551 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32552 e = e.redIAdd(e);
32553 e = e.redAdd(e).redIAdd(e);
32554 e = e.redISub(mm);
32555 // EE = E^2
32556 var ee = e.redSqr();
32557 // T = 16*YYYY
32558 var t = yyyy.redIAdd(yyyy);
32559 t = t.redIAdd(t);
32560 t = t.redIAdd(t);
32561 t = t.redIAdd(t);
32562 // U = (M + E)^2 - MM - EE - T
32563 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
32564 // X3 = 4 * (X1 * EE - 4 * YY * U)
32565 var yyu4 = yy.redMul(u);
32566 yyu4 = yyu4.redIAdd(yyu4);
32567 yyu4 = yyu4.redIAdd(yyu4);
32568 var nx = this.x.redMul(ee).redISub(yyu4);
32569 nx = nx.redIAdd(nx);
32570 nx = nx.redIAdd(nx);
32571 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
32572 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
32573 ny = ny.redIAdd(ny);
32574 ny = ny.redIAdd(ny);
32575 ny = ny.redIAdd(ny);
32576 // Z3 = (Z1 + E)^2 - ZZ - EE
32577 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
32578
32579 return this.curve.jpoint(nx, ny, nz);
32580};
32581
32582JPoint.prototype.mul = function mul(k, kbase) {
32583 k = new BN(k, kbase);
32584
32585 return this.curve._wnafMul(this, k);
32586};
32587
32588JPoint.prototype.eq = function eq(p) {
32589 if (p.type === 'affine')
32590 return this.eq(p.toJ());
32591
32592 if (this === p)
32593 return true;
32594
32595 // x1 * z2^2 == x2 * z1^2
32596 var z2 = this.z.redSqr();
32597 var pz2 = p.z.redSqr();
32598 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
32599 return false;
32600
32601 // y1 * z2^3 == y2 * z1^3
32602 var z3 = z2.redMul(this.z);
32603 var pz3 = pz2.redMul(p.z);
32604 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
32605};
32606
32607JPoint.prototype.eqXToP = function eqXToP(x) {
32608 var zs = this.z.redSqr();
32609 var rx = x.toRed(this.curve.red).redMul(zs);
32610 if (this.x.cmp(rx) === 0)
32611 return true;
32612
32613 var xc = x.clone();
32614 var t = this.curve.redN.redMul(zs);
32615 for (;;) {
32616 xc.iadd(this.curve.n);
32617 if (xc.cmp(this.curve.p) >= 0)
32618 return false;
32619
32620 rx.redIAdd(t);
32621 if (this.x.cmp(rx) === 0)
32622 return true;
32623 }
32624 return false;
32625};
32626
32627JPoint.prototype.inspect = function inspect() {
32628 if (this.isInfinity())
32629 return '<EC JPoint Infinity>';
32630 return '<EC JPoint x: ' + this.x.toString(16, 2) +
32631 ' y: ' + this.y.toString(16, 2) +
32632 ' z: ' + this.z.toString(16, 2) + '>';
32633};
32634
32635JPoint.prototype.isInfinity = function isInfinity() {
32636 // XXX This code assumes that zero is always zero in red
32637 return this.z.cmpn(0) === 0;
32638};
32639
32640},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
32641'use strict';
32642
32643var curves = exports;
32644
32645var hash = require('hash.js');
32646var elliptic = require('../elliptic');
32647
32648var assert = elliptic.utils.assert;
32649
32650function PresetCurve(options) {
32651 if (options.type === 'short')
32652 this.curve = new elliptic.curve.short(options);
32653 else if (options.type === 'edwards')
32654 this.curve = new elliptic.curve.edwards(options);
32655 else
32656 this.curve = new elliptic.curve.mont(options);
32657 this.g = this.curve.g;
32658 this.n = this.curve.n;
32659 this.hash = options.hash;
32660
32661 assert(this.g.validate(), 'Invalid curve');
32662 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
32663}
32664curves.PresetCurve = PresetCurve;
32665
32666function defineCurve(name, options) {
32667 Object.defineProperty(curves, name, {
32668 configurable: true,
32669 enumerable: true,
32670 get: function() {
32671 var curve = new PresetCurve(options);
32672 Object.defineProperty(curves, name, {
32673 configurable: true,
32674 enumerable: true,
32675 value: curve
32676 });
32677 return curve;
32678 }
32679 });
32680}
32681
32682defineCurve('p192', {
32683 type: 'short',
32684 prime: 'p192',
32685 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
32686 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
32687 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
32688 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
32689 hash: hash.sha256,
32690 gRed: false,
32691 g: [
32692 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
32693 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
32694 ]
32695});
32696
32697defineCurve('p224', {
32698 type: 'short',
32699 prime: 'p224',
32700 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
32701 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
32702 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
32703 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
32704 hash: hash.sha256,
32705 gRed: false,
32706 g: [
32707 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
32708 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
32709 ]
32710});
32711
32712defineCurve('p256', {
32713 type: 'short',
32714 prime: null,
32715 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
32716 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
32717 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
32718 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
32719 hash: hash.sha256,
32720 gRed: false,
32721 g: [
32722 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
32723 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
32724 ]
32725});
32726
32727defineCurve('p384', {
32728 type: 'short',
32729 prime: null,
32730 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32731 'fffffffe ffffffff 00000000 00000000 ffffffff',
32732 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32733 'fffffffe ffffffff 00000000 00000000 fffffffc',
32734 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
32735 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
32736 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
32737 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
32738 hash: hash.sha384,
32739 gRed: false,
32740 g: [
32741 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
32742 '5502f25d bf55296c 3a545e38 72760ab7',
32743 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
32744 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
32745 ]
32746});
32747
32748defineCurve('p521', {
32749 type: 'short',
32750 prime: null,
32751 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32752 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32753 'ffffffff ffffffff ffffffff ffffffff ffffffff',
32754 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32755 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32756 'ffffffff ffffffff ffffffff ffffffff fffffffc',
32757 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
32758 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
32759 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
32760 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32761 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
32762 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
32763 hash: hash.sha512,
32764 gRed: false,
32765 g: [
32766 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
32767 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
32768 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
32769 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
32770 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
32771 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
32772 ]
32773});
32774
32775defineCurve('curve25519', {
32776 type: 'mont',
32777 prime: 'p25519',
32778 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32779 a: '76d06',
32780 b: '1',
32781 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32782 hash: hash.sha256,
32783 gRed: false,
32784 g: [
32785 '9'
32786 ]
32787});
32788
32789defineCurve('ed25519', {
32790 type: 'edwards',
32791 prime: 'p25519',
32792 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32793 a: '-1',
32794 c: '1',
32795 // -121665 * (121666^(-1)) (mod P)
32796 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
32797 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32798 hash: hash.sha256,
32799 gRed: false,
32800 g: [
32801 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
32802
32803 // 4/5
32804 '6666666666666666666666666666666666666666666666666666666666666658'
32805 ]
32806});
32807
32808var pre;
32809try {
32810 pre = require('./precomputed/secp256k1');
32811} catch (e) {
32812 pre = undefined;
32813}
32814
32815defineCurve('secp256k1', {
32816 type: 'short',
32817 prime: 'k256',
32818 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
32819 a: '0',
32820 b: '7',
32821 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
32822 h: '1',
32823 hash: hash.sha256,
32824
32825 // Precomputed endomorphism
32826 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
32827 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
32828 basis: [
32829 {
32830 a: '3086d221a7d46bcde86c90e49284eb15',
32831 b: '-e4437ed6010e88286f547fa90abfe4c3'
32832 },
32833 {
32834 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
32835 b: '3086d221a7d46bcde86c90e49284eb15'
32836 }
32837 ],
32838
32839 gRed: false,
32840 g: [
32841 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
32842 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
32843 pre
32844 ]
32845});
32846
32847},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
32848'use strict';
32849
32850var BN = require('bn.js');
32851var elliptic = require('../../elliptic');
32852var utils = elliptic.utils;
32853var assert = utils.assert;
32854
32855var KeyPair = require('./key');
32856var Signature = require('./signature');
32857
32858function EC(options) {
32859 if (!(this instanceof EC))
32860 return new EC(options);
32861
32862 // Shortcut `elliptic.ec(curve-name)`
32863 if (typeof options === 'string') {
32864 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
32865
32866 options = elliptic.curves[options];
32867 }
32868
32869 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
32870 if (options instanceof elliptic.curves.PresetCurve)
32871 options = { curve: options };
32872
32873 this.curve = options.curve.curve;
32874 this.n = this.curve.n;
32875 this.nh = this.n.ushrn(1);
32876 this.g = this.curve.g;
32877
32878 // Point on curve
32879 this.g = options.curve.g;
32880 this.g.precompute(options.curve.n.bitLength() + 1);
32881
32882 // Hash for function for DRBG
32883 this.hash = options.hash || options.curve.hash;
32884}
32885module.exports = EC;
32886
32887EC.prototype.keyPair = function keyPair(options) {
32888 return new KeyPair(this, options);
32889};
32890
32891EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
32892 return KeyPair.fromPrivate(this, priv, enc);
32893};
32894
32895EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
32896 return KeyPair.fromPublic(this, pub, enc);
32897};
32898
32899EC.prototype.genKeyPair = function genKeyPair(options) {
32900 if (!options)
32901 options = {};
32902
32903 // Instantiate Hmac_DRBG
32904 var drbg = new elliptic.hmacDRBG({
32905 hash: this.hash,
32906 pers: options.pers,
32907 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
32908 nonce: this.n.toArray()
32909 });
32910
32911 var bytes = this.n.byteLength();
32912 var ns2 = this.n.sub(new BN(2));
32913 do {
32914 var priv = new BN(drbg.generate(bytes));
32915 if (priv.cmp(ns2) > 0)
32916 continue;
32917
32918 priv.iaddn(1);
32919 return this.keyFromPrivate(priv);
32920 } while (true);
32921};
32922
32923EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
32924 var delta = msg.byteLength() * 8 - this.n.bitLength();
32925 if (delta > 0)
32926 msg = msg.ushrn(delta);
32927 if (!truncOnly && msg.cmp(this.n) >= 0)
32928 return msg.sub(this.n);
32929 else
32930 return msg;
32931};
32932
32933EC.prototype.sign = function sign(msg, key, enc, options) {
32934 if (typeof enc === 'object') {
32935 options = enc;
32936 enc = null;
32937 }
32938 if (!options)
32939 options = {};
32940
32941 key = this.keyFromPrivate(key, enc);
32942 msg = this._truncateToN(new BN(msg, 16));
32943
32944 // Zero-extend key to provide enough entropy
32945 var bytes = this.n.byteLength();
32946 var bkey = key.getPrivate().toArray('be', bytes);
32947
32948 // Zero-extend nonce to have the same byte size as N
32949 var nonce = msg.toArray('be', bytes);
32950
32951 // Instantiate Hmac_DRBG
32952 var drbg = new elliptic.hmacDRBG({
32953 hash: this.hash,
32954 entropy: bkey,
32955 nonce: nonce,
32956 pers: options.pers,
32957 persEnc: options.persEnc
32958 });
32959
32960 // Number of bytes to generate
32961 var ns1 = this.n.sub(new BN(1));
32962
32963 for (var iter = 0; true; iter++) {
32964 var k = options.k ?
32965 options.k(iter) :
32966 new BN(drbg.generate(this.n.byteLength()));
32967 k = this._truncateToN(k, true);
32968 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
32969 continue;
32970
32971 var kp = this.g.mul(k);
32972 if (kp.isInfinity())
32973 continue;
32974
32975 var kpX = kp.getX();
32976 var r = kpX.umod(this.n);
32977 if (r.cmpn(0) === 0)
32978 continue;
32979
32980 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
32981 s = s.umod(this.n);
32982 if (s.cmpn(0) === 0)
32983 continue;
32984
32985 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
32986 (kpX.cmp(r) !== 0 ? 2 : 0);
32987
32988 // Use complement of `s`, if it is > `n / 2`
32989 if (options.canonical && s.cmp(this.nh) > 0) {
32990 s = this.n.sub(s);
32991 recoveryParam ^= 1;
32992 }
32993
32994 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
32995 }
32996};
32997
32998EC.prototype.verify = function verify(msg, signature, key, enc) {
32999 msg = this._truncateToN(new BN(msg, 16));
33000 key = this.keyFromPublic(key, enc);
33001 signature = new Signature(signature, 'hex');
33002
33003 // Perform primitive values validation
33004 var r = signature.r;
33005 var s = signature.s;
33006 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
33007 return false;
33008 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
33009 return false;
33010
33011 // Validate signature
33012 var sinv = s.invm(this.n);
33013 var u1 = sinv.mul(msg).umod(this.n);
33014 var u2 = sinv.mul(r).umod(this.n);
33015
33016 if (!this.curve._maxwellTrick) {
33017 var p = this.g.mulAdd(u1, key.getPublic(), u2);
33018 if (p.isInfinity())
33019 return false;
33020
33021 return p.getX().umod(this.n).cmp(r) === 0;
33022 }
33023
33024 // NOTE: Greg Maxwell's trick, inspired by:
33025 // https://git.io/vad3K
33026
33027 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
33028 if (p.isInfinity())
33029 return false;
33030
33031 // Compare `p.x` of Jacobian point with `r`,
33032 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
33033 // inverse of `p.z^2`
33034 return p.eqXToP(r);
33035};
33036
33037EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
33038 assert((3 & j) === j, 'The recovery param is more than two bits');
33039 signature = new Signature(signature, enc);
33040
33041 var n = this.n;
33042 var e = new BN(msg);
33043 var r = signature.r;
33044 var s = signature.s;
33045
33046 // A set LSB signifies that the y-coordinate is odd
33047 var isYOdd = j & 1;
33048 var isSecondKey = j >> 1;
33049 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
33050 throw new Error('Unable to find sencond key candinate');
33051
33052 // 1.1. Let x = r + jn.
33053 if (isSecondKey)
33054 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
33055 else
33056 r = this.curve.pointFromX(r, isYOdd);
33057
33058 var rInv = signature.r.invm(n);
33059 var s1 = n.sub(e).mul(rInv).umod(n);
33060 var s2 = s.mul(rInv).umod(n);
33061
33062 // 1.6.1 Compute Q = r^-1 (sR - eG)
33063 // Q = r^-1 (sR + -eG)
33064 return this.g.mulAdd(s1, r, s2);
33065};
33066
33067EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
33068 signature = new Signature(signature, enc);
33069 if (signature.recoveryParam !== null)
33070 return signature.recoveryParam;
33071
33072 for (var i = 0; i < 4; i++) {
33073 var Qprime;
33074 try {
33075 Qprime = this.recoverPubKey(e, signature, i);
33076 } catch (e) {
33077 continue;
33078 }
33079
33080 if (Qprime.eq(Q))
33081 return i;
33082 }
33083 throw new Error('Unable to find valid recovery factor');
33084};
33085
33086},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
33087'use strict';
33088
33089var BN = require('bn.js');
33090var elliptic = require('../../elliptic');
33091var utils = elliptic.utils;
33092var assert = utils.assert;
33093
33094function KeyPair(ec, options) {
33095 this.ec = ec;
33096 this.priv = null;
33097 this.pub = null;
33098
33099 // KeyPair(ec, { priv: ..., pub: ... })
33100 if (options.priv)
33101 this._importPrivate(options.priv, options.privEnc);
33102 if (options.pub)
33103 this._importPublic(options.pub, options.pubEnc);
33104}
33105module.exports = KeyPair;
33106
33107KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
33108 if (pub instanceof KeyPair)
33109 return pub;
33110
33111 return new KeyPair(ec, {
33112 pub: pub,
33113 pubEnc: enc
33114 });
33115};
33116
33117KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
33118 if (priv instanceof KeyPair)
33119 return priv;
33120
33121 return new KeyPair(ec, {
33122 priv: priv,
33123 privEnc: enc
33124 });
33125};
33126
33127KeyPair.prototype.validate = function validate() {
33128 var pub = this.getPublic();
33129
33130 if (pub.isInfinity())
33131 return { result: false, reason: 'Invalid public key' };
33132 if (!pub.validate())
33133 return { result: false, reason: 'Public key is not a point' };
33134 if (!pub.mul(this.ec.curve.n).isInfinity())
33135 return { result: false, reason: 'Public key * N != O' };
33136
33137 return { result: true, reason: null };
33138};
33139
33140KeyPair.prototype.getPublic = function getPublic(compact, enc) {
33141 // compact is optional argument
33142 if (typeof compact === 'string') {
33143 enc = compact;
33144 compact = null;
33145 }
33146
33147 if (!this.pub)
33148 this.pub = this.ec.g.mul(this.priv);
33149
33150 if (!enc)
33151 return this.pub;
33152
33153 return this.pub.encode(enc, compact);
33154};
33155
33156KeyPair.prototype.getPrivate = function getPrivate(enc) {
33157 if (enc === 'hex')
33158 return this.priv.toString(16, 2);
33159 else
33160 return this.priv;
33161};
33162
33163KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
33164 this.priv = new BN(key, enc || 16);
33165
33166 // Ensure that the priv won't be bigger than n, otherwise we may fail
33167 // in fixed multiplication method
33168 this.priv = this.priv.umod(this.ec.curve.n);
33169};
33170
33171KeyPair.prototype._importPublic = function _importPublic(key, enc) {
33172 if (key.x || key.y) {
33173 // Montgomery points only have an `x` coordinate.
33174 // Weierstrass/Edwards points on the other hand have both `x` and
33175 // `y` coordinates.
33176 if (this.ec.curve.type === 'mont') {
33177 assert(key.x, 'Need x coordinate');
33178 } else if (this.ec.curve.type === 'short' ||
33179 this.ec.curve.type === 'edwards') {
33180 assert(key.x && key.y, 'Need both x and y coordinate');
33181 }
33182 this.pub = this.ec.curve.point(key.x, key.y);
33183 return;
33184 }
33185 this.pub = this.ec.curve.decodePoint(key, enc);
33186};
33187
33188// ECDH
33189KeyPair.prototype.derive = function derive(pub) {
33190 return pub.mul(this.priv).getX();
33191};
33192
33193// ECDSA
33194KeyPair.prototype.sign = function sign(msg, enc, options) {
33195 return this.ec.sign(msg, this, enc, options);
33196};
33197
33198KeyPair.prototype.verify = function verify(msg, signature) {
33199 return this.ec.verify(msg, signature, this);
33200};
33201
33202KeyPair.prototype.inspect = function inspect() {
33203 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
33204 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
33205};
33206
33207},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
33208'use strict';
33209
33210var BN = require('bn.js');
33211
33212var elliptic = require('../../elliptic');
33213var utils = elliptic.utils;
33214var assert = utils.assert;
33215
33216function Signature(options, enc) {
33217 if (options instanceof Signature)
33218 return options;
33219
33220 if (this._importDER(options, enc))
33221 return;
33222
33223 assert(options.r && options.s, 'Signature without r or s');
33224 this.r = new BN(options.r, 16);
33225 this.s = new BN(options.s, 16);
33226 if (options.recoveryParam === undefined)
33227 this.recoveryParam = null;
33228 else
33229 this.recoveryParam = options.recoveryParam;
33230}
33231module.exports = Signature;
33232
33233function Position() {
33234 this.place = 0;
33235}
33236
33237function getLength(buf, p) {
33238 var initial = buf[p.place++];
33239 if (!(initial & 0x80)) {
33240 return initial;
33241 }
33242 var octetLen = initial & 0xf;
33243 var val = 0;
33244 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
33245 val <<= 8;
33246 val |= buf[off];
33247 }
33248 p.place = off;
33249 return val;
33250}
33251
33252function rmPadding(buf) {
33253 var i = 0;
33254 var len = buf.length - 1;
33255 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
33256 i++;
33257 }
33258 if (i === 0) {
33259 return buf;
33260 }
33261 return buf.slice(i);
33262}
33263
33264Signature.prototype._importDER = function _importDER(data, enc) {
33265 data = utils.toArray(data, enc);
33266 var p = new Position();
33267 if (data[p.place++] !== 0x30) {
33268 return false;
33269 }
33270 var len = getLength(data, p);
33271 if ((len + p.place) !== data.length) {
33272 return false;
33273 }
33274 if (data[p.place++] !== 0x02) {
33275 return false;
33276 }
33277 var rlen = getLength(data, p);
33278 var r = data.slice(p.place, rlen + p.place);
33279 p.place += rlen;
33280 if (data[p.place++] !== 0x02) {
33281 return false;
33282 }
33283 var slen = getLength(data, p);
33284 if (data.length !== slen + p.place) {
33285 return false;
33286 }
33287 var s = data.slice(p.place, slen + p.place);
33288 if (r[0] === 0 && (r[1] & 0x80)) {
33289 r = r.slice(1);
33290 }
33291 if (s[0] === 0 && (s[1] & 0x80)) {
33292 s = s.slice(1);
33293 }
33294
33295 this.r = new BN(r);
33296 this.s = new BN(s);
33297 this.recoveryParam = null;
33298
33299 return true;
33300};
33301
33302function constructLength(arr, len) {
33303 if (len < 0x80) {
33304 arr.push(len);
33305 return;
33306 }
33307 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
33308 arr.push(octets | 0x80);
33309 while (--octets) {
33310 arr.push((len >>> (octets << 3)) & 0xff);
33311 }
33312 arr.push(len);
33313}
33314
33315Signature.prototype.toDER = function toDER(enc) {
33316 var r = this.r.toArray();
33317 var s = this.s.toArray();
33318
33319 // Pad values
33320 if (r[0] & 0x80)
33321 r = [ 0 ].concat(r);
33322 // Pad values
33323 if (s[0] & 0x80)
33324 s = [ 0 ].concat(s);
33325
33326 r = rmPadding(r);
33327 s = rmPadding(s);
33328
33329 while (!s[0] && !(s[1] & 0x80)) {
33330 s = s.slice(1);
33331 }
33332 var arr = [ 0x02 ];
33333 constructLength(arr, r.length);
33334 arr = arr.concat(r);
33335 arr.push(0x02);
33336 constructLength(arr, s.length);
33337 var backHalf = arr.concat(s);
33338 var res = [ 0x30 ];
33339 constructLength(res, backHalf.length);
33340 res = res.concat(backHalf);
33341 return utils.encode(res, enc);
33342};
33343
33344},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
33345'use strict';
33346
33347var hash = require('hash.js');
33348var elliptic = require('../../elliptic');
33349var utils = elliptic.utils;
33350var assert = utils.assert;
33351var parseBytes = utils.parseBytes;
33352var KeyPair = require('./key');
33353var Signature = require('./signature');
33354
33355function EDDSA(curve) {
33356 assert(curve === 'ed25519', 'only tested with ed25519 so far');
33357
33358 if (!(this instanceof EDDSA))
33359 return new EDDSA(curve);
33360
33361 var curve = elliptic.curves[curve].curve;
33362 this.curve = curve;
33363 this.g = curve.g;
33364 this.g.precompute(curve.n.bitLength() + 1);
33365
33366 this.pointClass = curve.point().constructor;
33367 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
33368 this.hash = hash.sha512;
33369}
33370
33371module.exports = EDDSA;
33372
33373/**
33374* @param {Array|String} message - message bytes
33375* @param {Array|String|KeyPair} secret - secret bytes or a keypair
33376* @returns {Signature} - signature
33377*/
33378EDDSA.prototype.sign = function sign(message, secret) {
33379 message = parseBytes(message);
33380 var key = this.keyFromSecret(secret);
33381 var r = this.hashInt(key.messagePrefix(), message);
33382 var R = this.g.mul(r);
33383 var Rencoded = this.encodePoint(R);
33384 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
33385 .mul(key.priv());
33386 var S = r.add(s_).umod(this.curve.n);
33387 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
33388};
33389
33390/**
33391* @param {Array} message - message bytes
33392* @param {Array|String|Signature} sig - sig bytes
33393* @param {Array|String|Point|KeyPair} pub - public key
33394* @returns {Boolean} - true if public key matches sig of message
33395*/
33396EDDSA.prototype.verify = function verify(message, sig, pub) {
33397 message = parseBytes(message);
33398 sig = this.makeSignature(sig);
33399 var key = this.keyFromPublic(pub);
33400 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
33401 var SG = this.g.mul(sig.S());
33402 var RplusAh = sig.R().add(key.pub().mul(h));
33403 return RplusAh.eq(SG);
33404};
33405
33406EDDSA.prototype.hashInt = function hashInt() {
33407 var hash = this.hash();
33408 for (var i = 0; i < arguments.length; i++)
33409 hash.update(arguments[i]);
33410 return utils.intFromLE(hash.digest()).umod(this.curve.n);
33411};
33412
33413EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
33414 return KeyPair.fromPublic(this, pub);
33415};
33416
33417EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
33418 return KeyPair.fromSecret(this, secret);
33419};
33420
33421EDDSA.prototype.makeSignature = function makeSignature(sig) {
33422 if (sig instanceof Signature)
33423 return sig;
33424 return new Signature(this, sig);
33425};
33426
33427/**
33428* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
33429*
33430* EDDSA defines methods for encoding and decoding points and integers. These are
33431* helper convenience methods, that pass along to utility functions implied
33432* parameters.
33433*
33434*/
33435EDDSA.prototype.encodePoint = function encodePoint(point) {
33436 var enc = point.getY().toArray('le', this.encodingLength);
33437 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
33438 return enc;
33439};
33440
33441EDDSA.prototype.decodePoint = function decodePoint(bytes) {
33442 bytes = utils.parseBytes(bytes);
33443
33444 var lastIx = bytes.length - 1;
33445 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
33446 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
33447
33448 var y = utils.intFromLE(normed);
33449 return this.curve.pointFromY(y, xIsOdd);
33450};
33451
33452EDDSA.prototype.encodeInt = function encodeInt(num) {
33453 return num.toArray('le', this.encodingLength);
33454};
33455
33456EDDSA.prototype.decodeInt = function decodeInt(bytes) {
33457 return utils.intFromLE(bytes);
33458};
33459
33460EDDSA.prototype.isPoint = function isPoint(val) {
33461 return val instanceof this.pointClass;
33462};
33463
33464},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
33465'use strict';
33466
33467var elliptic = require('../../elliptic');
33468var utils = elliptic.utils;
33469var assert = utils.assert;
33470var parseBytes = utils.parseBytes;
33471var cachedProperty = utils.cachedProperty;
33472
33473/**
33474* @param {EDDSA} eddsa - instance
33475* @param {Object} params - public/private key parameters
33476*
33477* @param {Array<Byte>} [params.secret] - secret seed bytes
33478* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
33479* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
33480*
33481*/
33482function KeyPair(eddsa, params) {
33483 this.eddsa = eddsa;
33484 this._secret = parseBytes(params.secret);
33485 if (eddsa.isPoint(params.pub))
33486 this._pub = params.pub;
33487 else
33488 this._pubBytes = parseBytes(params.pub);
33489}
33490
33491KeyPair.fromPublic = function fromPublic(eddsa, pub) {
33492 if (pub instanceof KeyPair)
33493 return pub;
33494 return new KeyPair(eddsa, { pub: pub });
33495};
33496
33497KeyPair.fromSecret = function fromSecret(eddsa, secret) {
33498 if (secret instanceof KeyPair)
33499 return secret;
33500 return new KeyPair(eddsa, { secret: secret });
33501};
33502
33503KeyPair.prototype.secret = function secret() {
33504 return this._secret;
33505};
33506
33507cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
33508 return this.eddsa.encodePoint(this.pub());
33509});
33510
33511cachedProperty(KeyPair, 'pub', function pub() {
33512 if (this._pubBytes)
33513 return this.eddsa.decodePoint(this._pubBytes);
33514 return this.eddsa.g.mul(this.priv());
33515});
33516
33517cachedProperty(KeyPair, 'privBytes', function privBytes() {
33518 var eddsa = this.eddsa;
33519 var hash = this.hash();
33520 var lastIx = eddsa.encodingLength - 1;
33521
33522 var a = hash.slice(0, eddsa.encodingLength);
33523 a[0] &= 248;
33524 a[lastIx] &= 127;
33525 a[lastIx] |= 64;
33526
33527 return a;
33528});
33529
33530cachedProperty(KeyPair, 'priv', function priv() {
33531 return this.eddsa.decodeInt(this.privBytes());
33532});
33533
33534cachedProperty(KeyPair, 'hash', function hash() {
33535 return this.eddsa.hash().update(this.secret()).digest();
33536});
33537
33538cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
33539 return this.hash().slice(this.eddsa.encodingLength);
33540});
33541
33542KeyPair.prototype.sign = function sign(message) {
33543 assert(this._secret, 'KeyPair can only verify');
33544 return this.eddsa.sign(message, this);
33545};
33546
33547KeyPair.prototype.verify = function verify(message, sig) {
33548 return this.eddsa.verify(message, sig, this);
33549};
33550
33551KeyPair.prototype.getSecret = function getSecret(enc) {
33552 assert(this._secret, 'KeyPair is public only');
33553 return utils.encode(this.secret(), enc);
33554};
33555
33556KeyPair.prototype.getPublic = function getPublic(enc) {
33557 return utils.encode(this.pubBytes(), enc);
33558};
33559
33560module.exports = KeyPair;
33561
33562},{"../../elliptic":39}],51:[function(require,module,exports){
33563'use strict';
33564
33565var BN = require('bn.js');
33566var elliptic = require('../../elliptic');
33567var utils = elliptic.utils;
33568var assert = utils.assert;
33569var cachedProperty = utils.cachedProperty;
33570var parseBytes = utils.parseBytes;
33571
33572/**
33573* @param {EDDSA} eddsa - eddsa instance
33574* @param {Array<Bytes>|Object} sig -
33575* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
33576* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
33577* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
33578* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
33579*/
33580function Signature(eddsa, sig) {
33581 this.eddsa = eddsa;
33582
33583 if (typeof sig !== 'object')
33584 sig = parseBytes(sig);
33585
33586 if (Array.isArray(sig)) {
33587 sig = {
33588 R: sig.slice(0, eddsa.encodingLength),
33589 S: sig.slice(eddsa.encodingLength)
33590 };
33591 }
33592
33593 assert(sig.R && sig.S, 'Signature without R or S');
33594
33595 if (eddsa.isPoint(sig.R))
33596 this._R = sig.R;
33597 if (sig.S instanceof BN)
33598 this._S = sig.S;
33599
33600 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
33601 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
33602}
33603
33604cachedProperty(Signature, 'S', function S() {
33605 return this.eddsa.decodeInt(this.Sencoded());
33606});
33607
33608cachedProperty(Signature, 'R', function R() {
33609 return this.eddsa.decodePoint(this.Rencoded());
33610});
33611
33612cachedProperty(Signature, 'Rencoded', function Rencoded() {
33613 return this.eddsa.encodePoint(this.R());
33614});
33615
33616cachedProperty(Signature, 'Sencoded', function Sencoded() {
33617 return this.eddsa.encodeInt(this.S());
33618});
33619
33620Signature.prototype.toBytes = function toBytes() {
33621 return this.Rencoded().concat(this.Sencoded());
33622};
33623
33624Signature.prototype.toHex = function toHex() {
33625 return utils.encode(this.toBytes(), 'hex').toUpperCase();
33626};
33627
33628module.exports = Signature;
33629
33630},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
33631'use strict';
33632
33633var hash = require('hash.js');
33634var elliptic = require('../elliptic');
33635var utils = elliptic.utils;
33636var assert = utils.assert;
33637
33638function HmacDRBG(options) {
33639 if (!(this instanceof HmacDRBG))
33640 return new HmacDRBG(options);
33641 this.hash = options.hash;
33642 this.predResist = !!options.predResist;
33643
33644 this.outLen = this.hash.outSize;
33645 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
33646
33647 this.reseed = null;
33648 this.reseedInterval = null;
33649 this.K = null;
33650 this.V = null;
33651
33652 var entropy = utils.toArray(options.entropy, options.entropyEnc);
33653 var nonce = utils.toArray(options.nonce, options.nonceEnc);
33654 var pers = utils.toArray(options.pers, options.persEnc);
33655 assert(entropy.length >= (this.minEntropy / 8),
33656 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
33657 this._init(entropy, nonce, pers);
33658}
33659module.exports = HmacDRBG;
33660
33661HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
33662 var seed = entropy.concat(nonce).concat(pers);
33663
33664 this.K = new Array(this.outLen / 8);
33665 this.V = new Array(this.outLen / 8);
33666 for (var i = 0; i < this.V.length; i++) {
33667 this.K[i] = 0x00;
33668 this.V[i] = 0x01;
33669 }
33670
33671 this._update(seed);
33672 this.reseed = 1;
33673 this.reseedInterval = 0x1000000000000; // 2^48
33674};
33675
33676HmacDRBG.prototype._hmac = function hmac() {
33677 return new hash.hmac(this.hash, this.K);
33678};
33679
33680HmacDRBG.prototype._update = function update(seed) {
33681 var kmac = this._hmac()
33682 .update(this.V)
33683 .update([ 0x00 ]);
33684 if (seed)
33685 kmac = kmac.update(seed);
33686 this.K = kmac.digest();
33687 this.V = this._hmac().update(this.V).digest();
33688 if (!seed)
33689 return;
33690
33691 this.K = this._hmac()
33692 .update(this.V)
33693 .update([ 0x01 ])
33694 .update(seed)
33695 .digest();
33696 this.V = this._hmac().update(this.V).digest();
33697};
33698
33699HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
33700 // Optional entropy enc
33701 if (typeof entropyEnc !== 'string') {
33702 addEnc = add;
33703 add = entropyEnc;
33704 entropyEnc = null;
33705 }
33706
33707 entropy = utils.toBuffer(entropy, entropyEnc);
33708 add = utils.toBuffer(add, addEnc);
33709
33710 assert(entropy.length >= (this.minEntropy / 8),
33711 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
33712
33713 this._update(entropy.concat(add || []));
33714 this.reseed = 1;
33715};
33716
33717HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
33718 if (this.reseed > this.reseedInterval)
33719 throw new Error('Reseed is required');
33720
33721 // Optional encoding
33722 if (typeof enc !== 'string') {
33723 addEnc = add;
33724 add = enc;
33725 enc = null;
33726 }
33727
33728 // Optional additional data
33729 if (add) {
33730 add = utils.toArray(add, addEnc);
33731 this._update(add);
33732 }
33733
33734 var temp = [];
33735 while (temp.length < len) {
33736 this.V = this._hmac().update(this.V).digest();
33737 temp = temp.concat(this.V);
33738 }
33739
33740 var res = temp.slice(0, len);
33741 this._update(add);
33742 this.reseed++;
33743 return utils.encode(res, enc);
33744};
33745
33746},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
33747module.exports = {
33748 doubles: {
33749 step: 4,
33750 points: [
33751 [
33752 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
33753 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
33754 ],
33755 [
33756 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
33757 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
33758 ],
33759 [
33760 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
33761 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
33762 ],
33763 [
33764 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
33765 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
33766 ],
33767 [
33768 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
33769 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
33770 ],
33771 [
33772 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
33773 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
33774 ],
33775 [
33776 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
33777 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
33778 ],
33779 [
33780 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
33781 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
33782 ],
33783 [
33784 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
33785 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
33786 ],
33787 [
33788 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
33789 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
33790 ],
33791 [
33792 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
33793 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
33794 ],
33795 [
33796 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
33797 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
33798 ],
33799 [
33800 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
33801 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
33802 ],
33803 [
33804 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
33805 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
33806 ],
33807 [
33808 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
33809 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
33810 ],
33811 [
33812 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
33813 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
33814 ],
33815 [
33816 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
33817 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
33818 ],
33819 [
33820 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
33821 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
33822 ],
33823 [
33824 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
33825 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
33826 ],
33827 [
33828 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
33829 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
33830 ],
33831 [
33832 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
33833 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
33834 ],
33835 [
33836 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
33837 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
33838 ],
33839 [
33840 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
33841 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
33842 ],
33843 [
33844 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
33845 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
33846 ],
33847 [
33848 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
33849 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
33850 ],
33851 [
33852 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
33853 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
33854 ],
33855 [
33856 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
33857 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
33858 ],
33859 [
33860 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
33861 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
33862 ],
33863 [
33864 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
33865 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
33866 ],
33867 [
33868 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
33869 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
33870 ],
33871 [
33872 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
33873 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
33874 ],
33875 [
33876 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
33877 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
33878 ],
33879 [
33880 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
33881 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
33882 ],
33883 [
33884 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
33885 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
33886 ],
33887 [
33888 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
33889 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
33890 ],
33891 [
33892 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
33893 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
33894 ],
33895 [
33896 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
33897 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
33898 ],
33899 [
33900 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
33901 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
33902 ],
33903 [
33904 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
33905 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
33906 ],
33907 [
33908 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
33909 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
33910 ],
33911 [
33912 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
33913 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
33914 ],
33915 [
33916 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
33917 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
33918 ],
33919 [
33920 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
33921 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
33922 ],
33923 [
33924 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
33925 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
33926 ],
33927 [
33928 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
33929 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
33930 ],
33931 [
33932 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
33933 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
33934 ],
33935 [
33936 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
33937 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
33938 ],
33939 [
33940 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
33941 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
33942 ],
33943 [
33944 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
33945 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
33946 ],
33947 [
33948 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
33949 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
33950 ],
33951 [
33952 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
33953 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
33954 ],
33955 [
33956 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
33957 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
33958 ],
33959 [
33960 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
33961 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
33962 ],
33963 [
33964 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
33965 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
33966 ],
33967 [
33968 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
33969 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
33970 ],
33971 [
33972 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
33973 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
33974 ],
33975 [
33976 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
33977 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
33978 ],
33979 [
33980 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
33981 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
33982 ],
33983 [
33984 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
33985 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
33986 ],
33987 [
33988 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
33989 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
33990 ],
33991 [
33992 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
33993 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
33994 ],
33995 [
33996 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
33997 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
33998 ],
33999 [
34000 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
34001 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
34002 ],
34003 [
34004 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
34005 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
34006 ],
34007 [
34008 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
34009 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
34010 ]
34011 ]
34012 },
34013 naf: {
34014 wnd: 7,
34015 points: [
34016 [
34017 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
34018 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
34019 ],
34020 [
34021 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
34022 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
34023 ],
34024 [
34025 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
34026 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
34027 ],
34028 [
34029 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
34030 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
34031 ],
34032 [
34033 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
34034 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
34035 ],
34036 [
34037 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
34038 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
34039 ],
34040 [
34041 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
34042 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
34043 ],
34044 [
34045 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
34046 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
34047 ],
34048 [
34049 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
34050 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
34051 ],
34052 [
34053 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
34054 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
34055 ],
34056 [
34057 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
34058 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
34059 ],
34060 [
34061 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
34062 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
34063 ],
34064 [
34065 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
34066 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
34067 ],
34068 [
34069 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
34070 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
34071 ],
34072 [
34073 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
34074 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
34075 ],
34076 [
34077 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
34078 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
34079 ],
34080 [
34081 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
34082 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
34083 ],
34084 [
34085 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
34086 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
34087 ],
34088 [
34089 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
34090 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
34091 ],
34092 [
34093 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
34094 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
34095 ],
34096 [
34097 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
34098 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
34099 ],
34100 [
34101 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
34102 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
34103 ],
34104 [
34105 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
34106 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
34107 ],
34108 [
34109 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
34110 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
34111 ],
34112 [
34113 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
34114 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
34115 ],
34116 [
34117 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
34118 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
34119 ],
34120 [
34121 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
34122 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
34123 ],
34124 [
34125 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
34126 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
34127 ],
34128 [
34129 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
34130 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
34131 ],
34132 [
34133 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
34134 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
34135 ],
34136 [
34137 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
34138 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
34139 ],
34140 [
34141 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
34142 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
34143 ],
34144 [
34145 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
34146 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
34147 ],
34148 [
34149 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
34150 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
34151 ],
34152 [
34153 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
34154 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
34155 ],
34156 [
34157 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
34158 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
34159 ],
34160 [
34161 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
34162 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
34163 ],
34164 [
34165 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
34166 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
34167 ],
34168 [
34169 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
34170 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
34171 ],
34172 [
34173 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
34174 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
34175 ],
34176 [
34177 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
34178 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
34179 ],
34180 [
34181 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
34182 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
34183 ],
34184 [
34185 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
34186 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
34187 ],
34188 [
34189 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
34190 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
34191 ],
34192 [
34193 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
34194 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
34195 ],
34196 [
34197 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
34198 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
34199 ],
34200 [
34201 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
34202 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
34203 ],
34204 [
34205 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
34206 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
34207 ],
34208 [
34209 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
34210 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
34211 ],
34212 [
34213 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
34214 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
34215 ],
34216 [
34217 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
34218 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
34219 ],
34220 [
34221 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
34222 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
34223 ],
34224 [
34225 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
34226 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
34227 ],
34228 [
34229 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
34230 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
34231 ],
34232 [
34233 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
34234 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
34235 ],
34236 [
34237 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
34238 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
34239 ],
34240 [
34241 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
34242 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
34243 ],
34244 [
34245 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
34246 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
34247 ],
34248 [
34249 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
34250 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
34251 ],
34252 [
34253 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
34254 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
34255 ],
34256 [
34257 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
34258 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
34259 ],
34260 [
34261 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
34262 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
34263 ],
34264 [
34265 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
34266 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
34267 ],
34268 [
34269 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
34270 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
34271 ],
34272 [
34273 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
34274 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
34275 ],
34276 [
34277 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
34278 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
34279 ],
34280 [
34281 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
34282 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
34283 ],
34284 [
34285 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
34286 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
34287 ],
34288 [
34289 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
34290 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
34291 ],
34292 [
34293 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
34294 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
34295 ],
34296 [
34297 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
34298 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
34299 ],
34300 [
34301 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
34302 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
34303 ],
34304 [
34305 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
34306 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
34307 ],
34308 [
34309 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
34310 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
34311 ],
34312 [
34313 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
34314 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
34315 ],
34316 [
34317 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
34318 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
34319 ],
34320 [
34321 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
34322 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
34323 ],
34324 [
34325 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
34326 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
34327 ],
34328 [
34329 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
34330 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
34331 ],
34332 [
34333 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
34334 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
34335 ],
34336 [
34337 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
34338 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
34339 ],
34340 [
34341 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
34342 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
34343 ],
34344 [
34345 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
34346 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
34347 ],
34348 [
34349 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
34350 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
34351 ],
34352 [
34353 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
34354 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
34355 ],
34356 [
34357 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
34358 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
34359 ],
34360 [
34361 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
34362 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
34363 ],
34364 [
34365 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
34366 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
34367 ],
34368 [
34369 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
34370 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
34371 ],
34372 [
34373 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
34374 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
34375 ],
34376 [
34377 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
34378 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
34379 ],
34380 [
34381 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
34382 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
34383 ],
34384 [
34385 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
34386 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
34387 ],
34388 [
34389 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
34390 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
34391 ],
34392 [
34393 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
34394 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
34395 ],
34396 [
34397 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
34398 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
34399 ],
34400 [
34401 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
34402 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
34403 ],
34404 [
34405 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
34406 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
34407 ],
34408 [
34409 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
34410 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
34411 ],
34412 [
34413 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
34414 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
34415 ],
34416 [
34417 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
34418 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
34419 ],
34420 [
34421 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
34422 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
34423 ],
34424 [
34425 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
34426 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
34427 ],
34428 [
34429 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
34430 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
34431 ],
34432 [
34433 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
34434 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
34435 ],
34436 [
34437 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
34438 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
34439 ],
34440 [
34441 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
34442 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
34443 ],
34444 [
34445 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
34446 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
34447 ],
34448 [
34449 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
34450 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
34451 ],
34452 [
34453 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
34454 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
34455 ],
34456 [
34457 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
34458 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
34459 ],
34460 [
34461 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
34462 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
34463 ],
34464 [
34465 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
34466 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
34467 ],
34468 [
34469 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
34470 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
34471 ],
34472 [
34473 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
34474 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
34475 ],
34476 [
34477 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
34478 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
34479 ],
34480 [
34481 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
34482 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
34483 ],
34484 [
34485 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
34486 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
34487 ],
34488 [
34489 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
34490 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
34491 ],
34492 [
34493 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
34494 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
34495 ],
34496 [
34497 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
34498 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
34499 ],
34500 [
34501 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
34502 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
34503 ],
34504 [
34505 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
34506 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
34507 ],
34508 [
34509 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
34510 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
34511 ],
34512 [
34513 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
34514 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
34515 ],
34516 [
34517 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
34518 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
34519 ],
34520 [
34521 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
34522 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
34523 ]
34524 ]
34525 }
34526};
34527
34528},{}],54:[function(require,module,exports){
34529'use strict';
34530
34531var utils = exports;
34532var BN = require('bn.js');
34533
34534utils.assert = function assert(val, msg) {
34535 if (!val)
34536 throw new Error(msg || 'Assertion failed');
34537};
34538
34539function toArray(msg, enc) {
34540 if (Array.isArray(msg))
34541 return msg.slice();
34542 if (!msg)
34543 return [];
34544 var res = [];
34545 if (typeof msg !== 'string') {
34546 for (var i = 0; i < msg.length; i++)
34547 res[i] = msg[i] | 0;
34548 return res;
34549 }
34550 if (!enc) {
34551 for (var i = 0; i < msg.length; i++) {
34552 var c = msg.charCodeAt(i);
34553 var hi = c >> 8;
34554 var lo = c & 0xff;
34555 if (hi)
34556 res.push(hi, lo);
34557 else
34558 res.push(lo);
34559 }
34560 } else if (enc === 'hex') {
34561 msg = msg.replace(/[^a-z0-9]+/ig, '');
34562 if (msg.length % 2 !== 0)
34563 msg = '0' + msg;
34564 for (var i = 0; i < msg.length; i += 2)
34565 res.push(parseInt(msg[i] + msg[i + 1], 16));
34566 }
34567 return res;
34568}
34569utils.toArray = toArray;
34570
34571function zero2(word) {
34572 if (word.length === 1)
34573 return '0' + word;
34574 else
34575 return word;
34576}
34577utils.zero2 = zero2;
34578
34579function toHex(msg) {
34580 var res = '';
34581 for (var i = 0; i < msg.length; i++)
34582 res += zero2(msg[i].toString(16));
34583 return res;
34584}
34585utils.toHex = toHex;
34586
34587utils.encode = function encode(arr, enc) {
34588 if (enc === 'hex')
34589 return toHex(arr);
34590 else
34591 return arr;
34592};
34593
34594// Represent num in a w-NAF form
34595function getNAF(num, w) {
34596 var naf = [];
34597 var ws = 1 << (w + 1);
34598 var k = num.clone();
34599 while (k.cmpn(1) >= 0) {
34600 var z;
34601 if (k.isOdd()) {
34602 var mod = k.andln(ws - 1);
34603 if (mod > (ws >> 1) - 1)
34604 z = (ws >> 1) - mod;
34605 else
34606 z = mod;
34607 k.isubn(z);
34608 } else {
34609 z = 0;
34610 }
34611 naf.push(z);
34612
34613 // Optimization, shift by word if possible
34614 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
34615 for (var i = 1; i < shift; i++)
34616 naf.push(0);
34617 k.iushrn(shift);
34618 }
34619
34620 return naf;
34621}
34622utils.getNAF = getNAF;
34623
34624// Represent k1, k2 in a Joint Sparse Form
34625function getJSF(k1, k2) {
34626 var jsf = [
34627 [],
34628 []
34629 ];
34630
34631 k1 = k1.clone();
34632 k2 = k2.clone();
34633 var d1 = 0;
34634 var d2 = 0;
34635 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
34636
34637 // First phase
34638 var m14 = (k1.andln(3) + d1) & 3;
34639 var m24 = (k2.andln(3) + d2) & 3;
34640 if (m14 === 3)
34641 m14 = -1;
34642 if (m24 === 3)
34643 m24 = -1;
34644 var u1;
34645 if ((m14 & 1) === 0) {
34646 u1 = 0;
34647 } else {
34648 var m8 = (k1.andln(7) + d1) & 7;
34649 if ((m8 === 3 || m8 === 5) && m24 === 2)
34650 u1 = -m14;
34651 else
34652 u1 = m14;
34653 }
34654 jsf[0].push(u1);
34655
34656 var u2;
34657 if ((m24 & 1) === 0) {
34658 u2 = 0;
34659 } else {
34660 var m8 = (k2.andln(7) + d2) & 7;
34661 if ((m8 === 3 || m8 === 5) && m14 === 2)
34662 u2 = -m24;
34663 else
34664 u2 = m24;
34665 }
34666 jsf[1].push(u2);
34667
34668 // Second phase
34669 if (2 * d1 === u1 + 1)
34670 d1 = 1 - d1;
34671 if (2 * d2 === u2 + 1)
34672 d2 = 1 - d2;
34673 k1.iushrn(1);
34674 k2.iushrn(1);
34675 }
34676
34677 return jsf;
34678}
34679utils.getJSF = getJSF;
34680
34681function cachedProperty(obj, name, computer) {
34682 var key = '_' + name;
34683 obj.prototype[name] = function cachedProperty() {
34684 return this[key] !== undefined ? this[key] :
34685 this[key] = computer.call(this);
34686 };
34687}
34688utils.cachedProperty = cachedProperty;
34689
34690function parseBytes(bytes) {
34691 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
34692 bytes;
34693}
34694utils.parseBytes = parseBytes;
34695
34696function intFromLE(bytes) {
34697 return new BN(bytes, 'hex', 'le');
34698}
34699utils.intFromLE = intFromLE;
34700
34701
34702},{"bn.js":33}],55:[function(require,module,exports){
34703module.exports={
34704 "_args": [
34705 [
34706 {
34707 "raw": "elliptic@^6.2.3",
34708 "scope": null,
34709 "escapedName": "elliptic",
34710 "name": "elliptic",
34711 "rawSpec": "^6.2.3",
34712 "spec": ">=6.2.3 <7.0.0",
34713 "type": "range"
34714 },
34715 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
34716 ]
34717 ],
34718 "_from": "elliptic@>=6.2.3 <7.0.0",
34719 "_id": "elliptic@6.3.3",
34720 "_inCache": true,
34721 "_location": "/elliptic",
34722 "_nodeVersion": "7.0.0",
34723 "_npmOperationalInternal": {
34724 "host": "packages-18-east.internal.npmjs.com",
34725 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
34726 },
34727 "_npmUser": {
34728 "name": "indutny",
34729 "email": "fedor@indutny.com"
34730 },
34731 "_npmVersion": "3.10.8",
34732 "_phantomChildren": {},
34733 "_requested": {
34734 "raw": "elliptic@^6.2.3",
34735 "scope": null,
34736 "escapedName": "elliptic",
34737 "name": "elliptic",
34738 "rawSpec": "^6.2.3",
34739 "spec": ">=6.2.3 <7.0.0",
34740 "type": "range"
34741 },
34742 "_requiredBy": [
34743 "/browserify-sign",
34744 "/create-ecdh",
34745 "/secp256k1"
34746 ],
34747 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
34748 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34749 "_shrinkwrap": null,
34750 "_spec": "elliptic@^6.2.3",
34751 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
34752 "author": {
34753 "name": "Fedor Indutny",
34754 "email": "fedor@indutny.com"
34755 },
34756 "bugs": {
34757 "url": "https://github.com/indutny/elliptic/issues"
34758 },
34759 "dependencies": {
34760 "bn.js": "^4.4.0",
34761 "brorand": "^1.0.1",
34762 "hash.js": "^1.0.0",
34763 "inherits": "^2.0.1"
34764 },
34765 "description": "EC cryptography",
34766 "devDependencies": {
34767 "brfs": "^1.4.3",
34768 "coveralls": "^2.11.3",
34769 "grunt": "^0.4.5",
34770 "grunt-browserify": "^5.0.0",
34771 "grunt-cli": "^1.2.0",
34772 "grunt-contrib-connect": "^1.0.0",
34773 "grunt-contrib-copy": "^1.0.0",
34774 "grunt-contrib-uglify": "^1.0.1",
34775 "grunt-mocha-istanbul": "^3.0.1",
34776 "grunt-saucelabs": "^8.6.2",
34777 "istanbul": "^0.4.2",
34778 "jscs": "^2.9.0",
34779 "jshint": "^2.6.0",
34780 "mocha": "^2.1.0"
34781 },
34782 "directories": {},
34783 "dist": {
34784 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34785 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
34786 },
34787 "files": [
34788 "lib"
34789 ],
34790 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
34791 "homepage": "https://github.com/indutny/elliptic",
34792 "keywords": [
34793 "EC",
34794 "Elliptic",
34795 "curve",
34796 "Cryptography"
34797 ],
34798 "license": "MIT",
34799 "main": "lib/elliptic.js",
34800 "maintainers": [
34801 {
34802 "name": "indutny",
34803 "email": "fedor@indutny.com"
34804 }
34805 ],
34806 "name": "elliptic",
34807 "optionalDependencies": {},
34808 "readme": "ERROR: No README data found!",
34809 "repository": {
34810 "type": "git",
34811 "url": "git+ssh://git@github.com/indutny/elliptic.git"
34812 },
34813 "scripts": {
34814 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34815 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34816 "lint": "npm run jscs && npm run jshint",
34817 "test": "npm run lint && npm run unit",
34818 "unit": "istanbul test _mocha --reporter=spec test/index.js",
34819 "version": "grunt dist && git add dist/"
34820 },
34821 "version": "6.3.3"
34822}
34823
34824},{}],56:[function(require,module,exports){
34825(function (Buffer){
34826'use strict';
34827
34828var isHexPrefixed = require('is-hex-prefixed');
34829var stripHexPrefix = require('strip-hex-prefix');
34830
34831/**
34832 * Pads a `String` to have an even length
34833 * @param {String} value
34834 * @return {String} output
34835 */
34836function padToEven(value) {
34837 var a = value; // eslint-disable-line
34838
34839 if (typeof a !== 'string') {
34840 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
34841 }
34842
34843 if (a.length % 2) {
34844 a = '0' + a;
34845 }
34846
34847 return a;
34848}
34849
34850/**
34851 * Converts a `Number` into a hex `String`
34852 * @param {Number} i
34853 * @return {String}
34854 */
34855function intToHex(i) {
34856 var hex = i.toString(16); // eslint-disable-line
34857
34858 return '0x' + padToEven(hex);
34859}
34860
34861/**
34862 * Converts an `Number` to a `Buffer`
34863 * @param {Number} i
34864 * @return {Buffer}
34865 */
34866function intToBuffer(i) {
34867 var hex = intToHex(i);
34868
34869 return new Buffer(hex.slice(2), 'hex');
34870}
34871
34872/**
34873 * Get the binary size of a string
34874 * @param {String} str
34875 * @return {Number}
34876 */
34877function getBinarySize(str) {
34878 if (typeof str !== 'string') {
34879 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
34880 }
34881
34882 return Buffer.byteLength(str, 'utf8');
34883}
34884
34885/**
34886 * Returns TRUE if the first specified array contains all elements
34887 * from the second one. FALSE otherwise.
34888 *
34889 * @param {array} superset
34890 * @param {array} subset
34891 *
34892 * @returns {boolean}
34893 */
34894function arrayContainsArray(superset, subset, some) {
34895 if (Array.isArray(superset) !== true) {
34896 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
34897 }
34898 if (Array.isArray(subset) !== true) {
34899 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
34900 }
34901
34902 return subset[Boolean(some) && 'some' || 'every'](function (value) {
34903 return superset.indexOf(value) >= 0;
34904 });
34905}
34906
34907/**
34908 * Should be called to get utf8 from it's hex representation
34909 *
34910 * @method toUtf8
34911 * @param {String} string in hex
34912 * @returns {String} ascii string representation of hex value
34913 */
34914function toUtf8(hex) {
34915 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
34916
34917 return bufferValue.toString('utf8');
34918}
34919
34920/**
34921 * Should be called to get ascii from it's hex representation
34922 *
34923 * @method toAscii
34924 * @param {String} string in hex
34925 * @returns {String} ascii string representation of hex value
34926 */
34927function toAscii(hex) {
34928 var str = ''; // eslint-disable-line
34929 var i = 0,
34930 l = hex.length; // eslint-disable-line
34931
34932 if (hex.substring(0, 2) === '0x') {
34933 i = 2;
34934 }
34935
34936 for (; i < l; i += 2) {
34937 var code = parseInt(hex.substr(i, 2), 16);
34938 str += String.fromCharCode(code);
34939 }
34940
34941 return str;
34942}
34943
34944/**
34945 * Should be called to get hex representation (prefixed by 0x) of utf8 string
34946 *
34947 * @method fromUtf8
34948 * @param {String} string
34949 * @param {Number} optional padding
34950 * @returns {String} hex representation of input string
34951 */
34952function fromUtf8(stringValue) {
34953 var str = new Buffer(stringValue, 'utf8');
34954
34955 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
34956}
34957
34958/**
34959 * Should be called to get hex representation (prefixed by 0x) of ascii string
34960 *
34961 * @method fromAscii
34962 * @param {String} string
34963 * @param {Number} optional padding
34964 * @returns {String} hex representation of input string
34965 */
34966function fromAscii(stringValue) {
34967 var hex = ''; // eslint-disable-line
34968 for (var i = 0; i < stringValue.length; i++) {
34969 // eslint-disable-line
34970 var code = stringValue.charCodeAt(i);
34971 var n = code.toString(16);
34972 hex += n.length < 2 ? '0' + n : n;
34973 }
34974
34975 return '0x' + hex;
34976}
34977
34978/**
34979 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
34980 *
34981 * @method getKeys get specific key from inner object array of objects
34982 * @param {String} params
34983 * @param {String} key
34984 * @param {Boolean} allowEmpty
34985 * @returns {Array} output just a simple array of output keys
34986 */
34987function getKeys(params, key, allowEmpty) {
34988 if (!Array.isArray(params)) {
34989 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
34990 }
34991 if (typeof key !== 'string') {
34992 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
34993 }
34994
34995 var result = []; // eslint-disable-line
34996
34997 for (var i = 0; i < params.length; i++) {
34998 // eslint-disable-line
34999 var value = params[i][key]; // eslint-disable-line
35000 if (allowEmpty && !value) {
35001 value = '';
35002 } else if (typeof value !== 'string') {
35003 throw new Error('invalid abi');
35004 }
35005 result.push(value);
35006 }
35007
35008 return result;
35009}
35010
35011/**
35012 * Is the string a hex string.
35013 *
35014 * @method check if string is hex string of specific length
35015 * @param {String} value
35016 * @param {Number} length
35017 * @returns {Boolean} output the string is a hex string
35018 */
35019function isHexString(value, length) {
35020 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
35021 return false;
35022 }
35023
35024 if (length && value.length !== 2 + 2 * length) {
35025 return false;
35026 }
35027
35028 return true;
35029}
35030
35031module.exports = {
35032 arrayContainsArray: arrayContainsArray,
35033 intToBuffer: intToBuffer,
35034 getBinarySize: getBinarySize,
35035 isHexPrefixed: isHexPrefixed,
35036 stripHexPrefix: stripHexPrefix,
35037 padToEven: padToEven,
35038 intToHex: intToHex,
35039 fromAscii: fromAscii,
35040 fromUtf8: fromUtf8,
35041 toAscii: toAscii,
35042 toUtf8: toUtf8,
35043 getKeys: getKeys,
35044 isHexString: isHexString
35045};
35046}).call(this,require("buffer").Buffer)
35047},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
35048var hash = exports;
35049
35050hash.utils = require('./hash/utils');
35051hash.common = require('./hash/common');
35052hash.sha = require('./hash/sha');
35053hash.ripemd = require('./hash/ripemd');
35054hash.hmac = require('./hash/hmac');
35055
35056// Proxy hash functions to the main object
35057hash.sha1 = hash.sha.sha1;
35058hash.sha256 = hash.sha.sha256;
35059hash.sha224 = hash.sha.sha224;
35060hash.sha384 = hash.sha.sha384;
35061hash.sha512 = hash.sha.sha512;
35062hash.ripemd160 = hash.ripemd.ripemd160;
35063
35064},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
35065var hash = require('../hash');
35066var utils = hash.utils;
35067var assert = utils.assert;
35068
35069function BlockHash() {
35070 this.pending = null;
35071 this.pendingTotal = 0;
35072 this.blockSize = this.constructor.blockSize;
35073 this.outSize = this.constructor.outSize;
35074 this.hmacStrength = this.constructor.hmacStrength;
35075 this.padLength = this.constructor.padLength / 8;
35076 this.endian = 'big';
35077
35078 this._delta8 = this.blockSize / 8;
35079 this._delta32 = this.blockSize / 32;
35080}
35081exports.BlockHash = BlockHash;
35082
35083BlockHash.prototype.update = function update(msg, enc) {
35084 // Convert message to array, pad it, and join into 32bit blocks
35085 msg = utils.toArray(msg, enc);
35086 if (!this.pending)
35087 this.pending = msg;
35088 else
35089 this.pending = this.pending.concat(msg);
35090 this.pendingTotal += msg.length;
35091
35092 // Enough data, try updating
35093 if (this.pending.length >= this._delta8) {
35094 msg = this.pending;
35095
35096 // Process pending data in blocks
35097 var r = msg.length % this._delta8;
35098 this.pending = msg.slice(msg.length - r, msg.length);
35099 if (this.pending.length === 0)
35100 this.pending = null;
35101
35102 msg = utils.join32(msg, 0, msg.length - r, this.endian);
35103 for (var i = 0; i < msg.length; i += this._delta32)
35104 this._update(msg, i, i + this._delta32);
35105 }
35106
35107 return this;
35108};
35109
35110BlockHash.prototype.digest = function digest(enc) {
35111 this.update(this._pad());
35112 assert(this.pending === null);
35113
35114 return this._digest(enc);
35115};
35116
35117BlockHash.prototype._pad = function pad() {
35118 var len = this.pendingTotal;
35119 var bytes = this._delta8;
35120 var k = bytes - ((len + this.padLength) % bytes);
35121 var res = new Array(k + this.padLength);
35122 res[0] = 0x80;
35123 for (var i = 1; i < k; i++)
35124 res[i] = 0;
35125
35126 // Append length
35127 len <<= 3;
35128 if (this.endian === 'big') {
35129 for (var t = 8; t < this.padLength; t++)
35130 res[i++] = 0;
35131
35132 res[i++] = 0;
35133 res[i++] = 0;
35134 res[i++] = 0;
35135 res[i++] = 0;
35136 res[i++] = (len >>> 24) & 0xff;
35137 res[i++] = (len >>> 16) & 0xff;
35138 res[i++] = (len >>> 8) & 0xff;
35139 res[i++] = len & 0xff;
35140 } else {
35141 res[i++] = len & 0xff;
35142 res[i++] = (len >>> 8) & 0xff;
35143 res[i++] = (len >>> 16) & 0xff;
35144 res[i++] = (len >>> 24) & 0xff;
35145 res[i++] = 0;
35146 res[i++] = 0;
35147 res[i++] = 0;
35148 res[i++] = 0;
35149
35150 for (var t = 8; t < this.padLength; t++)
35151 res[i++] = 0;
35152 }
35153
35154 return res;
35155};
35156
35157},{"../hash":57}],59:[function(require,module,exports){
35158var hmac = exports;
35159
35160var hash = require('../hash');
35161var utils = hash.utils;
35162var assert = utils.assert;
35163
35164function Hmac(hash, key, enc) {
35165 if (!(this instanceof Hmac))
35166 return new Hmac(hash, key, enc);
35167 this.Hash = hash;
35168 this.blockSize = hash.blockSize / 8;
35169 this.outSize = hash.outSize / 8;
35170 this.inner = null;
35171 this.outer = null;
35172
35173 this._init(utils.toArray(key, enc));
35174}
35175module.exports = Hmac;
35176
35177Hmac.prototype._init = function init(key) {
35178 // Shorten key, if needed
35179 if (key.length > this.blockSize)
35180 key = new this.Hash().update(key).digest();
35181 assert(key.length <= this.blockSize);
35182
35183 // Add padding to key
35184 for (var i = key.length; i < this.blockSize; i++)
35185 key.push(0);
35186
35187 for (var i = 0; i < key.length; i++)
35188 key[i] ^= 0x36;
35189 this.inner = new this.Hash().update(key);
35190
35191 // 0x36 ^ 0x5c = 0x6a
35192 for (var i = 0; i < key.length; i++)
35193 key[i] ^= 0x6a;
35194 this.outer = new this.Hash().update(key);
35195};
35196
35197Hmac.prototype.update = function update(msg, enc) {
35198 this.inner.update(msg, enc);
35199 return this;
35200};
35201
35202Hmac.prototype.digest = function digest(enc) {
35203 this.outer.update(this.inner.digest());
35204 return this.outer.digest(enc);
35205};
35206
35207},{"../hash":57}],60:[function(require,module,exports){
35208var hash = require('../hash');
35209var utils = hash.utils;
35210
35211var rotl32 = utils.rotl32;
35212var sum32 = utils.sum32;
35213var sum32_3 = utils.sum32_3;
35214var sum32_4 = utils.sum32_4;
35215var BlockHash = hash.common.BlockHash;
35216
35217function RIPEMD160() {
35218 if (!(this instanceof RIPEMD160))
35219 return new RIPEMD160();
35220
35221 BlockHash.call(this);
35222
35223 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
35224 this.endian = 'little';
35225}
35226utils.inherits(RIPEMD160, BlockHash);
35227exports.ripemd160 = RIPEMD160;
35228
35229RIPEMD160.blockSize = 512;
35230RIPEMD160.outSize = 160;
35231RIPEMD160.hmacStrength = 192;
35232RIPEMD160.padLength = 64;
35233
35234RIPEMD160.prototype._update = function update(msg, start) {
35235 var A = this.h[0];
35236 var B = this.h[1];
35237 var C = this.h[2];
35238 var D = this.h[3];
35239 var E = this.h[4];
35240 var Ah = A;
35241 var Bh = B;
35242 var Ch = C;
35243 var Dh = D;
35244 var Eh = E;
35245 for (var j = 0; j < 80; j++) {
35246 var T = sum32(
35247 rotl32(
35248 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
35249 s[j]),
35250 E);
35251 A = E;
35252 E = D;
35253 D = rotl32(C, 10);
35254 C = B;
35255 B = T;
35256 T = sum32(
35257 rotl32(
35258 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
35259 sh[j]),
35260 Eh);
35261 Ah = Eh;
35262 Eh = Dh;
35263 Dh = rotl32(Ch, 10);
35264 Ch = Bh;
35265 Bh = T;
35266 }
35267 T = sum32_3(this.h[1], C, Dh);
35268 this.h[1] = sum32_3(this.h[2], D, Eh);
35269 this.h[2] = sum32_3(this.h[3], E, Ah);
35270 this.h[3] = sum32_3(this.h[4], A, Bh);
35271 this.h[4] = sum32_3(this.h[0], B, Ch);
35272 this.h[0] = T;
35273};
35274
35275RIPEMD160.prototype._digest = function digest(enc) {
35276 if (enc === 'hex')
35277 return utils.toHex32(this.h, 'little');
35278 else
35279 return utils.split32(this.h, 'little');
35280};
35281
35282function f(j, x, y, z) {
35283 if (j <= 15)
35284 return x ^ y ^ z;
35285 else if (j <= 31)
35286 return (x & y) | ((~x) & z);
35287 else if (j <= 47)
35288 return (x | (~y)) ^ z;
35289 else if (j <= 63)
35290 return (x & z) | (y & (~z));
35291 else
35292 return x ^ (y | (~z));
35293}
35294
35295function K(j) {
35296 if (j <= 15)
35297 return 0x00000000;
35298 else if (j <= 31)
35299 return 0x5a827999;
35300 else if (j <= 47)
35301 return 0x6ed9eba1;
35302 else if (j <= 63)
35303 return 0x8f1bbcdc;
35304 else
35305 return 0xa953fd4e;
35306}
35307
35308function Kh(j) {
35309 if (j <= 15)
35310 return 0x50a28be6;
35311 else if (j <= 31)
35312 return 0x5c4dd124;
35313 else if (j <= 47)
35314 return 0x6d703ef3;
35315 else if (j <= 63)
35316 return 0x7a6d76e9;
35317 else
35318 return 0x00000000;
35319}
35320
35321var r = [
35322 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
35323 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
35324 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
35325 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
35326 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
35327];
35328
35329var rh = [
35330 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
35331 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
35332 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
35333 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
35334 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
35335];
35336
35337var s = [
35338 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
35339 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
35340 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
35341 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
35342 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
35343];
35344
35345var sh = [
35346 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
35347 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
35348 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
35349 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
35350 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
35351];
35352
35353},{"../hash":57}],61:[function(require,module,exports){
35354var hash = require('../hash');
35355var utils = hash.utils;
35356var assert = utils.assert;
35357
35358var rotr32 = utils.rotr32;
35359var rotl32 = utils.rotl32;
35360var sum32 = utils.sum32;
35361var sum32_4 = utils.sum32_4;
35362var sum32_5 = utils.sum32_5;
35363var rotr64_hi = utils.rotr64_hi;
35364var rotr64_lo = utils.rotr64_lo;
35365var shr64_hi = utils.shr64_hi;
35366var shr64_lo = utils.shr64_lo;
35367var sum64 = utils.sum64;
35368var sum64_hi = utils.sum64_hi;
35369var sum64_lo = utils.sum64_lo;
35370var sum64_4_hi = utils.sum64_4_hi;
35371var sum64_4_lo = utils.sum64_4_lo;
35372var sum64_5_hi = utils.sum64_5_hi;
35373var sum64_5_lo = utils.sum64_5_lo;
35374var BlockHash = hash.common.BlockHash;
35375
35376var sha256_K = [
35377 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
35378 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
35379 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
35380 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
35381 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
35382 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
35383 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
35384 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
35385 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
35386 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
35387 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
35388 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
35389 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
35390 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
35391 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
35392 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
35393];
35394
35395var sha512_K = [
35396 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35397 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35398 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35399 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35400 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35401 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35402 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35403 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35404 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35405 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35406 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35407 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35408 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35409 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35410 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35411 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35412 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35413 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35414 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35415 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35416 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35417 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35418 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35419 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35420 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35421 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35422 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35423 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35424 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35425 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35426 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35427 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35428 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35429 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35430 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35431 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35432 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
35433 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
35434 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
35435 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
35436];
35437
35438var sha1_K = [
35439 0x5A827999, 0x6ED9EBA1,
35440 0x8F1BBCDC, 0xCA62C1D6
35441];
35442
35443function SHA256() {
35444 if (!(this instanceof SHA256))
35445 return new SHA256();
35446
35447 BlockHash.call(this);
35448 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
35449 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
35450 this.k = sha256_K;
35451 this.W = new Array(64);
35452}
35453utils.inherits(SHA256, BlockHash);
35454exports.sha256 = SHA256;
35455
35456SHA256.blockSize = 512;
35457SHA256.outSize = 256;
35458SHA256.hmacStrength = 192;
35459SHA256.padLength = 64;
35460
35461SHA256.prototype._update = function _update(msg, start) {
35462 var W = this.W;
35463
35464 for (var i = 0; i < 16; i++)
35465 W[i] = msg[start + i];
35466 for (; i < W.length; i++)
35467 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
35468
35469 var a = this.h[0];
35470 var b = this.h[1];
35471 var c = this.h[2];
35472 var d = this.h[3];
35473 var e = this.h[4];
35474 var f = this.h[5];
35475 var g = this.h[6];
35476 var h = this.h[7];
35477
35478 assert(this.k.length === W.length);
35479 for (var i = 0; i < W.length; i++) {
35480 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
35481 var T2 = sum32(s0_256(a), maj32(a, b, c));
35482 h = g;
35483 g = f;
35484 f = e;
35485 e = sum32(d, T1);
35486 d = c;
35487 c = b;
35488 b = a;
35489 a = sum32(T1, T2);
35490 }
35491
35492 this.h[0] = sum32(this.h[0], a);
35493 this.h[1] = sum32(this.h[1], b);
35494 this.h[2] = sum32(this.h[2], c);
35495 this.h[3] = sum32(this.h[3], d);
35496 this.h[4] = sum32(this.h[4], e);
35497 this.h[5] = sum32(this.h[5], f);
35498 this.h[6] = sum32(this.h[6], g);
35499 this.h[7] = sum32(this.h[7], h);
35500};
35501
35502SHA256.prototype._digest = function digest(enc) {
35503 if (enc === 'hex')
35504 return utils.toHex32(this.h, 'big');
35505 else
35506 return utils.split32(this.h, 'big');
35507};
35508
35509function SHA224() {
35510 if (!(this instanceof SHA224))
35511 return new SHA224();
35512
35513 SHA256.call(this);
35514 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
35515 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
35516}
35517utils.inherits(SHA224, SHA256);
35518exports.sha224 = SHA224;
35519
35520SHA224.blockSize = 512;
35521SHA224.outSize = 224;
35522SHA224.hmacStrength = 192;
35523SHA224.padLength = 64;
35524
35525SHA224.prototype._digest = function digest(enc) {
35526 // Just truncate output
35527 if (enc === 'hex')
35528 return utils.toHex32(this.h.slice(0, 7), 'big');
35529 else
35530 return utils.split32(this.h.slice(0, 7), 'big');
35531};
35532
35533function SHA512() {
35534 if (!(this instanceof SHA512))
35535 return new SHA512();
35536
35537 BlockHash.call(this);
35538 this.h = [ 0x6a09e667, 0xf3bcc908,
35539 0xbb67ae85, 0x84caa73b,
35540 0x3c6ef372, 0xfe94f82b,
35541 0xa54ff53a, 0x5f1d36f1,
35542 0x510e527f, 0xade682d1,
35543 0x9b05688c, 0x2b3e6c1f,
35544 0x1f83d9ab, 0xfb41bd6b,
35545 0x5be0cd19, 0x137e2179 ];
35546 this.k = sha512_K;
35547 this.W = new Array(160);
35548}
35549utils.inherits(SHA512, BlockHash);
35550exports.sha512 = SHA512;
35551
35552SHA512.blockSize = 1024;
35553SHA512.outSize = 512;
35554SHA512.hmacStrength = 192;
35555SHA512.padLength = 128;
35556
35557SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
35558 var W = this.W;
35559
35560 // 32 x 32bit words
35561 for (var i = 0; i < 32; i++)
35562 W[i] = msg[start + i];
35563 for (; i < W.length; i += 2) {
35564 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
35565 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
35566 var c1_hi = W[i - 14]; // i - 7
35567 var c1_lo = W[i - 13];
35568 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
35569 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
35570 var c3_hi = W[i - 32]; // i - 16
35571 var c3_lo = W[i - 31];
35572
35573 W[i] = sum64_4_hi(c0_hi, c0_lo,
35574 c1_hi, c1_lo,
35575 c2_hi, c2_lo,
35576 c3_hi, c3_lo);
35577 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
35578 c1_hi, c1_lo,
35579 c2_hi, c2_lo,
35580 c3_hi, c3_lo);
35581 }
35582};
35583
35584SHA512.prototype._update = function _update(msg, start) {
35585 this._prepareBlock(msg, start);
35586
35587 var W = this.W;
35588
35589 var ah = this.h[0];
35590 var al = this.h[1];
35591 var bh = this.h[2];
35592 var bl = this.h[3];
35593 var ch = this.h[4];
35594 var cl = this.h[5];
35595 var dh = this.h[6];
35596 var dl = this.h[7];
35597 var eh = this.h[8];
35598 var el = this.h[9];
35599 var fh = this.h[10];
35600 var fl = this.h[11];
35601 var gh = this.h[12];
35602 var gl = this.h[13];
35603 var hh = this.h[14];
35604 var hl = this.h[15];
35605
35606 assert(this.k.length === W.length);
35607 for (var i = 0; i < W.length; i += 2) {
35608 var c0_hi = hh;
35609 var c0_lo = hl;
35610 var c1_hi = s1_512_hi(eh, el);
35611 var c1_lo = s1_512_lo(eh, el);
35612 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
35613 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
35614 var c3_hi = this.k[i];
35615 var c3_lo = this.k[i + 1];
35616 var c4_hi = W[i];
35617 var c4_lo = W[i + 1];
35618
35619 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
35620 c1_hi, c1_lo,
35621 c2_hi, c2_lo,
35622 c3_hi, c3_lo,
35623 c4_hi, c4_lo);
35624 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
35625 c1_hi, c1_lo,
35626 c2_hi, c2_lo,
35627 c3_hi, c3_lo,
35628 c4_hi, c4_lo);
35629
35630 var c0_hi = s0_512_hi(ah, al);
35631 var c0_lo = s0_512_lo(ah, al);
35632 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
35633 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
35634
35635 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
35636 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
35637
35638 hh = gh;
35639 hl = gl;
35640
35641 gh = fh;
35642 gl = fl;
35643
35644 fh = eh;
35645 fl = el;
35646
35647 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
35648 el = sum64_lo(dl, dl, T1_hi, T1_lo);
35649
35650 dh = ch;
35651 dl = cl;
35652
35653 ch = bh;
35654 cl = bl;
35655
35656 bh = ah;
35657 bl = al;
35658
35659 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
35660 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
35661 }
35662
35663 sum64(this.h, 0, ah, al);
35664 sum64(this.h, 2, bh, bl);
35665 sum64(this.h, 4, ch, cl);
35666 sum64(this.h, 6, dh, dl);
35667 sum64(this.h, 8, eh, el);
35668 sum64(this.h, 10, fh, fl);
35669 sum64(this.h, 12, gh, gl);
35670 sum64(this.h, 14, hh, hl);
35671};
35672
35673SHA512.prototype._digest = function digest(enc) {
35674 if (enc === 'hex')
35675 return utils.toHex32(this.h, 'big');
35676 else
35677 return utils.split32(this.h, 'big');
35678};
35679
35680function SHA384() {
35681 if (!(this instanceof SHA384))
35682 return new SHA384();
35683
35684 SHA512.call(this);
35685 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
35686 0x629a292a, 0x367cd507,
35687 0x9159015a, 0x3070dd17,
35688 0x152fecd8, 0xf70e5939,
35689 0x67332667, 0xffc00b31,
35690 0x8eb44a87, 0x68581511,
35691 0xdb0c2e0d, 0x64f98fa7,
35692 0x47b5481d, 0xbefa4fa4 ];
35693}
35694utils.inherits(SHA384, SHA512);
35695exports.sha384 = SHA384;
35696
35697SHA384.blockSize = 1024;
35698SHA384.outSize = 384;
35699SHA384.hmacStrength = 192;
35700SHA384.padLength = 128;
35701
35702SHA384.prototype._digest = function digest(enc) {
35703 if (enc === 'hex')
35704 return utils.toHex32(this.h.slice(0, 12), 'big');
35705 else
35706 return utils.split32(this.h.slice(0, 12), 'big');
35707};
35708
35709function SHA1() {
35710 if (!(this instanceof SHA1))
35711 return new SHA1();
35712
35713 BlockHash.call(this);
35714 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
35715 0x10325476, 0xc3d2e1f0 ];
35716 this.W = new Array(80);
35717}
35718
35719utils.inherits(SHA1, BlockHash);
35720exports.sha1 = SHA1;
35721
35722SHA1.blockSize = 512;
35723SHA1.outSize = 160;
35724SHA1.hmacStrength = 80;
35725SHA1.padLength = 64;
35726
35727SHA1.prototype._update = function _update(msg, start) {
35728 var W = this.W;
35729
35730 for (var i = 0; i < 16; i++)
35731 W[i] = msg[start + i];
35732
35733 for(; i < W.length; i++)
35734 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
35735
35736 var a = this.h[0];
35737 var b = this.h[1];
35738 var c = this.h[2];
35739 var d = this.h[3];
35740 var e = this.h[4];
35741
35742 for (var i = 0; i < W.length; i++) {
35743 var s = ~~(i / 20);
35744 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
35745 e = d;
35746 d = c;
35747 c = rotl32(b, 30);
35748 b = a;
35749 a = t;
35750 }
35751
35752 this.h[0] = sum32(this.h[0], a);
35753 this.h[1] = sum32(this.h[1], b);
35754 this.h[2] = sum32(this.h[2], c);
35755 this.h[3] = sum32(this.h[3], d);
35756 this.h[4] = sum32(this.h[4], e);
35757};
35758
35759SHA1.prototype._digest = function digest(enc) {
35760 if (enc === 'hex')
35761 return utils.toHex32(this.h, 'big');
35762 else
35763 return utils.split32(this.h, 'big');
35764};
35765
35766function ch32(x, y, z) {
35767 return (x & y) ^ ((~x) & z);
35768}
35769
35770function maj32(x, y, z) {
35771 return (x & y) ^ (x & z) ^ (y & z);
35772}
35773
35774function p32(x, y, z) {
35775 return x ^ y ^ z;
35776}
35777
35778function s0_256(x) {
35779 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
35780}
35781
35782function s1_256(x) {
35783 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
35784}
35785
35786function g0_256(x) {
35787 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
35788}
35789
35790function g1_256(x) {
35791 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
35792}
35793
35794function ft_1(s, x, y, z) {
35795 if (s === 0)
35796 return ch32(x, y, z);
35797 if (s === 1 || s === 3)
35798 return p32(x, y, z);
35799 if (s === 2)
35800 return maj32(x, y, z);
35801}
35802
35803function ch64_hi(xh, xl, yh, yl, zh, zl) {
35804 var r = (xh & yh) ^ ((~xh) & zh);
35805 if (r < 0)
35806 r += 0x100000000;
35807 return r;
35808}
35809
35810function ch64_lo(xh, xl, yh, yl, zh, zl) {
35811 var r = (xl & yl) ^ ((~xl) & zl);
35812 if (r < 0)
35813 r += 0x100000000;
35814 return r;
35815}
35816
35817function maj64_hi(xh, xl, yh, yl, zh, zl) {
35818 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
35819 if (r < 0)
35820 r += 0x100000000;
35821 return r;
35822}
35823
35824function maj64_lo(xh, xl, yh, yl, zh, zl) {
35825 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
35826 if (r < 0)
35827 r += 0x100000000;
35828 return r;
35829}
35830
35831function s0_512_hi(xh, xl) {
35832 var c0_hi = rotr64_hi(xh, xl, 28);
35833 var c1_hi = rotr64_hi(xl, xh, 2); // 34
35834 var c2_hi = rotr64_hi(xl, xh, 7); // 39
35835
35836 var r = c0_hi ^ c1_hi ^ c2_hi;
35837 if (r < 0)
35838 r += 0x100000000;
35839 return r;
35840}
35841
35842function s0_512_lo(xh, xl) {
35843 var c0_lo = rotr64_lo(xh, xl, 28);
35844 var c1_lo = rotr64_lo(xl, xh, 2); // 34
35845 var c2_lo = rotr64_lo(xl, xh, 7); // 39
35846
35847 var r = c0_lo ^ c1_lo ^ c2_lo;
35848 if (r < 0)
35849 r += 0x100000000;
35850 return r;
35851}
35852
35853function s1_512_hi(xh, xl) {
35854 var c0_hi = rotr64_hi(xh, xl, 14);
35855 var c1_hi = rotr64_hi(xh, xl, 18);
35856 var c2_hi = rotr64_hi(xl, xh, 9); // 41
35857
35858 var r = c0_hi ^ c1_hi ^ c2_hi;
35859 if (r < 0)
35860 r += 0x100000000;
35861 return r;
35862}
35863
35864function s1_512_lo(xh, xl) {
35865 var c0_lo = rotr64_lo(xh, xl, 14);
35866 var c1_lo = rotr64_lo(xh, xl, 18);
35867 var c2_lo = rotr64_lo(xl, xh, 9); // 41
35868
35869 var r = c0_lo ^ c1_lo ^ c2_lo;
35870 if (r < 0)
35871 r += 0x100000000;
35872 return r;
35873}
35874
35875function g0_512_hi(xh, xl) {
35876 var c0_hi = rotr64_hi(xh, xl, 1);
35877 var c1_hi = rotr64_hi(xh, xl, 8);
35878 var c2_hi = shr64_hi(xh, xl, 7);
35879
35880 var r = c0_hi ^ c1_hi ^ c2_hi;
35881 if (r < 0)
35882 r += 0x100000000;
35883 return r;
35884}
35885
35886function g0_512_lo(xh, xl) {
35887 var c0_lo = rotr64_lo(xh, xl, 1);
35888 var c1_lo = rotr64_lo(xh, xl, 8);
35889 var c2_lo = shr64_lo(xh, xl, 7);
35890
35891 var r = c0_lo ^ c1_lo ^ c2_lo;
35892 if (r < 0)
35893 r += 0x100000000;
35894 return r;
35895}
35896
35897function g1_512_hi(xh, xl) {
35898 var c0_hi = rotr64_hi(xh, xl, 19);
35899 var c1_hi = rotr64_hi(xl, xh, 29); // 61
35900 var c2_hi = shr64_hi(xh, xl, 6);
35901
35902 var r = c0_hi ^ c1_hi ^ c2_hi;
35903 if (r < 0)
35904 r += 0x100000000;
35905 return r;
35906}
35907
35908function g1_512_lo(xh, xl) {
35909 var c0_lo = rotr64_lo(xh, xl, 19);
35910 var c1_lo = rotr64_lo(xl, xh, 29); // 61
35911 var c2_lo = shr64_lo(xh, xl, 6);
35912
35913 var r = c0_lo ^ c1_lo ^ c2_lo;
35914 if (r < 0)
35915 r += 0x100000000;
35916 return r;
35917}
35918
35919},{"../hash":57}],62:[function(require,module,exports){
35920var utils = exports;
35921var inherits = require('inherits');
35922
35923function toArray(msg, enc) {
35924 if (Array.isArray(msg))
35925 return msg.slice();
35926 if (!msg)
35927 return [];
35928 var res = [];
35929 if (typeof msg === 'string') {
35930 if (!enc) {
35931 for (var i = 0; i < msg.length; i++) {
35932 var c = msg.charCodeAt(i);
35933 var hi = c >> 8;
35934 var lo = c & 0xff;
35935 if (hi)
35936 res.push(hi, lo);
35937 else
35938 res.push(lo);
35939 }
35940 } else if (enc === 'hex') {
35941 msg = msg.replace(/[^a-z0-9]+/ig, '');
35942 if (msg.length % 2 !== 0)
35943 msg = '0' + msg;
35944 for (var i = 0; i < msg.length; i += 2)
35945 res.push(parseInt(msg[i] + msg[i + 1], 16));
35946 }
35947 } else {
35948 for (var i = 0; i < msg.length; i++)
35949 res[i] = msg[i] | 0;
35950 }
35951 return res;
35952}
35953utils.toArray = toArray;
35954
35955function toHex(msg) {
35956 var res = '';
35957 for (var i = 0; i < msg.length; i++)
35958 res += zero2(msg[i].toString(16));
35959 return res;
35960}
35961utils.toHex = toHex;
35962
35963function htonl(w) {
35964 var res = (w >>> 24) |
35965 ((w >>> 8) & 0xff00) |
35966 ((w << 8) & 0xff0000) |
35967 ((w & 0xff) << 24);
35968 return res >>> 0;
35969}
35970utils.htonl = htonl;
35971
35972function toHex32(msg, endian) {
35973 var res = '';
35974 for (var i = 0; i < msg.length; i++) {
35975 var w = msg[i];
35976 if (endian === 'little')
35977 w = htonl(w);
35978 res += zero8(w.toString(16));
35979 }
35980 return res;
35981}
35982utils.toHex32 = toHex32;
35983
35984function zero2(word) {
35985 if (word.length === 1)
35986 return '0' + word;
35987 else
35988 return word;
35989}
35990utils.zero2 = zero2;
35991
35992function zero8(word) {
35993 if (word.length === 7)
35994 return '0' + word;
35995 else if (word.length === 6)
35996 return '00' + word;
35997 else if (word.length === 5)
35998 return '000' + word;
35999 else if (word.length === 4)
36000 return '0000' + word;
36001 else if (word.length === 3)
36002 return '00000' + word;
36003 else if (word.length === 2)
36004 return '000000' + word;
36005 else if (word.length === 1)
36006 return '0000000' + word;
36007 else
36008 return word;
36009}
36010utils.zero8 = zero8;
36011
36012function join32(msg, start, end, endian) {
36013 var len = end - start;
36014 assert(len % 4 === 0);
36015 var res = new Array(len / 4);
36016 for (var i = 0, k = start; i < res.length; i++, k += 4) {
36017 var w;
36018 if (endian === 'big')
36019 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
36020 else
36021 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
36022 res[i] = w >>> 0;
36023 }
36024 return res;
36025}
36026utils.join32 = join32;
36027
36028function split32(msg, endian) {
36029 var res = new Array(msg.length * 4);
36030 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
36031 var m = msg[i];
36032 if (endian === 'big') {
36033 res[k] = m >>> 24;
36034 res[k + 1] = (m >>> 16) & 0xff;
36035 res[k + 2] = (m >>> 8) & 0xff;
36036 res[k + 3] = m & 0xff;
36037 } else {
36038 res[k + 3] = m >>> 24;
36039 res[k + 2] = (m >>> 16) & 0xff;
36040 res[k + 1] = (m >>> 8) & 0xff;
36041 res[k] = m & 0xff;
36042 }
36043 }
36044 return res;
36045}
36046utils.split32 = split32;
36047
36048function rotr32(w, b) {
36049 return (w >>> b) | (w << (32 - b));
36050}
36051utils.rotr32 = rotr32;
36052
36053function rotl32(w, b) {
36054 return (w << b) | (w >>> (32 - b));
36055}
36056utils.rotl32 = rotl32;
36057
36058function sum32(a, b) {
36059 return (a + b) >>> 0;
36060}
36061utils.sum32 = sum32;
36062
36063function sum32_3(a, b, c) {
36064 return (a + b + c) >>> 0;
36065}
36066utils.sum32_3 = sum32_3;
36067
36068function sum32_4(a, b, c, d) {
36069 return (a + b + c + d) >>> 0;
36070}
36071utils.sum32_4 = sum32_4;
36072
36073function sum32_5(a, b, c, d, e) {
36074 return (a + b + c + d + e) >>> 0;
36075}
36076utils.sum32_5 = sum32_5;
36077
36078function assert(cond, msg) {
36079 if (!cond)
36080 throw new Error(msg || 'Assertion failed');
36081}
36082utils.assert = assert;
36083
36084utils.inherits = inherits;
36085
36086function sum64(buf, pos, ah, al) {
36087 var bh = buf[pos];
36088 var bl = buf[pos + 1];
36089
36090 var lo = (al + bl) >>> 0;
36091 var hi = (lo < al ? 1 : 0) + ah + bh;
36092 buf[pos] = hi >>> 0;
36093 buf[pos + 1] = lo;
36094}
36095exports.sum64 = sum64;
36096
36097function sum64_hi(ah, al, bh, bl) {
36098 var lo = (al + bl) >>> 0;
36099 var hi = (lo < al ? 1 : 0) + ah + bh;
36100 return hi >>> 0;
36101};
36102exports.sum64_hi = sum64_hi;
36103
36104function sum64_lo(ah, al, bh, bl) {
36105 var lo = al + bl;
36106 return lo >>> 0;
36107};
36108exports.sum64_lo = sum64_lo;
36109
36110function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
36111 var carry = 0;
36112 var lo = al;
36113 lo = (lo + bl) >>> 0;
36114 carry += lo < al ? 1 : 0;
36115 lo = (lo + cl) >>> 0;
36116 carry += lo < cl ? 1 : 0;
36117 lo = (lo + dl) >>> 0;
36118 carry += lo < dl ? 1 : 0;
36119
36120 var hi = ah + bh + ch + dh + carry;
36121 return hi >>> 0;
36122};
36123exports.sum64_4_hi = sum64_4_hi;
36124
36125function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
36126 var lo = al + bl + cl + dl;
36127 return lo >>> 0;
36128};
36129exports.sum64_4_lo = sum64_4_lo;
36130
36131function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36132 var carry = 0;
36133 var lo = al;
36134 lo = (lo + bl) >>> 0;
36135 carry += lo < al ? 1 : 0;
36136 lo = (lo + cl) >>> 0;
36137 carry += lo < cl ? 1 : 0;
36138 lo = (lo + dl) >>> 0;
36139 carry += lo < dl ? 1 : 0;
36140 lo = (lo + el) >>> 0;
36141 carry += lo < el ? 1 : 0;
36142
36143 var hi = ah + bh + ch + dh + eh + carry;
36144 return hi >>> 0;
36145};
36146exports.sum64_5_hi = sum64_5_hi;
36147
36148function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36149 var lo = al + bl + cl + dl + el;
36150
36151 return lo >>> 0;
36152};
36153exports.sum64_5_lo = sum64_5_lo;
36154
36155function rotr64_hi(ah, al, num) {
36156 var r = (al << (32 - num)) | (ah >>> num);
36157 return r >>> 0;
36158};
36159exports.rotr64_hi = rotr64_hi;
36160
36161function rotr64_lo(ah, al, num) {
36162 var r = (ah << (32 - num)) | (al >>> num);
36163 return r >>> 0;
36164};
36165exports.rotr64_lo = rotr64_lo;
36166
36167function shr64_hi(ah, al, num) {
36168 return ah >>> num;
36169};
36170exports.shr64_hi = shr64_hi;
36171
36172function shr64_lo(ah, al, num) {
36173 var r = (ah << (32 - num)) | (al >>> num);
36174 return r >>> 0;
36175};
36176exports.shr64_lo = shr64_lo;
36177
36178},{"inherits":63}],63:[function(require,module,exports){
36179arguments[4][9][0].apply(exports,arguments)
36180},{"dup":9}],64:[function(require,module,exports){
36181/**
36182 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
36183 * @param {String} str the string input value
36184 * @return {Boolean} a boolean if it is or is not hex prefixed
36185 * @throws if the str input is not a string
36186 */
36187module.exports = function isHexPrefixed(str) {
36188 if (typeof str !== 'string') {
36189 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
36190 }
36191
36192 return str.slice(0, 2) === '0x';
36193}
36194
36195},{}],65:[function(require,module,exports){
36196'use strict'
36197module.exports = require('./lib/api')(require('./lib/keccak'))
36198
36199},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
36200'use strict'
36201var createKeccak = require('./keccak')
36202var createShake = require('./shake')
36203
36204module.exports = function (KeccakState) {
36205 var Keccak = createKeccak(KeccakState)
36206 var Shake = createShake(KeccakState)
36207
36208 return function (algorithm, options) {
36209 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
36210 switch (hash) {
36211 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
36212 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
36213 case 'keccak384': return new Keccak(832, 768, null, 384, options)
36214 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
36215
36216 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
36217 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
36218 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
36219 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
36220
36221 case 'shake128': return new Shake(1344, 256, 0x1f, options)
36222 case 'shake256': return new Shake(1088, 512, 0x1f, options)
36223
36224 default: throw new Error('Invald algorithm: ' + algorithm)
36225 }
36226 }
36227}
36228
36229},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
36230(function (Buffer){
36231'use strict'
36232var Transform = require('stream').Transform
36233var inherits = require('inherits')
36234
36235module.exports = function (KeccakState) {
36236 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
36237 Transform.call(this, options)
36238
36239 this._rate = rate
36240 this._capacity = capacity
36241 this._delimitedSuffix = delimitedSuffix
36242 this._hashBitLength = hashBitLength
36243 this._options = options
36244
36245 this._state = new KeccakState()
36246 this._state.initialize(rate, capacity)
36247 this._finalized = false
36248 }
36249
36250 inherits(Keccak, Transform)
36251
36252 Keccak.prototype._transform = function (chunk, encoding, callback) {
36253 var error = null
36254 try {
36255 this.update(chunk, encoding)
36256 } catch (err) {
36257 error = err
36258 }
36259
36260 callback(error)
36261 }
36262
36263 Keccak.prototype._flush = function (callback) {
36264 var error = null
36265 try {
36266 this.push(this.digest())
36267 } catch (err) {
36268 error = err
36269 }
36270
36271 callback(error)
36272 }
36273
36274 Keccak.prototype.update = function (data, encoding) {
36275 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36276 if (this._finalized) throw new Error('Digest already called')
36277 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36278
36279 this._state.absorb(data)
36280
36281 return this
36282 }
36283
36284 Keccak.prototype.digest = function (encoding) {
36285 if (this._finalized) throw new Error('Digest already called')
36286 this._finalized = true
36287
36288 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
36289 var digest = this._state.squeeze(this._hashBitLength / 8)
36290 if (encoding !== undefined) digest = digest.toString(encoding)
36291
36292 this._resetState()
36293
36294 return digest
36295 }
36296
36297 // remove result from memory
36298 Keccak.prototype._resetState = function () {
36299 this._state.initialize(this._rate, this._capacity)
36300 return this
36301 }
36302
36303 // because sometimes we need hash right now and little later
36304 Keccak.prototype._clone = function () {
36305 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
36306 this._state.copy(clone._state)
36307 clone._finalized = this._finalized
36308
36309 return clone
36310 }
36311
36312 return Keccak
36313}
36314
36315}).call(this,require("buffer").Buffer)
36316},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
36317(function (Buffer){
36318'use strict'
36319var Transform = require('stream').Transform
36320var inherits = require('inherits')
36321
36322module.exports = function (KeccakState) {
36323 function Shake (rate, capacity, delimitedSuffix, options) {
36324 Transform.call(this, options)
36325
36326 this._rate = rate
36327 this._capacity = capacity
36328 this._delimitedSuffix = delimitedSuffix
36329 this._options = options
36330
36331 this._state = new KeccakState()
36332 this._state.initialize(rate, capacity)
36333 this._finalized = false
36334 }
36335
36336 inherits(Shake, Transform)
36337
36338 Shake.prototype._transform = function (chunk, encoding, callback) {
36339 var error = null
36340 try {
36341 this.update(chunk, encoding)
36342 } catch (err) {
36343 error = err
36344 }
36345
36346 callback(error)
36347 }
36348
36349 Shake.prototype._flush = function () {}
36350
36351 Shake.prototype._read = function (size) {
36352 this.push(this.squeeze(size))
36353 }
36354
36355 Shake.prototype.update = function (data, encoding) {
36356 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36357 if (this._finalized) throw new Error('Squeeze already called')
36358 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36359
36360 this._state.absorb(data)
36361
36362 return this
36363 }
36364
36365 Shake.prototype.squeeze = function (dataByteLength, encoding) {
36366 if (!this._finalized) {
36367 this._finalized = true
36368 this._state.absorbLastFewBits(this._delimitedSuffix)
36369 }
36370
36371 var data = this._state.squeeze(dataByteLength)
36372 if (encoding !== undefined) data = data.toString(encoding)
36373
36374 return data
36375 }
36376
36377 Shake.prototype._resetState = function () {
36378 this._state.initialize(this._rate, this._capacity)
36379 return this
36380 }
36381
36382 Shake.prototype._clone = function () {
36383 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
36384 this._state.copy(clone._state)
36385 clone._finalized = this._finalized
36386
36387 return clone
36388 }
36389
36390 return Shake
36391}
36392
36393}).call(this,require("buffer").Buffer)
36394},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
36395'use strict'
36396var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
36397
36398exports.p1600 = function (s) {
36399 for (var round = 0; round < 24; ++round) {
36400 // theta
36401 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
36402 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
36403 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
36404 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
36405 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
36406 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
36407 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
36408 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
36409 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
36410 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
36411
36412 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
36413 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
36414 var t1slo0 = s[0] ^ lo
36415 var t1shi0 = s[1] ^ hi
36416 var t1slo5 = s[10] ^ lo
36417 var t1shi5 = s[11] ^ hi
36418 var t1slo10 = s[20] ^ lo
36419 var t1shi10 = s[21] ^ hi
36420 var t1slo15 = s[30] ^ lo
36421 var t1shi15 = s[31] ^ hi
36422 var t1slo20 = s[40] ^ lo
36423 var t1shi20 = s[41] ^ hi
36424 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
36425 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
36426 var t1slo1 = s[2] ^ lo
36427 var t1shi1 = s[3] ^ hi
36428 var t1slo6 = s[12] ^ lo
36429 var t1shi6 = s[13] ^ hi
36430 var t1slo11 = s[22] ^ lo
36431 var t1shi11 = s[23] ^ hi
36432 var t1slo16 = s[32] ^ lo
36433 var t1shi16 = s[33] ^ hi
36434 var t1slo21 = s[42] ^ lo
36435 var t1shi21 = s[43] ^ hi
36436 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
36437 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
36438 var t1slo2 = s[4] ^ lo
36439 var t1shi2 = s[5] ^ hi
36440 var t1slo7 = s[14] ^ lo
36441 var t1shi7 = s[15] ^ hi
36442 var t1slo12 = s[24] ^ lo
36443 var t1shi12 = s[25] ^ hi
36444 var t1slo17 = s[34] ^ lo
36445 var t1shi17 = s[35] ^ hi
36446 var t1slo22 = s[44] ^ lo
36447 var t1shi22 = s[45] ^ hi
36448 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
36449 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
36450 var t1slo3 = s[6] ^ lo
36451 var t1shi3 = s[7] ^ hi
36452 var t1slo8 = s[16] ^ lo
36453 var t1shi8 = s[17] ^ hi
36454 var t1slo13 = s[26] ^ lo
36455 var t1shi13 = s[27] ^ hi
36456 var t1slo18 = s[36] ^ lo
36457 var t1shi18 = s[37] ^ hi
36458 var t1slo23 = s[46] ^ lo
36459 var t1shi23 = s[47] ^ hi
36460 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
36461 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
36462 var t1slo4 = s[8] ^ lo
36463 var t1shi4 = s[9] ^ hi
36464 var t1slo9 = s[18] ^ lo
36465 var t1shi9 = s[19] ^ hi
36466 var t1slo14 = s[28] ^ lo
36467 var t1shi14 = s[29] ^ hi
36468 var t1slo19 = s[38] ^ lo
36469 var t1shi19 = s[39] ^ hi
36470 var t1slo24 = s[48] ^ lo
36471 var t1shi24 = s[49] ^ hi
36472
36473 // rho & pi
36474 var t2slo0 = t1slo0
36475 var t2shi0 = t1shi0
36476 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
36477 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
36478 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
36479 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
36480 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
36481 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
36482 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
36483 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
36484 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
36485 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
36486 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
36487 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
36488 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
36489 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
36490 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
36491 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
36492 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
36493 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
36494 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
36495 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
36496 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
36497 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
36498 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
36499 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
36500 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
36501 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
36502 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
36503 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
36504 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
36505 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
36506 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
36507 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
36508 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
36509 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
36510 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
36511 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
36512 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
36513 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
36514 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
36515 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
36516 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
36517 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
36518 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
36519 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
36520 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
36521 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
36522 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
36523 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
36524
36525 // chi
36526 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
36527 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
36528 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
36529 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
36530 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
36531 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
36532 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
36533 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
36534 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
36535 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
36536 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
36537 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
36538 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
36539 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
36540 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
36541 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
36542 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
36543 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
36544 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
36545 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
36546 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
36547 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
36548 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
36549 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
36550 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
36551 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
36552 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
36553 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
36554 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
36555 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
36556 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
36557 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
36558 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
36559 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
36560 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
36561 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
36562 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
36563 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
36564 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
36565 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
36566 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
36567 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
36568 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
36569 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
36570 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
36571 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
36572 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
36573 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
36574 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
36575 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
36576
36577 // iota
36578 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
36579 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
36580 }
36581}
36582
36583},{}],70:[function(require,module,exports){
36584(function (Buffer){
36585'use strict'
36586var keccakState = require('./keccak-state-unroll')
36587
36588function Keccak () {
36589 // much faster than `new Array(50)`
36590 this.state = [
36591 0, 0, 0, 0, 0,
36592 0, 0, 0, 0, 0,
36593 0, 0, 0, 0, 0,
36594 0, 0, 0, 0, 0,
36595 0, 0, 0, 0, 0
36596 ]
36597
36598 this.blockSize = null
36599 this.count = 0
36600 this.squeezing = false
36601}
36602
36603Keccak.prototype.initialize = function (rate, capacity) {
36604 for (var i = 0; i < 50; ++i) this.state[i] = 0
36605 this.blockSize = rate / 8
36606 this.count = 0
36607 this.squeezing = false
36608}
36609
36610Keccak.prototype.absorb = function (data) {
36611 for (var i = 0; i < data.length; ++i) {
36612 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
36613 this.count += 1
36614 if (this.count === this.blockSize) {
36615 keccakState.p1600(this.state)
36616 this.count = 0
36617 }
36618 }
36619}
36620
36621Keccak.prototype.absorbLastFewBits = function (bits) {
36622 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
36623 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
36624 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
36625 keccakState.p1600(this.state)
36626 this.count = 0
36627 this.squeezing = true
36628}
36629
36630Keccak.prototype.squeeze = function (length) {
36631 if (!this.squeezing) this.absorbLastFewBits(0x01)
36632
36633 var output = Buffer.allocUnsafe(length)
36634 for (var i = 0; i < length; ++i) {
36635 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
36636 this.count += 1
36637 if (this.count === this.blockSize) {
36638 keccakState.p1600(this.state)
36639 this.count = 0
36640 }
36641 }
36642
36643 return output
36644}
36645
36646Keccak.prototype.copy = function (dest) {
36647 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
36648 dest.blockSize = this.blockSize
36649 dest.count = this.count
36650 dest.squeezing = this.squeezing
36651}
36652
36653module.exports = Keccak
36654
36655}).call(this,require("buffer").Buffer)
36656},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
36657(function (Buffer){
36658/*
36659CryptoJS v3.1.2
36660code.google.com/p/crypto-js
36661(c) 2009-2013 by Jeff Mott. All rights reserved.
36662code.google.com/p/crypto-js/wiki/License
36663*/
36664/** @preserve
36665(c) 2012 by Cédric Mesnil. All rights reserved.
36666
36667Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
36668
36669 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
36670 - 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.
36671
36672THIS 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.
36673*/
36674
36675// constants table
36676var zl = [
36677 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
36678 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
36679 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
36680 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
36681 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
36682]
36683
36684var zr = [
36685 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
36686 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
36687 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
36688 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
36689 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
36690]
36691
36692var sl = [
36693 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
36694 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
36695 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
36696 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
36697 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
36698]
36699
36700var sr = [
36701 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
36702 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
36703 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
36704 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
36705 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
36706]
36707
36708var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
36709var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
36710
36711function bytesToWords (bytes) {
36712 var words = []
36713 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
36714 words[b >>> 5] |= bytes[i] << (24 - b % 32)
36715 }
36716 return words
36717}
36718
36719function wordsToBytes (words) {
36720 var bytes = []
36721 for (var b = 0; b < words.length * 32; b += 8) {
36722 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
36723 }
36724 return bytes
36725}
36726
36727function processBlock (H, M, offset) {
36728 // swap endian
36729 for (var i = 0; i < 16; i++) {
36730 var offset_i = offset + i
36731 var M_offset_i = M[offset_i]
36732
36733 // Swap
36734 M[offset_i] = (
36735 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
36736 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
36737 )
36738 }
36739
36740 // Working variables
36741 var al, bl, cl, dl, el
36742 var ar, br, cr, dr, er
36743
36744 ar = al = H[0]
36745 br = bl = H[1]
36746 cr = cl = H[2]
36747 dr = dl = H[3]
36748 er = el = H[4]
36749
36750 // computation
36751 var t
36752 for (i = 0; i < 80; i += 1) {
36753 t = (al + M[offset + zl[i]]) | 0
36754 if (i < 16) {
36755 t += f1(bl, cl, dl) + hl[0]
36756 } else if (i < 32) {
36757 t += f2(bl, cl, dl) + hl[1]
36758 } else if (i < 48) {
36759 t += f3(bl, cl, dl) + hl[2]
36760 } else if (i < 64) {
36761 t += f4(bl, cl, dl) + hl[3]
36762 } else {// if (i<80) {
36763 t += f5(bl, cl, dl) + hl[4]
36764 }
36765 t = t | 0
36766 t = rotl(t, sl[i])
36767 t = (t + el) | 0
36768 al = el
36769 el = dl
36770 dl = rotl(cl, 10)
36771 cl = bl
36772 bl = t
36773
36774 t = (ar + M[offset + zr[i]]) | 0
36775 if (i < 16) {
36776 t += f5(br, cr, dr) + hr[0]
36777 } else if (i < 32) {
36778 t += f4(br, cr, dr) + hr[1]
36779 } else if (i < 48) {
36780 t += f3(br, cr, dr) + hr[2]
36781 } else if (i < 64) {
36782 t += f2(br, cr, dr) + hr[3]
36783 } else {// if (i<80) {
36784 t += f1(br, cr, dr) + hr[4]
36785 }
36786
36787 t = t | 0
36788 t = rotl(t, sr[i])
36789 t = (t + er) | 0
36790 ar = er
36791 er = dr
36792 dr = rotl(cr, 10)
36793 cr = br
36794 br = t
36795 }
36796
36797 // intermediate hash value
36798 t = (H[1] + cl + dr) | 0
36799 H[1] = (H[2] + dl + er) | 0
36800 H[2] = (H[3] + el + ar) | 0
36801 H[3] = (H[4] + al + br) | 0
36802 H[4] = (H[0] + bl + cr) | 0
36803 H[0] = t
36804}
36805
36806function f1 (x, y, z) {
36807 return ((x) ^ (y) ^ (z))
36808}
36809
36810function f2 (x, y, z) {
36811 return (((x) & (y)) | ((~x) & (z)))
36812}
36813
36814function f3 (x, y, z) {
36815 return (((x) | (~(y))) ^ (z))
36816}
36817
36818function f4 (x, y, z) {
36819 return (((x) & (z)) | ((y) & (~(z))))
36820}
36821
36822function f5 (x, y, z) {
36823 return ((x) ^ ((y) | (~(z))))
36824}
36825
36826function rotl (x, n) {
36827 return (x << n) | (x >>> (32 - n))
36828}
36829
36830function ripemd160 (message) {
36831 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
36832
36833 if (typeof message === 'string') {
36834 message = new Buffer(message, 'utf8')
36835 }
36836
36837 var m = bytesToWords(message)
36838
36839 var nBitsLeft = message.length * 8
36840 var nBitsTotal = message.length * 8
36841
36842 // Add padding
36843 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
36844 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
36845 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
36846 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
36847 )
36848
36849 for (var i = 0; i < m.length; i += 16) {
36850 processBlock(H, m, i)
36851 }
36852
36853 // swap endian
36854 for (i = 0; i < 5; i++) {
36855 // shortcut
36856 var H_i = H[i]
36857
36858 // Swap
36859 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
36860 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
36861 }
36862
36863 var digestbytes = wordsToBytes(H)
36864 return new Buffer(digestbytes)
36865}
36866
36867module.exports = ripemd160
36868
36869}).call(this,require("buffer").Buffer)
36870},{"buffer":5}],72:[function(require,module,exports){
36871(function (Buffer){
36872const assert = require('assert')
36873/**
36874 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
36875 * This function takes in a data, convert it to buffer if not, and a length for recursion
36876 *
36877 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36878 * @returns {Buffer} - returns buffer of encoded data
36879 **/
36880exports.encode = function (input) {
36881 if (input instanceof Array) {
36882 var output = []
36883 for (var i = 0; i < input.length; i++) {
36884 output.push(exports.encode(input[i]))
36885 }
36886 var buf = Buffer.concat(output)
36887 return Buffer.concat([encodeLength(buf.length, 192), buf])
36888 } else {
36889 input = toBuffer(input)
36890 if (input.length === 1 && input[0] < 128) {
36891 return input
36892 } else {
36893 return Buffer.concat([encodeLength(input.length, 128), input])
36894 }
36895 }
36896}
36897
36898function safeParseInt (v, base) {
36899 if (v.slice(0, 2) === '00') {
36900 throw (new Error('invalid RLP: extra zeros'))
36901 }
36902
36903 return parseInt(v, base)
36904}
36905
36906function encodeLength (len, offset) {
36907 if (len < 56) {
36908 return new Buffer([len + offset])
36909 } else {
36910 var hexLength = intToHex(len)
36911 var lLength = hexLength.length / 2
36912 var firstByte = intToHex(offset + 55 + lLength)
36913 return new Buffer(firstByte + hexLength, 'hex')
36914 }
36915}
36916
36917/**
36918 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
36919 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36920 * @returns {Array} - returns decode Array of Buffers containg the original message
36921 **/
36922exports.decode = function (input, stream) {
36923 if (!input || input.length === 0) {
36924 return new Buffer([])
36925 }
36926
36927 input = toBuffer(input)
36928 var decoded = _decode(input)
36929
36930 if (stream) {
36931 return decoded
36932 }
36933
36934 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
36935 return decoded.data
36936}
36937
36938exports.getLength = function (input) {
36939 if (!input || input.length === 0) {
36940 return new Buffer([])
36941 }
36942
36943 input = toBuffer(input)
36944 var firstByte = input[0]
36945 if (firstByte <= 0x7f) {
36946 return input.length
36947 } else if (firstByte <= 0xb7) {
36948 return firstByte - 0x7f
36949 } else if (firstByte <= 0xbf) {
36950 return firstByte - 0xb6
36951 } else if (firstByte <= 0xf7) {
36952 // a list between 0-55 bytes long
36953 return firstByte - 0xbf
36954 } else {
36955 // a list over 55 bytes long
36956 var llength = firstByte - 0xf6
36957 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
36958 return llength + length
36959 }
36960}
36961
36962function _decode (input) {
36963 var length, llength, data, innerRemainder, d
36964 var decoded = []
36965 var firstByte = input[0]
36966
36967 if (firstByte <= 0x7f) {
36968 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
36969 return {
36970 data: input.slice(0, 1),
36971 remainder: input.slice(1)
36972 }
36973 } else if (firstByte <= 0xb7) {
36974 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
36975 // The range of the first byte is [0x80, 0xb7]
36976 length = firstByte - 0x7f
36977
36978 // set 0x80 null to 0
36979 if (firstByte === 0x80) {
36980 data = new Buffer([])
36981 } else {
36982 data = input.slice(1, length)
36983 }
36984
36985 if (length === 2 && data[0] < 0x80) {
36986 throw new Error('invalid rlp encoding: byte must be less 0x80')
36987 }
36988
36989 return {
36990 data: data,
36991 remainder: input.slice(length)
36992 }
36993 } else if (firstByte <= 0xbf) {
36994 llength = firstByte - 0xb6
36995 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
36996 data = input.slice(llength, length + llength)
36997 if (data.length < length) {
36998 throw (new Error('invalid RLP'))
36999 }
37000
37001 return {
37002 data: data,
37003 remainder: input.slice(length + llength)
37004 }
37005 } else if (firstByte <= 0xf7) {
37006 // a list between 0-55 bytes long
37007 length = firstByte - 0xbf
37008 innerRemainder = input.slice(1, length)
37009 while (innerRemainder.length) {
37010 d = _decode(innerRemainder)
37011 decoded.push(d.data)
37012 innerRemainder = d.remainder
37013 }
37014
37015 return {
37016 data: decoded,
37017 remainder: input.slice(length)
37018 }
37019 } else {
37020 // a list over 55 bytes long
37021 llength = firstByte - 0xf6
37022 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37023 var totalLength = llength + length
37024 if (totalLength > input.length) {
37025 throw new Error('invalid rlp: total length is larger than the data')
37026 }
37027
37028 innerRemainder = input.slice(llength, totalLength)
37029 if (innerRemainder.length === 0) {
37030 throw new Error('invalid rlp, List has a invalid length')
37031 }
37032
37033 while (innerRemainder.length) {
37034 d = _decode(innerRemainder)
37035 decoded.push(d.data)
37036 innerRemainder = d.remainder
37037 }
37038 return {
37039 data: decoded,
37040 remainder: input.slice(totalLength)
37041 }
37042 }
37043}
37044
37045function isHexPrefixed (str) {
37046 return str.slice(0, 2) === '0x'
37047}
37048
37049// Removes 0x from a given String
37050function stripHexPrefix (str) {
37051 if (typeof str !== 'string') {
37052 return str
37053 }
37054 return isHexPrefixed(str) ? str.slice(2) : str
37055}
37056
37057function intToHex (i) {
37058 var hex = i.toString(16)
37059 if (hex.length % 2) {
37060 hex = '0' + hex
37061 }
37062
37063 return hex
37064}
37065
37066function padToEven (a) {
37067 if (a.length % 2) a = '0' + a
37068 return a
37069}
37070
37071function intToBuffer (i) {
37072 var hex = intToHex(i)
37073 return new Buffer(hex, 'hex')
37074}
37075
37076function toBuffer (v) {
37077 if (!Buffer.isBuffer(v)) {
37078 if (typeof v === 'string') {
37079 if (isHexPrefixed(v)) {
37080 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
37081 } else {
37082 v = new Buffer(v)
37083 }
37084 } else if (typeof v === 'number') {
37085 if (!v) {
37086 v = new Buffer([])
37087 } else {
37088 v = intToBuffer(v)
37089 }
37090 } else if (v === null || v === undefined) {
37091 v = new Buffer([])
37092 } else if (v.toArray) {
37093 // converts a BN to a Buffer
37094 v = new Buffer(v.toArray())
37095 } else {
37096 throw new Error('invalid type')
37097 }
37098 }
37099 return v
37100}
37101
37102}).call(this,require("buffer").Buffer)
37103},{"assert":1,"buffer":5}],73:[function(require,module,exports){
37104'use strict'
37105module.exports = require('./lib')(require('./lib/elliptic'))
37106
37107},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
37108(function (Buffer){
37109'use strict'
37110var toString = Object.prototype.toString
37111
37112// TypeError
37113exports.isArray = function (value, message) {
37114 if (!Array.isArray(value)) throw TypeError(message)
37115}
37116
37117exports.isBoolean = function (value, message) {
37118 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
37119}
37120
37121exports.isBuffer = function (value, message) {
37122 if (!Buffer.isBuffer(value)) throw TypeError(message)
37123}
37124
37125exports.isFunction = function (value, message) {
37126 if (toString.call(value) !== '[object Function]') throw TypeError(message)
37127}
37128
37129exports.isNumber = function (value, message) {
37130 if (toString.call(value) !== '[object Number]') throw TypeError(message)
37131}
37132
37133exports.isObject = function (value, message) {
37134 if (toString.call(value) !== '[object Object]') throw TypeError(message)
37135}
37136
37137// RangeError
37138exports.isBufferLength = function (buffer, length, message) {
37139 if (buffer.length !== length) throw RangeError(message)
37140}
37141
37142exports.isBufferLength2 = function (buffer, length1, length2, message) {
37143 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
37144}
37145
37146exports.isLengthGTZero = function (value, message) {
37147 if (value.length === 0) throw RangeError(message)
37148}
37149
37150exports.isNumberInInterval = function (number, x, y, message) {
37151 if (number <= x || number >= y) throw RangeError(message)
37152}
37153
37154}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37155},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
37156(function (Buffer){
37157'use strict'
37158var bip66 = require('bip66')
37159
37160var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
37161 // begin
37162 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
37163 // private key
37164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37166 // middle
37167 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37168 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37169 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37170 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37171 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37172 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37173 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37174 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37175 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
37176 // public key
37177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37179 0x00
37180])
37181
37182var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
37183 // begin
37184 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
37185 // private key
37186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37188 // middle
37189 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37190 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37191 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37192 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37193 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37194 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37195 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
37196 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
37197 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37198 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37199 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
37200 // public key
37201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37205 0x00
37206])
37207
37208var ZERO_BUFFER_32 = new Buffer([
37209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
37211])
37212
37213exports.privateKeyExport = function (privateKey, publicKey, compressed) {
37214 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
37215 privateKey.copy(result, compressed ? 8 : 9)
37216 publicKey.copy(result, compressed ? 181 : 214)
37217 return result
37218}
37219
37220exports.privateKeyImport = function (privateKey) {
37221 var length = privateKey.length
37222
37223 // sequence header
37224 var index = 0
37225 if (length < index + 1 || privateKey[index] !== 0x30) return
37226 index += 1
37227
37228 // sequence length constructor
37229 if (length < index + 1 || !(privateKey[index] & 0x80)) return
37230
37231 var lenb = privateKey[index] & 0x7f
37232 index += 1
37233 if (lenb < 1 || lenb > 2) return
37234 if (length < index + lenb) return
37235
37236 // sequence length
37237 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
37238 index += lenb
37239 if (length < index + len) return
37240
37241 // sequence element 0: version number (=1)
37242 if (length < index + 3 ||
37243 privateKey[index] !== 0x02 ||
37244 privateKey[index + 1] !== 0x01 ||
37245 privateKey[index + 2] !== 0x01) {
37246 return
37247 }
37248 index += 3
37249
37250 // sequence element 1: octet string, up to 32 bytes
37251 if (length < index + 2 ||
37252 privateKey[index] !== 0x04 ||
37253 privateKey[index + 1] > 0x20 ||
37254 length < index + 2 + privateKey[index + 1]) {
37255 return
37256 }
37257
37258 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
37259}
37260
37261exports.signatureExport = function (sigObj) {
37262 var r = Buffer.concat([new Buffer([0]), sigObj.r])
37263 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
37264
37265 var s = Buffer.concat([new Buffer([0]), sigObj.s])
37266 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
37267
37268 return bip66.encode(r.slice(posR), s.slice(posS))
37269}
37270
37271exports.signatureImport = function (sig) {
37272 var r = new Buffer(ZERO_BUFFER_32)
37273 var s = new Buffer(ZERO_BUFFER_32)
37274
37275 try {
37276 var sigObj = bip66.decode(sig)
37277 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
37278 if (sigObj.r.length > 32) throw new Error('R length is too long')
37279 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
37280 if (sigObj.s.length > 32) throw new Error('S length is too long')
37281 } catch (err) {
37282 return
37283 }
37284
37285 sigObj.r.copy(r, 32 - sigObj.r.length)
37286 sigObj.s.copy(s, 32 - sigObj.s.length)
37287
37288 return { r: r, s: s }
37289}
37290
37291exports.signatureImportLax = function (sig) {
37292 var r = new Buffer(ZERO_BUFFER_32)
37293 var s = new Buffer(ZERO_BUFFER_32)
37294
37295 var length = sig.length
37296 var index = 0
37297
37298 // sequence tag byte
37299 if (sig[index++] !== 0x30) return
37300
37301 // sequence length byte
37302 var lenbyte = sig[index++]
37303 if (lenbyte & 0x80) {
37304 index += lenbyte - 0x80
37305 if (index > length) return
37306 }
37307
37308 // sequence tag byte for r
37309 if (sig[index++] !== 0x02) return
37310
37311 // length for r
37312 var rlen = sig[index++]
37313 if (rlen & 0x80) {
37314 lenbyte = rlen - 0x80
37315 if (index + lenbyte > length) return
37316 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37317 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
37318 }
37319 if (rlen > length - index) return
37320 var rindex = index
37321 index += rlen
37322
37323 // sequence tag byte for s
37324 if (sig[index++] !== 0x02) return
37325
37326 // length for s
37327 var slen = sig[index++]
37328 if (slen & 0x80) {
37329 lenbyte = slen - 0x80
37330 if (index + lenbyte > length) return
37331 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37332 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
37333 }
37334 if (slen > length - index) return
37335 var sindex = index
37336 index += slen
37337
37338 // ignore leading zeros in r
37339 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
37340 // copy r value
37341 if (rlen > 32) return
37342 var rvalue = sig.slice(rindex, rindex + rlen)
37343 rvalue.copy(r, 32 - rvalue.length)
37344
37345 // ignore leading zeros in s
37346 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
37347 // copy s value
37348 if (slen > 32) return
37349 var svalue = sig.slice(sindex, sindex + slen)
37350 svalue.copy(s, 32 - svalue.length)
37351
37352 return { r: r, s: s }
37353}
37354
37355}).call(this,require("buffer").Buffer)
37356},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
37357(function (Buffer){
37358'use strict'
37359var createHash = require('create-hash')
37360var BN = require('bn.js')
37361var EC = require('elliptic').ec
37362
37363var messages = require('../messages.json')
37364
37365var ec = new EC('secp256k1')
37366var ecparams = ec.curve
37367
37368function loadCompressedPublicKey (first, xBuffer) {
37369 var x = new BN(xBuffer)
37370
37371 // overflow
37372 if (x.cmp(ecparams.p) >= 0) return null
37373 x = x.toRed(ecparams.red)
37374
37375 // compute corresponding Y
37376 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
37377 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
37378
37379 return ec.keyPair({ pub: { x: x, y: y } })
37380}
37381
37382function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
37383 var x = new BN(xBuffer)
37384 var y = new BN(yBuffer)
37385
37386 // overflow
37387 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
37388
37389 x = x.toRed(ecparams.red)
37390 y = y.toRed(ecparams.red)
37391
37392 // is odd flag
37393 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
37394
37395 // x*x*x + b = y*y
37396 var x3 = x.redSqr().redIMul(x)
37397 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
37398
37399 return ec.keyPair({ pub: { x: x, y: y } })
37400}
37401
37402function loadPublicKey (publicKey) {
37403 var first = publicKey[0]
37404 switch (first) {
37405 case 0x02:
37406 case 0x03:
37407 if (publicKey.length !== 33) return null
37408 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
37409 case 0x04:
37410 case 0x06:
37411 case 0x07:
37412 if (publicKey.length !== 65) return null
37413 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
37414 default:
37415 return null
37416 }
37417}
37418
37419exports.privateKeyVerify = function (privateKey) {
37420 var bn = new BN(privateKey)
37421 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
37422}
37423
37424exports.privateKeyExport = function (privateKey, compressed) {
37425 var d = new BN(privateKey)
37426 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
37427
37428 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
37429}
37430
37431exports.privateKeyTweakAdd = function (privateKey, tweak) {
37432 var bn = new BN(tweak)
37433 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
37434
37435 bn.iadd(new BN(privateKey))
37436 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
37437 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
37438
37439 return bn.toArrayLike(Buffer, 'be', 32)
37440}
37441
37442exports.privateKeyTweakMul = function (privateKey, tweak) {
37443 var bn = new BN(tweak)
37444 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
37445
37446 bn.imul(new BN(privateKey))
37447 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
37448
37449 return bn.toArrayLike(Buffer, 'be', 32)
37450}
37451
37452exports.publicKeyCreate = function (privateKey, compressed) {
37453 var d = new BN(privateKey)
37454 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
37455
37456 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
37457}
37458
37459exports.publicKeyConvert = function (publicKey, compressed) {
37460 var pair = loadPublicKey(publicKey)
37461 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37462
37463 return new Buffer(pair.getPublic(compressed, true))
37464}
37465
37466exports.publicKeyVerify = function (publicKey) {
37467 return loadPublicKey(publicKey) !== null
37468}
37469
37470exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
37471 var pair = loadPublicKey(publicKey)
37472 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37473
37474 tweak = new BN(tweak)
37475 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
37476
37477 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
37478}
37479
37480exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
37481 var pair = loadPublicKey(publicKey)
37482 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37483
37484 tweak = new BN(tweak)
37485 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
37486
37487 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
37488}
37489
37490exports.publicKeyCombine = function (publicKeys, compressed) {
37491 var pairs = new Array(publicKeys.length)
37492 for (var i = 0; i < publicKeys.length; ++i) {
37493 pairs[i] = loadPublicKey(publicKeys[i])
37494 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37495 }
37496
37497 var point = pairs[0].pub
37498 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
37499 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
37500
37501 return new Buffer(point.encode(true, compressed))
37502}
37503
37504exports.signatureNormalize = function (signature) {
37505 var r = new BN(signature.slice(0, 32))
37506 var s = new BN(signature.slice(32, 64))
37507 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37508
37509 var result = new Buffer(signature)
37510 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
37511
37512 return result
37513}
37514
37515exports.signatureExport = function (signature) {
37516 var r = signature.slice(0, 32)
37517 var s = signature.slice(32, 64)
37518 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37519
37520 return { r: r, s: s }
37521}
37522
37523exports.signatureImport = function (sigObj) {
37524 var r = new BN(sigObj.r)
37525 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
37526
37527 var s = new BN(sigObj.s)
37528 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
37529
37530 return Buffer.concat([
37531 r.toArrayLike(Buffer, 'be', 32),
37532 s.toArrayLike(Buffer, 'be', 32)
37533 ])
37534}
37535
37536exports.sign = function (message, privateKey, noncefn, data) {
37537 if (typeof noncefn === 'function') {
37538 var getNonce = noncefn
37539 noncefn = function (counter) {
37540 var nonce = getNonce(message, privateKey, null, data, counter)
37541 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
37542
37543 return new BN(nonce)
37544 }
37545 }
37546
37547 var d = new BN(privateKey)
37548 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
37549
37550 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
37551 return {
37552 signature: Buffer.concat([
37553 result.r.toArrayLike(Buffer, 'be', 32),
37554 result.s.toArrayLike(Buffer, 'be', 32)
37555 ]),
37556 recovery: result.recoveryParam
37557 }
37558}
37559
37560exports.verify = function (message, signature, publicKey) {
37561 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
37562
37563 var sigr = new BN(sigObj.r)
37564 var sigs = new BN(sigObj.s)
37565 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37566 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
37567
37568 var pair = loadPublicKey(publicKey)
37569 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37570
37571 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
37572}
37573
37574exports.recover = function (message, signature, recovery, compressed) {
37575 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
37576
37577 var sigr = new BN(sigObj.r)
37578 var sigs = new BN(sigObj.s)
37579 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37580
37581 try {
37582 if (sigr.isZero() || sigs.isZero()) throw new Error()
37583
37584 var point = ec.recoverPubKey(message, sigObj, recovery)
37585 return new Buffer(point.encode(true, compressed))
37586 } catch (err) {
37587 throw new Error(messages.ECDSA_RECOVER_FAIL)
37588 }
37589}
37590
37591exports.ecdh = function (publicKey, privateKey) {
37592 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
37593 return createHash('sha256').update(shared).digest()
37594}
37595
37596exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
37597 var pair = loadPublicKey(publicKey)
37598 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
37599
37600 var scalar = new BN(privateKey)
37601 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
37602
37603 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
37604}
37605
37606}).call(this,require("buffer").Buffer)
37607},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
37608'use strict'
37609var assert = require('./assert')
37610var der = require('./der')
37611var messages = require('./messages.json')
37612
37613function initCompressedValue (value, defaultValue) {
37614 if (value === undefined) return defaultValue
37615
37616 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
37617 return value
37618}
37619
37620module.exports = function (secp256k1) {
37621 return {
37622 privateKeyVerify: function (privateKey) {
37623 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37624 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
37625 },
37626
37627 privateKeyExport: function (privateKey, compressed) {
37628 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37629 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37630
37631 compressed = initCompressedValue(compressed, true)
37632 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
37633
37634 return der.privateKeyExport(privateKey, publicKey, compressed)
37635 },
37636
37637 privateKeyImport: function (privateKey) {
37638 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37639
37640 privateKey = der.privateKeyImport(privateKey)
37641 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
37642
37643 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
37644 },
37645
37646 privateKeyTweakAdd: function (privateKey, tweak) {
37647 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37648 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37649
37650 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37651 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37652
37653 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
37654 },
37655
37656 privateKeyTweakMul: function (privateKey, tweak) {
37657 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37658 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37659
37660 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37661 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37662
37663 return secp256k1.privateKeyTweakMul(privateKey, tweak)
37664 },
37665
37666 publicKeyCreate: function (privateKey, compressed) {
37667 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37668 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37669
37670 compressed = initCompressedValue(compressed, true)
37671
37672 return secp256k1.publicKeyCreate(privateKey, compressed)
37673 },
37674
37675 publicKeyConvert: function (publicKey, compressed) {
37676 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37677 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37678
37679 compressed = initCompressedValue(compressed, true)
37680
37681 return secp256k1.publicKeyConvert(publicKey, compressed)
37682 },
37683
37684 publicKeyVerify: function (publicKey) {
37685 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37686 return secp256k1.publicKeyVerify(publicKey)
37687 },
37688
37689 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
37690 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37691 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37692
37693 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37694 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37695
37696 compressed = initCompressedValue(compressed, true)
37697
37698 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
37699 },
37700
37701 publicKeyTweakMul: function (publicKey, tweak, compressed) {
37702 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37703 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37704
37705 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37706 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37707
37708 compressed = initCompressedValue(compressed, true)
37709
37710 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
37711 },
37712
37713 publicKeyCombine: function (publicKeys, compressed) {
37714 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
37715 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
37716 for (var i = 0; i < publicKeys.length; ++i) {
37717 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
37718 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37719 }
37720
37721 compressed = initCompressedValue(compressed, true)
37722
37723 return secp256k1.publicKeyCombine(publicKeys, compressed)
37724 },
37725
37726 signatureNormalize: function (signature) {
37727 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37728 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37729
37730 return secp256k1.signatureNormalize(signature)
37731 },
37732
37733 signatureExport: function (signature) {
37734 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37735 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37736
37737 var sigObj = secp256k1.signatureExport(signature)
37738 return der.signatureExport(sigObj)
37739 },
37740
37741 signatureImport: function (sig) {
37742 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37743 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37744
37745 var sigObj = der.signatureImport(sig)
37746 if (sigObj) return secp256k1.signatureImport(sigObj)
37747
37748 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37749 },
37750
37751 signatureImportLax: function (sig) {
37752 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37753 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37754
37755 var sigObj = der.signatureImportLax(sig)
37756 if (sigObj) return secp256k1.signatureImport(sigObj)
37757
37758 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37759 },
37760
37761 sign: function (message, privateKey, options) {
37762 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37763 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
37764
37765 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37766 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37767
37768 var data = null
37769 var noncefn = null
37770 if (options !== undefined) {
37771 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
37772
37773 if (options.data !== undefined) {
37774 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
37775 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
37776 data = options.data
37777 }
37778
37779 if (options.noncefn !== undefined) {
37780 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
37781 noncefn = options.noncefn
37782 }
37783 }
37784
37785 return secp256k1.sign(message, privateKey, noncefn, data)
37786 },
37787
37788 verify: function (message, signature, publicKey) {
37789 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37790 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
37791
37792 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37793 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37794
37795 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37796 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37797
37798 return secp256k1.verify(message, signature, publicKey)
37799 },
37800
37801 recover: function (message, signature, recovery, compressed) {
37802 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37803 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
37804
37805 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37806 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37807
37808 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
37809 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
37810
37811 compressed = initCompressedValue(compressed, true)
37812
37813 return secp256k1.recover(message, signature, recovery, compressed)
37814 },
37815
37816 ecdh: function (publicKey, privateKey) {
37817 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37818 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37819
37820 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37821 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37822
37823 return secp256k1.ecdh(publicKey, privateKey)
37824 },
37825
37826 ecdhUnsafe: function (publicKey, privateKey, compressed) {
37827 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37828 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37829
37830 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37831 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37832
37833 compressed = initCompressedValue(compressed, true)
37834
37835 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
37836 }
37837 }
37838}
37839
37840},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
37841module.exports={
37842 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
37843 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
37844 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
37845 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
37846 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37847 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
37848 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
37849 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
37850 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
37851 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
37852 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
37853 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
37854 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
37855 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
37856 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37857 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
37858 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
37859 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
37860 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
37861 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
37862 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
37863 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
37864 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
37865 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
37866 "MSG32_TYPE_INVALID": "message should be a Buffer",
37867 "MSG32_LENGTH_INVALID": "message length is invalid",
37868 "OPTIONS_TYPE_INVALID": "options should be an Object",
37869 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
37870 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
37871 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
37872 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
37873 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
37874 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
37875 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
37876}
37877
37878},{}],79:[function(require,module,exports){
37879(function (Buffer){
37880// prototype class for hash functions
37881function Hash (blockSize, finalSize) {
37882 this._block = new Buffer(blockSize)
37883 this._finalSize = finalSize
37884 this._blockSize = blockSize
37885 this._len = 0
37886 this._s = 0
37887}
37888
37889Hash.prototype.update = function (data, enc) {
37890 if (typeof data === 'string') {
37891 enc = enc || 'utf8'
37892 data = new Buffer(data, enc)
37893 }
37894
37895 var l = this._len += data.length
37896 var s = this._s || 0
37897 var f = 0
37898 var buffer = this._block
37899
37900 while (s < l) {
37901 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
37902 var ch = (t - f)
37903
37904 for (var i = 0; i < ch; i++) {
37905 buffer[(s % this._blockSize) + i] = data[i + f]
37906 }
37907
37908 s += ch
37909 f += ch
37910
37911 if ((s % this._blockSize) === 0) {
37912 this._update(buffer)
37913 }
37914 }
37915 this._s = s
37916
37917 return this
37918}
37919
37920Hash.prototype.digest = function (enc) {
37921 // Suppose the length of the message M, in bits, is l
37922 var l = this._len * 8
37923
37924 // Append the bit 1 to the end of the message
37925 this._block[this._len % this._blockSize] = 0x80
37926
37927 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
37928 this._block.fill(0, this._len % this._blockSize + 1)
37929
37930 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
37931 this._update(this._block)
37932 this._block.fill(0)
37933 }
37934
37935 // to this append the block which is equal to the number l written in binary
37936 // TODO: handle case where l is > Math.pow(2, 29)
37937 this._block.writeInt32BE(l, this._blockSize - 4)
37938
37939 var hash = this._update(this._block) || this._hash()
37940
37941 return enc ? hash.toString(enc) : hash
37942}
37943
37944Hash.prototype._update = function () {
37945 throw new Error('_update must be implemented by subclass')
37946}
37947
37948module.exports = Hash
37949
37950}).call(this,require("buffer").Buffer)
37951},{"buffer":5}],80:[function(require,module,exports){
37952var exports = module.exports = function SHA (algorithm) {
37953 algorithm = algorithm.toLowerCase()
37954
37955 var Algorithm = exports[algorithm]
37956 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
37957
37958 return new Algorithm()
37959}
37960
37961exports.sha = require('./sha')
37962exports.sha1 = require('./sha1')
37963exports.sha224 = require('./sha224')
37964exports.sha256 = require('./sha256')
37965exports.sha384 = require('./sha384')
37966exports.sha512 = require('./sha512')
37967
37968},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
37969(function (Buffer){
37970/*
37971 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
37972 * in FIPS PUB 180-1
37973 * This source code is derived from sha1.js of the same repository.
37974 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
37975 * operation was added.
37976 */
37977
37978var inherits = require('inherits')
37979var Hash = require('./hash')
37980
37981var K = [
37982 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
37983]
37984
37985var W = new Array(80)
37986
37987function Sha () {
37988 this.init()
37989 this._w = W
37990
37991 Hash.call(this, 64, 56)
37992}
37993
37994inherits(Sha, Hash)
37995
37996Sha.prototype.init = function () {
37997 this._a = 0x67452301
37998 this._b = 0xefcdab89
37999 this._c = 0x98badcfe
38000 this._d = 0x10325476
38001 this._e = 0xc3d2e1f0
38002
38003 return this
38004}
38005
38006function rotl5 (num) {
38007 return (num << 5) | (num >>> 27)
38008}
38009
38010function rotl30 (num) {
38011 return (num << 30) | (num >>> 2)
38012}
38013
38014function ft (s, b, c, d) {
38015 if (s === 0) return (b & c) | ((~b) & d)
38016 if (s === 2) return (b & c) | (b & d) | (c & d)
38017 return b ^ c ^ d
38018}
38019
38020Sha.prototype._update = function (M) {
38021 var W = this._w
38022
38023 var a = this._a | 0
38024 var b = this._b | 0
38025 var c = this._c | 0
38026 var d = this._d | 0
38027 var e = this._e | 0
38028
38029 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38030 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
38031
38032 for (var j = 0; j < 80; ++j) {
38033 var s = ~~(j / 20)
38034 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
38035
38036 e = d
38037 d = c
38038 c = rotl30(b)
38039 b = a
38040 a = t
38041 }
38042
38043 this._a = (a + this._a) | 0
38044 this._b = (b + this._b) | 0
38045 this._c = (c + this._c) | 0
38046 this._d = (d + this._d) | 0
38047 this._e = (e + this._e) | 0
38048}
38049
38050Sha.prototype._hash = function () {
38051 var H = new Buffer(20)
38052
38053 H.writeInt32BE(this._a | 0, 0)
38054 H.writeInt32BE(this._b | 0, 4)
38055 H.writeInt32BE(this._c | 0, 8)
38056 H.writeInt32BE(this._d | 0, 12)
38057 H.writeInt32BE(this._e | 0, 16)
38058
38059 return H
38060}
38061
38062module.exports = Sha
38063
38064}).call(this,require("buffer").Buffer)
38065},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
38066(function (Buffer){
38067/*
38068 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
38069 * in FIPS PUB 180-1
38070 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
38071 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38072 * Distributed under the BSD License
38073 * See http://pajhome.org.uk/crypt/md5 for details.
38074 */
38075
38076var inherits = require('inherits')
38077var Hash = require('./hash')
38078
38079var K = [
38080 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
38081]
38082
38083var W = new Array(80)
38084
38085function Sha1 () {
38086 this.init()
38087 this._w = W
38088
38089 Hash.call(this, 64, 56)
38090}
38091
38092inherits(Sha1, Hash)
38093
38094Sha1.prototype.init = function () {
38095 this._a = 0x67452301
38096 this._b = 0xefcdab89
38097 this._c = 0x98badcfe
38098 this._d = 0x10325476
38099 this._e = 0xc3d2e1f0
38100
38101 return this
38102}
38103
38104function rotl1 (num) {
38105 return (num << 1) | (num >>> 31)
38106}
38107
38108function rotl5 (num) {
38109 return (num << 5) | (num >>> 27)
38110}
38111
38112function rotl30 (num) {
38113 return (num << 30) | (num >>> 2)
38114}
38115
38116function ft (s, b, c, d) {
38117 if (s === 0) return (b & c) | ((~b) & d)
38118 if (s === 2) return (b & c) | (b & d) | (c & d)
38119 return b ^ c ^ d
38120}
38121
38122Sha1.prototype._update = function (M) {
38123 var W = this._w
38124
38125 var a = this._a | 0
38126 var b = this._b | 0
38127 var c = this._c | 0
38128 var d = this._d | 0
38129 var e = this._e | 0
38130
38131 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38132 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
38133
38134 for (var j = 0; j < 80; ++j) {
38135 var s = ~~(j / 20)
38136 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
38137
38138 e = d
38139 d = c
38140 c = rotl30(b)
38141 b = a
38142 a = t
38143 }
38144
38145 this._a = (a + this._a) | 0
38146 this._b = (b + this._b) | 0
38147 this._c = (c + this._c) | 0
38148 this._d = (d + this._d) | 0
38149 this._e = (e + this._e) | 0
38150}
38151
38152Sha1.prototype._hash = function () {
38153 var H = new Buffer(20)
38154
38155 H.writeInt32BE(this._a | 0, 0)
38156 H.writeInt32BE(this._b | 0, 4)
38157 H.writeInt32BE(this._c | 0, 8)
38158 H.writeInt32BE(this._d | 0, 12)
38159 H.writeInt32BE(this._e | 0, 16)
38160
38161 return H
38162}
38163
38164module.exports = Sha1
38165
38166}).call(this,require("buffer").Buffer)
38167},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
38168(function (Buffer){
38169/**
38170 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38171 * in FIPS 180-2
38172 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38173 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38174 *
38175 */
38176
38177var inherits = require('inherits')
38178var Sha256 = require('./sha256')
38179var Hash = require('./hash')
38180
38181var W = new Array(64)
38182
38183function Sha224 () {
38184 this.init()
38185
38186 this._w = W // new Array(64)
38187
38188 Hash.call(this, 64, 56)
38189}
38190
38191inherits(Sha224, Sha256)
38192
38193Sha224.prototype.init = function () {
38194 this._a = 0xc1059ed8
38195 this._b = 0x367cd507
38196 this._c = 0x3070dd17
38197 this._d = 0xf70e5939
38198 this._e = 0xffc00b31
38199 this._f = 0x68581511
38200 this._g = 0x64f98fa7
38201 this._h = 0xbefa4fa4
38202
38203 return this
38204}
38205
38206Sha224.prototype._hash = function () {
38207 var H = new Buffer(28)
38208
38209 H.writeInt32BE(this._a, 0)
38210 H.writeInt32BE(this._b, 4)
38211 H.writeInt32BE(this._c, 8)
38212 H.writeInt32BE(this._d, 12)
38213 H.writeInt32BE(this._e, 16)
38214 H.writeInt32BE(this._f, 20)
38215 H.writeInt32BE(this._g, 24)
38216
38217 return H
38218}
38219
38220module.exports = Sha224
38221
38222}).call(this,require("buffer").Buffer)
38223},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
38224(function (Buffer){
38225/**
38226 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38227 * in FIPS 180-2
38228 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38229 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38230 *
38231 */
38232
38233var inherits = require('inherits')
38234var Hash = require('./hash')
38235
38236var K = [
38237 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
38238 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
38239 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
38240 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
38241 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
38242 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
38243 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
38244 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
38245 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
38246 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
38247 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
38248 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
38249 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
38250 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
38251 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
38252 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
38253]
38254
38255var W = new Array(64)
38256
38257function Sha256 () {
38258 this.init()
38259
38260 this._w = W // new Array(64)
38261
38262 Hash.call(this, 64, 56)
38263}
38264
38265inherits(Sha256, Hash)
38266
38267Sha256.prototype.init = function () {
38268 this._a = 0x6a09e667
38269 this._b = 0xbb67ae85
38270 this._c = 0x3c6ef372
38271 this._d = 0xa54ff53a
38272 this._e = 0x510e527f
38273 this._f = 0x9b05688c
38274 this._g = 0x1f83d9ab
38275 this._h = 0x5be0cd19
38276
38277 return this
38278}
38279
38280function ch (x, y, z) {
38281 return z ^ (x & (y ^ z))
38282}
38283
38284function maj (x, y, z) {
38285 return (x & y) | (z & (x | y))
38286}
38287
38288function sigma0 (x) {
38289 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
38290}
38291
38292function sigma1 (x) {
38293 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
38294}
38295
38296function gamma0 (x) {
38297 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
38298}
38299
38300function gamma1 (x) {
38301 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
38302}
38303
38304Sha256.prototype._update = function (M) {
38305 var W = this._w
38306
38307 var a = this._a | 0
38308 var b = this._b | 0
38309 var c = this._c | 0
38310 var d = this._d | 0
38311 var e = this._e | 0
38312 var f = this._f | 0
38313 var g = this._g | 0
38314 var h = this._h | 0
38315
38316 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38317 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
38318
38319 for (var j = 0; j < 64; ++j) {
38320 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
38321 var T2 = (sigma0(a) + maj(a, b, c)) | 0
38322
38323 h = g
38324 g = f
38325 f = e
38326 e = (d + T1) | 0
38327 d = c
38328 c = b
38329 b = a
38330 a = (T1 + T2) | 0
38331 }
38332
38333 this._a = (a + this._a) | 0
38334 this._b = (b + this._b) | 0
38335 this._c = (c + this._c) | 0
38336 this._d = (d + this._d) | 0
38337 this._e = (e + this._e) | 0
38338 this._f = (f + this._f) | 0
38339 this._g = (g + this._g) | 0
38340 this._h = (h + this._h) | 0
38341}
38342
38343Sha256.prototype._hash = function () {
38344 var H = new Buffer(32)
38345
38346 H.writeInt32BE(this._a, 0)
38347 H.writeInt32BE(this._b, 4)
38348 H.writeInt32BE(this._c, 8)
38349 H.writeInt32BE(this._d, 12)
38350 H.writeInt32BE(this._e, 16)
38351 H.writeInt32BE(this._f, 20)
38352 H.writeInt32BE(this._g, 24)
38353 H.writeInt32BE(this._h, 28)
38354
38355 return H
38356}
38357
38358module.exports = Sha256
38359
38360}).call(this,require("buffer").Buffer)
38361},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
38362(function (Buffer){
38363var inherits = require('inherits')
38364var SHA512 = require('./sha512')
38365var Hash = require('./hash')
38366
38367var W = new Array(160)
38368
38369function Sha384 () {
38370 this.init()
38371 this._w = W
38372
38373 Hash.call(this, 128, 112)
38374}
38375
38376inherits(Sha384, SHA512)
38377
38378Sha384.prototype.init = function () {
38379 this._ah = 0xcbbb9d5d
38380 this._bh = 0x629a292a
38381 this._ch = 0x9159015a
38382 this._dh = 0x152fecd8
38383 this._eh = 0x67332667
38384 this._fh = 0x8eb44a87
38385 this._gh = 0xdb0c2e0d
38386 this._hh = 0x47b5481d
38387
38388 this._al = 0xc1059ed8
38389 this._bl = 0x367cd507
38390 this._cl = 0x3070dd17
38391 this._dl = 0xf70e5939
38392 this._el = 0xffc00b31
38393 this._fl = 0x68581511
38394 this._gl = 0x64f98fa7
38395 this._hl = 0xbefa4fa4
38396
38397 return this
38398}
38399
38400Sha384.prototype._hash = function () {
38401 var H = new Buffer(48)
38402
38403 function writeInt64BE (h, l, offset) {
38404 H.writeInt32BE(h, offset)
38405 H.writeInt32BE(l, offset + 4)
38406 }
38407
38408 writeInt64BE(this._ah, this._al, 0)
38409 writeInt64BE(this._bh, this._bl, 8)
38410 writeInt64BE(this._ch, this._cl, 16)
38411 writeInt64BE(this._dh, this._dl, 24)
38412 writeInt64BE(this._eh, this._el, 32)
38413 writeInt64BE(this._fh, this._fl, 40)
38414
38415 return H
38416}
38417
38418module.exports = Sha384
38419
38420}).call(this,require("buffer").Buffer)
38421},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
38422(function (Buffer){
38423var inherits = require('inherits')
38424var Hash = require('./hash')
38425
38426var K = [
38427 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
38428 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
38429 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
38430 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
38431 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
38432 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
38433 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
38434 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
38435 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
38436 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
38437 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
38438 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
38439 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
38440 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
38441 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
38442 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
38443 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
38444 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
38445 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
38446 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
38447 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
38448 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
38449 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
38450 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
38451 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
38452 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
38453 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
38454 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
38455 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
38456 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
38457 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
38458 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
38459 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
38460 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
38461 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
38462 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
38463 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
38464 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
38465 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
38466 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
38467]
38468
38469var W = new Array(160)
38470
38471function Sha512 () {
38472 this.init()
38473 this._w = W
38474
38475 Hash.call(this, 128, 112)
38476}
38477
38478inherits(Sha512, Hash)
38479
38480Sha512.prototype.init = function () {
38481 this._ah = 0x6a09e667
38482 this._bh = 0xbb67ae85
38483 this._ch = 0x3c6ef372
38484 this._dh = 0xa54ff53a
38485 this._eh = 0x510e527f
38486 this._fh = 0x9b05688c
38487 this._gh = 0x1f83d9ab
38488 this._hh = 0x5be0cd19
38489
38490 this._al = 0xf3bcc908
38491 this._bl = 0x84caa73b
38492 this._cl = 0xfe94f82b
38493 this._dl = 0x5f1d36f1
38494 this._el = 0xade682d1
38495 this._fl = 0x2b3e6c1f
38496 this._gl = 0xfb41bd6b
38497 this._hl = 0x137e2179
38498
38499 return this
38500}
38501
38502function Ch (x, y, z) {
38503 return z ^ (x & (y ^ z))
38504}
38505
38506function maj (x, y, z) {
38507 return (x & y) | (z & (x | y))
38508}
38509
38510function sigma0 (x, xl) {
38511 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
38512}
38513
38514function sigma1 (x, xl) {
38515 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
38516}
38517
38518function Gamma0 (x, xl) {
38519 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
38520}
38521
38522function Gamma0l (x, xl) {
38523 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
38524}
38525
38526function Gamma1 (x, xl) {
38527 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
38528}
38529
38530function Gamma1l (x, xl) {
38531 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
38532}
38533
38534function getCarry (a, b) {
38535 return (a >>> 0) < (b >>> 0) ? 1 : 0
38536}
38537
38538Sha512.prototype._update = function (M) {
38539 var W = this._w
38540
38541 var ah = this._ah | 0
38542 var bh = this._bh | 0
38543 var ch = this._ch | 0
38544 var dh = this._dh | 0
38545 var eh = this._eh | 0
38546 var fh = this._fh | 0
38547 var gh = this._gh | 0
38548 var hh = this._hh | 0
38549
38550 var al = this._al | 0
38551 var bl = this._bl | 0
38552 var cl = this._cl | 0
38553 var dl = this._dl | 0
38554 var el = this._el | 0
38555 var fl = this._fl | 0
38556 var gl = this._gl | 0
38557 var hl = this._hl | 0
38558
38559 for (var i = 0; i < 32; i += 2) {
38560 W[i] = M.readInt32BE(i * 4)
38561 W[i + 1] = M.readInt32BE(i * 4 + 4)
38562 }
38563 for (; i < 160; i += 2) {
38564 var xh = W[i - 15 * 2]
38565 var xl = W[i - 15 * 2 + 1]
38566 var gamma0 = Gamma0(xh, xl)
38567 var gamma0l = Gamma0l(xl, xh)
38568
38569 xh = W[i - 2 * 2]
38570 xl = W[i - 2 * 2 + 1]
38571 var gamma1 = Gamma1(xh, xl)
38572 var gamma1l = Gamma1l(xl, xh)
38573
38574 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
38575 var Wi7h = W[i - 7 * 2]
38576 var Wi7l = W[i - 7 * 2 + 1]
38577
38578 var Wi16h = W[i - 16 * 2]
38579 var Wi16l = W[i - 16 * 2 + 1]
38580
38581 var Wil = (gamma0l + Wi7l) | 0
38582 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
38583 Wil = (Wil + gamma1l) | 0
38584 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
38585 Wil = (Wil + Wi16l) | 0
38586 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
38587
38588 W[i] = Wih
38589 W[i + 1] = Wil
38590 }
38591
38592 for (var j = 0; j < 160; j += 2) {
38593 Wih = W[j]
38594 Wil = W[j + 1]
38595
38596 var majh = maj(ah, bh, ch)
38597 var majl = maj(al, bl, cl)
38598
38599 var sigma0h = sigma0(ah, al)
38600 var sigma0l = sigma0(al, ah)
38601 var sigma1h = sigma1(eh, el)
38602 var sigma1l = sigma1(el, eh)
38603
38604 // t1 = h + sigma1 + ch + K[j] + W[j]
38605 var Kih = K[j]
38606 var Kil = K[j + 1]
38607
38608 var chh = Ch(eh, fh, gh)
38609 var chl = Ch(el, fl, gl)
38610
38611 var t1l = (hl + sigma1l) | 0
38612 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
38613 t1l = (t1l + chl) | 0
38614 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
38615 t1l = (t1l + Kil) | 0
38616 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
38617 t1l = (t1l + Wil) | 0
38618 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
38619
38620 // t2 = sigma0 + maj
38621 var t2l = (sigma0l + majl) | 0
38622 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
38623
38624 hh = gh
38625 hl = gl
38626 gh = fh
38627 gl = fl
38628 fh = eh
38629 fl = el
38630 el = (dl + t1l) | 0
38631 eh = (dh + t1h + getCarry(el, dl)) | 0
38632 dh = ch
38633 dl = cl
38634 ch = bh
38635 cl = bl
38636 bh = ah
38637 bl = al
38638 al = (t1l + t2l) | 0
38639 ah = (t1h + t2h + getCarry(al, t1l)) | 0
38640 }
38641
38642 this._al = (this._al + al) | 0
38643 this._bl = (this._bl + bl) | 0
38644 this._cl = (this._cl + cl) | 0
38645 this._dl = (this._dl + dl) | 0
38646 this._el = (this._el + el) | 0
38647 this._fl = (this._fl + fl) | 0
38648 this._gl = (this._gl + gl) | 0
38649 this._hl = (this._hl + hl) | 0
38650
38651 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
38652 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
38653 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
38654 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
38655 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
38656 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
38657 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
38658 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
38659}
38660
38661Sha512.prototype._hash = function () {
38662 var H = new Buffer(64)
38663
38664 function writeInt64BE (h, l, offset) {
38665 H.writeInt32BE(h, offset)
38666 H.writeInt32BE(l, offset + 4)
38667 }
38668
38669 writeInt64BE(this._ah, this._al, 0)
38670 writeInt64BE(this._bh, this._bl, 8)
38671 writeInt64BE(this._ch, this._cl, 16)
38672 writeInt64BE(this._dh, this._dl, 24)
38673 writeInt64BE(this._eh, this._el, 32)
38674 writeInt64BE(this._fh, this._fl, 40)
38675 writeInt64BE(this._gh, this._gl, 48)
38676 writeInt64BE(this._hh, this._hl, 56)
38677
38678 return H
38679}
38680
38681module.exports = Sha512
38682
38683}).call(this,require("buffer").Buffer)
38684},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
38685var isHexPrefixed = require('is-hex-prefixed');
38686
38687/**
38688 * Removes '0x' from a given `String` is present
38689 * @param {String} str the string value
38690 * @return {String|Optional} a string by pass if necessary
38691 */
38692module.exports = function stripHexPrefix(str) {
38693 if (typeof str !== 'string') {
38694 return str;
38695 }
38696
38697 return isHexPrefixed(str) ? str.slice(2) : str;
38698}
38699
38700},{"is-hex-prefixed":64}]},{},[31])(31)
38701});</script>
38702 <script>function convertRippleAdrr(address) {
38703 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
38704 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
38705 )
38706 }
38707
38708function convertRipplePriv(priv) {
38709 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2)
38710}
38711
38712</script>
13661 <script>// Select components from sjcl to suit the crypto operations bip39 requires. 38713 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13662 38714
13663//// base.js 38715//// base.js
@@ -16555,10 +41607,11 @@ var Mnemonic = function(language) {
16555 41607
16556 self.toSeed = function(mnemonic, passphrase) { 41608 self.toSeed = function(mnemonic, passphrase) {
16557 passphrase = passphrase || ''; 41609 passphrase = passphrase || '';
16558 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks 41610 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
41611 var mnemonicNormalized = self.normalizeString(mnemonic);
16559 passphrase = self.normalizeString(passphrase) 41612 passphrase = self.normalizeString(passphrase)
16560 passphrase = "mnemonic" + passphrase; 41613 passphrase = "mnemonic" + passphrase;
16561 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic); 41614 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
16562 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase); 41615 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16563 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512); 41616 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16564 var hashHex = sjcl.codec.hex.fromBits(result); 41617 var hashHex = sjcl.codec.hex.fromBits(result);
@@ -18668,6 +43721,7 @@ window.Entropy = new (function() {
18668 43721
18669 var DOM = {}; 43722 var DOM = {};
18670 DOM.network = $(".network"); 43723 DOM.network = $(".network");
43724 DOM.bip32Client = $("#bip32-client");
18671 DOM.phraseNetwork = $("#network-phrase"); 43725 DOM.phraseNetwork = $("#network-phrase");
18672 DOM.useEntropy = $(".use-entropy"); 43726 DOM.useEntropy = $(".use-entropy");
18673 DOM.entropyContainer = $(".entropy-container"); 43727 DOM.entropyContainer = $(".entropy-container");
@@ -18722,6 +43776,7 @@ window.Entropy = new (function() {
18722 function init() { 43776 function init() {
18723 // Events 43777 // Events
18724 DOM.network.on("change", networkChanged); 43778 DOM.network.on("change", networkChanged);
43779 DOM.bip32Client.on("change", bip32ClientChanged);
18725 DOM.useEntropy.on("change", setEntropyVisibility); 43780 DOM.useEntropy.on("change", setEntropyVisibility);
18726 DOM.entropy.on("input", delayedEntropyChanged); 43781 DOM.entropy.on("input", delayedEntropyChanged);
18727 DOM.entropyMnemonicLength.on("change", entropyChanged); 43782 DOM.entropyMnemonicLength.on("change", entropyChanged);
@@ -18747,6 +43802,7 @@ window.Entropy = new (function() {
18747 hidePending(); 43802 hidePending();
18748 hideValidationError(); 43803 hideValidationError();
18749 populateNetworkSelect(); 43804 populateNetworkSelect();
43805 populateClientSelect();
18750 } 43806 }
18751 43807
18752 // Event handlers 43808 // Event handlers
@@ -18762,6 +43818,23 @@ window.Entropy = new (function() {
18762 } 43818 }
18763 } 43819 }
18764 43820
43821 function bip32ClientChanged(e) {
43822 var clientIndex = DOM.bip32Client.val();
43823 if (clientIndex == "custom") {
43824 DOM.bip32path.prop("readonly", false);
43825 }
43826 else {
43827 DOM.bip32path.prop("readonly", true);
43828 clients[clientIndex].onSelect();
43829 if (seed != null) {
43830 phraseChanged();
43831 }
43832 else {
43833 rootKeyChanged();
43834 }
43835 }
43836 }
43837
18765 function setEntropyVisibility() { 43838 function setEntropyVisibility() {
18766 if (isUsingOwnEntropy()) { 43839 if (isUsingOwnEntropy()) {
18767 DOM.entropyContainer.removeClass("hidden"); 43840 DOM.entropyContainer.removeClass("hidden");
@@ -19209,6 +44282,20 @@ window.Entropy = new (function() {
19209 if (useHardenedAddresses) { 44282 if (useHardenedAddresses) {
19210 indexText = indexText + "'"; 44283 indexText = indexText + "'";
19211 } 44284 }
44285 // Ethereum values are different
44286 if (networks[DOM.network.val()].name == "Ethereum") {
44287 var privKeyBuffer = key.privKey.d.toBuffer();
44288 privkey = privKeyBuffer.toString('hex');
44289 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
44290 var hexAddress = addressBuffer.toString('hex');
44291 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
44292 address = ethUtil.addHexPrefix(checksumAddress);
44293 }
44294 // Ripple values are different
44295 if (networks[DOM.network.val()].name == "Ripple") {
44296 privkey = convertRipplePriv(privkey);
44297 address = convertRippleAdrr(address);
44298 }
19212 addAddressToList(indexText, address, pubkey, privkey); 44299 addAddressToList(indexText, address, pubkey, privkey);
19213 }, 50) 44300 }, 50)
19214 } 44301 }
@@ -19347,6 +44434,16 @@ window.Entropy = new (function() {
19347 } 44434 }
19348 } 44435 }
19349 44436
44437 function populateClientSelect() {
44438 for (var i=0; i<clients.length; i++) {
44439 var client = clients[i];
44440 var option = $("<option>");
44441 option.attr("value", i);
44442 option.text(client.name);
44443 DOM.bip32Client.append(option);
44444 }
44445 }
44446
19350 function getLanguage() { 44447 function getLanguage() {
19351 var defaultLanguage = "english"; 44448 var defaultLanguage = "english";
19352 // Try to get from existing phrase 44449 // Try to get from existing phrase
@@ -19692,10 +44789,10 @@ window.Entropy = new (function() {
19692 }, 44789 },
19693 }, 44790 },
19694 { 44791 {
19695 name: "Litecoin", 44792 name: "CLAM",
19696 onSelect: function() { 44793 onSelect: function() {
19697 network = bitcoin.networks.litecoin; 44794 network = bitcoin.networks.clam;
19698 DOM.bip44coin.val(2); 44795 DOM.bip44coin.val(23);
19699 }, 44796 },
19700 }, 44797 },
19701 { 44798 {
@@ -19706,6 +44803,62 @@ window.Entropy = new (function() {
19706 }, 44803 },
19707 }, 44804 },
19708 { 44805 {
44806 name: "DASH",
44807 onSelect: function() {
44808 network = bitcoin.networks.dash;
44809 DOM.bip44coin.val(5);
44810 },
44811 },
44812 {
44813 name: "Ethereum",
44814 onSelect: function() {
44815 network = bitcoin.networks.bitcoin;
44816 DOM.bip44coin.val(60);
44817 },
44818 },
44819 {
44820 name: "GAME",
44821 onSelect: function() {
44822 network = bitcoin.networks.game;
44823 DOM.bip44coin.val(101);
44824 },
44825 },
44826 {
44827 name: "Jumbucks",
44828 onSelect: function() {
44829 network = bitcoin.networks.jumbucks;
44830 DOM.bip44coin.val(26);
44831 },
44832 },
44833 {
44834 name: "Litecoin",
44835 onSelect: function() {
44836 network = bitcoin.networks.litecoin;
44837 DOM.bip44coin.val(2);
44838 },
44839 },
44840 {
44841 name: "Namecoin",
44842 onSelect: function() {
44843 network = bitcoin.networks.namecoin;
44844 DOM.bip44coin.val(7);
44845 },
44846 },
44847 {
44848 name: "Peercoin",
44849 onSelect: function() {
44850 network = bitcoin.networks.peercoin;
44851 DOM.bip44coin.val(6);
44852 },
44853 },
44854 {
44855 name: "Ripple",
44856 onSelect: function() {
44857 network = bitcoin.networks.bitcoin;
44858 DOM.bip44coin.val(144);
44859 },
44860 },
44861 {
19709 name: "ShadowCash", 44862 name: "ShadowCash",
19710 onSelect: function() { 44863 onSelect: function() {
19711 network = bitcoin.networks.shadow; 44864 network = bitcoin.networks.shadow;
@@ -19733,41 +44886,30 @@ window.Entropy = new (function() {
19733 DOM.bip44coin.val(1); 44886 DOM.bip44coin.val(1);
19734 }, 44887 },
19735 }, 44888 },
44889 ]
44890
44891 var clients = [
19736 { 44892 {
19737 name: "Jumbucks", 44893 name: "Bitcoin Core",
19738 onSelect: function() {
19739 network = bitcoin.networks.jumbucks;
19740 DOM.bip44coin.val(26);
19741 },
19742 },
19743 {
19744 name: "CLAM",
19745 onSelect: function() { 44894 onSelect: function() {
19746 network = bitcoin.networks.clam; 44895 DOM.bip32path.val("m/0'/0'");
19747 DOM.bip44coin.val(23); 44896 DOM.hardenedAddresses.prop('checked', true);
19748 }, 44897 },
19749 }, 44898 },
19750 { 44899 {
19751 name: "DASH", 44900 name: "blockchain.info",
19752 onSelect: function() { 44901 onSelect: function() {
19753 network = bitcoin.networks.dash; 44902 DOM.bip32path.val("m/44'/0'/0'");
19754 DOM.bip44coin.val(5); 44903 DOM.hardenedAddresses.prop('checked', false);
19755 }, 44904 },
19756 }, 44905 },
19757 { 44906 {
19758 name: "Namecoin", 44907 name: "MultiBit HD",
19759 onSelect: function() { 44908 onSelect: function() {
19760 network = bitcoin.networks.namecoin; 44909 DOM.bip32path.val("m/0'/0");
19761 DOM.bip44coin.val(7); 44910 DOM.hardenedAddresses.prop('checked', false);
19762 },
19763 },
19764 {
19765 name: "Peercoin",
19766 onSelect: function() {
19767 network = bitcoin.networks.peercoin;
19768 DOM.bip44coin.val(6);
19769 }, 44911 },
19770 }, 44912 }
19771 ] 44913 ]
19772 44914
19773 init(); 44915 init();
diff --git a/compile.py b/compile.py
index 1ab3328..ac95273 100644
--- a/compile.py
+++ b/compile.py
@@ -6,7 +6,7 @@ import datetime
6 6
7# It removes script and style tags and replaces with the file content. 7# It removes script and style tags and replaces with the file content.
8 8
9f = open('src/index.html') 9f = open('src/index.html', "r", encoding="utf-8")
10page = f.read() 10page = f.read()
11f.close() 11f.close()
12 12
@@ -18,7 +18,7 @@ scripts = scriptsFinder.findall(page)
18 18
19for script in scripts: 19for script in scripts:
20 filename = os.path.join("src", script) 20 filename = os.path.join("src", script)
21 s = open(filename) 21 s = open(filename, "r", encoding="utf-8")
22 scriptContent = "<script>%s</script>" % s.read() 22 scriptContent = "<script>%s</script>" % s.read()
23 s.close() 23 s.close()
24 scriptTag = """<script src="%s"></script>""" % script 24 scriptTag = """<script src="%s"></script>""" % script
@@ -32,7 +32,7 @@ styles = stylesFinder.findall(page)
32 32
33for style in styles: 33for style in styles:
34 filename = os.path.join("src", style) 34 filename = os.path.join("src", style)
35 s = open(filename) 35 s = open(filename, "r", encoding="utf-8")
36 styleContent = "<style>%s</style>" % s.read() 36 styleContent = "<style>%s</style>" % s.read()
37 s.close() 37 s.close()
38 styleTag = """<link rel="stylesheet" href="%s">""" % style 38 styleTag = """<link rel="stylesheet" href="%s">""" % style
@@ -41,8 +41,8 @@ for style in styles:
41 41
42# Write the standalone file 42# Write the standalone file
43 43
44f = open('bip39-standalone.html', 'w') 44f = open('bip39-standalone.html', 'w', encoding="utf-8")
45f.write(page) 45f.write(page)
46f.close() 46f.close()
47 47
48print "%s - DONE" % datetime.datetime.now() 48print("%s - DONE" % datetime.datetime.now())
diff --git a/readme.md b/readme.md
index 6926e70..ba3a165 100644
--- a/readme.md
+++ b/readme.md
@@ -28,6 +28,28 @@ import private keys into a wallet or supply someone with a list of addresses.
28 28
29The BIP32 keys can be used at [bip32.org](https://bip32.org) if desired. 29The BIP32 keys can be used at [bip32.org](https://bip32.org) if desired.
30 30
31## Donations
32
33Since this project is the efforts of many people, most of which don't appear in
34the obvious places like code or issues, donating to the project itself causes
35significant operational difficulties.
36
37As a result, if you would like to support this project financially you are
38encouraged to donate to one of the many groups that makes the internet a place
39amenable to projects such as this one.
40
41[Donation-accepting organizations and projects](https://en.bitcoin.it/wiki/Donation-accepting_organizations_and_projects)
42
43If the list is too difficult to choose from, the EFF is a good choice.
44
45[Electronic Frontier Foundation](https://supporters.eff.org/donate)
46
47or for a direct bitcoin address, consider donating to the
48[Free Software Foundation](https://www.fsf.org/about/ways-to-donate/)
49at 1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN
50
51![alt text](https://static.fsf.org/nosvn/images/bitcoin_qrcodes/fsf.png "FSF Bitcoin Address")
52
31## Making changes 53## Making changes
32 54
33Please do not make modifications to `bip39-standalone.html`, since they will 55Please do not make modifications to `bip39-standalone.html`, since they will
diff --git a/src/index.html b/src/index.html
index 964746e..a0f8bb1 100644
--- a/src/index.html
+++ b/src/index.html
@@ -8,6 +8,7 @@
8 <meta content="width=device-width, initial-scale=1.0" name="viewport" /> 8 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
9 <meta content="bitcoin mnemonic converter" name="description" /> 9 <meta content="bitcoin mnemonic converter" name="description" />
10 <meta content="Ian Coleman" name="author" /> 10 <meta content="Ian Coleman" name="author" />
11 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
11 12
12 <style> 13 <style>
13 body { 14 body {
@@ -182,9 +183,9 @@
182 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label> 183 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
183 <div class="col-sm-9"> 184 <div class="col-sm-9">
184 <select class="mnemonic-length form-control"> 185 <select class="mnemonic-length form-control">
185 <option value="raw" data-translate>From entropy length (3 words per 32 bits)</option> 186 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
186 <option value="12">12 <span data-translate>Words</span></option> 187 <option value="12">12 <span data-translate>Words</span></option>
187 <option value="15" selected>15 <span data-translate>Words</option> 188 <option value="15">15 <span data-translate>Words</option>
188 <option value="18">18 <span data-translate>Words</span></option> 189 <option value="18">18 <span data-translate>Words</span></option>
189 <option value="21">21 <span data-translate>Words</span></option> 190 <option value="21">21 <span data-translate>Words</span></option>
190 <option value="24">24 <span data-translate>Words</span></option> 191 <option value="24">24 <span data-translate>Words</span></option>
@@ -368,6 +369,15 @@
368 </p> 369 </p>
369 </div> 370 </div>
370 <div class="form-group"> 371 <div class="form-group">
372 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
373 <div class="col-sm-10">
374 <select id="bip32-client" class="client form-control">
375 <option value="custom">Custom derivation path</option>
376 <!-- populated by javascript -->
377 </select>
378 </div>
379 </div>
380 <div class="form-group">
371 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label> 381 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
372 <div class="col-sm-10"> 382 <div class="col-sm-10">
373 <input id="bip32-path" type="text" class="path form-control" value="m/0"> 383 <input id="bip32-path" type="text" class="path form-control" value="m/0">
@@ -393,6 +403,18 @@
393 </div> 403 </div>
394 </div> 404 </div>
395 <div class="form-group"> 405 <div class="form-group">
406 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
407 <div class="col-sm-10">
408 <p class="form-control no-border">
409 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
410 </p>
411 <p class="form-control no-border">
412 <span data-translate>For more info see</span>
413 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
414 </p>
415 </div>
416 </div>
417 <div class="form-group">
396 <label class="col-sm-2 control-label" data-translate>Block Explorers</label> 418 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
397 <div class="col-sm-10"> 419 <div class="col-sm-10">
398 <p class="form-control no-border"> 420 <p class="form-control no-border">
@@ -651,12 +673,17 @@
651 <td class="privkey"><span data-show-qr></span></td> 673 <td class="privkey"><span data-show-qr></span></td>
652 </tr> 674 </tr>
653 </script> 675 </script>
676 <script src="js/polyfill.es6.js"></script>
677 <script src="js/basex.js"></script>
678 <script src="js/unorm.js"></script>
654 <script src="js/jquery.min.js"></script> 679 <script src="js/jquery.min.js"></script>
655 <script src="js/bootstrap.min.js"></script> 680 <script src="js/bootstrap.min.js"></script>
656 <script src="js/levenshtein.js"></script> 681 <script src="js/levenshtein.js"></script>
657 <script src="js/jquery.qrcode.min.js"></script> 682 <script src="js/jquery.qrcode.min.js"></script>
658 <script src="js/bitcoinjs-1-5-7.js"></script> 683 <script src="js/bitcoinjs-1-5-7.js"></script>
659 <script src="js/bitcoinjs-extensions.js"></script> 684 <script src="js/bitcoinjs-extensions.js"></script>
685 <script src="js/ethereumjs-util.js"></script>
686 <script src="js/ripple-util.js"></script>
660 <script src="js/sjcl-bip39.js"></script> 687 <script src="js/sjcl-bip39.js"></script>
661 <script src="js/translate.js"></script> 688 <script src="js/translate.js"></script>
662 <script src="js/phrases_en.js"></script> 689 <script src="js/phrases_en.js"></script>
diff --git a/src/js/basex.js b/src/js/basex.js
new file mode 100644
index 0000000..1ec705d
--- /dev/null
+++ b/src/js/basex.js
@@ -0,0 +1,2010 @@
1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2'use strict'
3
4exports.byteLength = byteLength
5exports.toByteArray = toByteArray
6exports.fromByteArray = fromByteArray
7
8var lookup = []
9var revLookup = []
10var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11
12var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
13for (var i = 0, len = code.length; i < len; ++i) {
14 lookup[i] = code[i]
15 revLookup[code.charCodeAt(i)] = i
16}
17
18revLookup['-'.charCodeAt(0)] = 62
19revLookup['_'.charCodeAt(0)] = 63
20
21function placeHoldersCount (b64) {
22 var len = b64.length
23 if (len % 4 > 0) {
24 throw new Error('Invalid string. Length must be a multiple of 4')
25 }
26
27 // the number of equal signs (place holders)
28 // if there are two placeholders, than the two characters before it
29 // represent one byte
30 // if there is only one, then the three characters before it represent 2 bytes
31 // this is just a cheap hack to not do indexOf twice
32 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
33}
34
35function byteLength (b64) {
36 // base64 is 4/3 + up to two characters of the original data
37 return b64.length * 3 / 4 - placeHoldersCount(b64)
38}
39
40function toByteArray (b64) {
41 var i, j, l, tmp, placeHolders, arr
42 var len = b64.length
43 placeHolders = placeHoldersCount(b64)
44
45 arr = new Arr(len * 3 / 4 - placeHolders)
46
47 // if there are placeholders, only get up to the last complete 4 chars
48 l = placeHolders > 0 ? len - 4 : len
49
50 var L = 0
51
52 for (i = 0, j = 0; i < l; i += 4, j += 3) {
53 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
54 arr[L++] = (tmp >> 16) & 0xFF
55 arr[L++] = (tmp >> 8) & 0xFF
56 arr[L++] = tmp & 0xFF
57 }
58
59 if (placeHolders === 2) {
60 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
61 arr[L++] = tmp & 0xFF
62 } else if (placeHolders === 1) {
63 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
64 arr[L++] = (tmp >> 8) & 0xFF
65 arr[L++] = tmp & 0xFF
66 }
67
68 return arr
69}
70
71function tripletToBase64 (num) {
72 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
73}
74
75function encodeChunk (uint8, start, end) {
76 var tmp
77 var output = []
78 for (var i = start; i < end; i += 3) {
79 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
80 output.push(tripletToBase64(tmp))
81 }
82 return output.join('')
83}
84
85function fromByteArray (uint8) {
86 var tmp
87 var len = uint8.length
88 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
89 var output = ''
90 var parts = []
91 var maxChunkLength = 16383 // must be multiple of 3
92
93 // go through the array every three bytes, we'll deal with trailing stuff later
94 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
95 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
96 }
97
98 // pad the end with zeros, but make sure to not forget the extra bytes
99 if (extraBytes === 1) {
100 tmp = uint8[len - 1]
101 output += lookup[tmp >> 2]
102 output += lookup[(tmp << 4) & 0x3F]
103 output += '=='
104 } else if (extraBytes === 2) {
105 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
106 output += lookup[tmp >> 10]
107 output += lookup[(tmp >> 4) & 0x3F]
108 output += lookup[(tmp << 2) & 0x3F]
109 output += '='
110 }
111
112 parts.push(output)
113
114 return parts.join('')
115}
116
117},{}],2:[function(require,module,exports){
118/*!
119 * The buffer module from node.js, for the browser.
120 *
121 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
122 * @license MIT
123 */
124/* eslint-disable no-proto */
125
126'use strict'
127
128var base64 = require('base64-js')
129var ieee754 = require('ieee754')
130
131exports.Buffer = Buffer
132exports.SlowBuffer = SlowBuffer
133exports.INSPECT_MAX_BYTES = 50
134
135var K_MAX_LENGTH = 0x7fffffff
136exports.kMaxLength = K_MAX_LENGTH
137
138/**
139 * If `Buffer.TYPED_ARRAY_SUPPORT`:
140 * === true Use Uint8Array implementation (fastest)
141 * === false Print warning and recommend using `buffer` v4.x which has an Object
142 * implementation (most compatible, even IE6)
143 *
144 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
145 * Opera 11.6+, iOS 4.2+.
146 *
147 * We report that the browser does not support typed arrays if the are not subclassable
148 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
149 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
150 * for __proto__ and has a buggy typed array implementation.
151 */
152Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
153
154if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
155 typeof console.error === 'function') {
156 console.error(
157 'This browser lacks typed array (Uint8Array) support which is required by ' +
158 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
159 )
160}
161
162function typedArraySupport () {
163 // Can typed array instances can be augmented?
164 try {
165 var arr = new Uint8Array(1)
166 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
167 return arr.foo() === 42
168 } catch (e) {
169 return false
170 }
171}
172
173function createBuffer (length) {
174 if (length > K_MAX_LENGTH) {
175 throw new RangeError('Invalid typed array length')
176 }
177 // Return an augmented `Uint8Array` instance
178 var buf = new Uint8Array(length)
179 buf.__proto__ = Buffer.prototype
180 return buf
181}
182
183/**
184 * The Buffer constructor returns instances of `Uint8Array` that have their
185 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
186 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
187 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
188 * returns a single octet.
189 *
190 * The `Uint8Array` prototype remains unmodified.
191 */
192
193function Buffer (arg, encodingOrOffset, length) {
194 // Common case.
195 if (typeof arg === 'number') {
196 if (typeof encodingOrOffset === 'string') {
197 throw new Error(
198 'If encoding is specified then the first argument must be a string'
199 )
200 }
201 return allocUnsafe(arg)
202 }
203 return from(arg, encodingOrOffset, length)
204}
205
206// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
207if (typeof Symbol !== 'undefined' && Symbol.species &&
208 Buffer[Symbol.species] === Buffer) {
209 Object.defineProperty(Buffer, Symbol.species, {
210 value: null,
211 configurable: true,
212 enumerable: false,
213 writable: false
214 })
215}
216
217Buffer.poolSize = 8192 // not used by this implementation
218
219function from (value, encodingOrOffset, length) {
220 if (typeof value === 'number') {
221 throw new TypeError('"value" argument must not be a number')
222 }
223
224 if (value instanceof ArrayBuffer) {
225 return fromArrayBuffer(value, encodingOrOffset, length)
226 }
227
228 if (typeof value === 'string') {
229 return fromString(value, encodingOrOffset)
230 }
231
232 return fromObject(value)
233}
234
235/**
236 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
237 * if value is a number.
238 * Buffer.from(str[, encoding])
239 * Buffer.from(array)
240 * Buffer.from(buffer)
241 * Buffer.from(arrayBuffer[, byteOffset[, length]])
242 **/
243Buffer.from = function (value, encodingOrOffset, length) {
244 return from(value, encodingOrOffset, length)
245}
246
247// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
248// https://github.com/feross/buffer/pull/148
249Buffer.prototype.__proto__ = Uint8Array.prototype
250Buffer.__proto__ = Uint8Array
251
252function assertSize (size) {
253 if (typeof size !== 'number') {
254 throw new TypeError('"size" argument must be a number')
255 } else if (size < 0) {
256 throw new RangeError('"size" argument must not be negative')
257 }
258}
259
260function alloc (size, fill, encoding) {
261 assertSize(size)
262 if (size <= 0) {
263 return createBuffer(size)
264 }
265 if (fill !== undefined) {
266 // Only pay attention to encoding if it's a string. This
267 // prevents accidentally sending in a number that would
268 // be interpretted as a start offset.
269 return typeof encoding === 'string'
270 ? createBuffer(size).fill(fill, encoding)
271 : createBuffer(size).fill(fill)
272 }
273 return createBuffer(size)
274}
275
276/**
277 * Creates a new filled Buffer instance.
278 * alloc(size[, fill[, encoding]])
279 **/
280Buffer.alloc = function (size, fill, encoding) {
281 return alloc(size, fill, encoding)
282}
283
284function allocUnsafe (size) {
285 assertSize(size)
286 return createBuffer(size < 0 ? 0 : checked(size) | 0)
287}
288
289/**
290 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
291 * */
292Buffer.allocUnsafe = function (size) {
293 return allocUnsafe(size)
294}
295/**
296 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
297 */
298Buffer.allocUnsafeSlow = function (size) {
299 return allocUnsafe(size)
300}
301
302function fromString (string, encoding) {
303 if (typeof encoding !== 'string' || encoding === '') {
304 encoding = 'utf8'
305 }
306
307 if (!Buffer.isEncoding(encoding)) {
308 throw new TypeError('"encoding" must be a valid string encoding')
309 }
310
311 var length = byteLength(string, encoding) | 0
312 var buf = createBuffer(length)
313
314 var actual = buf.write(string, encoding)
315
316 if (actual !== length) {
317 // Writing a hex string, for example, that contains invalid characters will
318 // cause everything after the first invalid character to be ignored. (e.g.
319 // 'abxxcd' will be treated as 'ab')
320 buf = buf.slice(0, actual)
321 }
322
323 return buf
324}
325
326function fromArrayLike (array) {
327 var length = array.length < 0 ? 0 : checked(array.length) | 0
328 var buf = createBuffer(length)
329 for (var i = 0; i < length; i += 1) {
330 buf[i] = array[i] & 255
331 }
332 return buf
333}
334
335function fromArrayBuffer (array, byteOffset, length) {
336 if (byteOffset < 0 || array.byteLength < byteOffset) {
337 throw new RangeError('\'offset\' is out of bounds')
338 }
339
340 if (array.byteLength < byteOffset + (length || 0)) {
341 throw new RangeError('\'length\' is out of bounds')
342 }
343
344 var buf
345 if (byteOffset === undefined && length === undefined) {
346 buf = new Uint8Array(array)
347 } else if (length === undefined) {
348 buf = new Uint8Array(array, byteOffset)
349 } else {
350 buf = new Uint8Array(array, byteOffset, length)
351 }
352
353 // Return an augmented `Uint8Array` instance
354 buf.__proto__ = Buffer.prototype
355 return buf
356}
357
358function fromObject (obj) {
359 if (Buffer.isBuffer(obj)) {
360 var len = checked(obj.length) | 0
361 var buf = createBuffer(len)
362
363 if (buf.length === 0) {
364 return buf
365 }
366
367 obj.copy(buf, 0, 0, len)
368 return buf
369 }
370
371 if (obj) {
372 if (isArrayBufferView(obj) || 'length' in obj) {
373 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
374 return createBuffer(0)
375 }
376 return fromArrayLike(obj)
377 }
378
379 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
380 return fromArrayLike(obj.data)
381 }
382 }
383
384 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
385}
386
387function checked (length) {
388 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
389 // length is NaN (which is otherwise coerced to zero.)
390 if (length >= K_MAX_LENGTH) {
391 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
392 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
393 }
394 return length | 0
395}
396
397function SlowBuffer (length) {
398 if (+length != length) { // eslint-disable-line eqeqeq
399 length = 0
400 }
401 return Buffer.alloc(+length)
402}
403
404Buffer.isBuffer = function isBuffer (b) {
405 return b != null && b._isBuffer === true
406}
407
408Buffer.compare = function compare (a, b) {
409 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
410 throw new TypeError('Arguments must be Buffers')
411 }
412
413 if (a === b) return 0
414
415 var x = a.length
416 var y = b.length
417
418 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
419 if (a[i] !== b[i]) {
420 x = a[i]
421 y = b[i]
422 break
423 }
424 }
425
426 if (x < y) return -1
427 if (y < x) return 1
428 return 0
429}
430
431Buffer.isEncoding = function isEncoding (encoding) {
432 switch (String(encoding).toLowerCase()) {
433 case 'hex':
434 case 'utf8':
435 case 'utf-8':
436 case 'ascii':
437 case 'latin1':
438 case 'binary':
439 case 'base64':
440 case 'ucs2':
441 case 'ucs-2':
442 case 'utf16le':
443 case 'utf-16le':
444 return true
445 default:
446 return false
447 }
448}
449
450Buffer.concat = function concat (list, length) {
451 if (!Array.isArray(list)) {
452 throw new TypeError('"list" argument must be an Array of Buffers')
453 }
454
455 if (list.length === 0) {
456 return Buffer.alloc(0)
457 }
458
459 var i
460 if (length === undefined) {
461 length = 0
462 for (i = 0; i < list.length; ++i) {
463 length += list[i].length
464 }
465 }
466
467 var buffer = Buffer.allocUnsafe(length)
468 var pos = 0
469 for (i = 0; i < list.length; ++i) {
470 var buf = list[i]
471 if (!Buffer.isBuffer(buf)) {
472 throw new TypeError('"list" argument must be an Array of Buffers')
473 }
474 buf.copy(buffer, pos)
475 pos += buf.length
476 }
477 return buffer
478}
479
480function byteLength (string, encoding) {
481 if (Buffer.isBuffer(string)) {
482 return string.length
483 }
484 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
485 return string.byteLength
486 }
487 if (typeof string !== 'string') {
488 string = '' + string
489 }
490
491 var len = string.length
492 if (len === 0) return 0
493
494 // Use a for loop to avoid recursion
495 var loweredCase = false
496 for (;;) {
497 switch (encoding) {
498 case 'ascii':
499 case 'latin1':
500 case 'binary':
501 return len
502 case 'utf8':
503 case 'utf-8':
504 case undefined:
505 return utf8ToBytes(string).length
506 case 'ucs2':
507 case 'ucs-2':
508 case 'utf16le':
509 case 'utf-16le':
510 return len * 2
511 case 'hex':
512 return len >>> 1
513 case 'base64':
514 return base64ToBytes(string).length
515 default:
516 if (loweredCase) return utf8ToBytes(string).length // assume utf8
517 encoding = ('' + encoding).toLowerCase()
518 loweredCase = true
519 }
520 }
521}
522Buffer.byteLength = byteLength
523
524function slowToString (encoding, start, end) {
525 var loweredCase = false
526
527 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
528 // property of a typed array.
529
530 // This behaves neither like String nor Uint8Array in that we set start/end
531 // to their upper/lower bounds if the value passed is out of range.
532 // undefined is handled specially as per ECMA-262 6th Edition,
533 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
534 if (start === undefined || start < 0) {
535 start = 0
536 }
537 // Return early if start > this.length. Done here to prevent potential uint32
538 // coercion fail below.
539 if (start > this.length) {
540 return ''
541 }
542
543 if (end === undefined || end > this.length) {
544 end = this.length
545 }
546
547 if (end <= 0) {
548 return ''
549 }
550
551 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
552 end >>>= 0
553 start >>>= 0
554
555 if (end <= start) {
556 return ''
557 }
558
559 if (!encoding) encoding = 'utf8'
560
561 while (true) {
562 switch (encoding) {
563 case 'hex':
564 return hexSlice(this, start, end)
565
566 case 'utf8':
567 case 'utf-8':
568 return utf8Slice(this, start, end)
569
570 case 'ascii':
571 return asciiSlice(this, start, end)
572
573 case 'latin1':
574 case 'binary':
575 return latin1Slice(this, start, end)
576
577 case 'base64':
578 return base64Slice(this, start, end)
579
580 case 'ucs2':
581 case 'ucs-2':
582 case 'utf16le':
583 case 'utf-16le':
584 return utf16leSlice(this, start, end)
585
586 default:
587 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
588 encoding = (encoding + '').toLowerCase()
589 loweredCase = true
590 }
591 }
592}
593
594// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
595// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
596// reliably in a browserify context because there could be multiple different
597// copies of the 'buffer' package in use. This method works even for Buffer
598// instances that were created from another copy of the `buffer` package.
599// See: https://github.com/feross/buffer/issues/154
600Buffer.prototype._isBuffer = true
601
602function swap (b, n, m) {
603 var i = b[n]
604 b[n] = b[m]
605 b[m] = i
606}
607
608Buffer.prototype.swap16 = function swap16 () {
609 var len = this.length
610 if (len % 2 !== 0) {
611 throw new RangeError('Buffer size must be a multiple of 16-bits')
612 }
613 for (var i = 0; i < len; i += 2) {
614 swap(this, i, i + 1)
615 }
616 return this
617}
618
619Buffer.prototype.swap32 = function swap32 () {
620 var len = this.length
621 if (len % 4 !== 0) {
622 throw new RangeError('Buffer size must be a multiple of 32-bits')
623 }
624 for (var i = 0; i < len; i += 4) {
625 swap(this, i, i + 3)
626 swap(this, i + 1, i + 2)
627 }
628 return this
629}
630
631Buffer.prototype.swap64 = function swap64 () {
632 var len = this.length
633 if (len % 8 !== 0) {
634 throw new RangeError('Buffer size must be a multiple of 64-bits')
635 }
636 for (var i = 0; i < len; i += 8) {
637 swap(this, i, i + 7)
638 swap(this, i + 1, i + 6)
639 swap(this, i + 2, i + 5)
640 swap(this, i + 3, i + 4)
641 }
642 return this
643}
644
645Buffer.prototype.toString = function toString () {
646 var length = this.length
647 if (length === 0) return ''
648 if (arguments.length === 0) return utf8Slice(this, 0, length)
649 return slowToString.apply(this, arguments)
650}
651
652Buffer.prototype.equals = function equals (b) {
653 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
654 if (this === b) return true
655 return Buffer.compare(this, b) === 0
656}
657
658Buffer.prototype.inspect = function inspect () {
659 var str = ''
660 var max = exports.INSPECT_MAX_BYTES
661 if (this.length > 0) {
662 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
663 if (this.length > max) str += ' ... '
664 }
665 return '<Buffer ' + str + '>'
666}
667
668Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
669 if (!Buffer.isBuffer(target)) {
670 throw new TypeError('Argument must be a Buffer')
671 }
672
673 if (start === undefined) {
674 start = 0
675 }
676 if (end === undefined) {
677 end = target ? target.length : 0
678 }
679 if (thisStart === undefined) {
680 thisStart = 0
681 }
682 if (thisEnd === undefined) {
683 thisEnd = this.length
684 }
685
686 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
687 throw new RangeError('out of range index')
688 }
689
690 if (thisStart >= thisEnd && start >= end) {
691 return 0
692 }
693 if (thisStart >= thisEnd) {
694 return -1
695 }
696 if (start >= end) {
697 return 1
698 }
699
700 start >>>= 0
701 end >>>= 0
702 thisStart >>>= 0
703 thisEnd >>>= 0
704
705 if (this === target) return 0
706
707 var x = thisEnd - thisStart
708 var y = end - start
709 var len = Math.min(x, y)
710
711 var thisCopy = this.slice(thisStart, thisEnd)
712 var targetCopy = target.slice(start, end)
713
714 for (var i = 0; i < len; ++i) {
715 if (thisCopy[i] !== targetCopy[i]) {
716 x = thisCopy[i]
717 y = targetCopy[i]
718 break
719 }
720 }
721
722 if (x < y) return -1
723 if (y < x) return 1
724 return 0
725}
726
727// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
728// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
729//
730// Arguments:
731// - buffer - a Buffer to search
732// - val - a string, Buffer, or number
733// - byteOffset - an index into `buffer`; will be clamped to an int32
734// - encoding - an optional encoding, relevant is val is a string
735// - dir - true for indexOf, false for lastIndexOf
736function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
737 // Empty buffer means no match
738 if (buffer.length === 0) return -1
739
740 // Normalize byteOffset
741 if (typeof byteOffset === 'string') {
742 encoding = byteOffset
743 byteOffset = 0
744 } else if (byteOffset > 0x7fffffff) {
745 byteOffset = 0x7fffffff
746 } else if (byteOffset < -0x80000000) {
747 byteOffset = -0x80000000
748 }
749 byteOffset = +byteOffset // Coerce to Number.
750 if (numberIsNaN(byteOffset)) {
751 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
752 byteOffset = dir ? 0 : (buffer.length - 1)
753 }
754
755 // Normalize byteOffset: negative offsets start from the end of the buffer
756 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
757 if (byteOffset >= buffer.length) {
758 if (dir) return -1
759 else byteOffset = buffer.length - 1
760 } else if (byteOffset < 0) {
761 if (dir) byteOffset = 0
762 else return -1
763 }
764
765 // Normalize val
766 if (typeof val === 'string') {
767 val = Buffer.from(val, encoding)
768 }
769
770 // Finally, search either indexOf (if dir is true) or lastIndexOf
771 if (Buffer.isBuffer(val)) {
772 // Special case: looking for empty string/buffer always fails
773 if (val.length === 0) {
774 return -1
775 }
776 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
777 } else if (typeof val === 'number') {
778 val = val & 0xFF // Search for a byte value [0-255]
779 if (typeof Uint8Array.prototype.indexOf === 'function') {
780 if (dir) {
781 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
782 } else {
783 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
784 }
785 }
786 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
787 }
788
789 throw new TypeError('val must be string, number or Buffer')
790}
791
792function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
793 var indexSize = 1
794 var arrLength = arr.length
795 var valLength = val.length
796
797 if (encoding !== undefined) {
798 encoding = String(encoding).toLowerCase()
799 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
800 encoding === 'utf16le' || encoding === 'utf-16le') {
801 if (arr.length < 2 || val.length < 2) {
802 return -1
803 }
804 indexSize = 2
805 arrLength /= 2
806 valLength /= 2
807 byteOffset /= 2
808 }
809 }
810
811 function read (buf, i) {
812 if (indexSize === 1) {
813 return buf[i]
814 } else {
815 return buf.readUInt16BE(i * indexSize)
816 }
817 }
818
819 var i
820 if (dir) {
821 var foundIndex = -1
822 for (i = byteOffset; i < arrLength; i++) {
823 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
824 if (foundIndex === -1) foundIndex = i
825 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
826 } else {
827 if (foundIndex !== -1) i -= i - foundIndex
828 foundIndex = -1
829 }
830 }
831 } else {
832 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
833 for (i = byteOffset; i >= 0; i--) {
834 var found = true
835 for (var j = 0; j < valLength; j++) {
836 if (read(arr, i + j) !== read(val, j)) {
837 found = false
838 break
839 }
840 }
841 if (found) return i
842 }
843 }
844
845 return -1
846}
847
848Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
849 return this.indexOf(val, byteOffset, encoding) !== -1
850}
851
852Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
853 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
854}
855
856Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
857 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
858}
859
860function hexWrite (buf, string, offset, length) {
861 offset = Number(offset) || 0
862 var remaining = buf.length - offset
863 if (!length) {
864 length = remaining
865 } else {
866 length = Number(length)
867 if (length > remaining) {
868 length = remaining
869 }
870 }
871
872 // must be an even number of digits
873 var strLen = string.length
874 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
875
876 if (length > strLen / 2) {
877 length = strLen / 2
878 }
879 for (var i = 0; i < length; ++i) {
880 var parsed = parseInt(string.substr(i * 2, 2), 16)
881 if (numberIsNaN(parsed)) return i
882 buf[offset + i] = parsed
883 }
884 return i
885}
886
887function utf8Write (buf, string, offset, length) {
888 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
889}
890
891function asciiWrite (buf, string, offset, length) {
892 return blitBuffer(asciiToBytes(string), buf, offset, length)
893}
894
895function latin1Write (buf, string, offset, length) {
896 return asciiWrite(buf, string, offset, length)
897}
898
899function base64Write (buf, string, offset, length) {
900 return blitBuffer(base64ToBytes(string), buf, offset, length)
901}
902
903function ucs2Write (buf, string, offset, length) {
904 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
905}
906
907Buffer.prototype.write = function write (string, offset, length, encoding) {
908 // Buffer#write(string)
909 if (offset === undefined) {
910 encoding = 'utf8'
911 length = this.length
912 offset = 0
913 // Buffer#write(string, encoding)
914 } else if (length === undefined && typeof offset === 'string') {
915 encoding = offset
916 length = this.length
917 offset = 0
918 // Buffer#write(string, offset[, length][, encoding])
919 } else if (isFinite(offset)) {
920 offset = offset >>> 0
921 if (isFinite(length)) {
922 length = length >>> 0
923 if (encoding === undefined) encoding = 'utf8'
924 } else {
925 encoding = length
926 length = undefined
927 }
928 } else {
929 throw new Error(
930 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
931 )
932 }
933
934 var remaining = this.length - offset
935 if (length === undefined || length > remaining) length = remaining
936
937 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
938 throw new RangeError('Attempt to write outside buffer bounds')
939 }
940
941 if (!encoding) encoding = 'utf8'
942
943 var loweredCase = false
944 for (;;) {
945 switch (encoding) {
946 case 'hex':
947 return hexWrite(this, string, offset, length)
948
949 case 'utf8':
950 case 'utf-8':
951 return utf8Write(this, string, offset, length)
952
953 case 'ascii':
954 return asciiWrite(this, string, offset, length)
955
956 case 'latin1':
957 case 'binary':
958 return latin1Write(this, string, offset, length)
959
960 case 'base64':
961 // Warning: maxLength not taken into account in base64Write
962 return base64Write(this, string, offset, length)
963
964 case 'ucs2':
965 case 'ucs-2':
966 case 'utf16le':
967 case 'utf-16le':
968 return ucs2Write(this, string, offset, length)
969
970 default:
971 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
972 encoding = ('' + encoding).toLowerCase()
973 loweredCase = true
974 }
975 }
976}
977
978Buffer.prototype.toJSON = function toJSON () {
979 return {
980 type: 'Buffer',
981 data: Array.prototype.slice.call(this._arr || this, 0)
982 }
983}
984
985function base64Slice (buf, start, end) {
986 if (start === 0 && end === buf.length) {
987 return base64.fromByteArray(buf)
988 } else {
989 return base64.fromByteArray(buf.slice(start, end))
990 }
991}
992
993function utf8Slice (buf, start, end) {
994 end = Math.min(buf.length, end)
995 var res = []
996
997 var i = start
998 while (i < end) {
999 var firstByte = buf[i]
1000 var codePoint = null
1001 var bytesPerSequence = (firstByte > 0xEF) ? 4
1002 : (firstByte > 0xDF) ? 3
1003 : (firstByte > 0xBF) ? 2
1004 : 1
1005
1006 if (i + bytesPerSequence <= end) {
1007 var secondByte, thirdByte, fourthByte, tempCodePoint
1008
1009 switch (bytesPerSequence) {
1010 case 1:
1011 if (firstByte < 0x80) {
1012 codePoint = firstByte
1013 }
1014 break
1015 case 2:
1016 secondByte = buf[i + 1]
1017 if ((secondByte & 0xC0) === 0x80) {
1018 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
1019 if (tempCodePoint > 0x7F) {
1020 codePoint = tempCodePoint
1021 }
1022 }
1023 break
1024 case 3:
1025 secondByte = buf[i + 1]
1026 thirdByte = buf[i + 2]
1027 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
1028 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
1029 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
1030 codePoint = tempCodePoint
1031 }
1032 }
1033 break
1034 case 4:
1035 secondByte = buf[i + 1]
1036 thirdByte = buf[i + 2]
1037 fourthByte = buf[i + 3]
1038 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
1039 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
1040 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
1041 codePoint = tempCodePoint
1042 }
1043 }
1044 }
1045 }
1046
1047 if (codePoint === null) {
1048 // we did not generate a valid codePoint so insert a
1049 // replacement char (U+FFFD) and advance only 1 byte
1050 codePoint = 0xFFFD
1051 bytesPerSequence = 1
1052 } else if (codePoint > 0xFFFF) {
1053 // encode to utf16 (surrogate pair dance)
1054 codePoint -= 0x10000
1055 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
1056 codePoint = 0xDC00 | codePoint & 0x3FF
1057 }
1058
1059 res.push(codePoint)
1060 i += bytesPerSequence
1061 }
1062
1063 return decodeCodePointsArray(res)
1064}
1065
1066// Based on http://stackoverflow.com/a/22747272/680742, the browser with
1067// the lowest limit is Chrome, with 0x10000 args.
1068// We go 1 magnitude less, for safety
1069var MAX_ARGUMENTS_LENGTH = 0x1000
1070
1071function decodeCodePointsArray (codePoints) {
1072 var len = codePoints.length
1073 if (len <= MAX_ARGUMENTS_LENGTH) {
1074 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
1075 }
1076
1077 // Decode in chunks to avoid "call stack size exceeded".
1078 var res = ''
1079 var i = 0
1080 while (i < len) {
1081 res += String.fromCharCode.apply(
1082 String,
1083 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1084 )
1085 }
1086 return res
1087}
1088
1089function asciiSlice (buf, start, end) {
1090 var ret = ''
1091 end = Math.min(buf.length, end)
1092
1093 for (var i = start; i < end; ++i) {
1094 ret += String.fromCharCode(buf[i] & 0x7F)
1095 }
1096 return ret
1097}
1098
1099function latin1Slice (buf, start, end) {
1100 var ret = ''
1101 end = Math.min(buf.length, end)
1102
1103 for (var i = start; i < end; ++i) {
1104 ret += String.fromCharCode(buf[i])
1105 }
1106 return ret
1107}
1108
1109function hexSlice (buf, start, end) {
1110 var len = buf.length
1111
1112 if (!start || start < 0) start = 0
1113 if (!end || end < 0 || end > len) end = len
1114
1115 var out = ''
1116 for (var i = start; i < end; ++i) {
1117 out += toHex(buf[i])
1118 }
1119 return out
1120}
1121
1122function utf16leSlice (buf, start, end) {
1123 var bytes = buf.slice(start, end)
1124 var res = ''
1125 for (var i = 0; i < bytes.length; i += 2) {
1126 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
1127 }
1128 return res
1129}
1130
1131Buffer.prototype.slice = function slice (start, end) {
1132 var len = this.length
1133 start = ~~start
1134 end = end === undefined ? len : ~~end
1135
1136 if (start < 0) {
1137 start += len
1138 if (start < 0) start = 0
1139 } else if (start > len) {
1140 start = len
1141 }
1142
1143 if (end < 0) {
1144 end += len
1145 if (end < 0) end = 0
1146 } else if (end > len) {
1147 end = len
1148 }
1149
1150 if (end < start) end = start
1151
1152 var newBuf = this.subarray(start, end)
1153 // Return an augmented `Uint8Array` instance
1154 newBuf.__proto__ = Buffer.prototype
1155 return newBuf
1156}
1157
1158/*
1159 * Need to make sure that buffer isn't trying to write out of bounds.
1160 */
1161function checkOffset (offset, ext, length) {
1162 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1163 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1164}
1165
1166Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1167 offset = offset >>> 0
1168 byteLength = byteLength >>> 0
1169 if (!noAssert) checkOffset(offset, byteLength, this.length)
1170
1171 var val = this[offset]
1172 var mul = 1
1173 var i = 0
1174 while (++i < byteLength && (mul *= 0x100)) {
1175 val += this[offset + i] * mul
1176 }
1177
1178 return val
1179}
1180
1181Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1182 offset = offset >>> 0
1183 byteLength = byteLength >>> 0
1184 if (!noAssert) {
1185 checkOffset(offset, byteLength, this.length)
1186 }
1187
1188 var val = this[offset + --byteLength]
1189 var mul = 1
1190 while (byteLength > 0 && (mul *= 0x100)) {
1191 val += this[offset + --byteLength] * mul
1192 }
1193
1194 return val
1195}
1196
1197Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1198 offset = offset >>> 0
1199 if (!noAssert) checkOffset(offset, 1, this.length)
1200 return this[offset]
1201}
1202
1203Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1204 offset = offset >>> 0
1205 if (!noAssert) checkOffset(offset, 2, this.length)
1206 return this[offset] | (this[offset + 1] << 8)
1207}
1208
1209Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1210 offset = offset >>> 0
1211 if (!noAssert) checkOffset(offset, 2, this.length)
1212 return (this[offset] << 8) | this[offset + 1]
1213}
1214
1215Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1216 offset = offset >>> 0
1217 if (!noAssert) checkOffset(offset, 4, this.length)
1218
1219 return ((this[offset]) |
1220 (this[offset + 1] << 8) |
1221 (this[offset + 2] << 16)) +
1222 (this[offset + 3] * 0x1000000)
1223}
1224
1225Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1226 offset = offset >>> 0
1227 if (!noAssert) checkOffset(offset, 4, this.length)
1228
1229 return (this[offset] * 0x1000000) +
1230 ((this[offset + 1] << 16) |
1231 (this[offset + 2] << 8) |
1232 this[offset + 3])
1233}
1234
1235Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1236 offset = offset >>> 0
1237 byteLength = byteLength >>> 0
1238 if (!noAssert) checkOffset(offset, byteLength, this.length)
1239
1240 var val = this[offset]
1241 var mul = 1
1242 var i = 0
1243 while (++i < byteLength && (mul *= 0x100)) {
1244 val += this[offset + i] * mul
1245 }
1246 mul *= 0x80
1247
1248 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1249
1250 return val
1251}
1252
1253Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1254 offset = offset >>> 0
1255 byteLength = byteLength >>> 0
1256 if (!noAssert) checkOffset(offset, byteLength, this.length)
1257
1258 var i = byteLength
1259 var mul = 1
1260 var val = this[offset + --i]
1261 while (i > 0 && (mul *= 0x100)) {
1262 val += this[offset + --i] * mul
1263 }
1264 mul *= 0x80
1265
1266 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1267
1268 return val
1269}
1270
1271Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1272 offset = offset >>> 0
1273 if (!noAssert) checkOffset(offset, 1, this.length)
1274 if (!(this[offset] & 0x80)) return (this[offset])
1275 return ((0xff - this[offset] + 1) * -1)
1276}
1277
1278Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1279 offset = offset >>> 0
1280 if (!noAssert) checkOffset(offset, 2, this.length)
1281 var val = this[offset] | (this[offset + 1] << 8)
1282 return (val & 0x8000) ? val | 0xFFFF0000 : val
1283}
1284
1285Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1286 offset = offset >>> 0
1287 if (!noAssert) checkOffset(offset, 2, this.length)
1288 var val = this[offset + 1] | (this[offset] << 8)
1289 return (val & 0x8000) ? val | 0xFFFF0000 : val
1290}
1291
1292Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1293 offset = offset >>> 0
1294 if (!noAssert) checkOffset(offset, 4, this.length)
1295
1296 return (this[offset]) |
1297 (this[offset + 1] << 8) |
1298 (this[offset + 2] << 16) |
1299 (this[offset + 3] << 24)
1300}
1301
1302Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1303 offset = offset >>> 0
1304 if (!noAssert) checkOffset(offset, 4, this.length)
1305
1306 return (this[offset] << 24) |
1307 (this[offset + 1] << 16) |
1308 (this[offset + 2] << 8) |
1309 (this[offset + 3])
1310}
1311
1312Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1313 offset = offset >>> 0
1314 if (!noAssert) checkOffset(offset, 4, this.length)
1315 return ieee754.read(this, offset, true, 23, 4)
1316}
1317
1318Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1319 offset = offset >>> 0
1320 if (!noAssert) checkOffset(offset, 4, this.length)
1321 return ieee754.read(this, offset, false, 23, 4)
1322}
1323
1324Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1325 offset = offset >>> 0
1326 if (!noAssert) checkOffset(offset, 8, this.length)
1327 return ieee754.read(this, offset, true, 52, 8)
1328}
1329
1330Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1331 offset = offset >>> 0
1332 if (!noAssert) checkOffset(offset, 8, this.length)
1333 return ieee754.read(this, offset, false, 52, 8)
1334}
1335
1336function checkInt (buf, value, offset, ext, max, min) {
1337 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
1338 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
1339 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1340}
1341
1342Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1343 value = +value
1344 offset = offset >>> 0
1345 byteLength = byteLength >>> 0
1346 if (!noAssert) {
1347 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1348 checkInt(this, value, offset, byteLength, maxBytes, 0)
1349 }
1350
1351 var mul = 1
1352 var i = 0
1353 this[offset] = value & 0xFF
1354 while (++i < byteLength && (mul *= 0x100)) {
1355 this[offset + i] = (value / mul) & 0xFF
1356 }
1357
1358 return offset + byteLength
1359}
1360
1361Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1362 value = +value
1363 offset = offset >>> 0
1364 byteLength = byteLength >>> 0
1365 if (!noAssert) {
1366 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1367 checkInt(this, value, offset, byteLength, maxBytes, 0)
1368 }
1369
1370 var i = byteLength - 1
1371 var mul = 1
1372 this[offset + i] = value & 0xFF
1373 while (--i >= 0 && (mul *= 0x100)) {
1374 this[offset + i] = (value / mul) & 0xFF
1375 }
1376
1377 return offset + byteLength
1378}
1379
1380Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1381 value = +value
1382 offset = offset >>> 0
1383 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1384 this[offset] = (value & 0xff)
1385 return offset + 1
1386}
1387
1388Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1389 value = +value
1390 offset = offset >>> 0
1391 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1392 this[offset] = (value & 0xff)
1393 this[offset + 1] = (value >>> 8)
1394 return offset + 2
1395}
1396
1397Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
1398 value = +value
1399 offset = offset >>> 0
1400 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1401 this[offset] = (value >>> 8)
1402 this[offset + 1] = (value & 0xff)
1403 return offset + 2
1404}
1405
1406Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
1407 value = +value
1408 offset = offset >>> 0
1409 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1410 this[offset + 3] = (value >>> 24)
1411 this[offset + 2] = (value >>> 16)
1412 this[offset + 1] = (value >>> 8)
1413 this[offset] = (value & 0xff)
1414 return offset + 4
1415}
1416
1417Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
1418 value = +value
1419 offset = offset >>> 0
1420 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1421 this[offset] = (value >>> 24)
1422 this[offset + 1] = (value >>> 16)
1423 this[offset + 2] = (value >>> 8)
1424 this[offset + 3] = (value & 0xff)
1425 return offset + 4
1426}
1427
1428Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
1429 value = +value
1430 offset = offset >>> 0
1431 if (!noAssert) {
1432 var limit = Math.pow(2, (8 * byteLength) - 1)
1433
1434 checkInt(this, value, offset, byteLength, limit - 1, -limit)
1435 }
1436
1437 var i = 0
1438 var mul = 1
1439 var sub = 0
1440 this[offset] = value & 0xFF
1441 while (++i < byteLength && (mul *= 0x100)) {
1442 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
1443 sub = 1
1444 }
1445 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1446 }
1447
1448 return offset + byteLength
1449}
1450
1451Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
1452 value = +value
1453 offset = offset >>> 0
1454 if (!noAssert) {
1455 var limit = Math.pow(2, (8 * byteLength) - 1)
1456
1457 checkInt(this, value, offset, byteLength, limit - 1, -limit)
1458 }
1459
1460 var i = byteLength - 1
1461 var mul = 1
1462 var sub = 0
1463 this[offset + i] = value & 0xFF
1464 while (--i >= 0 && (mul *= 0x100)) {
1465 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
1466 sub = 1
1467 }
1468 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1469 }
1470
1471 return offset + byteLength
1472}
1473
1474Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
1475 value = +value
1476 offset = offset >>> 0
1477 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
1478 if (value < 0) value = 0xff + value + 1
1479 this[offset] = (value & 0xff)
1480 return offset + 1
1481}
1482
1483Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
1484 value = +value
1485 offset = offset >>> 0
1486 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1487 this[offset] = (value & 0xff)
1488 this[offset + 1] = (value >>> 8)
1489 return offset + 2
1490}
1491
1492Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
1493 value = +value
1494 offset = offset >>> 0
1495 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1496 this[offset] = (value >>> 8)
1497 this[offset + 1] = (value & 0xff)
1498 return offset + 2
1499}
1500
1501Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
1502 value = +value
1503 offset = offset >>> 0
1504 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1505 this[offset] = (value & 0xff)
1506 this[offset + 1] = (value >>> 8)
1507 this[offset + 2] = (value >>> 16)
1508 this[offset + 3] = (value >>> 24)
1509 return offset + 4
1510}
1511
1512Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
1513 value = +value
1514 offset = offset >>> 0
1515 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1516 if (value < 0) value = 0xffffffff + value + 1
1517 this[offset] = (value >>> 24)
1518 this[offset + 1] = (value >>> 16)
1519 this[offset + 2] = (value >>> 8)
1520 this[offset + 3] = (value & 0xff)
1521 return offset + 4
1522}
1523
1524function checkIEEE754 (buf, value, offset, ext, max, min) {
1525 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1526 if (offset < 0) throw new RangeError('Index out of range')
1527}
1528
1529function writeFloat (buf, value, offset, littleEndian, noAssert) {
1530 value = +value
1531 offset = offset >>> 0
1532 if (!noAssert) {
1533 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
1534 }
1535 ieee754.write(buf, value, offset, littleEndian, 23, 4)
1536 return offset + 4
1537}
1538
1539Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
1540 return writeFloat(this, value, offset, true, noAssert)
1541}
1542
1543Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
1544 return writeFloat(this, value, offset, false, noAssert)
1545}
1546
1547function writeDouble (buf, value, offset, littleEndian, noAssert) {
1548 value = +value
1549 offset = offset >>> 0
1550 if (!noAssert) {
1551 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
1552 }
1553 ieee754.write(buf, value, offset, littleEndian, 52, 8)
1554 return offset + 8
1555}
1556
1557Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
1558 return writeDouble(this, value, offset, true, noAssert)
1559}
1560
1561Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
1562 return writeDouble(this, value, offset, false, noAssert)
1563}
1564
1565// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
1566Buffer.prototype.copy = function copy (target, targetStart, start, end) {
1567 if (!start) start = 0
1568 if (!end && end !== 0) end = this.length
1569 if (targetStart >= target.length) targetStart = target.length
1570 if (!targetStart) targetStart = 0
1571 if (end > 0 && end < start) end = start
1572
1573 // Copy 0 bytes; we're done
1574 if (end === start) return 0
1575 if (target.length === 0 || this.length === 0) return 0
1576
1577 // Fatal error conditions
1578 if (targetStart < 0) {
1579 throw new RangeError('targetStart out of bounds')
1580 }
1581 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
1582 if (end < 0) throw new RangeError('sourceEnd out of bounds')
1583
1584 // Are we oob?
1585 if (end > this.length) end = this.length
1586 if (target.length - targetStart < end - start) {
1587 end = target.length - targetStart + start
1588 }
1589
1590 var len = end - start
1591 var i
1592
1593 if (this === target && start < targetStart && targetStart < end) {
1594 // descending copy from end
1595 for (i = len - 1; i >= 0; --i) {
1596 target[i + targetStart] = this[i + start]
1597 }
1598 } else if (len < 1000) {
1599 // ascending copy from start
1600 for (i = 0; i < len; ++i) {
1601 target[i + targetStart] = this[i + start]
1602 }
1603 } else {
1604 Uint8Array.prototype.set.call(
1605 target,
1606 this.subarray(start, start + len),
1607 targetStart
1608 )
1609 }
1610
1611 return len
1612}
1613
1614// Usage:
1615// buffer.fill(number[, offset[, end]])
1616// buffer.fill(buffer[, offset[, end]])
1617// buffer.fill(string[, offset[, end]][, encoding])
1618Buffer.prototype.fill = function fill (val, start, end, encoding) {
1619 // Handle string cases:
1620 if (typeof val === 'string') {
1621 if (typeof start === 'string') {
1622 encoding = start
1623 start = 0
1624 end = this.length
1625 } else if (typeof end === 'string') {
1626 encoding = end
1627 end = this.length
1628 }
1629 if (val.length === 1) {
1630 var code = val.charCodeAt(0)
1631 if (code < 256) {
1632 val = code
1633 }
1634 }
1635 if (encoding !== undefined && typeof encoding !== 'string') {
1636 throw new TypeError('encoding must be a string')
1637 }
1638 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
1639 throw new TypeError('Unknown encoding: ' + encoding)
1640 }
1641 } else if (typeof val === 'number') {
1642 val = val & 255
1643 }
1644
1645 // Invalid ranges are not set to a default, so can range check early.
1646 if (start < 0 || this.length < start || this.length < end) {
1647 throw new RangeError('Out of range index')
1648 }
1649
1650 if (end <= start) {
1651 return this
1652 }
1653
1654 start = start >>> 0
1655 end = end === undefined ? this.length : end >>> 0
1656
1657 if (!val) val = 0
1658
1659 var i
1660 if (typeof val === 'number') {
1661 for (i = start; i < end; ++i) {
1662 this[i] = val
1663 }
1664 } else {
1665 var bytes = Buffer.isBuffer(val)
1666 ? val
1667 : new Buffer(val, encoding)
1668 var len = bytes.length
1669 for (i = 0; i < end - start; ++i) {
1670 this[i + start] = bytes[i % len]
1671 }
1672 }
1673
1674 return this
1675}
1676
1677// HELPER FUNCTIONS
1678// ================
1679
1680var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
1681
1682function base64clean (str) {
1683 // Node strips out invalid characters like \n and \t from the string, base64-js does not
1684 str = str.trim().replace(INVALID_BASE64_RE, '')
1685 // Node converts strings with length < 2 to ''
1686 if (str.length < 2) return ''
1687 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
1688 while (str.length % 4 !== 0) {
1689 str = str + '='
1690 }
1691 return str
1692}
1693
1694function toHex (n) {
1695 if (n < 16) return '0' + n.toString(16)
1696 return n.toString(16)
1697}
1698
1699function utf8ToBytes (string, units) {
1700 units = units || Infinity
1701 var codePoint
1702 var length = string.length
1703 var leadSurrogate = null
1704 var bytes = []
1705
1706 for (var i = 0; i < length; ++i) {
1707 codePoint = string.charCodeAt(i)
1708
1709 // is surrogate component
1710 if (codePoint > 0xD7FF && codePoint < 0xE000) {
1711 // last char was a lead
1712 if (!leadSurrogate) {
1713 // no lead yet
1714 if (codePoint > 0xDBFF) {
1715 // unexpected trail
1716 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1717 continue
1718 } else if (i + 1 === length) {
1719 // unpaired lead
1720 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1721 continue
1722 }
1723
1724 // valid lead
1725 leadSurrogate = codePoint
1726
1727 continue
1728 }
1729
1730 // 2 leads in a row
1731 if (codePoint < 0xDC00) {
1732 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1733 leadSurrogate = codePoint
1734 continue
1735 }
1736
1737 // valid surrogate pair
1738 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
1739 } else if (leadSurrogate) {
1740 // valid bmp char, but last char was a lead
1741 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1742 }
1743
1744 leadSurrogate = null
1745
1746 // encode utf8
1747 if (codePoint < 0x80) {
1748 if ((units -= 1) < 0) break
1749 bytes.push(codePoint)
1750 } else if (codePoint < 0x800) {
1751 if ((units -= 2) < 0) break
1752 bytes.push(
1753 codePoint >> 0x6 | 0xC0,
1754 codePoint & 0x3F | 0x80
1755 )
1756 } else if (codePoint < 0x10000) {
1757 if ((units -= 3) < 0) break
1758 bytes.push(
1759 codePoint >> 0xC | 0xE0,
1760 codePoint >> 0x6 & 0x3F | 0x80,
1761 codePoint & 0x3F | 0x80
1762 )
1763 } else if (codePoint < 0x110000) {
1764 if ((units -= 4) < 0) break
1765 bytes.push(
1766 codePoint >> 0x12 | 0xF0,
1767 codePoint >> 0xC & 0x3F | 0x80,
1768 codePoint >> 0x6 & 0x3F | 0x80,
1769 codePoint & 0x3F | 0x80
1770 )
1771 } else {
1772 throw new Error('Invalid code point')
1773 }
1774 }
1775
1776 return bytes
1777}
1778
1779function asciiToBytes (str) {
1780 var byteArray = []
1781 for (var i = 0; i < str.length; ++i) {
1782 // Node's code seems to be doing this and not & 0x7F..
1783 byteArray.push(str.charCodeAt(i) & 0xFF)
1784 }
1785 return byteArray
1786}
1787
1788function utf16leToBytes (str, units) {
1789 var c, hi, lo
1790 var byteArray = []
1791 for (var i = 0; i < str.length; ++i) {
1792 if ((units -= 2) < 0) break
1793
1794 c = str.charCodeAt(i)
1795 hi = c >> 8
1796 lo = c % 256
1797 byteArray.push(lo)
1798 byteArray.push(hi)
1799 }
1800
1801 return byteArray
1802}
1803
1804function base64ToBytes (str) {
1805 return base64.toByteArray(base64clean(str))
1806}
1807
1808function blitBuffer (src, dst, offset, length) {
1809 for (var i = 0; i < length; ++i) {
1810 if ((i + offset >= dst.length) || (i >= src.length)) break
1811 dst[i + offset] = src[i]
1812 }
1813 return i
1814}
1815
1816// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
1817function isArrayBufferView (obj) {
1818 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
1819}
1820
1821function numberIsNaN (obj) {
1822 return obj !== obj // eslint-disable-line no-self-compare
1823}
1824
1825},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
1826exports.read = function (buffer, offset, isLE, mLen, nBytes) {
1827 var e, m
1828 var eLen = nBytes * 8 - mLen - 1
1829 var eMax = (1 << eLen) - 1
1830 var eBias = eMax >> 1
1831 var nBits = -7
1832 var i = isLE ? (nBytes - 1) : 0
1833 var d = isLE ? -1 : 1
1834 var s = buffer[offset + i]
1835
1836 i += d
1837
1838 e = s & ((1 << (-nBits)) - 1)
1839 s >>= (-nBits)
1840 nBits += eLen
1841 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
1842
1843 m = e & ((1 << (-nBits)) - 1)
1844 e >>= (-nBits)
1845 nBits += mLen
1846 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
1847
1848 if (e === 0) {
1849 e = 1 - eBias
1850 } else if (e === eMax) {
1851 return m ? NaN : ((s ? -1 : 1) * Infinity)
1852 } else {
1853 m = m + Math.pow(2, mLen)
1854 e = e - eBias
1855 }
1856 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
1857}
1858
1859exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
1860 var e, m, c
1861 var eLen = nBytes * 8 - mLen - 1
1862 var eMax = (1 << eLen) - 1
1863 var eBias = eMax >> 1
1864 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
1865 var i = isLE ? 0 : (nBytes - 1)
1866 var d = isLE ? 1 : -1
1867 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
1868
1869 value = Math.abs(value)
1870
1871 if (isNaN(value) || value === Infinity) {
1872 m = isNaN(value) ? 1 : 0
1873 e = eMax
1874 } else {
1875 e = Math.floor(Math.log(value) / Math.LN2)
1876 if (value * (c = Math.pow(2, -e)) < 1) {
1877 e--
1878 c *= 2
1879 }
1880 if (e + eBias >= 1) {
1881 value += rt / c
1882 } else {
1883 value += rt * Math.pow(2, 1 - eBias)
1884 }
1885 if (value * c >= 2) {
1886 e++
1887 c /= 2
1888 }
1889
1890 if (e + eBias >= eMax) {
1891 m = 0
1892 e = eMax
1893 } else if (e + eBias >= 1) {
1894 m = (value * c - 1) * Math.pow(2, mLen)
1895 e = e + eBias
1896 } else {
1897 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
1898 e = 0
1899 }
1900 }
1901
1902 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
1903
1904 e = (e << mLen) | m
1905 eLen += mLen
1906 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
1907
1908 buffer[offset + i - d] |= s * 128
1909}
1910
1911},{}],4:[function(require,module,exports){
1912window.basex = require('base-x')
1913},{"base-x":5}],5:[function(require,module,exports){
1914// base-x encoding
1915// Forked from https://github.com/cryptocoinjs/bs58
1916// Originally written by Mike Hearn for BitcoinJ
1917// Copyright (c) 2011 Google Inc
1918// Ported to JavaScript by Stefan Thomas
1919// Merged Buffer refactorings from base58-native by Stephen Pair
1920// Copyright (c) 2013 BitPay Inc
1921
1922var Buffer = require('safe-buffer').Buffer
1923
1924module.exports = function base (ALPHABET) {
1925 var ALPHABET_MAP = {}
1926 var BASE = ALPHABET.length
1927 var LEADER = ALPHABET.charAt(0)
1928
1929 // pre-compute lookup table
1930 for (var z = 0; z < ALPHABET.length; z++) {
1931 var x = ALPHABET.charAt(z)
1932
1933 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
1934 ALPHABET_MAP[x] = z
1935 }
1936
1937 function encode (source) {
1938 if (source.length === 0) return ''
1939
1940 var digits = [0]
1941 for (var i = 0; i < source.length; ++i) {
1942 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
1943 carry += digits[j] << 8
1944 digits[j] = carry % BASE
1945 carry = (carry / BASE) | 0
1946 }
1947
1948 while (carry > 0) {
1949 digits.push(carry % BASE)
1950 carry = (carry / BASE) | 0
1951 }
1952 }
1953
1954 var string = ''
1955
1956 // deal with leading zeros
1957 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
1958 // convert digits to a string
1959 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
1960
1961 return string
1962 }
1963
1964 function decodeUnsafe (string) {
1965 if (string.length === 0) return Buffer.allocUnsafe(0)
1966
1967 var bytes = [0]
1968 for (var i = 0; i < string.length; i++) {
1969 var value = ALPHABET_MAP[string[i]]
1970 if (value === undefined) return
1971
1972 for (var j = 0, carry = value; j < bytes.length; ++j) {
1973 carry += bytes[j] * BASE
1974 bytes[j] = carry & 0xff
1975 carry >>= 8
1976 }
1977
1978 while (carry > 0) {
1979 bytes.push(carry & 0xff)
1980 carry >>= 8
1981 }
1982 }
1983
1984 // deal with leading zeros
1985 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
1986 bytes.push(0)
1987 }
1988
1989 return Buffer.from(bytes.reverse())
1990 }
1991
1992 function decode (string) {
1993 var buffer = decodeUnsafe(string)
1994 if (buffer) return buffer
1995
1996 throw new Error('Non-base' + BASE + ' character')
1997 }
1998
1999 return {
2000 encode: encode,
2001 decodeUnsafe: decodeUnsafe,
2002 decode: decode
2003 }
2004}
2005
2006},{"safe-buffer":6}],6:[function(require,module,exports){
2007module.exports = require('buffer')
2008
2009},{"buffer":2}]},{},[4])(4)
2010}); \ No newline at end of file
diff --git a/src/js/bitcoinjs-extensions.js b/src/js/bitcoinjs-extensions.js
index b02d79f..ed1bb09 100644
--- a/src/js/bitcoinjs-extensions.js
+++ b/src/js/bitcoinjs-extensions.js
@@ -45,6 +45,16 @@ bitcoin.networks.dash = {
45 wif: 0xcc, 45 wif: 0xcc,
46}; 46};
47 47
48bitcoin.networks.game = {
49 bip32: {
50 public: 0x0488b21e,
51 private: 0x0488ade4
52 },
53 pubKeyHash: 0x26,
54 scriptHash: 0x05,
55 wif: 0xa6,
56};
57
48bitcoin.networks.namecoin = { 58bitcoin.networks.namecoin = {
49 bip32: { 59 bip32: {
50 public: 0x0488b21e, 60 public: 0x0488b21e,
diff --git a/src/js/ethereumjs-util.js b/src/js/ethereumjs-util.js
new file mode 100644
index 0000000..533a0c3
--- /dev/null
+++ b/src/js/ethereumjs-util.js
@@ -0,0 +1,18762 @@
1(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2(function (global){
3'use strict';
4
5// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
6// original notice:
7
8/*!
9 * The buffer module from node.js, for the browser.
10 *
11 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
12 * @license MIT
13 */
14function compare(a, b) {
15 if (a === b) {
16 return 0;
17 }
18
19 var x = a.length;
20 var y = b.length;
21
22 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23 if (a[i] !== b[i]) {
24 x = a[i];
25 y = b[i];
26 break;
27 }
28 }
29
30 if (x < y) {
31 return -1;
32 }
33 if (y < x) {
34 return 1;
35 }
36 return 0;
37}
38function isBuffer(b) {
39 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
40 return global.Buffer.isBuffer(b);
41 }
42 return !!(b != null && b._isBuffer);
43}
44
45// based on node assert, original notice:
46
47// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
48//
49// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
50//
51// Originally from narwhal.js (http://narwhaljs.org)
52// Copyright (c) 2009 Thomas Robinson <280north.com>
53//
54// Permission is hereby granted, free of charge, to any person obtaining a copy
55// of this software and associated documentation files (the 'Software'), to
56// deal in the Software without restriction, including without limitation the
57// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
58// sell copies of the Software, and to permit persons to whom the Software is
59// furnished to do so, subject to the following conditions:
60//
61// The above copyright notice and this permission notice shall be included in
62// all copies or substantial portions of the Software.
63//
64// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
65// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
66// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
67// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
68// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
69// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
70
71var util = require('util/');
72var hasOwn = Object.prototype.hasOwnProperty;
73var pSlice = Array.prototype.slice;
74var functionsHaveNames = (function () {
75 return function foo() {}.name === 'foo';
76}());
77function pToString (obj) {
78 return Object.prototype.toString.call(obj);
79}
80function isView(arrbuf) {
81 if (isBuffer(arrbuf)) {
82 return false;
83 }
84 if (typeof global.ArrayBuffer !== 'function') {
85 return false;
86 }
87 if (typeof ArrayBuffer.isView === 'function') {
88 return ArrayBuffer.isView(arrbuf);
89 }
90 if (!arrbuf) {
91 return false;
92 }
93 if (arrbuf instanceof DataView) {
94 return true;
95 }
96 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
97 return true;
98 }
99 return false;
100}
101// 1. The assert module provides functions that throw
102// AssertionError's when particular conditions are not met. The
103// assert module must conform to the following interface.
104
105var assert = module.exports = ok;
106
107// 2. The AssertionError is defined in assert.
108// new assert.AssertionError({ message: message,
109// actual: actual,
110// expected: expected })
111
112var regex = /\s*function\s+([^\(\s]*)\s*/;
113// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
114function getName(func) {
115 if (!util.isFunction(func)) {
116 return;
117 }
118 if (functionsHaveNames) {
119 return func.name;
120 }
121 var str = func.toString();
122 var match = str.match(regex);
123 return match && match[1];
124}
125assert.AssertionError = function AssertionError(options) {
126 this.name = 'AssertionError';
127 this.actual = options.actual;
128 this.expected = options.expected;
129 this.operator = options.operator;
130 if (options.message) {
131 this.message = options.message;
132 this.generatedMessage = false;
133 } else {
134 this.message = getMessage(this);
135 this.generatedMessage = true;
136 }
137 var stackStartFunction = options.stackStartFunction || fail;
138 if (Error.captureStackTrace) {
139 Error.captureStackTrace(this, stackStartFunction);
140 } else {
141 // non v8 browsers so we can have a stacktrace
142 var err = new Error();
143 if (err.stack) {
144 var out = err.stack;
145
146 // try to strip useless frames
147 var fn_name = getName(stackStartFunction);
148 var idx = out.indexOf('\n' + fn_name);
149 if (idx >= 0) {
150 // once we have located the function frame
151 // we need to strip out everything before it (and its line)
152 var next_line = out.indexOf('\n', idx + 1);
153 out = out.substring(next_line + 1);
154 }
155
156 this.stack = out;
157 }
158 }
159};
160
161// assert.AssertionError instanceof Error
162util.inherits(assert.AssertionError, Error);
163
164function truncate(s, n) {
165 if (typeof s === 'string') {
166 return s.length < n ? s : s.slice(0, n);
167 } else {
168 return s;
169 }
170}
171function inspect(something) {
172 if (functionsHaveNames || !util.isFunction(something)) {
173 return util.inspect(something);
174 }
175 var rawname = getName(something);
176 var name = rawname ? ': ' + rawname : '';
177 return '[Function' + name + ']';
178}
179function getMessage(self) {
180 return truncate(inspect(self.actual), 128) + ' ' +
181 self.operator + ' ' +
182 truncate(inspect(self.expected), 128);
183}
184
185// At present only the three keys mentioned above are used and
186// understood by the spec. Implementations or sub modules can pass
187// other keys to the AssertionError's constructor - they will be
188// ignored.
189
190// 3. All of the following functions must throw an AssertionError
191// when a corresponding condition is not met, with a message that
192// may be undefined if not provided. All assertion methods provide
193// both the actual and expected values to the assertion error for
194// display purposes.
195
196function fail(actual, expected, message, operator, stackStartFunction) {
197 throw new assert.AssertionError({
198 message: message,
199 actual: actual,
200 expected: expected,
201 operator: operator,
202 stackStartFunction: stackStartFunction
203 });
204}
205
206// EXTENSION! allows for well behaved errors defined elsewhere.
207assert.fail = fail;
208
209// 4. Pure assertion tests whether a value is truthy, as determined
210// by !!guard.
211// assert.ok(guard, message_opt);
212// This statement is equivalent to assert.equal(true, !!guard,
213// message_opt);. To test strictly for the value true, use
214// assert.strictEqual(true, guard, message_opt);.
215
216function ok(value, message) {
217 if (!value) fail(value, true, message, '==', assert.ok);
218}
219assert.ok = ok;
220
221// 5. The equality assertion tests shallow, coercive equality with
222// ==.
223// assert.equal(actual, expected, message_opt);
224
225assert.equal = function equal(actual, expected, message) {
226 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
227};
228
229// 6. The non-equality assertion tests for whether two objects are not equal
230// with != assert.notEqual(actual, expected, message_opt);
231
232assert.notEqual = function notEqual(actual, expected, message) {
233 if (actual == expected) {
234 fail(actual, expected, message, '!=', assert.notEqual);
235 }
236};
237
238// 7. The equivalence assertion tests a deep equality relation.
239// assert.deepEqual(actual, expected, message_opt);
240
241assert.deepEqual = function deepEqual(actual, expected, message) {
242 if (!_deepEqual(actual, expected, false)) {
243 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
244 }
245};
246
247assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
248 if (!_deepEqual(actual, expected, true)) {
249 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
250 }
251};
252
253function _deepEqual(actual, expected, strict, memos) {
254 // 7.1. All identical values are equivalent, as determined by ===.
255 if (actual === expected) {
256 return true;
257 } else if (isBuffer(actual) && isBuffer(expected)) {
258 return compare(actual, expected) === 0;
259
260 // 7.2. If the expected value is a Date object, the actual value is
261 // equivalent if it is also a Date object that refers to the same time.
262 } else if (util.isDate(actual) && util.isDate(expected)) {
263 return actual.getTime() === expected.getTime();
264
265 // 7.3 If the expected value is a RegExp object, the actual value is
266 // equivalent if it is also a RegExp object with the same source and
267 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
268 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
269 return actual.source === expected.source &&
270 actual.global === expected.global &&
271 actual.multiline === expected.multiline &&
272 actual.lastIndex === expected.lastIndex &&
273 actual.ignoreCase === expected.ignoreCase;
274
275 // 7.4. Other pairs that do not both pass typeof value == 'object',
276 // equivalence is determined by ==.
277 } else if ((actual === null || typeof actual !== 'object') &&
278 (expected === null || typeof expected !== 'object')) {
279 return strict ? actual === expected : actual == expected;
280
281 // If both values are instances of typed arrays, wrap their underlying
282 // ArrayBuffers in a Buffer each to increase performance
283 // This optimization requires the arrays to have the same type as checked by
284 // Object.prototype.toString (aka pToString). Never perform binary
285 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
286 // bit patterns are not identical.
287 } else if (isView(actual) && isView(expected) &&
288 pToString(actual) === pToString(expected) &&
289 !(actual instanceof Float32Array ||
290 actual instanceof Float64Array)) {
291 return compare(new Uint8Array(actual.buffer),
292 new Uint8Array(expected.buffer)) === 0;
293
294 // 7.5 For all other Object pairs, including Array objects, equivalence is
295 // determined by having the same number of owned properties (as verified
296 // with Object.prototype.hasOwnProperty.call), the same set of keys
297 // (although not necessarily the same order), equivalent values for every
298 // corresponding key, and an identical 'prototype' property. Note: this
299 // accounts for both named and indexed properties on Arrays.
300 } else if (isBuffer(actual) !== isBuffer(expected)) {
301 return false;
302 } else {
303 memos = memos || {actual: [], expected: []};
304
305 var actualIndex = memos.actual.indexOf(actual);
306 if (actualIndex !== -1) {
307 if (actualIndex === memos.expected.indexOf(expected)) {
308 return true;
309 }
310 }
311
312 memos.actual.push(actual);
313 memos.expected.push(expected);
314
315 return objEquiv(actual, expected, strict, memos);
316 }
317}
318
319function isArguments(object) {
320 return Object.prototype.toString.call(object) == '[object Arguments]';
321}
322
323function objEquiv(a, b, strict, actualVisitedObjects) {
324 if (a === null || a === undefined || b === null || b === undefined)
325 return false;
326 // if one is a primitive, the other must be same
327 if (util.isPrimitive(a) || util.isPrimitive(b))
328 return a === b;
329 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
330 return false;
331 var aIsArgs = isArguments(a);
332 var bIsArgs = isArguments(b);
333 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
334 return false;
335 if (aIsArgs) {
336 a = pSlice.call(a);
337 b = pSlice.call(b);
338 return _deepEqual(a, b, strict);
339 }
340 var ka = objectKeys(a);
341 var kb = objectKeys(b);
342 var key, i;
343 // having the same number of owned properties (keys incorporates
344 // hasOwnProperty)
345 if (ka.length !== kb.length)
346 return false;
347 //the same set of keys (although not necessarily the same order),
348 ka.sort();
349 kb.sort();
350 //~~~cheap key test
351 for (i = ka.length - 1; i >= 0; i--) {
352 if (ka[i] !== kb[i])
353 return false;
354 }
355 //equivalent values for every corresponding key, and
356 //~~~possibly expensive deep test
357 for (i = ka.length - 1; i >= 0; i--) {
358 key = ka[i];
359 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
360 return false;
361 }
362 return true;
363}
364
365// 8. The non-equivalence assertion tests for any deep inequality.
366// assert.notDeepEqual(actual, expected, message_opt);
367
368assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
369 if (_deepEqual(actual, expected, false)) {
370 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
371 }
372};
373
374assert.notDeepStrictEqual = notDeepStrictEqual;
375function notDeepStrictEqual(actual, expected, message) {
376 if (_deepEqual(actual, expected, true)) {
377 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
378 }
379}
380
381
382// 9. The strict equality assertion tests strict equality, as determined by ===.
383// assert.strictEqual(actual, expected, message_opt);
384
385assert.strictEqual = function strictEqual(actual, expected, message) {
386 if (actual !== expected) {
387 fail(actual, expected, message, '===', assert.strictEqual);
388 }
389};
390
391// 10. The strict non-equality assertion tests for strict inequality, as
392// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
393
394assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
395 if (actual === expected) {
396 fail(actual, expected, message, '!==', assert.notStrictEqual);
397 }
398};
399
400function expectedException(actual, expected) {
401 if (!actual || !expected) {
402 return false;
403 }
404
405 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
406 return expected.test(actual);
407 }
408
409 try {
410 if (actual instanceof expected) {
411 return true;
412 }
413 } catch (e) {
414 // Ignore. The instanceof check doesn't work for arrow functions.
415 }
416
417 if (Error.isPrototypeOf(expected)) {
418 return false;
419 }
420
421 return expected.call({}, actual) === true;
422}
423
424function _tryBlock(block) {
425 var error;
426 try {
427 block();
428 } catch (e) {
429 error = e;
430 }
431 return error;
432}
433
434function _throws(shouldThrow, block, expected, message) {
435 var actual;
436
437 if (typeof block !== 'function') {
438 throw new TypeError('"block" argument must be a function');
439 }
440
441 if (typeof expected === 'string') {
442 message = expected;
443 expected = null;
444 }
445
446 actual = _tryBlock(block);
447
448 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
449 (message ? ' ' + message : '.');
450
451 if (shouldThrow && !actual) {
452 fail(actual, expected, 'Missing expected exception' + message);
453 }
454
455 var userProvidedMessage = typeof message === 'string';
456 var isUnwantedException = !shouldThrow && util.isError(actual);
457 var isUnexpectedException = !shouldThrow && actual && !expected;
458
459 if ((isUnwantedException &&
460 userProvidedMessage &&
461 expectedException(actual, expected)) ||
462 isUnexpectedException) {
463 fail(actual, expected, 'Got unwanted exception' + message);
464 }
465
466 if ((shouldThrow && actual && expected &&
467 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
468 throw actual;
469 }
470}
471
472// 11. Expected to throw an error:
473// assert.throws(block, Error_opt, message_opt);
474
475assert.throws = function(block, /*optional*/error, /*optional*/message) {
476 _throws(true, block, error, message);
477};
478
479// EXTENSION! This is annoying to write outside this module.
480assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
481 _throws(false, block, error, message);
482};
483
484assert.ifError = function(err) { if (err) throw err; };
485
486var objectKeys = Object.keys || function (obj) {
487 var keys = [];
488 for (var key in obj) {
489 if (hasOwn.call(obj, key)) keys.push(key);
490 }
491 return keys;
492};
493
494}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
495},{"util/":30}],2:[function(require,module,exports){
496'use strict'
497
498exports.byteLength = byteLength
499exports.toByteArray = toByteArray
500exports.fromByteArray = fromByteArray
501
502var lookup = []
503var revLookup = []
504var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
505
506var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
507for (var i = 0, len = code.length; i < len; ++i) {
508 lookup[i] = code[i]
509 revLookup[code.charCodeAt(i)] = i
510}
511
512revLookup['-'.charCodeAt(0)] = 62
513revLookup['_'.charCodeAt(0)] = 63
514
515function placeHoldersCount (b64) {
516 var len = b64.length
517 if (len % 4 > 0) {
518 throw new Error('Invalid string. Length must be a multiple of 4')
519 }
520
521 // the number of equal signs (place holders)
522 // if there are two placeholders, than the two characters before it
523 // represent one byte
524 // if there is only one, then the three characters before it represent 2 bytes
525 // this is just a cheap hack to not do indexOf twice
526 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
527}
528
529function byteLength (b64) {
530 // base64 is 4/3 + up to two characters of the original data
531 return b64.length * 3 / 4 - placeHoldersCount(b64)
532}
533
534function toByteArray (b64) {
535 var i, j, l, tmp, placeHolders, arr
536 var len = b64.length
537 placeHolders = placeHoldersCount(b64)
538
539 arr = new Arr(len * 3 / 4 - placeHolders)
540
541 // if there are placeholders, only get up to the last complete 4 chars
542 l = placeHolders > 0 ? len - 4 : len
543
544 var L = 0
545
546 for (i = 0, j = 0; i < l; i += 4, j += 3) {
547 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
548 arr[L++] = (tmp >> 16) & 0xFF
549 arr[L++] = (tmp >> 8) & 0xFF
550 arr[L++] = tmp & 0xFF
551 }
552
553 if (placeHolders === 2) {
554 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
555 arr[L++] = tmp & 0xFF
556 } else if (placeHolders === 1) {
557 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
558 arr[L++] = (tmp >> 8) & 0xFF
559 arr[L++] = tmp & 0xFF
560 }
561
562 return arr
563}
564
565function tripletToBase64 (num) {
566 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
567}
568
569function encodeChunk (uint8, start, end) {
570 var tmp
571 var output = []
572 for (var i = start; i < end; i += 3) {
573 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
574 output.push(tripletToBase64(tmp))
575 }
576 return output.join('')
577}
578
579function fromByteArray (uint8) {
580 var tmp
581 var len = uint8.length
582 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
583 var output = ''
584 var parts = []
585 var maxChunkLength = 16383 // must be multiple of 3
586
587 // go through the array every three bytes, we'll deal with trailing stuff later
588 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
589 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
590 }
591
592 // pad the end with zeros, but make sure to not forget the extra bytes
593 if (extraBytes === 1) {
594 tmp = uint8[len - 1]
595 output += lookup[tmp >> 2]
596 output += lookup[(tmp << 4) & 0x3F]
597 output += '=='
598 } else if (extraBytes === 2) {
599 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
600 output += lookup[tmp >> 10]
601 output += lookup[(tmp >> 4) & 0x3F]
602 output += lookup[(tmp << 2) & 0x3F]
603 output += '='
604 }
605
606 parts.push(output)
607
608 return parts.join('')
609}
610
611},{}],3:[function(require,module,exports){
612
613},{}],4:[function(require,module,exports){
614(function (global){
615'use strict';
616
617var buffer = require('buffer');
618var Buffer = buffer.Buffer;
619var SlowBuffer = buffer.SlowBuffer;
620var MAX_LEN = buffer.kMaxLength || 2147483647;
621exports.alloc = function alloc(size, fill, encoding) {
622 if (typeof Buffer.alloc === 'function') {
623 return Buffer.alloc(size, fill, encoding);
624 }
625 if (typeof encoding === 'number') {
626 throw new TypeError('encoding must not be number');
627 }
628 if (typeof size !== 'number') {
629 throw new TypeError('size must be a number');
630 }
631 if (size > MAX_LEN) {
632 throw new RangeError('size is too large');
633 }
634 var enc = encoding;
635 var _fill = fill;
636 if (_fill === undefined) {
637 enc = undefined;
638 _fill = 0;
639 }
640 var buf = new Buffer(size);
641 if (typeof _fill === 'string') {
642 var fillBuf = new Buffer(_fill, enc);
643 var flen = fillBuf.length;
644 var i = -1;
645 while (++i < size) {
646 buf[i] = fillBuf[i % flen];
647 }
648 } else {
649 buf.fill(_fill);
650 }
651 return buf;
652}
653exports.allocUnsafe = function allocUnsafe(size) {
654 if (typeof Buffer.allocUnsafe === 'function') {
655 return Buffer.allocUnsafe(size);
656 }
657 if (typeof size !== 'number') {
658 throw new TypeError('size must be a number');
659 }
660 if (size > MAX_LEN) {
661 throw new RangeError('size is too large');
662 }
663 return new Buffer(size);
664}
665exports.from = function from(value, encodingOrOffset, length) {
666 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
667 return Buffer.from(value, encodingOrOffset, length);
668 }
669 if (typeof value === 'number') {
670 throw new TypeError('"value" argument must not be a number');
671 }
672 if (typeof value === 'string') {
673 return new Buffer(value, encodingOrOffset);
674 }
675 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
676 var offset = encodingOrOffset;
677 if (arguments.length === 1) {
678 return new Buffer(value);
679 }
680 if (typeof offset === 'undefined') {
681 offset = 0;
682 }
683 var len = length;
684 if (typeof len === 'undefined') {
685 len = value.byteLength - offset;
686 }
687 if (offset >= value.byteLength) {
688 throw new RangeError('\'offset\' is out of bounds');
689 }
690 if (len > value.byteLength - offset) {
691 throw new RangeError('\'length\' is out of bounds');
692 }
693 return new Buffer(value.slice(offset, offset + len));
694 }
695 if (Buffer.isBuffer(value)) {
696 var out = new Buffer(value.length);
697 value.copy(out, 0, 0, value.length);
698 return out;
699 }
700 if (value) {
701 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
702 return new Buffer(value);
703 }
704 if (value.type === 'Buffer' && Array.isArray(value.data)) {
705 return new Buffer(value.data);
706 }
707 }
708
709 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
710}
711exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
712 if (typeof Buffer.allocUnsafeSlow === 'function') {
713 return Buffer.allocUnsafeSlow(size);
714 }
715 if (typeof size !== 'number') {
716 throw new TypeError('size must be a number');
717 }
718 if (size >= MAX_LEN) {
719 throw new RangeError('size is too large');
720 }
721 return new SlowBuffer(size);
722}
723
724}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
725},{"buffer":5}],5:[function(require,module,exports){
726/*!
727 * The buffer module from node.js, for the browser.
728 *
729 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
730 * @license MIT
731 */
732/* eslint-disable no-proto */
733
734'use strict'
735
736var base64 = require('base64-js')
737var ieee754 = require('ieee754')
738
739exports.Buffer = Buffer
740exports.SlowBuffer = SlowBuffer
741exports.INSPECT_MAX_BYTES = 50
742
743var K_MAX_LENGTH = 0x7fffffff
744exports.kMaxLength = K_MAX_LENGTH
745
746/**
747 * If `Buffer.TYPED_ARRAY_SUPPORT`:
748 * === true Use Uint8Array implementation (fastest)
749 * === false Print warning and recommend using `buffer` v4.x which has an Object
750 * implementation (most compatible, even IE6)
751 *
752 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
753 * Opera 11.6+, iOS 4.2+.
754 *
755 * We report that the browser does not support typed arrays if the are not subclassable
756 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
757 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
758 * for __proto__ and has a buggy typed array implementation.
759 */
760Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
761
762if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
763 typeof console.error === 'function') {
764 console.error(
765 'This browser lacks typed array (Uint8Array) support which is required by ' +
766 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
767 )
768}
769
770function typedArraySupport () {
771 // Can typed array instances can be augmented?
772 try {
773 var arr = new Uint8Array(1)
774 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
775 return arr.foo() === 42
776 } catch (e) {
777 return false
778 }
779}
780
781function createBuffer (length) {
782 if (length > K_MAX_LENGTH) {
783 throw new RangeError('Invalid typed array length')
784 }
785 // Return an augmented `Uint8Array` instance
786 var buf = new Uint8Array(length)
787 buf.__proto__ = Buffer.prototype
788 return buf
789}
790
791/**
792 * The Buffer constructor returns instances of `Uint8Array` that have their
793 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
794 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
795 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
796 * returns a single octet.
797 *
798 * The `Uint8Array` prototype remains unmodified.
799 */
800
801function Buffer (arg, encodingOrOffset, length) {
802 // Common case.
803 if (typeof arg === 'number') {
804 if (typeof encodingOrOffset === 'string') {
805 throw new Error(
806 'If encoding is specified then the first argument must be a string'
807 )
808 }
809 return allocUnsafe(arg)
810 }
811 return from(arg, encodingOrOffset, length)
812}
813
814// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
815if (typeof Symbol !== 'undefined' && Symbol.species &&
816 Buffer[Symbol.species] === Buffer) {
817 Object.defineProperty(Buffer, Symbol.species, {
818 value: null,
819 configurable: true,
820 enumerable: false,
821 writable: false
822 })
823}
824
825Buffer.poolSize = 8192 // not used by this implementation
826
827function from (value, encodingOrOffset, length) {
828 if (typeof value === 'number') {
829 throw new TypeError('"value" argument must not be a number')
830 }
831
832 if (value instanceof ArrayBuffer) {
833 return fromArrayBuffer(value, encodingOrOffset, length)
834 }
835
836 if (typeof value === 'string') {
837 return fromString(value, encodingOrOffset)
838 }
839
840 return fromObject(value)
841}
842
843/**
844 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
845 * if value is a number.
846 * Buffer.from(str[, encoding])
847 * Buffer.from(array)
848 * Buffer.from(buffer)
849 * Buffer.from(arrayBuffer[, byteOffset[, length]])
850 **/
851Buffer.from = function (value, encodingOrOffset, length) {
852 return from(value, encodingOrOffset, length)
853}
854
855// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
856// https://github.com/feross/buffer/pull/148
857Buffer.prototype.__proto__ = Uint8Array.prototype
858Buffer.__proto__ = Uint8Array
859
860function assertSize (size) {
861 if (typeof size !== 'number') {
862 throw new TypeError('"size" argument must be a number')
863 } else if (size < 0) {
864 throw new RangeError('"size" argument must not be negative')
865 }
866}
867
868function alloc (size, fill, encoding) {
869 assertSize(size)
870 if (size <= 0) {
871 return createBuffer(size)
872 }
873 if (fill !== undefined) {
874 // Only pay attention to encoding if it's a string. This
875 // prevents accidentally sending in a number that would
876 // be interpretted as a start offset.
877 return typeof encoding === 'string'
878 ? createBuffer(size).fill(fill, encoding)
879 : createBuffer(size).fill(fill)
880 }
881 return createBuffer(size)
882}
883
884/**
885 * Creates a new filled Buffer instance.
886 * alloc(size[, fill[, encoding]])
887 **/
888Buffer.alloc = function (size, fill, encoding) {
889 return alloc(size, fill, encoding)
890}
891
892function allocUnsafe (size) {
893 assertSize(size)
894 return createBuffer(size < 0 ? 0 : checked(size) | 0)
895}
896
897/**
898 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
899 * */
900Buffer.allocUnsafe = function (size) {
901 return allocUnsafe(size)
902}
903/**
904 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
905 */
906Buffer.allocUnsafeSlow = function (size) {
907 return allocUnsafe(size)
908}
909
910function fromString (string, encoding) {
911 if (typeof encoding !== 'string' || encoding === '') {
912 encoding = 'utf8'
913 }
914
915 if (!Buffer.isEncoding(encoding)) {
916 throw new TypeError('"encoding" must be a valid string encoding')
917 }
918
919 var length = byteLength(string, encoding) | 0
920 var buf = createBuffer(length)
921
922 var actual = buf.write(string, encoding)
923
924 if (actual !== length) {
925 // Writing a hex string, for example, that contains invalid characters will
926 // cause everything after the first invalid character to be ignored. (e.g.
927 // 'abxxcd' will be treated as 'ab')
928 buf = buf.slice(0, actual)
929 }
930
931 return buf
932}
933
934function fromArrayLike (array) {
935 var length = array.length < 0 ? 0 : checked(array.length) | 0
936 var buf = createBuffer(length)
937 for (var i = 0; i < length; i += 1) {
938 buf[i] = array[i] & 255
939 }
940 return buf
941}
942
943function fromArrayBuffer (array, byteOffset, length) {
944 if (byteOffset < 0 || array.byteLength < byteOffset) {
945 throw new RangeError('\'offset\' is out of bounds')
946 }
947
948 if (array.byteLength < byteOffset + (length || 0)) {
949 throw new RangeError('\'length\' is out of bounds')
950 }
951
952 var buf
953 if (byteOffset === undefined && length === undefined) {
954 buf = new Uint8Array(array)
955 } else if (length === undefined) {
956 buf = new Uint8Array(array, byteOffset)
957 } else {
958 buf = new Uint8Array(array, byteOffset, length)
959 }
960
961 // Return an augmented `Uint8Array` instance
962 buf.__proto__ = Buffer.prototype
963 return buf
964}
965
966function fromObject (obj) {
967 if (Buffer.isBuffer(obj)) {
968 var len = checked(obj.length) | 0
969 var buf = createBuffer(len)
970
971 if (buf.length === 0) {
972 return buf
973 }
974
975 obj.copy(buf, 0, 0, len)
976 return buf
977 }
978
979 if (obj) {
980 if (ArrayBuffer.isView(obj) || 'length' in obj) {
981 if (typeof obj.length !== 'number' || isnan(obj.length)) {
982 return createBuffer(0)
983 }
984 return fromArrayLike(obj)
985 }
986
987 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
988 return fromArrayLike(obj.data)
989 }
990 }
991
992 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
993}
994
995function checked (length) {
996 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
997 // length is NaN (which is otherwise coerced to zero.)
998 if (length >= K_MAX_LENGTH) {
999 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
1000 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
1001 }
1002 return length | 0
1003}
1004
1005function SlowBuffer (length) {
1006 if (+length != length) { // eslint-disable-line eqeqeq
1007 length = 0
1008 }
1009 return Buffer.alloc(+length)
1010}
1011
1012Buffer.isBuffer = function isBuffer (b) {
1013 return b != null && b._isBuffer === true
1014}
1015
1016Buffer.compare = function compare (a, b) {
1017 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
1018 throw new TypeError('Arguments must be Buffers')
1019 }
1020
1021 if (a === b) return 0
1022
1023 var x = a.length
1024 var y = b.length
1025
1026 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
1027 if (a[i] !== b[i]) {
1028 x = a[i]
1029 y = b[i]
1030 break
1031 }
1032 }
1033
1034 if (x < y) return -1
1035 if (y < x) return 1
1036 return 0
1037}
1038
1039Buffer.isEncoding = function isEncoding (encoding) {
1040 switch (String(encoding).toLowerCase()) {
1041 case 'hex':
1042 case 'utf8':
1043 case 'utf-8':
1044 case 'ascii':
1045 case 'latin1':
1046 case 'binary':
1047 case 'base64':
1048 case 'ucs2':
1049 case 'ucs-2':
1050 case 'utf16le':
1051 case 'utf-16le':
1052 return true
1053 default:
1054 return false
1055 }
1056}
1057
1058Buffer.concat = function concat (list, length) {
1059 if (!Array.isArray(list)) {
1060 throw new TypeError('"list" argument must be an Array of Buffers')
1061 }
1062
1063 if (list.length === 0) {
1064 return Buffer.alloc(0)
1065 }
1066
1067 var i
1068 if (length === undefined) {
1069 length = 0
1070 for (i = 0; i < list.length; ++i) {
1071 length += list[i].length
1072 }
1073 }
1074
1075 var buffer = Buffer.allocUnsafe(length)
1076 var pos = 0
1077 for (i = 0; i < list.length; ++i) {
1078 var buf = list[i]
1079 if (!Buffer.isBuffer(buf)) {
1080 throw new TypeError('"list" argument must be an Array of Buffers')
1081 }
1082 buf.copy(buffer, pos)
1083 pos += buf.length
1084 }
1085 return buffer
1086}
1087
1088function byteLength (string, encoding) {
1089 if (Buffer.isBuffer(string)) {
1090 return string.length
1091 }
1092 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
1093 return string.byteLength
1094 }
1095 if (typeof string !== 'string') {
1096 string = '' + string
1097 }
1098
1099 var len = string.length
1100 if (len === 0) return 0
1101
1102 // Use a for loop to avoid recursion
1103 var loweredCase = false
1104 for (;;) {
1105 switch (encoding) {
1106 case 'ascii':
1107 case 'latin1':
1108 case 'binary':
1109 return len
1110 case 'utf8':
1111 case 'utf-8':
1112 case undefined:
1113 return utf8ToBytes(string).length
1114 case 'ucs2':
1115 case 'ucs-2':
1116 case 'utf16le':
1117 case 'utf-16le':
1118 return len * 2
1119 case 'hex':
1120 return len >>> 1
1121 case 'base64':
1122 return base64ToBytes(string).length
1123 default:
1124 if (loweredCase) return utf8ToBytes(string).length // assume utf8
1125 encoding = ('' + encoding).toLowerCase()
1126 loweredCase = true
1127 }
1128 }
1129}
1130Buffer.byteLength = byteLength
1131
1132function slowToString (encoding, start, end) {
1133 var loweredCase = false
1134
1135 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
1136 // property of a typed array.
1137
1138 // This behaves neither like String nor Uint8Array in that we set start/end
1139 // to their upper/lower bounds if the value passed is out of range.
1140 // undefined is handled specially as per ECMA-262 6th Edition,
1141 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
1142 if (start === undefined || start < 0) {
1143 start = 0
1144 }
1145 // Return early if start > this.length. Done here to prevent potential uint32
1146 // coercion fail below.
1147 if (start > this.length) {
1148 return ''
1149 }
1150
1151 if (end === undefined || end > this.length) {
1152 end = this.length
1153 }
1154
1155 if (end <= 0) {
1156 return ''
1157 }
1158
1159 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
1160 end >>>= 0
1161 start >>>= 0
1162
1163 if (end <= start) {
1164 return ''
1165 }
1166
1167 if (!encoding) encoding = 'utf8'
1168
1169 while (true) {
1170 switch (encoding) {
1171 case 'hex':
1172 return hexSlice(this, start, end)
1173
1174 case 'utf8':
1175 case 'utf-8':
1176 return utf8Slice(this, start, end)
1177
1178 case 'ascii':
1179 return asciiSlice(this, start, end)
1180
1181 case 'latin1':
1182 case 'binary':
1183 return latin1Slice(this, start, end)
1184
1185 case 'base64':
1186 return base64Slice(this, start, end)
1187
1188 case 'ucs2':
1189 case 'ucs-2':
1190 case 'utf16le':
1191 case 'utf-16le':
1192 return utf16leSlice(this, start, end)
1193
1194 default:
1195 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1196 encoding = (encoding + '').toLowerCase()
1197 loweredCase = true
1198 }
1199 }
1200}
1201
1202// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
1203// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
1204// reliably in a browserify context because there could be multiple different
1205// copies of the 'buffer' package in use. This method works even for Buffer
1206// instances that were created from another copy of the `buffer` package.
1207// See: https://github.com/feross/buffer/issues/154
1208Buffer.prototype._isBuffer = true
1209
1210function swap (b, n, m) {
1211 var i = b[n]
1212 b[n] = b[m]
1213 b[m] = i
1214}
1215
1216Buffer.prototype.swap16 = function swap16 () {
1217 var len = this.length
1218 if (len % 2 !== 0) {
1219 throw new RangeError('Buffer size must be a multiple of 16-bits')
1220 }
1221 for (var i = 0; i < len; i += 2) {
1222 swap(this, i, i + 1)
1223 }
1224 return this
1225}
1226
1227Buffer.prototype.swap32 = function swap32 () {
1228 var len = this.length
1229 if (len % 4 !== 0) {
1230 throw new RangeError('Buffer size must be a multiple of 32-bits')
1231 }
1232 for (var i = 0; i < len; i += 4) {
1233 swap(this, i, i + 3)
1234 swap(this, i + 1, i + 2)
1235 }
1236 return this
1237}
1238
1239Buffer.prototype.swap64 = function swap64 () {
1240 var len = this.length
1241 if (len % 8 !== 0) {
1242 throw new RangeError('Buffer size must be a multiple of 64-bits')
1243 }
1244 for (var i = 0; i < len; i += 8) {
1245 swap(this, i, i + 7)
1246 swap(this, i + 1, i + 6)
1247 swap(this, i + 2, i + 5)
1248 swap(this, i + 3, i + 4)
1249 }
1250 return this
1251}
1252
1253Buffer.prototype.toString = function toString () {
1254 var length = this.length
1255 if (length === 0) return ''
1256 if (arguments.length === 0) return utf8Slice(this, 0, length)
1257 return slowToString.apply(this, arguments)
1258}
1259
1260Buffer.prototype.equals = function equals (b) {
1261 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
1262 if (this === b) return true
1263 return Buffer.compare(this, b) === 0
1264}
1265
1266Buffer.prototype.inspect = function inspect () {
1267 var str = ''
1268 var max = exports.INSPECT_MAX_BYTES
1269 if (this.length > 0) {
1270 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
1271 if (this.length > max) str += ' ... '
1272 }
1273 return '<Buffer ' + str + '>'
1274}
1275
1276Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
1277 if (!Buffer.isBuffer(target)) {
1278 throw new TypeError('Argument must be a Buffer')
1279 }
1280
1281 if (start === undefined) {
1282 start = 0
1283 }
1284 if (end === undefined) {
1285 end = target ? target.length : 0
1286 }
1287 if (thisStart === undefined) {
1288 thisStart = 0
1289 }
1290 if (thisEnd === undefined) {
1291 thisEnd = this.length
1292 }
1293
1294 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
1295 throw new RangeError('out of range index')
1296 }
1297
1298 if (thisStart >= thisEnd && start >= end) {
1299 return 0
1300 }
1301 if (thisStart >= thisEnd) {
1302 return -1
1303 }
1304 if (start >= end) {
1305 return 1
1306 }
1307
1308 start >>>= 0
1309 end >>>= 0
1310 thisStart >>>= 0
1311 thisEnd >>>= 0
1312
1313 if (this === target) return 0
1314
1315 var x = thisEnd - thisStart
1316 var y = end - start
1317 var len = Math.min(x, y)
1318
1319 var thisCopy = this.slice(thisStart, thisEnd)
1320 var targetCopy = target.slice(start, end)
1321
1322 for (var i = 0; i < len; ++i) {
1323 if (thisCopy[i] !== targetCopy[i]) {
1324 x = thisCopy[i]
1325 y = targetCopy[i]
1326 break
1327 }
1328 }
1329
1330 if (x < y) return -1
1331 if (y < x) return 1
1332 return 0
1333}
1334
1335// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
1336// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
1337//
1338// Arguments:
1339// - buffer - a Buffer to search
1340// - val - a string, Buffer, or number
1341// - byteOffset - an index into `buffer`; will be clamped to an int32
1342// - encoding - an optional encoding, relevant is val is a string
1343// - dir - true for indexOf, false for lastIndexOf
1344function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
1345 // Empty buffer means no match
1346 if (buffer.length === 0) return -1
1347
1348 // Normalize byteOffset
1349 if (typeof byteOffset === 'string') {
1350 encoding = byteOffset
1351 byteOffset = 0
1352 } else if (byteOffset > 0x7fffffff) {
1353 byteOffset = 0x7fffffff
1354 } else if (byteOffset < -0x80000000) {
1355 byteOffset = -0x80000000
1356 }
1357 byteOffset = +byteOffset // Coerce to Number.
1358 if (isNaN(byteOffset)) {
1359 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
1360 byteOffset = dir ? 0 : (buffer.length - 1)
1361 }
1362
1363 // Normalize byteOffset: negative offsets start from the end of the buffer
1364 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
1365 if (byteOffset >= buffer.length) {
1366 if (dir) return -1
1367 else byteOffset = buffer.length - 1
1368 } else if (byteOffset < 0) {
1369 if (dir) byteOffset = 0
1370 else return -1
1371 }
1372
1373 // Normalize val
1374 if (typeof val === 'string') {
1375 val = Buffer.from(val, encoding)
1376 }
1377
1378 // Finally, search either indexOf (if dir is true) or lastIndexOf
1379 if (Buffer.isBuffer(val)) {
1380 // Special case: looking for empty string/buffer always fails
1381 if (val.length === 0) {
1382 return -1
1383 }
1384 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
1385 } else if (typeof val === 'number') {
1386 val = val & 0xFF // Search for a byte value [0-255]
1387 if (typeof Uint8Array.prototype.indexOf === 'function') {
1388 if (dir) {
1389 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
1390 } else {
1391 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
1392 }
1393 }
1394 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
1395 }
1396
1397 throw new TypeError('val must be string, number or Buffer')
1398}
1399
1400function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
1401 var indexSize = 1
1402 var arrLength = arr.length
1403 var valLength = val.length
1404
1405 if (encoding !== undefined) {
1406 encoding = String(encoding).toLowerCase()
1407 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
1408 encoding === 'utf16le' || encoding === 'utf-16le') {
1409 if (arr.length < 2 || val.length < 2) {
1410 return -1
1411 }
1412 indexSize = 2
1413 arrLength /= 2
1414 valLength /= 2
1415 byteOffset /= 2
1416 }
1417 }
1418
1419 function read (buf, i) {
1420 if (indexSize === 1) {
1421 return buf[i]
1422 } else {
1423 return buf.readUInt16BE(i * indexSize)
1424 }
1425 }
1426
1427 var i
1428 if (dir) {
1429 var foundIndex = -1
1430 for (i = byteOffset; i < arrLength; i++) {
1431 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
1432 if (foundIndex === -1) foundIndex = i
1433 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
1434 } else {
1435 if (foundIndex !== -1) i -= i - foundIndex
1436 foundIndex = -1
1437 }
1438 }
1439 } else {
1440 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
1441 for (i = byteOffset; i >= 0; i--) {
1442 var found = true
1443 for (var j = 0; j < valLength; j++) {
1444 if (read(arr, i + j) !== read(val, j)) {
1445 found = false
1446 break
1447 }
1448 }
1449 if (found) return i
1450 }
1451 }
1452
1453 return -1
1454}
1455
1456Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
1457 return this.indexOf(val, byteOffset, encoding) !== -1
1458}
1459
1460Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
1461 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
1462}
1463
1464Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
1465 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
1466}
1467
1468function hexWrite (buf, string, offset, length) {
1469 offset = Number(offset) || 0
1470 var remaining = buf.length - offset
1471 if (!length) {
1472 length = remaining
1473 } else {
1474 length = Number(length)
1475 if (length > remaining) {
1476 length = remaining
1477 }
1478 }
1479
1480 // must be an even number of digits
1481 var strLen = string.length
1482 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
1483
1484 if (length > strLen / 2) {
1485 length = strLen / 2
1486 }
1487 for (var i = 0; i < length; ++i) {
1488 var parsed = parseInt(string.substr(i * 2, 2), 16)
1489 if (isNaN(parsed)) return i
1490 buf[offset + i] = parsed
1491 }
1492 return i
1493}
1494
1495function utf8Write (buf, string, offset, length) {
1496 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
1497}
1498
1499function asciiWrite (buf, string, offset, length) {
1500 return blitBuffer(asciiToBytes(string), buf, offset, length)
1501}
1502
1503function latin1Write (buf, string, offset, length) {
1504 return asciiWrite(buf, string, offset, length)
1505}
1506
1507function base64Write (buf, string, offset, length) {
1508 return blitBuffer(base64ToBytes(string), buf, offset, length)
1509}
1510
1511function ucs2Write (buf, string, offset, length) {
1512 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
1513}
1514
1515Buffer.prototype.write = function write (string, offset, length, encoding) {
1516 // Buffer#write(string)
1517 if (offset === undefined) {
1518 encoding = 'utf8'
1519 length = this.length
1520 offset = 0
1521 // Buffer#write(string, encoding)
1522 } else if (length === undefined && typeof offset === 'string') {
1523 encoding = offset
1524 length = this.length
1525 offset = 0
1526 // Buffer#write(string, offset[, length][, encoding])
1527 } else if (isFinite(offset)) {
1528 offset = offset >>> 0
1529 if (isFinite(length)) {
1530 length = length >>> 0
1531 if (encoding === undefined) encoding = 'utf8'
1532 } else {
1533 encoding = length
1534 length = undefined
1535 }
1536 } else {
1537 throw new Error(
1538 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
1539 )
1540 }
1541
1542 var remaining = this.length - offset
1543 if (length === undefined || length > remaining) length = remaining
1544
1545 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
1546 throw new RangeError('Attempt to write outside buffer bounds')
1547 }
1548
1549 if (!encoding) encoding = 'utf8'
1550
1551 var loweredCase = false
1552 for (;;) {
1553 switch (encoding) {
1554 case 'hex':
1555 return hexWrite(this, string, offset, length)
1556
1557 case 'utf8':
1558 case 'utf-8':
1559 return utf8Write(this, string, offset, length)
1560
1561 case 'ascii':
1562 return asciiWrite(this, string, offset, length)
1563
1564 case 'latin1':
1565 case 'binary':
1566 return latin1Write(this, string, offset, length)
1567
1568 case 'base64':
1569 // Warning: maxLength not taken into account in base64Write
1570 return base64Write(this, string, offset, length)
1571
1572 case 'ucs2':
1573 case 'ucs-2':
1574 case 'utf16le':
1575 case 'utf-16le':
1576 return ucs2Write(this, string, offset, length)
1577
1578 default:
1579 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
1580 encoding = ('' + encoding).toLowerCase()
1581 loweredCase = true
1582 }
1583 }
1584}
1585
1586Buffer.prototype.toJSON = function toJSON () {
1587 return {
1588 type: 'Buffer',
1589 data: Array.prototype.slice.call(this._arr || this, 0)
1590 }
1591}
1592
1593function base64Slice (buf, start, end) {
1594 if (start === 0 && end === buf.length) {
1595 return base64.fromByteArray(buf)
1596 } else {
1597 return base64.fromByteArray(buf.slice(start, end))
1598 }
1599}
1600
1601function utf8Slice (buf, start, end) {
1602 end = Math.min(buf.length, end)
1603 var res = []
1604
1605 var i = start
1606 while (i < end) {
1607 var firstByte = buf[i]
1608 var codePoint = null
1609 var bytesPerSequence = (firstByte > 0xEF) ? 4
1610 : (firstByte > 0xDF) ? 3
1611 : (firstByte > 0xBF) ? 2
1612 : 1
1613
1614 if (i + bytesPerSequence <= end) {
1615 var secondByte, thirdByte, fourthByte, tempCodePoint
1616
1617 switch (bytesPerSequence) {
1618 case 1:
1619 if (firstByte < 0x80) {
1620 codePoint = firstByte
1621 }
1622 break
1623 case 2:
1624 secondByte = buf[i + 1]
1625 if ((secondByte & 0xC0) === 0x80) {
1626 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
1627 if (tempCodePoint > 0x7F) {
1628 codePoint = tempCodePoint
1629 }
1630 }
1631 break
1632 case 3:
1633 secondByte = buf[i + 1]
1634 thirdByte = buf[i + 2]
1635 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
1636 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
1637 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
1638 codePoint = tempCodePoint
1639 }
1640 }
1641 break
1642 case 4:
1643 secondByte = buf[i + 1]
1644 thirdByte = buf[i + 2]
1645 fourthByte = buf[i + 3]
1646 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
1647 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
1648 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
1649 codePoint = tempCodePoint
1650 }
1651 }
1652 }
1653 }
1654
1655 if (codePoint === null) {
1656 // we did not generate a valid codePoint so insert a
1657 // replacement char (U+FFFD) and advance only 1 byte
1658 codePoint = 0xFFFD
1659 bytesPerSequence = 1
1660 } else if (codePoint > 0xFFFF) {
1661 // encode to utf16 (surrogate pair dance)
1662 codePoint -= 0x10000
1663 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
1664 codePoint = 0xDC00 | codePoint & 0x3FF
1665 }
1666
1667 res.push(codePoint)
1668 i += bytesPerSequence
1669 }
1670
1671 return decodeCodePointsArray(res)
1672}
1673
1674// Based on http://stackoverflow.com/a/22747272/680742, the browser with
1675// the lowest limit is Chrome, with 0x10000 args.
1676// We go 1 magnitude less, for safety
1677var MAX_ARGUMENTS_LENGTH = 0x1000
1678
1679function decodeCodePointsArray (codePoints) {
1680 var len = codePoints.length
1681 if (len <= MAX_ARGUMENTS_LENGTH) {
1682 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
1683 }
1684
1685 // Decode in chunks to avoid "call stack size exceeded".
1686 var res = ''
1687 var i = 0
1688 while (i < len) {
1689 res += String.fromCharCode.apply(
1690 String,
1691 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
1692 )
1693 }
1694 return res
1695}
1696
1697function asciiSlice (buf, start, end) {
1698 var ret = ''
1699 end = Math.min(buf.length, end)
1700
1701 for (var i = start; i < end; ++i) {
1702 ret += String.fromCharCode(buf[i] & 0x7F)
1703 }
1704 return ret
1705}
1706
1707function latin1Slice (buf, start, end) {
1708 var ret = ''
1709 end = Math.min(buf.length, end)
1710
1711 for (var i = start; i < end; ++i) {
1712 ret += String.fromCharCode(buf[i])
1713 }
1714 return ret
1715}
1716
1717function hexSlice (buf, start, end) {
1718 var len = buf.length
1719
1720 if (!start || start < 0) start = 0
1721 if (!end || end < 0 || end > len) end = len
1722
1723 var out = ''
1724 for (var i = start; i < end; ++i) {
1725 out += toHex(buf[i])
1726 }
1727 return out
1728}
1729
1730function utf16leSlice (buf, start, end) {
1731 var bytes = buf.slice(start, end)
1732 var res = ''
1733 for (var i = 0; i < bytes.length; i += 2) {
1734 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
1735 }
1736 return res
1737}
1738
1739Buffer.prototype.slice = function slice (start, end) {
1740 var len = this.length
1741 start = ~~start
1742 end = end === undefined ? len : ~~end
1743
1744 if (start < 0) {
1745 start += len
1746 if (start < 0) start = 0
1747 } else if (start > len) {
1748 start = len
1749 }
1750
1751 if (end < 0) {
1752 end += len
1753 if (end < 0) end = 0
1754 } else if (end > len) {
1755 end = len
1756 }
1757
1758 if (end < start) end = start
1759
1760 var newBuf = this.subarray(start, end)
1761 // Return an augmented `Uint8Array` instance
1762 newBuf.__proto__ = Buffer.prototype
1763 return newBuf
1764}
1765
1766/*
1767 * Need to make sure that buffer isn't trying to write out of bounds.
1768 */
1769function checkOffset (offset, ext, length) {
1770 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1771 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1772}
1773
1774Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1775 offset = offset >>> 0
1776 byteLength = byteLength >>> 0
1777 if (!noAssert) checkOffset(offset, byteLength, this.length)
1778
1779 var val = this[offset]
1780 var mul = 1
1781 var i = 0
1782 while (++i < byteLength && (mul *= 0x100)) {
1783 val += this[offset + i] * mul
1784 }
1785
1786 return val
1787}
1788
1789Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1790 offset = offset >>> 0
1791 byteLength = byteLength >>> 0
1792 if (!noAssert) {
1793 checkOffset(offset, byteLength, this.length)
1794 }
1795
1796 var val = this[offset + --byteLength]
1797 var mul = 1
1798 while (byteLength > 0 && (mul *= 0x100)) {
1799 val += this[offset + --byteLength] * mul
1800 }
1801
1802 return val
1803}
1804
1805Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1806 offset = offset >>> 0
1807 if (!noAssert) checkOffset(offset, 1, this.length)
1808 return this[offset]
1809}
1810
1811Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1812 offset = offset >>> 0
1813 if (!noAssert) checkOffset(offset, 2, this.length)
1814 return this[offset] | (this[offset + 1] << 8)
1815}
1816
1817Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1818 offset = offset >>> 0
1819 if (!noAssert) checkOffset(offset, 2, this.length)
1820 return (this[offset] << 8) | this[offset + 1]
1821}
1822
1823Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1824 offset = offset >>> 0
1825 if (!noAssert) checkOffset(offset, 4, this.length)
1826
1827 return ((this[offset]) |
1828 (this[offset + 1] << 8) |
1829 (this[offset + 2] << 16)) +
1830 (this[offset + 3] * 0x1000000)
1831}
1832
1833Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1834 offset = offset >>> 0
1835 if (!noAssert) checkOffset(offset, 4, this.length)
1836
1837 return (this[offset] * 0x1000000) +
1838 ((this[offset + 1] << 16) |
1839 (this[offset + 2] << 8) |
1840 this[offset + 3])
1841}
1842
1843Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1844 offset = offset >>> 0
1845 byteLength = byteLength >>> 0
1846 if (!noAssert) checkOffset(offset, byteLength, this.length)
1847
1848 var val = this[offset]
1849 var mul = 1
1850 var i = 0
1851 while (++i < byteLength && (mul *= 0x100)) {
1852 val += this[offset + i] * mul
1853 }
1854 mul *= 0x80
1855
1856 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1857
1858 return val
1859}
1860
1861Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1862 offset = offset >>> 0
1863 byteLength = byteLength >>> 0
1864 if (!noAssert) checkOffset(offset, byteLength, this.length)
1865
1866 var i = byteLength
1867 var mul = 1
1868 var val = this[offset + --i]
1869 while (i > 0 && (mul *= 0x100)) {
1870 val += this[offset + --i] * mul
1871 }
1872 mul *= 0x80
1873
1874 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1875
1876 return val
1877}
1878
1879Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1880 offset = offset >>> 0
1881 if (!noAssert) checkOffset(offset, 1, this.length)
1882 if (!(this[offset] & 0x80)) return (this[offset])
1883 return ((0xff - this[offset] + 1) * -1)
1884}
1885
1886Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1887 offset = offset >>> 0
1888 if (!noAssert) checkOffset(offset, 2, this.length)
1889 var val = this[offset] | (this[offset + 1] << 8)
1890 return (val & 0x8000) ? val | 0xFFFF0000 : val
1891}
1892
1893Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1894 offset = offset >>> 0
1895 if (!noAssert) checkOffset(offset, 2, this.length)
1896 var val = this[offset + 1] | (this[offset] << 8)
1897 return (val & 0x8000) ? val | 0xFFFF0000 : val
1898}
1899
1900Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1901 offset = offset >>> 0
1902 if (!noAssert) checkOffset(offset, 4, this.length)
1903
1904 return (this[offset]) |
1905 (this[offset + 1] << 8) |
1906 (this[offset + 2] << 16) |
1907 (this[offset + 3] << 24)
1908}
1909
1910Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1911 offset = offset >>> 0
1912 if (!noAssert) checkOffset(offset, 4, this.length)
1913
1914 return (this[offset] << 24) |
1915 (this[offset + 1] << 16) |
1916 (this[offset + 2] << 8) |
1917 (this[offset + 3])
1918}
1919
1920Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1921 offset = offset >>> 0
1922 if (!noAssert) checkOffset(offset, 4, this.length)
1923 return ieee754.read(this, offset, true, 23, 4)
1924}
1925
1926Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1927 offset = offset >>> 0
1928 if (!noAssert) checkOffset(offset, 4, this.length)
1929 return ieee754.read(this, offset, false, 23, 4)
1930}
1931
1932Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1933 offset = offset >>> 0
1934 if (!noAssert) checkOffset(offset, 8, this.length)
1935 return ieee754.read(this, offset, true, 52, 8)
1936}
1937
1938Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1939 offset = offset >>> 0
1940 if (!noAssert) checkOffset(offset, 8, this.length)
1941 return ieee754.read(this, offset, false, 52, 8)
1942}
1943
1944function checkInt (buf, value, offset, ext, max, min) {
1945 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
1946 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
1947 if (offset + ext > buf.length) throw new RangeError('Index out of range')
1948}
1949
1950Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1951 value = +value
1952 offset = offset >>> 0
1953 byteLength = byteLength >>> 0
1954 if (!noAssert) {
1955 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1956 checkInt(this, value, offset, byteLength, maxBytes, 0)
1957 }
1958
1959 var mul = 1
1960 var i = 0
1961 this[offset] = value & 0xFF
1962 while (++i < byteLength && (mul *= 0x100)) {
1963 this[offset + i] = (value / mul) & 0xFF
1964 }
1965
1966 return offset + byteLength
1967}
1968
1969Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1970 value = +value
1971 offset = offset >>> 0
1972 byteLength = byteLength >>> 0
1973 if (!noAssert) {
1974 var maxBytes = Math.pow(2, 8 * byteLength) - 1
1975 checkInt(this, value, offset, byteLength, maxBytes, 0)
1976 }
1977
1978 var i = byteLength - 1
1979 var mul = 1
1980 this[offset + i] = value & 0xFF
1981 while (--i >= 0 && (mul *= 0x100)) {
1982 this[offset + i] = (value / mul) & 0xFF
1983 }
1984
1985 return offset + byteLength
1986}
1987
1988Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1989 value = +value
1990 offset = offset >>> 0
1991 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1992 this[offset] = (value & 0xff)
1993 return offset + 1
1994}
1995
1996Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1997 value = +value
1998 offset = offset >>> 0
1999 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
2000 this[offset] = (value & 0xff)
2001 this[offset + 1] = (value >>> 8)
2002 return offset + 2
2003}
2004
2005Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
2006 value = +value
2007 offset = offset >>> 0
2008 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
2009 this[offset] = (value >>> 8)
2010 this[offset + 1] = (value & 0xff)
2011 return offset + 2
2012}
2013
2014Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
2015 value = +value
2016 offset = offset >>> 0
2017 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
2018 this[offset + 3] = (value >>> 24)
2019 this[offset + 2] = (value >>> 16)
2020 this[offset + 1] = (value >>> 8)
2021 this[offset] = (value & 0xff)
2022 return offset + 4
2023}
2024
2025Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
2026 value = +value
2027 offset = offset >>> 0
2028 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
2029 this[offset] = (value >>> 24)
2030 this[offset + 1] = (value >>> 16)
2031 this[offset + 2] = (value >>> 8)
2032 this[offset + 3] = (value & 0xff)
2033 return offset + 4
2034}
2035
2036Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
2037 value = +value
2038 offset = offset >>> 0
2039 if (!noAssert) {
2040 var limit = Math.pow(2, (8 * byteLength) - 1)
2041
2042 checkInt(this, value, offset, byteLength, limit - 1, -limit)
2043 }
2044
2045 var i = 0
2046 var mul = 1
2047 var sub = 0
2048 this[offset] = value & 0xFF
2049 while (++i < byteLength && (mul *= 0x100)) {
2050 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
2051 sub = 1
2052 }
2053 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
2054 }
2055
2056 return offset + byteLength
2057}
2058
2059Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
2060 value = +value
2061 offset = offset >>> 0
2062 if (!noAssert) {
2063 var limit = Math.pow(2, (8 * byteLength) - 1)
2064
2065 checkInt(this, value, offset, byteLength, limit - 1, -limit)
2066 }
2067
2068 var i = byteLength - 1
2069 var mul = 1
2070 var sub = 0
2071 this[offset + i] = value & 0xFF
2072 while (--i >= 0 && (mul *= 0x100)) {
2073 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
2074 sub = 1
2075 }
2076 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
2077 }
2078
2079 return offset + byteLength
2080}
2081
2082Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
2083 value = +value
2084 offset = offset >>> 0
2085 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
2086 if (value < 0) value = 0xff + value + 1
2087 this[offset] = (value & 0xff)
2088 return offset + 1
2089}
2090
2091Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
2092 value = +value
2093 offset = offset >>> 0
2094 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
2095 this[offset] = (value & 0xff)
2096 this[offset + 1] = (value >>> 8)
2097 return offset + 2
2098}
2099
2100Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
2101 value = +value
2102 offset = offset >>> 0
2103 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
2104 this[offset] = (value >>> 8)
2105 this[offset + 1] = (value & 0xff)
2106 return offset + 2
2107}
2108
2109Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
2110 value = +value
2111 offset = offset >>> 0
2112 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
2113 this[offset] = (value & 0xff)
2114 this[offset + 1] = (value >>> 8)
2115 this[offset + 2] = (value >>> 16)
2116 this[offset + 3] = (value >>> 24)
2117 return offset + 4
2118}
2119
2120Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
2121 value = +value
2122 offset = offset >>> 0
2123 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
2124 if (value < 0) value = 0xffffffff + value + 1
2125 this[offset] = (value >>> 24)
2126 this[offset + 1] = (value >>> 16)
2127 this[offset + 2] = (value >>> 8)
2128 this[offset + 3] = (value & 0xff)
2129 return offset + 4
2130}
2131
2132function checkIEEE754 (buf, value, offset, ext, max, min) {
2133 if (offset + ext > buf.length) throw new RangeError('Index out of range')
2134 if (offset < 0) throw new RangeError('Index out of range')
2135}
2136
2137function writeFloat (buf, value, offset, littleEndian, noAssert) {
2138 value = +value
2139 offset = offset >>> 0
2140 if (!noAssert) {
2141 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
2142 }
2143 ieee754.write(buf, value, offset, littleEndian, 23, 4)
2144 return offset + 4
2145}
2146
2147Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
2148 return writeFloat(this, value, offset, true, noAssert)
2149}
2150
2151Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
2152 return writeFloat(this, value, offset, false, noAssert)
2153}
2154
2155function writeDouble (buf, value, offset, littleEndian, noAssert) {
2156 value = +value
2157 offset = offset >>> 0
2158 if (!noAssert) {
2159 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
2160 }
2161 ieee754.write(buf, value, offset, littleEndian, 52, 8)
2162 return offset + 8
2163}
2164
2165Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
2166 return writeDouble(this, value, offset, true, noAssert)
2167}
2168
2169Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
2170 return writeDouble(this, value, offset, false, noAssert)
2171}
2172
2173// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
2174Buffer.prototype.copy = function copy (target, targetStart, start, end) {
2175 if (!start) start = 0
2176 if (!end && end !== 0) end = this.length
2177 if (targetStart >= target.length) targetStart = target.length
2178 if (!targetStart) targetStart = 0
2179 if (end > 0 && end < start) end = start
2180
2181 // Copy 0 bytes; we're done
2182 if (end === start) return 0
2183 if (target.length === 0 || this.length === 0) return 0
2184
2185 // Fatal error conditions
2186 if (targetStart < 0) {
2187 throw new RangeError('targetStart out of bounds')
2188 }
2189 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
2190 if (end < 0) throw new RangeError('sourceEnd out of bounds')
2191
2192 // Are we oob?
2193 if (end > this.length) end = this.length
2194 if (target.length - targetStart < end - start) {
2195 end = target.length - targetStart + start
2196 }
2197
2198 var len = end - start
2199 var i
2200
2201 if (this === target && start < targetStart && targetStart < end) {
2202 // descending copy from end
2203 for (i = len - 1; i >= 0; --i) {
2204 target[i + targetStart] = this[i + start]
2205 }
2206 } else if (len < 1000) {
2207 // ascending copy from start
2208 for (i = 0; i < len; ++i) {
2209 target[i + targetStart] = this[i + start]
2210 }
2211 } else {
2212 Uint8Array.prototype.set.call(
2213 target,
2214 this.subarray(start, start + len),
2215 targetStart
2216 )
2217 }
2218
2219 return len
2220}
2221
2222// Usage:
2223// buffer.fill(number[, offset[, end]])
2224// buffer.fill(buffer[, offset[, end]])
2225// buffer.fill(string[, offset[, end]][, encoding])
2226Buffer.prototype.fill = function fill (val, start, end, encoding) {
2227 // Handle string cases:
2228 if (typeof val === 'string') {
2229 if (typeof start === 'string') {
2230 encoding = start
2231 start = 0
2232 end = this.length
2233 } else if (typeof end === 'string') {
2234 encoding = end
2235 end = this.length
2236 }
2237 if (val.length === 1) {
2238 var code = val.charCodeAt(0)
2239 if (code < 256) {
2240 val = code
2241 }
2242 }
2243 if (encoding !== undefined && typeof encoding !== 'string') {
2244 throw new TypeError('encoding must be a string')
2245 }
2246 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
2247 throw new TypeError('Unknown encoding: ' + encoding)
2248 }
2249 } else if (typeof val === 'number') {
2250 val = val & 255
2251 }
2252
2253 // Invalid ranges are not set to a default, so can range check early.
2254 if (start < 0 || this.length < start || this.length < end) {
2255 throw new RangeError('Out of range index')
2256 }
2257
2258 if (end <= start) {
2259 return this
2260 }
2261
2262 start = start >>> 0
2263 end = end === undefined ? this.length : end >>> 0
2264
2265 if (!val) val = 0
2266
2267 var i
2268 if (typeof val === 'number') {
2269 for (i = start; i < end; ++i) {
2270 this[i] = val
2271 }
2272 } else {
2273 var bytes = Buffer.isBuffer(val)
2274 ? val
2275 : new Buffer(val, encoding)
2276 var len = bytes.length
2277 for (i = 0; i < end - start; ++i) {
2278 this[i + start] = bytes[i % len]
2279 }
2280 }
2281
2282 return this
2283}
2284
2285// HELPER FUNCTIONS
2286// ================
2287
2288var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
2289
2290function base64clean (str) {
2291 // Node strips out invalid characters like \n and \t from the string, base64-js does not
2292 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
2293 // Node converts strings with length < 2 to ''
2294 if (str.length < 2) return ''
2295 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
2296 while (str.length % 4 !== 0) {
2297 str = str + '='
2298 }
2299 return str
2300}
2301
2302function stringtrim (str) {
2303 if (str.trim) return str.trim()
2304 return str.replace(/^\s+|\s+$/g, '')
2305}
2306
2307function toHex (n) {
2308 if (n < 16) return '0' + n.toString(16)
2309 return n.toString(16)
2310}
2311
2312function utf8ToBytes (string, units) {
2313 units = units || Infinity
2314 var codePoint
2315 var length = string.length
2316 var leadSurrogate = null
2317 var bytes = []
2318
2319 for (var i = 0; i < length; ++i) {
2320 codePoint = string.charCodeAt(i)
2321
2322 // is surrogate component
2323 if (codePoint > 0xD7FF && codePoint < 0xE000) {
2324 // last char was a lead
2325 if (!leadSurrogate) {
2326 // no lead yet
2327 if (codePoint > 0xDBFF) {
2328 // unexpected trail
2329 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2330 continue
2331 } else if (i + 1 === length) {
2332 // unpaired lead
2333 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2334 continue
2335 }
2336
2337 // valid lead
2338 leadSurrogate = codePoint
2339
2340 continue
2341 }
2342
2343 // 2 leads in a row
2344 if (codePoint < 0xDC00) {
2345 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2346 leadSurrogate = codePoint
2347 continue
2348 }
2349
2350 // valid surrogate pair
2351 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
2352 } else if (leadSurrogate) {
2353 // valid bmp char, but last char was a lead
2354 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
2355 }
2356
2357 leadSurrogate = null
2358
2359 // encode utf8
2360 if (codePoint < 0x80) {
2361 if ((units -= 1) < 0) break
2362 bytes.push(codePoint)
2363 } else if (codePoint < 0x800) {
2364 if ((units -= 2) < 0) break
2365 bytes.push(
2366 codePoint >> 0x6 | 0xC0,
2367 codePoint & 0x3F | 0x80
2368 )
2369 } else if (codePoint < 0x10000) {
2370 if ((units -= 3) < 0) break
2371 bytes.push(
2372 codePoint >> 0xC | 0xE0,
2373 codePoint >> 0x6 & 0x3F | 0x80,
2374 codePoint & 0x3F | 0x80
2375 )
2376 } else if (codePoint < 0x110000) {
2377 if ((units -= 4) < 0) break
2378 bytes.push(
2379 codePoint >> 0x12 | 0xF0,
2380 codePoint >> 0xC & 0x3F | 0x80,
2381 codePoint >> 0x6 & 0x3F | 0x80,
2382 codePoint & 0x3F | 0x80
2383 )
2384 } else {
2385 throw new Error('Invalid code point')
2386 }
2387 }
2388
2389 return bytes
2390}
2391
2392function asciiToBytes (str) {
2393 var byteArray = []
2394 for (var i = 0; i < str.length; ++i) {
2395 // Node's code seems to be doing this and not & 0x7F..
2396 byteArray.push(str.charCodeAt(i) & 0xFF)
2397 }
2398 return byteArray
2399}
2400
2401function utf16leToBytes (str, units) {
2402 var c, hi, lo
2403 var byteArray = []
2404 for (var i = 0; i < str.length; ++i) {
2405 if ((units -= 2) < 0) break
2406
2407 c = str.charCodeAt(i)
2408 hi = c >> 8
2409 lo = c % 256
2410 byteArray.push(lo)
2411 byteArray.push(hi)
2412 }
2413
2414 return byteArray
2415}
2416
2417function base64ToBytes (str) {
2418 return base64.toByteArray(base64clean(str))
2419}
2420
2421function blitBuffer (src, dst, offset, length) {
2422 for (var i = 0; i < length; ++i) {
2423 if ((i + offset >= dst.length) || (i >= src.length)) break
2424 dst[i + offset] = src[i]
2425 }
2426 return i
2427}
2428
2429function isnan (val) {
2430 return val !== val // eslint-disable-line no-self-compare
2431}
2432
2433},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
2434(function (Buffer){
2435// Copyright Joyent, Inc. and other Node contributors.
2436//
2437// Permission is hereby granted, free of charge, to any person obtaining a
2438// copy of this software and associated documentation files (the
2439// "Software"), to deal in the Software without restriction, including
2440// without limitation the rights to use, copy, modify, merge, publish,
2441// distribute, sublicense, and/or sell copies of the Software, and to permit
2442// persons to whom the Software is furnished to do so, subject to the
2443// following conditions:
2444//
2445// The above copyright notice and this permission notice shall be included
2446// in all copies or substantial portions of the Software.
2447//
2448// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2449// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2450// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2451// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2452// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2453// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2454// USE OR OTHER DEALINGS IN THE SOFTWARE.
2455
2456// NOTE: These type checking functions intentionally don't use `instanceof`
2457// because it is fragile and can be easily faked with `Object.create()`.
2458
2459function isArray(arg) {
2460 if (Array.isArray) {
2461 return Array.isArray(arg);
2462 }
2463 return objectToString(arg) === '[object Array]';
2464}
2465exports.isArray = isArray;
2466
2467function isBoolean(arg) {
2468 return typeof arg === 'boolean';
2469}
2470exports.isBoolean = isBoolean;
2471
2472function isNull(arg) {
2473 return arg === null;
2474}
2475exports.isNull = isNull;
2476
2477function isNullOrUndefined(arg) {
2478 return arg == null;
2479}
2480exports.isNullOrUndefined = isNullOrUndefined;
2481
2482function isNumber(arg) {
2483 return typeof arg === 'number';
2484}
2485exports.isNumber = isNumber;
2486
2487function isString(arg) {
2488 return typeof arg === 'string';
2489}
2490exports.isString = isString;
2491
2492function isSymbol(arg) {
2493 return typeof arg === 'symbol';
2494}
2495exports.isSymbol = isSymbol;
2496
2497function isUndefined(arg) {
2498 return arg === void 0;
2499}
2500exports.isUndefined = isUndefined;
2501
2502function isRegExp(re) {
2503 return objectToString(re) === '[object RegExp]';
2504}
2505exports.isRegExp = isRegExp;
2506
2507function isObject(arg) {
2508 return typeof arg === 'object' && arg !== null;
2509}
2510exports.isObject = isObject;
2511
2512function isDate(d) {
2513 return objectToString(d) === '[object Date]';
2514}
2515exports.isDate = isDate;
2516
2517function isError(e) {
2518 return (objectToString(e) === '[object Error]' || e instanceof Error);
2519}
2520exports.isError = isError;
2521
2522function isFunction(arg) {
2523 return typeof arg === 'function';
2524}
2525exports.isFunction = isFunction;
2526
2527function isPrimitive(arg) {
2528 return arg === null ||
2529 typeof arg === 'boolean' ||
2530 typeof arg === 'number' ||
2531 typeof arg === 'string' ||
2532 typeof arg === 'symbol' || // ES6 symbol
2533 typeof arg === 'undefined';
2534}
2535exports.isPrimitive = isPrimitive;
2536
2537exports.isBuffer = Buffer.isBuffer;
2538
2539function objectToString(o) {
2540 return Object.prototype.toString.call(o);
2541}
2542
2543}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
2544},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
2545// Copyright Joyent, Inc. and other Node contributors.
2546//
2547// Permission is hereby granted, free of charge, to any person obtaining a
2548// copy of this software and associated documentation files (the
2549// "Software"), to deal in the Software without restriction, including
2550// without limitation the rights to use, copy, modify, merge, publish,
2551// distribute, sublicense, and/or sell copies of the Software, and to permit
2552// persons to whom the Software is furnished to do so, subject to the
2553// following conditions:
2554//
2555// The above copyright notice and this permission notice shall be included
2556// in all copies or substantial portions of the Software.
2557//
2558// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2559// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2560// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2561// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2562// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2563// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2564// USE OR OTHER DEALINGS IN THE SOFTWARE.
2565
2566function EventEmitter() {
2567 this._events = this._events || {};
2568 this._maxListeners = this._maxListeners || undefined;
2569}
2570module.exports = EventEmitter;
2571
2572// Backwards-compat with node 0.10.x
2573EventEmitter.EventEmitter = EventEmitter;
2574
2575EventEmitter.prototype._events = undefined;
2576EventEmitter.prototype._maxListeners = undefined;
2577
2578// By default EventEmitters will print a warning if more than 10 listeners are
2579// added to it. This is a useful default which helps finding memory leaks.
2580EventEmitter.defaultMaxListeners = 10;
2581
2582// Obviously not all Emitters should be limited to 10. This function allows
2583// that to be increased. Set to zero for unlimited.
2584EventEmitter.prototype.setMaxListeners = function(n) {
2585 if (!isNumber(n) || n < 0 || isNaN(n))
2586 throw TypeError('n must be a positive number');
2587 this._maxListeners = n;
2588 return this;
2589};
2590
2591EventEmitter.prototype.emit = function(type) {
2592 var er, handler, len, args, i, listeners;
2593
2594 if (!this._events)
2595 this._events = {};
2596
2597 // If there is no 'error' event listener then throw.
2598 if (type === 'error') {
2599 if (!this._events.error ||
2600 (isObject(this._events.error) && !this._events.error.length)) {
2601 er = arguments[1];
2602 if (er instanceof Error) {
2603 throw er; // Unhandled 'error' event
2604 } else {
2605 // At least give some kind of context to the user
2606 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
2607 err.context = er;
2608 throw err;
2609 }
2610 }
2611 }
2612
2613 handler = this._events[type];
2614
2615 if (isUndefined(handler))
2616 return false;
2617
2618 if (isFunction(handler)) {
2619 switch (arguments.length) {
2620 // fast cases
2621 case 1:
2622 handler.call(this);
2623 break;
2624 case 2:
2625 handler.call(this, arguments[1]);
2626 break;
2627 case 3:
2628 handler.call(this, arguments[1], arguments[2]);
2629 break;
2630 // slower
2631 default:
2632 args = Array.prototype.slice.call(arguments, 1);
2633 handler.apply(this, args);
2634 }
2635 } else if (isObject(handler)) {
2636 args = Array.prototype.slice.call(arguments, 1);
2637 listeners = handler.slice();
2638 len = listeners.length;
2639 for (i = 0; i < len; i++)
2640 listeners[i].apply(this, args);
2641 }
2642
2643 return true;
2644};
2645
2646EventEmitter.prototype.addListener = function(type, listener) {
2647 var m;
2648
2649 if (!isFunction(listener))
2650 throw TypeError('listener must be a function');
2651
2652 if (!this._events)
2653 this._events = {};
2654
2655 // To avoid recursion in the case that type === "newListener"! Before
2656 // adding it to the listeners, first emit "newListener".
2657 if (this._events.newListener)
2658 this.emit('newListener', type,
2659 isFunction(listener.listener) ?
2660 listener.listener : listener);
2661
2662 if (!this._events[type])
2663 // Optimize the case of one listener. Don't need the extra array object.
2664 this._events[type] = listener;
2665 else if (isObject(this._events[type]))
2666 // If we've already got an array, just append.
2667 this._events[type].push(listener);
2668 else
2669 // Adding the second element, need to change to array.
2670 this._events[type] = [this._events[type], listener];
2671
2672 // Check for listener leak
2673 if (isObject(this._events[type]) && !this._events[type].warned) {
2674 if (!isUndefined(this._maxListeners)) {
2675 m = this._maxListeners;
2676 } else {
2677 m = EventEmitter.defaultMaxListeners;
2678 }
2679
2680 if (m && m > 0 && this._events[type].length > m) {
2681 this._events[type].warned = true;
2682 console.error('(node) warning: possible EventEmitter memory ' +
2683 'leak detected. %d listeners added. ' +
2684 'Use emitter.setMaxListeners() to increase limit.',
2685 this._events[type].length);
2686 if (typeof console.trace === 'function') {
2687 // not supported in IE 10
2688 console.trace();
2689 }
2690 }
2691 }
2692
2693 return this;
2694};
2695
2696EventEmitter.prototype.on = EventEmitter.prototype.addListener;
2697
2698EventEmitter.prototype.once = function(type, listener) {
2699 if (!isFunction(listener))
2700 throw TypeError('listener must be a function');
2701
2702 var fired = false;
2703
2704 function g() {
2705 this.removeListener(type, g);
2706
2707 if (!fired) {
2708 fired = true;
2709 listener.apply(this, arguments);
2710 }
2711 }
2712
2713 g.listener = listener;
2714 this.on(type, g);
2715
2716 return this;
2717};
2718
2719// emits a 'removeListener' event iff the listener was removed
2720EventEmitter.prototype.removeListener = function(type, listener) {
2721 var list, position, length, i;
2722
2723 if (!isFunction(listener))
2724 throw TypeError('listener must be a function');
2725
2726 if (!this._events || !this._events[type])
2727 return this;
2728
2729 list = this._events[type];
2730 length = list.length;
2731 position = -1;
2732
2733 if (list === listener ||
2734 (isFunction(list.listener) && list.listener === listener)) {
2735 delete this._events[type];
2736 if (this._events.removeListener)
2737 this.emit('removeListener', type, listener);
2738
2739 } else if (isObject(list)) {
2740 for (i = length; i-- > 0;) {
2741 if (list[i] === listener ||
2742 (list[i].listener && list[i].listener === listener)) {
2743 position = i;
2744 break;
2745 }
2746 }
2747
2748 if (position < 0)
2749 return this;
2750
2751 if (list.length === 1) {
2752 list.length = 0;
2753 delete this._events[type];
2754 } else {
2755 list.splice(position, 1);
2756 }
2757
2758 if (this._events.removeListener)
2759 this.emit('removeListener', type, listener);
2760 }
2761
2762 return this;
2763};
2764
2765EventEmitter.prototype.removeAllListeners = function(type) {
2766 var key, listeners;
2767
2768 if (!this._events)
2769 return this;
2770
2771 // not listening for removeListener, no need to emit
2772 if (!this._events.removeListener) {
2773 if (arguments.length === 0)
2774 this._events = {};
2775 else if (this._events[type])
2776 delete this._events[type];
2777 return this;
2778 }
2779
2780 // emit removeListener for all listeners on all events
2781 if (arguments.length === 0) {
2782 for (key in this._events) {
2783 if (key === 'removeListener') continue;
2784 this.removeAllListeners(key);
2785 }
2786 this.removeAllListeners('removeListener');
2787 this._events = {};
2788 return this;
2789 }
2790
2791 listeners = this._events[type];
2792
2793 if (isFunction(listeners)) {
2794 this.removeListener(type, listeners);
2795 } else if (listeners) {
2796 // LIFO order
2797 while (listeners.length)
2798 this.removeListener(type, listeners[listeners.length - 1]);
2799 }
2800 delete this._events[type];
2801
2802 return this;
2803};
2804
2805EventEmitter.prototype.listeners = function(type) {
2806 var ret;
2807 if (!this._events || !this._events[type])
2808 ret = [];
2809 else if (isFunction(this._events[type]))
2810 ret = [this._events[type]];
2811 else
2812 ret = this._events[type].slice();
2813 return ret;
2814};
2815
2816EventEmitter.prototype.listenerCount = function(type) {
2817 if (this._events) {
2818 var evlistener = this._events[type];
2819
2820 if (isFunction(evlistener))
2821 return 1;
2822 else if (evlistener)
2823 return evlistener.length;
2824 }
2825 return 0;
2826};
2827
2828EventEmitter.listenerCount = function(emitter, type) {
2829 return emitter.listenerCount(type);
2830};
2831
2832function isFunction(arg) {
2833 return typeof arg === 'function';
2834}
2835
2836function isNumber(arg) {
2837 return typeof arg === 'number';
2838}
2839
2840function isObject(arg) {
2841 return typeof arg === 'object' && arg !== null;
2842}
2843
2844function isUndefined(arg) {
2845 return arg === void 0;
2846}
2847
2848},{}],8:[function(require,module,exports){
2849exports.read = function (buffer, offset, isLE, mLen, nBytes) {
2850 var e, m
2851 var eLen = nBytes * 8 - mLen - 1
2852 var eMax = (1 << eLen) - 1
2853 var eBias = eMax >> 1
2854 var nBits = -7
2855 var i = isLE ? (nBytes - 1) : 0
2856 var d = isLE ? -1 : 1
2857 var s = buffer[offset + i]
2858
2859 i += d
2860
2861 e = s & ((1 << (-nBits)) - 1)
2862 s >>= (-nBits)
2863 nBits += eLen
2864 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
2865
2866 m = e & ((1 << (-nBits)) - 1)
2867 e >>= (-nBits)
2868 nBits += mLen
2869 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
2870
2871 if (e === 0) {
2872 e = 1 - eBias
2873 } else if (e === eMax) {
2874 return m ? NaN : ((s ? -1 : 1) * Infinity)
2875 } else {
2876 m = m + Math.pow(2, mLen)
2877 e = e - eBias
2878 }
2879 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
2880}
2881
2882exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
2883 var e, m, c
2884 var eLen = nBytes * 8 - mLen - 1
2885 var eMax = (1 << eLen) - 1
2886 var eBias = eMax >> 1
2887 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
2888 var i = isLE ? 0 : (nBytes - 1)
2889 var d = isLE ? 1 : -1
2890 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
2891
2892 value = Math.abs(value)
2893
2894 if (isNaN(value) || value === Infinity) {
2895 m = isNaN(value) ? 1 : 0
2896 e = eMax
2897 } else {
2898 e = Math.floor(Math.log(value) / Math.LN2)
2899 if (value * (c = Math.pow(2, -e)) < 1) {
2900 e--
2901 c *= 2
2902 }
2903 if (e + eBias >= 1) {
2904 value += rt / c
2905 } else {
2906 value += rt * Math.pow(2, 1 - eBias)
2907 }
2908 if (value * c >= 2) {
2909 e++
2910 c /= 2
2911 }
2912
2913 if (e + eBias >= eMax) {
2914 m = 0
2915 e = eMax
2916 } else if (e + eBias >= 1) {
2917 m = (value * c - 1) * Math.pow(2, mLen)
2918 e = e + eBias
2919 } else {
2920 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
2921 e = 0
2922 }
2923 }
2924
2925 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
2926
2927 e = (e << mLen) | m
2928 eLen += mLen
2929 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
2930
2931 buffer[offset + i - d] |= s * 128
2932}
2933
2934},{}],9:[function(require,module,exports){
2935if (typeof Object.create === 'function') {
2936 // implementation from standard node.js 'util' module
2937 module.exports = function inherits(ctor, superCtor) {
2938 ctor.super_ = superCtor
2939 ctor.prototype = Object.create(superCtor.prototype, {
2940 constructor: {
2941 value: ctor,
2942 enumerable: false,
2943 writable: true,
2944 configurable: true
2945 }
2946 });
2947 };
2948} else {
2949 // old school shim for old browsers
2950 module.exports = function inherits(ctor, superCtor) {
2951 ctor.super_ = superCtor
2952 var TempCtor = function () {}
2953 TempCtor.prototype = superCtor.prototype
2954 ctor.prototype = new TempCtor()
2955 ctor.prototype.constructor = ctor
2956 }
2957}
2958
2959},{}],10:[function(require,module,exports){
2960/*!
2961 * Determine if an object is a Buffer
2962 *
2963 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2964 * @license MIT
2965 */
2966
2967// The _isBuffer check is for Safari 5-7 support, because it's missing
2968// Object.prototype.constructor. Remove this eventually
2969module.exports = function (obj) {
2970 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
2971}
2972
2973function isBuffer (obj) {
2974 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
2975}
2976
2977// For Node v0.10 support. Remove this eventually.
2978function isSlowBuffer (obj) {
2979 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
2980}
2981
2982},{}],11:[function(require,module,exports){
2983var toString = {}.toString;
2984
2985module.exports = Array.isArray || function (arr) {
2986 return toString.call(arr) == '[object Array]';
2987};
2988
2989},{}],12:[function(require,module,exports){
2990(function (process){
2991'use strict';
2992
2993if (!process.version ||
2994 process.version.indexOf('v0.') === 0 ||
2995 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
2996 module.exports = nextTick;
2997} else {
2998 module.exports = process.nextTick;
2999}
3000
3001function nextTick(fn, arg1, arg2, arg3) {
3002 if (typeof fn !== 'function') {
3003 throw new TypeError('"callback" argument must be a function');
3004 }
3005 var len = arguments.length;
3006 var args, i;
3007 switch (len) {
3008 case 0:
3009 case 1:
3010 return process.nextTick(fn);
3011 case 2:
3012 return process.nextTick(function afterTickOne() {
3013 fn.call(null, arg1);
3014 });
3015 case 3:
3016 return process.nextTick(function afterTickTwo() {
3017 fn.call(null, arg1, arg2);
3018 });
3019 case 4:
3020 return process.nextTick(function afterTickThree() {
3021 fn.call(null, arg1, arg2, arg3);
3022 });
3023 default:
3024 args = new Array(len - 1);
3025 i = 0;
3026 while (i < args.length) {
3027 args[i++] = arguments[i];
3028 }
3029 return process.nextTick(function afterTick() {
3030 fn.apply(null, args);
3031 });
3032 }
3033}
3034
3035}).call(this,require('_process'))
3036},{"_process":13}],13:[function(require,module,exports){
3037// shim for using process in browser
3038var process = module.exports = {};
3039
3040// cached from whatever global is present so that test runners that stub it
3041// don't break things. But we need to wrap it in a try catch in case it is
3042// wrapped in strict mode code which doesn't define any globals. It's inside a
3043// function because try/catches deoptimize in certain engines.
3044
3045var cachedSetTimeout;
3046var cachedClearTimeout;
3047
3048function defaultSetTimout() {
3049 throw new Error('setTimeout has not been defined');
3050}
3051function defaultClearTimeout () {
3052 throw new Error('clearTimeout has not been defined');
3053}
3054(function () {
3055 try {
3056 if (typeof setTimeout === 'function') {
3057 cachedSetTimeout = setTimeout;
3058 } else {
3059 cachedSetTimeout = defaultSetTimout;
3060 }
3061 } catch (e) {
3062 cachedSetTimeout = defaultSetTimout;
3063 }
3064 try {
3065 if (typeof clearTimeout === 'function') {
3066 cachedClearTimeout = clearTimeout;
3067 } else {
3068 cachedClearTimeout = defaultClearTimeout;
3069 }
3070 } catch (e) {
3071 cachedClearTimeout = defaultClearTimeout;
3072 }
3073} ())
3074function runTimeout(fun) {
3075 if (cachedSetTimeout === setTimeout) {
3076 //normal enviroments in sane situations
3077 return setTimeout(fun, 0);
3078 }
3079 // if setTimeout wasn't available but was latter defined
3080 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
3081 cachedSetTimeout = setTimeout;
3082 return setTimeout(fun, 0);
3083 }
3084 try {
3085 // when when somebody has screwed with setTimeout but no I.E. maddness
3086 return cachedSetTimeout(fun, 0);
3087 } catch(e){
3088 try {
3089 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
3090 return cachedSetTimeout.call(null, fun, 0);
3091 } catch(e){
3092 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
3093 return cachedSetTimeout.call(this, fun, 0);
3094 }
3095 }
3096
3097
3098}
3099function runClearTimeout(marker) {
3100 if (cachedClearTimeout === clearTimeout) {
3101 //normal enviroments in sane situations
3102 return clearTimeout(marker);
3103 }
3104 // if clearTimeout wasn't available but was latter defined
3105 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
3106 cachedClearTimeout = clearTimeout;
3107 return clearTimeout(marker);
3108 }
3109 try {
3110 // when when somebody has screwed with setTimeout but no I.E. maddness
3111 return cachedClearTimeout(marker);
3112 } catch (e){
3113 try {
3114 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
3115 return cachedClearTimeout.call(null, marker);
3116 } catch (e){
3117 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
3118 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
3119 return cachedClearTimeout.call(this, marker);
3120 }
3121 }
3122
3123
3124
3125}
3126var queue = [];
3127var draining = false;
3128var currentQueue;
3129var queueIndex = -1;
3130
3131function cleanUpNextTick() {
3132 if (!draining || !currentQueue) {
3133 return;
3134 }
3135 draining = false;
3136 if (currentQueue.length) {
3137 queue = currentQueue.concat(queue);
3138 } else {
3139 queueIndex = -1;
3140 }
3141 if (queue.length) {
3142 drainQueue();
3143 }
3144}
3145
3146function drainQueue() {
3147 if (draining) {
3148 return;
3149 }
3150 var timeout = runTimeout(cleanUpNextTick);
3151 draining = true;
3152
3153 var len = queue.length;
3154 while(len) {
3155 currentQueue = queue;
3156 queue = [];
3157 while (++queueIndex < len) {
3158 if (currentQueue) {
3159 currentQueue[queueIndex].run();
3160 }
3161 }
3162 queueIndex = -1;
3163 len = queue.length;
3164 }
3165 currentQueue = null;
3166 draining = false;
3167 runClearTimeout(timeout);
3168}
3169
3170process.nextTick = function (fun) {
3171 var args = new Array(arguments.length - 1);
3172 if (arguments.length > 1) {
3173 for (var i = 1; i < arguments.length; i++) {
3174 args[i - 1] = arguments[i];
3175 }
3176 }
3177 queue.push(new Item(fun, args));
3178 if (queue.length === 1 && !draining) {
3179 runTimeout(drainQueue);
3180 }
3181};
3182
3183// v8 likes predictible objects
3184function Item(fun, array) {
3185 this.fun = fun;
3186 this.array = array;
3187}
3188Item.prototype.run = function () {
3189 this.fun.apply(null, this.array);
3190};
3191process.title = 'browser';
3192process.browser = true;
3193process.env = {};
3194process.argv = [];
3195process.version = ''; // empty string to avoid regexp issues
3196process.versions = {};
3197
3198function noop() {}
3199
3200process.on = noop;
3201process.addListener = noop;
3202process.once = noop;
3203process.off = noop;
3204process.removeListener = noop;
3205process.removeAllListeners = noop;
3206process.emit = noop;
3207
3208process.binding = function (name) {
3209 throw new Error('process.binding is not supported');
3210};
3211
3212process.cwd = function () { return '/' };
3213process.chdir = function (dir) {
3214 throw new Error('process.chdir is not supported');
3215};
3216process.umask = function() { return 0; };
3217
3218},{}],14:[function(require,module,exports){
3219module.exports = require("./lib/_stream_duplex.js")
3220
3221},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
3222// a duplex stream is just a stream that is both readable and writable.
3223// Since JS doesn't have multiple prototypal inheritance, this class
3224// prototypally inherits from Readable, and then parasitically from
3225// Writable.
3226
3227'use strict';
3228
3229/*<replacement>*/
3230
3231var objectKeys = Object.keys || function (obj) {
3232 var keys = [];
3233 for (var key in obj) {
3234 keys.push(key);
3235 }return keys;
3236};
3237/*</replacement>*/
3238
3239module.exports = Duplex;
3240
3241/*<replacement>*/
3242var processNextTick = require('process-nextick-args');
3243/*</replacement>*/
3244
3245/*<replacement>*/
3246var util = require('core-util-is');
3247util.inherits = require('inherits');
3248/*</replacement>*/
3249
3250var Readable = require('./_stream_readable');
3251var Writable = require('./_stream_writable');
3252
3253util.inherits(Duplex, Readable);
3254
3255var keys = objectKeys(Writable.prototype);
3256for (var v = 0; v < keys.length; v++) {
3257 var method = keys[v];
3258 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
3259}
3260
3261function Duplex(options) {
3262 if (!(this instanceof Duplex)) return new Duplex(options);
3263
3264 Readable.call(this, options);
3265 Writable.call(this, options);
3266
3267 if (options && options.readable === false) this.readable = false;
3268
3269 if (options && options.writable === false) this.writable = false;
3270
3271 this.allowHalfOpen = true;
3272 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
3273
3274 this.once('end', onend);
3275}
3276
3277// the no-half-open enforcer
3278function onend() {
3279 // if we allow half-open state, or if the writable side ended,
3280 // then we're ok.
3281 if (this.allowHalfOpen || this._writableState.ended) return;
3282
3283 // no more data can be written.
3284 // But allow more writes to happen in this tick.
3285 processNextTick(onEndNT, this);
3286}
3287
3288function onEndNT(self) {
3289 self.end();
3290}
3291
3292function forEach(xs, f) {
3293 for (var i = 0, l = xs.length; i < l; i++) {
3294 f(xs[i], i);
3295 }
3296}
3297},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
3298// a passthrough stream.
3299// basically just the most minimal sort of Transform stream.
3300// Every written chunk gets output as-is.
3301
3302'use strict';
3303
3304module.exports = PassThrough;
3305
3306var Transform = require('./_stream_transform');
3307
3308/*<replacement>*/
3309var util = require('core-util-is');
3310util.inherits = require('inherits');
3311/*</replacement>*/
3312
3313util.inherits(PassThrough, Transform);
3314
3315function PassThrough(options) {
3316 if (!(this instanceof PassThrough)) return new PassThrough(options);
3317
3318 Transform.call(this, options);
3319}
3320
3321PassThrough.prototype._transform = function (chunk, encoding, cb) {
3322 cb(null, chunk);
3323};
3324},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
3325(function (process){
3326'use strict';
3327
3328module.exports = Readable;
3329
3330/*<replacement>*/
3331var processNextTick = require('process-nextick-args');
3332/*</replacement>*/
3333
3334/*<replacement>*/
3335var isArray = require('isarray');
3336/*</replacement>*/
3337
3338/*<replacement>*/
3339var Duplex;
3340/*</replacement>*/
3341
3342Readable.ReadableState = ReadableState;
3343
3344/*<replacement>*/
3345var EE = require('events').EventEmitter;
3346
3347var EElistenerCount = function (emitter, type) {
3348 return emitter.listeners(type).length;
3349};
3350/*</replacement>*/
3351
3352/*<replacement>*/
3353var Stream;
3354(function () {
3355 try {
3356 Stream = require('st' + 'ream');
3357 } catch (_) {} finally {
3358 if (!Stream) Stream = require('events').EventEmitter;
3359 }
3360})();
3361/*</replacement>*/
3362
3363var Buffer = require('buffer').Buffer;
3364/*<replacement>*/
3365var bufferShim = require('buffer-shims');
3366/*</replacement>*/
3367
3368/*<replacement>*/
3369var util = require('core-util-is');
3370util.inherits = require('inherits');
3371/*</replacement>*/
3372
3373/*<replacement>*/
3374var debugUtil = require('util');
3375var debug = void 0;
3376if (debugUtil && debugUtil.debuglog) {
3377 debug = debugUtil.debuglog('stream');
3378} else {
3379 debug = function () {};
3380}
3381/*</replacement>*/
3382
3383var BufferList = require('./internal/streams/BufferList');
3384var StringDecoder;
3385
3386util.inherits(Readable, Stream);
3387
3388function prependListener(emitter, event, fn) {
3389 // Sadly this is not cacheable as some libraries bundle their own
3390 // event emitter implementation with them.
3391 if (typeof emitter.prependListener === 'function') {
3392 return emitter.prependListener(event, fn);
3393 } else {
3394 // This is a hack to make sure that our error handler is attached before any
3395 // userland ones. NEVER DO THIS. This is here only because this code needs
3396 // to continue to work with older versions of Node.js that do not include
3397 // the prependListener() method. The goal is to eventually remove this hack.
3398 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
3399 }
3400}
3401
3402function ReadableState(options, stream) {
3403 Duplex = Duplex || require('./_stream_duplex');
3404
3405 options = options || {};
3406
3407 // object stream flag. Used to make read(n) ignore n and to
3408 // make all the buffer merging and length checks go away
3409 this.objectMode = !!options.objectMode;
3410
3411 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
3412
3413 // the point at which it stops calling _read() to fill the buffer
3414 // Note: 0 is a valid value, means "don't call _read preemptively ever"
3415 var hwm = options.highWaterMark;
3416 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
3417 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
3418
3419 // cast to ints.
3420 this.highWaterMark = ~ ~this.highWaterMark;
3421
3422 // A linked list is used to store data chunks instead of an array because the
3423 // linked list can remove elements from the beginning faster than
3424 // array.shift()
3425 this.buffer = new BufferList();
3426 this.length = 0;
3427 this.pipes = null;
3428 this.pipesCount = 0;
3429 this.flowing = null;
3430 this.ended = false;
3431 this.endEmitted = false;
3432 this.reading = false;
3433
3434 // a flag to be able to tell if the onwrite cb is called immediately,
3435 // or on a later tick. We set this to true at first, because any
3436 // actions that shouldn't happen until "later" should generally also
3437 // not happen before the first write call.
3438 this.sync = true;
3439
3440 // whenever we return null, then we set a flag to say
3441 // that we're awaiting a 'readable' event emission.
3442 this.needReadable = false;
3443 this.emittedReadable = false;
3444 this.readableListening = false;
3445 this.resumeScheduled = false;
3446
3447 // Crypto is kind of old and crusty. Historically, its default string
3448 // encoding is 'binary' so we have to make this configurable.
3449 // Everything else in the universe uses 'utf8', though.
3450 this.defaultEncoding = options.defaultEncoding || 'utf8';
3451
3452 // when piping, we only care about 'readable' events that happen
3453 // after read()ing all the bytes and not getting any pushback.
3454 this.ranOut = false;
3455
3456 // the number of writers that are awaiting a drain event in .pipe()s
3457 this.awaitDrain = 0;
3458
3459 // if true, a maybeReadMore has been scheduled
3460 this.readingMore = false;
3461
3462 this.decoder = null;
3463 this.encoding = null;
3464 if (options.encoding) {
3465 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
3466 this.decoder = new StringDecoder(options.encoding);
3467 this.encoding = options.encoding;
3468 }
3469}
3470
3471function Readable(options) {
3472 Duplex = Duplex || require('./_stream_duplex');
3473
3474 if (!(this instanceof Readable)) return new Readable(options);
3475
3476 this._readableState = new ReadableState(options, this);
3477
3478 // legacy
3479 this.readable = true;
3480
3481 if (options && typeof options.read === 'function') this._read = options.read;
3482
3483 Stream.call(this);
3484}
3485
3486// Manually shove something into the read() buffer.
3487// This returns true if the highWaterMark has not been hit yet,
3488// similar to how Writable.write() returns true if you should
3489// write() some more.
3490Readable.prototype.push = function (chunk, encoding) {
3491 var state = this._readableState;
3492
3493 if (!state.objectMode && typeof chunk === 'string') {
3494 encoding = encoding || state.defaultEncoding;
3495 if (encoding !== state.encoding) {
3496 chunk = bufferShim.from(chunk, encoding);
3497 encoding = '';
3498 }
3499 }
3500
3501 return readableAddChunk(this, state, chunk, encoding, false);
3502};
3503
3504// Unshift should *always* be something directly out of read()
3505Readable.prototype.unshift = function (chunk) {
3506 var state = this._readableState;
3507 return readableAddChunk(this, state, chunk, '', true);
3508};
3509
3510Readable.prototype.isPaused = function () {
3511 return this._readableState.flowing === false;
3512};
3513
3514function readableAddChunk(stream, state, chunk, encoding, addToFront) {
3515 var er = chunkInvalid(state, chunk);
3516 if (er) {
3517 stream.emit('error', er);
3518 } else if (chunk === null) {
3519 state.reading = false;
3520 onEofChunk(stream, state);
3521 } else if (state.objectMode || chunk && chunk.length > 0) {
3522 if (state.ended && !addToFront) {
3523 var e = new Error('stream.push() after EOF');
3524 stream.emit('error', e);
3525 } else if (state.endEmitted && addToFront) {
3526 var _e = new Error('stream.unshift() after end event');
3527 stream.emit('error', _e);
3528 } else {
3529 var skipAdd;
3530 if (state.decoder && !addToFront && !encoding) {
3531 chunk = state.decoder.write(chunk);
3532 skipAdd = !state.objectMode && chunk.length === 0;
3533 }
3534
3535 if (!addToFront) state.reading = false;
3536
3537 // Don't add to the buffer if we've decoded to an empty string chunk and
3538 // we're not in object mode
3539 if (!skipAdd) {
3540 // if we want the data now, just emit it.
3541 if (state.flowing && state.length === 0 && !state.sync) {
3542 stream.emit('data', chunk);
3543 stream.read(0);
3544 } else {
3545 // update the buffer info.
3546 state.length += state.objectMode ? 1 : chunk.length;
3547 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
3548
3549 if (state.needReadable) emitReadable(stream);
3550 }
3551 }
3552
3553 maybeReadMore(stream, state);
3554 }
3555 } else if (!addToFront) {
3556 state.reading = false;
3557 }
3558
3559 return needMoreData(state);
3560}
3561
3562// if it's past the high water mark, we can push in some more.
3563// Also, if we have no data yet, we can stand some
3564// more bytes. This is to work around cases where hwm=0,
3565// such as the repl. Also, if the push() triggered a
3566// readable event, and the user called read(largeNumber) such that
3567// needReadable was set, then we ought to push more, so that another
3568// 'readable' event will be triggered.
3569function needMoreData(state) {
3570 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
3571}
3572
3573// backwards compatibility.
3574Readable.prototype.setEncoding = function (enc) {
3575 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
3576 this._readableState.decoder = new StringDecoder(enc);
3577 this._readableState.encoding = enc;
3578 return this;
3579};
3580
3581// Don't raise the hwm > 8MB
3582var MAX_HWM = 0x800000;
3583function computeNewHighWaterMark(n) {
3584 if (n >= MAX_HWM) {
3585 n = MAX_HWM;
3586 } else {
3587 // Get the next highest power of 2 to prevent increasing hwm excessively in
3588 // tiny amounts
3589 n--;
3590 n |= n >>> 1;
3591 n |= n >>> 2;
3592 n |= n >>> 4;
3593 n |= n >>> 8;
3594 n |= n >>> 16;
3595 n++;
3596 }
3597 return n;
3598}
3599
3600// This function is designed to be inlinable, so please take care when making
3601// changes to the function body.
3602function howMuchToRead(n, state) {
3603 if (n <= 0 || state.length === 0 && state.ended) return 0;
3604 if (state.objectMode) return 1;
3605 if (n !== n) {
3606 // Only flow one buffer at a time
3607 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
3608 }
3609 // If we're asking for more than the current hwm, then raise the hwm.
3610 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
3611 if (n <= state.length) return n;
3612 // Don't have enough
3613 if (!state.ended) {
3614 state.needReadable = true;
3615 return 0;
3616 }
3617 return state.length;
3618}
3619
3620// you can override either this method, or the async _read(n) below.
3621Readable.prototype.read = function (n) {
3622 debug('read', n);
3623 n = parseInt(n, 10);
3624 var state = this._readableState;
3625 var nOrig = n;
3626
3627 if (n !== 0) state.emittedReadable = false;
3628
3629 // if we're doing read(0) to trigger a readable event, but we
3630 // already have a bunch of data in the buffer, then just trigger
3631 // the 'readable' event and move on.
3632 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
3633 debug('read: emitReadable', state.length, state.ended);
3634 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
3635 return null;
3636 }
3637
3638 n = howMuchToRead(n, state);
3639
3640 // if we've ended, and we're now clear, then finish it up.
3641 if (n === 0 && state.ended) {
3642 if (state.length === 0) endReadable(this);
3643 return null;
3644 }
3645
3646 // All the actual chunk generation logic needs to be
3647 // *below* the call to _read. The reason is that in certain
3648 // synthetic stream cases, such as passthrough streams, _read
3649 // may be a completely synchronous operation which may change
3650 // the state of the read buffer, providing enough data when
3651 // before there was *not* enough.
3652 //
3653 // So, the steps are:
3654 // 1. Figure out what the state of things will be after we do
3655 // a read from the buffer.
3656 //
3657 // 2. If that resulting state will trigger a _read, then call _read.
3658 // Note that this may be asynchronous, or synchronous. Yes, it is
3659 // deeply ugly to write APIs this way, but that still doesn't mean
3660 // that the Readable class should behave improperly, as streams are
3661 // designed to be sync/async agnostic.
3662 // Take note if the _read call is sync or async (ie, if the read call
3663 // has returned yet), so that we know whether or not it's safe to emit
3664 // 'readable' etc.
3665 //
3666 // 3. Actually pull the requested chunks out of the buffer and return.
3667
3668 // if we need a readable event, then we need to do some reading.
3669 var doRead = state.needReadable;
3670 debug('need readable', doRead);
3671
3672 // if we currently have less than the highWaterMark, then also read some
3673 if (state.length === 0 || state.length - n < state.highWaterMark) {
3674 doRead = true;
3675 debug('length less than watermark', doRead);
3676 }
3677
3678 // however, if we've ended, then there's no point, and if we're already
3679 // reading, then it's unnecessary.
3680 if (state.ended || state.reading) {
3681 doRead = false;
3682 debug('reading or ended', doRead);
3683 } else if (doRead) {
3684 debug('do read');
3685 state.reading = true;
3686 state.sync = true;
3687 // if the length is currently zero, then we *need* a readable event.
3688 if (state.length === 0) state.needReadable = true;
3689 // call internal read method
3690 this._read(state.highWaterMark);
3691 state.sync = false;
3692 // If _read pushed data synchronously, then `reading` will be false,
3693 // and we need to re-evaluate how much data we can return to the user.
3694 if (!state.reading) n = howMuchToRead(nOrig, state);
3695 }
3696
3697 var ret;
3698 if (n > 0) ret = fromList(n, state);else ret = null;
3699
3700 if (ret === null) {
3701 state.needReadable = true;
3702 n = 0;
3703 } else {
3704 state.length -= n;
3705 }
3706
3707 if (state.length === 0) {
3708 // If we have nothing in the buffer, then we want to know
3709 // as soon as we *do* get something into the buffer.
3710 if (!state.ended) state.needReadable = true;
3711
3712 // If we tried to read() past the EOF, then emit end on the next tick.
3713 if (nOrig !== n && state.ended) endReadable(this);
3714 }
3715
3716 if (ret !== null) this.emit('data', ret);
3717
3718 return ret;
3719};
3720
3721function chunkInvalid(state, chunk) {
3722 var er = null;
3723 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
3724 er = new TypeError('Invalid non-string/buffer chunk');
3725 }
3726 return er;
3727}
3728
3729function onEofChunk(stream, state) {
3730 if (state.ended) return;
3731 if (state.decoder) {
3732 var chunk = state.decoder.end();
3733 if (chunk && chunk.length) {
3734 state.buffer.push(chunk);
3735 state.length += state.objectMode ? 1 : chunk.length;
3736 }
3737 }
3738 state.ended = true;
3739
3740 // emit 'readable' now to make sure it gets picked up.
3741 emitReadable(stream);
3742}
3743
3744// Don't emit readable right away in sync mode, because this can trigger
3745// another read() call => stack overflow. This way, it might trigger
3746// a nextTick recursion warning, but that's not so bad.
3747function emitReadable(stream) {
3748 var state = stream._readableState;
3749 state.needReadable = false;
3750 if (!state.emittedReadable) {
3751 debug('emitReadable', state.flowing);
3752 state.emittedReadable = true;
3753 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
3754 }
3755}
3756
3757function emitReadable_(stream) {
3758 debug('emit readable');
3759 stream.emit('readable');
3760 flow(stream);
3761}
3762
3763// at this point, the user has presumably seen the 'readable' event,
3764// and called read() to consume some data. that may have triggered
3765// in turn another _read(n) call, in which case reading = true if
3766// it's in progress.
3767// However, if we're not ended, or reading, and the length < hwm,
3768// then go ahead and try to read some more preemptively.
3769function maybeReadMore(stream, state) {
3770 if (!state.readingMore) {
3771 state.readingMore = true;
3772 processNextTick(maybeReadMore_, stream, state);
3773 }
3774}
3775
3776function maybeReadMore_(stream, state) {
3777 var len = state.length;
3778 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
3779 debug('maybeReadMore read 0');
3780 stream.read(0);
3781 if (len === state.length)
3782 // didn't get any data, stop spinning.
3783 break;else len = state.length;
3784 }
3785 state.readingMore = false;
3786}
3787
3788// abstract method. to be overridden in specific implementation classes.
3789// call cb(er, data) where data is <= n in length.
3790// for virtual (non-string, non-buffer) streams, "length" is somewhat
3791// arbitrary, and perhaps not very meaningful.
3792Readable.prototype._read = function (n) {
3793 this.emit('error', new Error('_read() is not implemented'));
3794};
3795
3796Readable.prototype.pipe = function (dest, pipeOpts) {
3797 var src = this;
3798 var state = this._readableState;
3799
3800 switch (state.pipesCount) {
3801 case 0:
3802 state.pipes = dest;
3803 break;
3804 case 1:
3805 state.pipes = [state.pipes, dest];
3806 break;
3807 default:
3808 state.pipes.push(dest);
3809 break;
3810 }
3811 state.pipesCount += 1;
3812 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
3813
3814 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
3815
3816 var endFn = doEnd ? onend : cleanup;
3817 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
3818
3819 dest.on('unpipe', onunpipe);
3820 function onunpipe(readable) {
3821 debug('onunpipe');
3822 if (readable === src) {
3823 cleanup();
3824 }
3825 }
3826
3827 function onend() {
3828 debug('onend');
3829 dest.end();
3830 }
3831
3832 // when the dest drains, it reduces the awaitDrain counter
3833 // on the source. This would be more elegant with a .once()
3834 // handler in flow(), but adding and removing repeatedly is
3835 // too slow.
3836 var ondrain = pipeOnDrain(src);
3837 dest.on('drain', ondrain);
3838
3839 var cleanedUp = false;
3840 function cleanup() {
3841 debug('cleanup');
3842 // cleanup event handlers once the pipe is broken
3843 dest.removeListener('close', onclose);
3844 dest.removeListener('finish', onfinish);
3845 dest.removeListener('drain', ondrain);
3846 dest.removeListener('error', onerror);
3847 dest.removeListener('unpipe', onunpipe);
3848 src.removeListener('end', onend);
3849 src.removeListener('end', cleanup);
3850 src.removeListener('data', ondata);
3851
3852 cleanedUp = true;
3853
3854 // if the reader is waiting for a drain event from this
3855 // specific writer, then it would cause it to never start
3856 // flowing again.
3857 // So, if this is awaiting a drain, then we just call it now.
3858 // If we don't know, then assume that we are waiting for one.
3859 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
3860 }
3861
3862 // If the user pushes more data while we're writing to dest then we'll end up
3863 // in ondata again. However, we only want to increase awaitDrain once because
3864 // dest will only emit one 'drain' event for the multiple writes.
3865 // => Introduce a guard on increasing awaitDrain.
3866 var increasedAwaitDrain = false;
3867 src.on('data', ondata);
3868 function ondata(chunk) {
3869 debug('ondata');
3870 increasedAwaitDrain = false;
3871 var ret = dest.write(chunk);
3872 if (false === ret && !increasedAwaitDrain) {
3873 // If the user unpiped during `dest.write()`, it is possible
3874 // to get stuck in a permanently paused state if that write
3875 // also returned false.
3876 // => Check whether `dest` is still a piping destination.
3877 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
3878 debug('false write response, pause', src._readableState.awaitDrain);
3879 src._readableState.awaitDrain++;
3880 increasedAwaitDrain = true;
3881 }
3882 src.pause();
3883 }
3884 }
3885
3886 // if the dest has an error, then stop piping into it.
3887 // however, don't suppress the throwing behavior for this.
3888 function onerror(er) {
3889 debug('onerror', er);
3890 unpipe();
3891 dest.removeListener('error', onerror);
3892 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
3893 }
3894
3895 // Make sure our error handler is attached before userland ones.
3896 prependListener(dest, 'error', onerror);
3897
3898 // Both close and finish should trigger unpipe, but only once.
3899 function onclose() {
3900 dest.removeListener('finish', onfinish);
3901 unpipe();
3902 }
3903 dest.once('close', onclose);
3904 function onfinish() {
3905 debug('onfinish');
3906 dest.removeListener('close', onclose);
3907 unpipe();
3908 }
3909 dest.once('finish', onfinish);
3910
3911 function unpipe() {
3912 debug('unpipe');
3913 src.unpipe(dest);
3914 }
3915
3916 // tell the dest that it's being piped to
3917 dest.emit('pipe', src);
3918
3919 // start the flow if it hasn't been started already.
3920 if (!state.flowing) {
3921 debug('pipe resume');
3922 src.resume();
3923 }
3924
3925 return dest;
3926};
3927
3928function pipeOnDrain(src) {
3929 return function () {
3930 var state = src._readableState;
3931 debug('pipeOnDrain', state.awaitDrain);
3932 if (state.awaitDrain) state.awaitDrain--;
3933 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
3934 state.flowing = true;
3935 flow(src);
3936 }
3937 };
3938}
3939
3940Readable.prototype.unpipe = function (dest) {
3941 var state = this._readableState;
3942
3943 // if we're not piping anywhere, then do nothing.
3944 if (state.pipesCount === 0) return this;
3945
3946 // just one destination. most common case.
3947 if (state.pipesCount === 1) {
3948 // passed in one, but it's not the right one.
3949 if (dest && dest !== state.pipes) return this;
3950
3951 if (!dest) dest = state.pipes;
3952
3953 // got a match.
3954 state.pipes = null;
3955 state.pipesCount = 0;
3956 state.flowing = false;
3957 if (dest) dest.emit('unpipe', this);
3958 return this;
3959 }
3960
3961 // slow case. multiple pipe destinations.
3962
3963 if (!dest) {
3964 // remove all.
3965 var dests = state.pipes;
3966 var len = state.pipesCount;
3967 state.pipes = null;
3968 state.pipesCount = 0;
3969 state.flowing = false;
3970
3971 for (var i = 0; i < len; i++) {
3972 dests[i].emit('unpipe', this);
3973 }return this;
3974 }
3975
3976 // try to find the right one.
3977 var index = indexOf(state.pipes, dest);
3978 if (index === -1) return this;
3979
3980 state.pipes.splice(index, 1);
3981 state.pipesCount -= 1;
3982 if (state.pipesCount === 1) state.pipes = state.pipes[0];
3983
3984 dest.emit('unpipe', this);
3985
3986 return this;
3987};
3988
3989// set up data events if they are asked for
3990// Ensure readable listeners eventually get something
3991Readable.prototype.on = function (ev, fn) {
3992 var res = Stream.prototype.on.call(this, ev, fn);
3993
3994 if (ev === 'data') {
3995 // Start flowing on next tick if stream isn't explicitly paused
3996 if (this._readableState.flowing !== false) this.resume();
3997 } else if (ev === 'readable') {
3998 var state = this._readableState;
3999 if (!state.endEmitted && !state.readableListening) {
4000 state.readableListening = state.needReadable = true;
4001 state.emittedReadable = false;
4002 if (!state.reading) {
4003 processNextTick(nReadingNextTick, this);
4004 } else if (state.length) {
4005 emitReadable(this, state);
4006 }
4007 }
4008 }
4009
4010 return res;
4011};
4012Readable.prototype.addListener = Readable.prototype.on;
4013
4014function nReadingNextTick(self) {
4015 debug('readable nexttick read 0');
4016 self.read(0);
4017}
4018
4019// pause() and resume() are remnants of the legacy readable stream API
4020// If the user uses them, then switch into old mode.
4021Readable.prototype.resume = function () {
4022 var state = this._readableState;
4023 if (!state.flowing) {
4024 debug('resume');
4025 state.flowing = true;
4026 resume(this, state);
4027 }
4028 return this;
4029};
4030
4031function resume(stream, state) {
4032 if (!state.resumeScheduled) {
4033 state.resumeScheduled = true;
4034 processNextTick(resume_, stream, state);
4035 }
4036}
4037
4038function resume_(stream, state) {
4039 if (!state.reading) {
4040 debug('resume read 0');
4041 stream.read(0);
4042 }
4043
4044 state.resumeScheduled = false;
4045 state.awaitDrain = 0;
4046 stream.emit('resume');
4047 flow(stream);
4048 if (state.flowing && !state.reading) stream.read(0);
4049}
4050
4051Readable.prototype.pause = function () {
4052 debug('call pause flowing=%j', this._readableState.flowing);
4053 if (false !== this._readableState.flowing) {
4054 debug('pause');
4055 this._readableState.flowing = false;
4056 this.emit('pause');
4057 }
4058 return this;
4059};
4060
4061function flow(stream) {
4062 var state = stream._readableState;
4063 debug('flow', state.flowing);
4064 while (state.flowing && stream.read() !== null) {}
4065}
4066
4067// wrap an old-style stream as the async data source.
4068// This is *not* part of the readable stream interface.
4069// It is an ugly unfortunate mess of history.
4070Readable.prototype.wrap = function (stream) {
4071 var state = this._readableState;
4072 var paused = false;
4073
4074 var self = this;
4075 stream.on('end', function () {
4076 debug('wrapped end');
4077 if (state.decoder && !state.ended) {
4078 var chunk = state.decoder.end();
4079 if (chunk && chunk.length) self.push(chunk);
4080 }
4081
4082 self.push(null);
4083 });
4084
4085 stream.on('data', function (chunk) {
4086 debug('wrapped data');
4087 if (state.decoder) chunk = state.decoder.write(chunk);
4088
4089 // don't skip over falsy values in objectMode
4090 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
4091
4092 var ret = self.push(chunk);
4093 if (!ret) {
4094 paused = true;
4095 stream.pause();
4096 }
4097 });
4098
4099 // proxy all the other methods.
4100 // important when wrapping filters and duplexes.
4101 for (var i in stream) {
4102 if (this[i] === undefined && typeof stream[i] === 'function') {
4103 this[i] = function (method) {
4104 return function () {
4105 return stream[method].apply(stream, arguments);
4106 };
4107 }(i);
4108 }
4109 }
4110
4111 // proxy certain important events.
4112 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
4113 forEach(events, function (ev) {
4114 stream.on(ev, self.emit.bind(self, ev));
4115 });
4116
4117 // when we try to consume some more bytes, simply unpause the
4118 // underlying stream.
4119 self._read = function (n) {
4120 debug('wrapped _read', n);
4121 if (paused) {
4122 paused = false;
4123 stream.resume();
4124 }
4125 };
4126
4127 return self;
4128};
4129
4130// exposed for testing purposes only.
4131Readable._fromList = fromList;
4132
4133// Pluck off n bytes from an array of buffers.
4134// Length is the combined lengths of all the buffers in the list.
4135// This function is designed to be inlinable, so please take care when making
4136// changes to the function body.
4137function fromList(n, state) {
4138 // nothing buffered
4139 if (state.length === 0) return null;
4140
4141 var ret;
4142 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
4143 // read it all, truncate the list
4144 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
4145 state.buffer.clear();
4146 } else {
4147 // read part of list
4148 ret = fromListPartial(n, state.buffer, state.decoder);
4149 }
4150
4151 return ret;
4152}
4153
4154// Extracts only enough buffered data to satisfy the amount requested.
4155// This function is designed to be inlinable, so please take care when making
4156// changes to the function body.
4157function fromListPartial(n, list, hasStrings) {
4158 var ret;
4159 if (n < list.head.data.length) {
4160 // slice is the same for buffers and strings
4161 ret = list.head.data.slice(0, n);
4162 list.head.data = list.head.data.slice(n);
4163 } else if (n === list.head.data.length) {
4164 // first chunk is a perfect match
4165 ret = list.shift();
4166 } else {
4167 // result spans more than one buffer
4168 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
4169 }
4170 return ret;
4171}
4172
4173// Copies a specified amount of characters from the list of buffered data
4174// chunks.
4175// This function is designed to be inlinable, so please take care when making
4176// changes to the function body.
4177function copyFromBufferString(n, list) {
4178 var p = list.head;
4179 var c = 1;
4180 var ret = p.data;
4181 n -= ret.length;
4182 while (p = p.next) {
4183 var str = p.data;
4184 var nb = n > str.length ? str.length : n;
4185 if (nb === str.length) ret += str;else ret += str.slice(0, n);
4186 n -= nb;
4187 if (n === 0) {
4188 if (nb === str.length) {
4189 ++c;
4190 if (p.next) list.head = p.next;else list.head = list.tail = null;
4191 } else {
4192 list.head = p;
4193 p.data = str.slice(nb);
4194 }
4195 break;
4196 }
4197 ++c;
4198 }
4199 list.length -= c;
4200 return ret;
4201}
4202
4203// Copies a specified amount of bytes from the list of buffered data chunks.
4204// This function is designed to be inlinable, so please take care when making
4205// changes to the function body.
4206function copyFromBuffer(n, list) {
4207 var ret = bufferShim.allocUnsafe(n);
4208 var p = list.head;
4209 var c = 1;
4210 p.data.copy(ret);
4211 n -= p.data.length;
4212 while (p = p.next) {
4213 var buf = p.data;
4214 var nb = n > buf.length ? buf.length : n;
4215 buf.copy(ret, ret.length - n, 0, nb);
4216 n -= nb;
4217 if (n === 0) {
4218 if (nb === buf.length) {
4219 ++c;
4220 if (p.next) list.head = p.next;else list.head = list.tail = null;
4221 } else {
4222 list.head = p;
4223 p.data = buf.slice(nb);
4224 }
4225 break;
4226 }
4227 ++c;
4228 }
4229 list.length -= c;
4230 return ret;
4231}
4232
4233function endReadable(stream) {
4234 var state = stream._readableState;
4235
4236 // If we get here before consuming all the bytes, then that is a
4237 // bug in node. Should never happen.
4238 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
4239
4240 if (!state.endEmitted) {
4241 state.ended = true;
4242 processNextTick(endReadableNT, state, stream);
4243 }
4244}
4245
4246function endReadableNT(state, stream) {
4247 // Check that we didn't get one last unshift.
4248 if (!state.endEmitted && state.length === 0) {
4249 state.endEmitted = true;
4250 stream.readable = false;
4251 stream.emit('end');
4252 }
4253}
4254
4255function forEach(xs, f) {
4256 for (var i = 0, l = xs.length; i < l; i++) {
4257 f(xs[i], i);
4258 }
4259}
4260
4261function indexOf(xs, x) {
4262 for (var i = 0, l = xs.length; i < l; i++) {
4263 if (xs[i] === x) return i;
4264 }
4265 return -1;
4266}
4267}).call(this,require('_process'))
4268},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
4269// a transform stream is a readable/writable stream where you do
4270// something with the data. Sometimes it's called a "filter",
4271// but that's not a great name for it, since that implies a thing where
4272// some bits pass through, and others are simply ignored. (That would
4273// be a valid example of a transform, of course.)
4274//
4275// While the output is causally related to the input, it's not a
4276// necessarily symmetric or synchronous transformation. For example,
4277// a zlib stream might take multiple plain-text writes(), and then
4278// emit a single compressed chunk some time in the future.
4279//
4280// Here's how this works:
4281//
4282// The Transform stream has all the aspects of the readable and writable
4283// stream classes. When you write(chunk), that calls _write(chunk,cb)
4284// internally, and returns false if there's a lot of pending writes
4285// buffered up. When you call read(), that calls _read(n) until
4286// there's enough pending readable data buffered up.
4287//
4288// In a transform stream, the written data is placed in a buffer. When
4289// _read(n) is called, it transforms the queued up data, calling the
4290// buffered _write cb's as it consumes chunks. If consuming a single
4291// written chunk would result in multiple output chunks, then the first
4292// outputted bit calls the readcb, and subsequent chunks just go into
4293// the read buffer, and will cause it to emit 'readable' if necessary.
4294//
4295// This way, back-pressure is actually determined by the reading side,
4296// since _read has to be called to start processing a new chunk. However,
4297// a pathological inflate type of transform can cause excessive buffering
4298// here. For example, imagine a stream where every byte of input is
4299// interpreted as an integer from 0-255, and then results in that many
4300// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
4301// 1kb of data being output. In this case, you could write a very small
4302// amount of input, and end up with a very large amount of output. In
4303// such a pathological inflating mechanism, there'd be no way to tell
4304// the system to stop doing the transform. A single 4MB write could
4305// cause the system to run out of memory.
4306//
4307// However, even in such a pathological case, only a single written chunk
4308// would be consumed, and then the rest would wait (un-transformed) until
4309// the results of the previous transformed chunk were consumed.
4310
4311'use strict';
4312
4313module.exports = Transform;
4314
4315var Duplex = require('./_stream_duplex');
4316
4317/*<replacement>*/
4318var util = require('core-util-is');
4319util.inherits = require('inherits');
4320/*</replacement>*/
4321
4322util.inherits(Transform, Duplex);
4323
4324function TransformState(stream) {
4325 this.afterTransform = function (er, data) {
4326 return afterTransform(stream, er, data);
4327 };
4328
4329 this.needTransform = false;
4330 this.transforming = false;
4331 this.writecb = null;
4332 this.writechunk = null;
4333 this.writeencoding = null;
4334}
4335
4336function afterTransform(stream, er, data) {
4337 var ts = stream._transformState;
4338 ts.transforming = false;
4339
4340 var cb = ts.writecb;
4341
4342 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
4343
4344 ts.writechunk = null;
4345 ts.writecb = null;
4346
4347 if (data !== null && data !== undefined) stream.push(data);
4348
4349 cb(er);
4350
4351 var rs = stream._readableState;
4352 rs.reading = false;
4353 if (rs.needReadable || rs.length < rs.highWaterMark) {
4354 stream._read(rs.highWaterMark);
4355 }
4356}
4357
4358function Transform(options) {
4359 if (!(this instanceof Transform)) return new Transform(options);
4360
4361 Duplex.call(this, options);
4362
4363 this._transformState = new TransformState(this);
4364
4365 var stream = this;
4366
4367 // start out asking for a readable event once data is transformed.
4368 this._readableState.needReadable = true;
4369
4370 // we have implemented the _read method, and done the other things
4371 // that Readable wants before the first _read call, so unset the
4372 // sync guard flag.
4373 this._readableState.sync = false;
4374
4375 if (options) {
4376 if (typeof options.transform === 'function') this._transform = options.transform;
4377
4378 if (typeof options.flush === 'function') this._flush = options.flush;
4379 }
4380
4381 // When the writable side finishes, then flush out anything remaining.
4382 this.once('prefinish', function () {
4383 if (typeof this._flush === 'function') this._flush(function (er, data) {
4384 done(stream, er, data);
4385 });else done(stream);
4386 });
4387}
4388
4389Transform.prototype.push = function (chunk, encoding) {
4390 this._transformState.needTransform = false;
4391 return Duplex.prototype.push.call(this, chunk, encoding);
4392};
4393
4394// This is the part where you do stuff!
4395// override this function in implementation classes.
4396// 'chunk' is an input chunk.
4397//
4398// Call `push(newChunk)` to pass along transformed output
4399// to the readable side. You may call 'push' zero or more times.
4400//
4401// Call `cb(err)` when you are done with this chunk. If you pass
4402// an error, then that'll put the hurt on the whole operation. If you
4403// never call cb(), then you'll never get another chunk.
4404Transform.prototype._transform = function (chunk, encoding, cb) {
4405 throw new Error('_transform() is not implemented');
4406};
4407
4408Transform.prototype._write = function (chunk, encoding, cb) {
4409 var ts = this._transformState;
4410 ts.writecb = cb;
4411 ts.writechunk = chunk;
4412 ts.writeencoding = encoding;
4413 if (!ts.transforming) {
4414 var rs = this._readableState;
4415 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
4416 }
4417};
4418
4419// Doesn't matter what the args are here.
4420// _transform does all the work.
4421// That we got here means that the readable side wants more data.
4422Transform.prototype._read = function (n) {
4423 var ts = this._transformState;
4424
4425 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
4426 ts.transforming = true;
4427 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
4428 } else {
4429 // mark that we need a transform, so that any data that comes in
4430 // will get processed, now that we've asked for it.
4431 ts.needTransform = true;
4432 }
4433};
4434
4435function done(stream, er, data) {
4436 if (er) return stream.emit('error', er);
4437
4438 if (data !== null && data !== undefined) stream.push(data);
4439
4440 // if there's nothing in the write buffer, then that means
4441 // that nothing more will ever be provided
4442 var ws = stream._writableState;
4443 var ts = stream._transformState;
4444
4445 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
4446
4447 if (ts.transforming) throw new Error('Calling transform done when still transforming');
4448
4449 return stream.push(null);
4450}
4451},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
4452(function (process){
4453// A bit simpler than readable streams.
4454// Implement an async ._write(chunk, encoding, cb), and it'll handle all
4455// the drain event emission and buffering.
4456
4457'use strict';
4458
4459module.exports = Writable;
4460
4461/*<replacement>*/
4462var processNextTick = require('process-nextick-args');
4463/*</replacement>*/
4464
4465/*<replacement>*/
4466var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
4467/*</replacement>*/
4468
4469/*<replacement>*/
4470var Duplex;
4471/*</replacement>*/
4472
4473Writable.WritableState = WritableState;
4474
4475/*<replacement>*/
4476var util = require('core-util-is');
4477util.inherits = require('inherits');
4478/*</replacement>*/
4479
4480/*<replacement>*/
4481var internalUtil = {
4482 deprecate: require('util-deprecate')
4483};
4484/*</replacement>*/
4485
4486/*<replacement>*/
4487var Stream;
4488(function () {
4489 try {
4490 Stream = require('st' + 'ream');
4491 } catch (_) {} finally {
4492 if (!Stream) Stream = require('events').EventEmitter;
4493 }
4494})();
4495/*</replacement>*/
4496
4497var Buffer = require('buffer').Buffer;
4498/*<replacement>*/
4499var bufferShim = require('buffer-shims');
4500/*</replacement>*/
4501
4502util.inherits(Writable, Stream);
4503
4504function nop() {}
4505
4506function WriteReq(chunk, encoding, cb) {
4507 this.chunk = chunk;
4508 this.encoding = encoding;
4509 this.callback = cb;
4510 this.next = null;
4511}
4512
4513function WritableState(options, stream) {
4514 Duplex = Duplex || require('./_stream_duplex');
4515
4516 options = options || {};
4517
4518 // object stream flag to indicate whether or not this stream
4519 // contains buffers or objects.
4520 this.objectMode = !!options.objectMode;
4521
4522 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
4523
4524 // the point at which write() starts returning false
4525 // Note: 0 is a valid value, means that we always return false if
4526 // the entire buffer is not flushed immediately on write()
4527 var hwm = options.highWaterMark;
4528 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
4529 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
4530
4531 // cast to ints.
4532 this.highWaterMark = ~ ~this.highWaterMark;
4533
4534 // drain event flag.
4535 this.needDrain = false;
4536 // at the start of calling end()
4537 this.ending = false;
4538 // when end() has been called, and returned
4539 this.ended = false;
4540 // when 'finish' is emitted
4541 this.finished = false;
4542
4543 // should we decode strings into buffers before passing to _write?
4544 // this is here so that some node-core streams can optimize string
4545 // handling at a lower level.
4546 var noDecode = options.decodeStrings === false;
4547 this.decodeStrings = !noDecode;
4548
4549 // Crypto is kind of old and crusty. Historically, its default string
4550 // encoding is 'binary' so we have to make this configurable.
4551 // Everything else in the universe uses 'utf8', though.
4552 this.defaultEncoding = options.defaultEncoding || 'utf8';
4553
4554 // not an actual buffer we keep track of, but a measurement
4555 // of how much we're waiting to get pushed to some underlying
4556 // socket or file.
4557 this.length = 0;
4558
4559 // a flag to see when we're in the middle of a write.
4560 this.writing = false;
4561
4562 // when true all writes will be buffered until .uncork() call
4563 this.corked = 0;
4564
4565 // a flag to be able to tell if the onwrite cb is called immediately,
4566 // or on a later tick. We set this to true at first, because any
4567 // actions that shouldn't happen until "later" should generally also
4568 // not happen before the first write call.
4569 this.sync = true;
4570
4571 // a flag to know if we're processing previously buffered items, which
4572 // may call the _write() callback in the same tick, so that we don't
4573 // end up in an overlapped onwrite situation.
4574 this.bufferProcessing = false;
4575
4576 // the callback that's passed to _write(chunk,cb)
4577 this.onwrite = function (er) {
4578 onwrite(stream, er);
4579 };
4580
4581 // the callback that the user supplies to write(chunk,encoding,cb)
4582 this.writecb = null;
4583
4584 // the amount that is being written when _write is called.
4585 this.writelen = 0;
4586
4587 this.bufferedRequest = null;
4588 this.lastBufferedRequest = null;
4589
4590 // number of pending user-supplied write callbacks
4591 // this must be 0 before 'finish' can be emitted
4592 this.pendingcb = 0;
4593
4594 // emit prefinish if the only thing we're waiting for is _write cbs
4595 // This is relevant for synchronous Transform streams
4596 this.prefinished = false;
4597
4598 // True if the error was already emitted and should not be thrown again
4599 this.errorEmitted = false;
4600
4601 // count buffered requests
4602 this.bufferedRequestCount = 0;
4603
4604 // allocate the first CorkedRequest, there is always
4605 // one allocated and free to use, and we maintain at most two
4606 this.corkedRequestsFree = new CorkedRequest(this);
4607}
4608
4609WritableState.prototype.getBuffer = function getBuffer() {
4610 var current = this.bufferedRequest;
4611 var out = [];
4612 while (current) {
4613 out.push(current);
4614 current = current.next;
4615 }
4616 return out;
4617};
4618
4619(function () {
4620 try {
4621 Object.defineProperty(WritableState.prototype, 'buffer', {
4622 get: internalUtil.deprecate(function () {
4623 return this.getBuffer();
4624 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
4625 });
4626 } catch (_) {}
4627})();
4628
4629// Test _writableState for inheritance to account for Duplex streams,
4630// whose prototype chain only points to Readable.
4631var realHasInstance;
4632if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
4633 realHasInstance = Function.prototype[Symbol.hasInstance];
4634 Object.defineProperty(Writable, Symbol.hasInstance, {
4635 value: function (object) {
4636 if (realHasInstance.call(this, object)) return true;
4637
4638 return object && object._writableState instanceof WritableState;
4639 }
4640 });
4641} else {
4642 realHasInstance = function (object) {
4643 return object instanceof this;
4644 };
4645}
4646
4647function Writable(options) {
4648 Duplex = Duplex || require('./_stream_duplex');
4649
4650 // Writable ctor is applied to Duplexes, too.
4651 // `realHasInstance` is necessary because using plain `instanceof`
4652 // would return false, as no `_writableState` property is attached.
4653
4654 // Trying to use the custom `instanceof` for Writable here will also break the
4655 // Node.js LazyTransform implementation, which has a non-trivial getter for
4656 // `_writableState` that would lead to infinite recursion.
4657 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
4658 return new Writable(options);
4659 }
4660
4661 this._writableState = new WritableState(options, this);
4662
4663 // legacy.
4664 this.writable = true;
4665
4666 if (options) {
4667 if (typeof options.write === 'function') this._write = options.write;
4668
4669 if (typeof options.writev === 'function') this._writev = options.writev;
4670 }
4671
4672 Stream.call(this);
4673}
4674
4675// Otherwise people can pipe Writable streams, which is just wrong.
4676Writable.prototype.pipe = function () {
4677 this.emit('error', new Error('Cannot pipe, not readable'));
4678};
4679
4680function writeAfterEnd(stream, cb) {
4681 var er = new Error('write after end');
4682 // TODO: defer error events consistently everywhere, not just the cb
4683 stream.emit('error', er);
4684 processNextTick(cb, er);
4685}
4686
4687// If we get something that is not a buffer, string, null, or undefined,
4688// and we're not in objectMode, then that's an error.
4689// Otherwise stream chunks are all considered to be of length=1, and the
4690// watermarks determine how many objects to keep in the buffer, rather than
4691// how many bytes or characters.
4692function validChunk(stream, state, chunk, cb) {
4693 var valid = true;
4694 var er = false;
4695 // Always throw error if a null is written
4696 // if we are not in object mode then throw
4697 // if it is not a buffer, string, or undefined.
4698 if (chunk === null) {
4699 er = new TypeError('May not write null values to stream');
4700 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
4701 er = new TypeError('Invalid non-string/buffer chunk');
4702 }
4703 if (er) {
4704 stream.emit('error', er);
4705 processNextTick(cb, er);
4706 valid = false;
4707 }
4708 return valid;
4709}
4710
4711Writable.prototype.write = function (chunk, encoding, cb) {
4712 var state = this._writableState;
4713 var ret = false;
4714
4715 if (typeof encoding === 'function') {
4716 cb = encoding;
4717 encoding = null;
4718 }
4719
4720 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
4721
4722 if (typeof cb !== 'function') cb = nop;
4723
4724 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
4725 state.pendingcb++;
4726 ret = writeOrBuffer(this, state, chunk, encoding, cb);
4727 }
4728
4729 return ret;
4730};
4731
4732Writable.prototype.cork = function () {
4733 var state = this._writableState;
4734
4735 state.corked++;
4736};
4737
4738Writable.prototype.uncork = function () {
4739 var state = this._writableState;
4740
4741 if (state.corked) {
4742 state.corked--;
4743
4744 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
4745 }
4746};
4747
4748Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
4749 // node::ParseEncoding() requires lower case.
4750 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
4751 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
4752 this._writableState.defaultEncoding = encoding;
4753 return this;
4754};
4755
4756function decodeChunk(state, chunk, encoding) {
4757 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
4758 chunk = bufferShim.from(chunk, encoding);
4759 }
4760 return chunk;
4761}
4762
4763// if we're already writing something, then just put this
4764// in the queue, and wait our turn. Otherwise, call _write
4765// If we return false, then we need a drain event, so set that flag.
4766function writeOrBuffer(stream, state, chunk, encoding, cb) {
4767 chunk = decodeChunk(state, chunk, encoding);
4768
4769 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
4770 var len = state.objectMode ? 1 : chunk.length;
4771
4772 state.length += len;
4773
4774 var ret = state.length < state.highWaterMark;
4775 // we must ensure that previous needDrain will not be reset to false.
4776 if (!ret) state.needDrain = true;
4777
4778 if (state.writing || state.corked) {
4779 var last = state.lastBufferedRequest;
4780 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
4781 if (last) {
4782 last.next = state.lastBufferedRequest;
4783 } else {
4784 state.bufferedRequest = state.lastBufferedRequest;
4785 }
4786 state.bufferedRequestCount += 1;
4787 } else {
4788 doWrite(stream, state, false, len, chunk, encoding, cb);
4789 }
4790
4791 return ret;
4792}
4793
4794function doWrite(stream, state, writev, len, chunk, encoding, cb) {
4795 state.writelen = len;
4796 state.writecb = cb;
4797 state.writing = true;
4798 state.sync = true;
4799 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
4800 state.sync = false;
4801}
4802
4803function onwriteError(stream, state, sync, er, cb) {
4804 --state.pendingcb;
4805 if (sync) processNextTick(cb, er);else cb(er);
4806
4807 stream._writableState.errorEmitted = true;
4808 stream.emit('error', er);
4809}
4810
4811function onwriteStateUpdate(state) {
4812 state.writing = false;
4813 state.writecb = null;
4814 state.length -= state.writelen;
4815 state.writelen = 0;
4816}
4817
4818function onwrite(stream, er) {
4819 var state = stream._writableState;
4820 var sync = state.sync;
4821 var cb = state.writecb;
4822
4823 onwriteStateUpdate(state);
4824
4825 if (er) onwriteError(stream, state, sync, er, cb);else {
4826 // Check if we're actually ready to finish, but don't emit yet
4827 var finished = needFinish(state);
4828
4829 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
4830 clearBuffer(stream, state);
4831 }
4832
4833 if (sync) {
4834 /*<replacement>*/
4835 asyncWrite(afterWrite, stream, state, finished, cb);
4836 /*</replacement>*/
4837 } else {
4838 afterWrite(stream, state, finished, cb);
4839 }
4840 }
4841}
4842
4843function afterWrite(stream, state, finished, cb) {
4844 if (!finished) onwriteDrain(stream, state);
4845 state.pendingcb--;
4846 cb();
4847 finishMaybe(stream, state);
4848}
4849
4850// Must force callback to be called on nextTick, so that we don't
4851// emit 'drain' before the write() consumer gets the 'false' return
4852// value, and has a chance to attach a 'drain' listener.
4853function onwriteDrain(stream, state) {
4854 if (state.length === 0 && state.needDrain) {
4855 state.needDrain = false;
4856 stream.emit('drain');
4857 }
4858}
4859
4860// if there's something in the buffer waiting, then process it
4861function clearBuffer(stream, state) {
4862 state.bufferProcessing = true;
4863 var entry = state.bufferedRequest;
4864
4865 if (stream._writev && entry && entry.next) {
4866 // Fast case, write everything using _writev()
4867 var l = state.bufferedRequestCount;
4868 var buffer = new Array(l);
4869 var holder = state.corkedRequestsFree;
4870 holder.entry = entry;
4871
4872 var count = 0;
4873 while (entry) {
4874 buffer[count] = entry;
4875 entry = entry.next;
4876 count += 1;
4877 }
4878
4879 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
4880
4881 // doWrite is almost always async, defer these to save a bit of time
4882 // as the hot path ends with doWrite
4883 state.pendingcb++;
4884 state.lastBufferedRequest = null;
4885 if (holder.next) {
4886 state.corkedRequestsFree = holder.next;
4887 holder.next = null;
4888 } else {
4889 state.corkedRequestsFree = new CorkedRequest(state);
4890 }
4891 } else {
4892 // Slow case, write chunks one-by-one
4893 while (entry) {
4894 var chunk = entry.chunk;
4895 var encoding = entry.encoding;
4896 var cb = entry.callback;
4897 var len = state.objectMode ? 1 : chunk.length;
4898
4899 doWrite(stream, state, false, len, chunk, encoding, cb);
4900 entry = entry.next;
4901 // if we didn't call the onwrite immediately, then
4902 // it means that we need to wait until it does.
4903 // also, that means that the chunk and cb are currently
4904 // being processed, so move the buffer counter past them.
4905 if (state.writing) {
4906 break;
4907 }
4908 }
4909
4910 if (entry === null) state.lastBufferedRequest = null;
4911 }
4912
4913 state.bufferedRequestCount = 0;
4914 state.bufferedRequest = entry;
4915 state.bufferProcessing = false;
4916}
4917
4918Writable.prototype._write = function (chunk, encoding, cb) {
4919 cb(new Error('_write() is not implemented'));
4920};
4921
4922Writable.prototype._writev = null;
4923
4924Writable.prototype.end = function (chunk, encoding, cb) {
4925 var state = this._writableState;
4926
4927 if (typeof chunk === 'function') {
4928 cb = chunk;
4929 chunk = null;
4930 encoding = null;
4931 } else if (typeof encoding === 'function') {
4932 cb = encoding;
4933 encoding = null;
4934 }
4935
4936 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
4937
4938 // .end() fully uncorks
4939 if (state.corked) {
4940 state.corked = 1;
4941 this.uncork();
4942 }
4943
4944 // ignore unnecessary end() calls.
4945 if (!state.ending && !state.finished) endWritable(this, state, cb);
4946};
4947
4948function needFinish(state) {
4949 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
4950}
4951
4952function prefinish(stream, state) {
4953 if (!state.prefinished) {
4954 state.prefinished = true;
4955 stream.emit('prefinish');
4956 }
4957}
4958
4959function finishMaybe(stream, state) {
4960 var need = needFinish(state);
4961 if (need) {
4962 if (state.pendingcb === 0) {
4963 prefinish(stream, state);
4964 state.finished = true;
4965 stream.emit('finish');
4966 } else {
4967 prefinish(stream, state);
4968 }
4969 }
4970 return need;
4971}
4972
4973function endWritable(stream, state, cb) {
4974 state.ending = true;
4975 finishMaybe(stream, state);
4976 if (cb) {
4977 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
4978 }
4979 state.ended = true;
4980 stream.writable = false;
4981}
4982
4983// It seems a linked list but it is not
4984// there will be only 2 of these for each stream
4985function CorkedRequest(state) {
4986 var _this = this;
4987
4988 this.next = null;
4989 this.entry = null;
4990
4991 this.finish = function (err) {
4992 var entry = _this.entry;
4993 _this.entry = null;
4994 while (entry) {
4995 var cb = entry.callback;
4996 state.pendingcb--;
4997 cb(err);
4998 entry = entry.next;
4999 }
5000 if (state.corkedRequestsFree) {
5001 state.corkedRequestsFree.next = _this;
5002 } else {
5003 state.corkedRequestsFree = _this;
5004 }
5005 };
5006}
5007}).call(this,require('_process'))
5008},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
5009'use strict';
5010
5011var Buffer = require('buffer').Buffer;
5012/*<replacement>*/
5013var bufferShim = require('buffer-shims');
5014/*</replacement>*/
5015
5016module.exports = BufferList;
5017
5018function BufferList() {
5019 this.head = null;
5020 this.tail = null;
5021 this.length = 0;
5022}
5023
5024BufferList.prototype.push = function (v) {
5025 var entry = { data: v, next: null };
5026 if (this.length > 0) this.tail.next = entry;else this.head = entry;
5027 this.tail = entry;
5028 ++this.length;
5029};
5030
5031BufferList.prototype.unshift = function (v) {
5032 var entry = { data: v, next: this.head };
5033 if (this.length === 0) this.tail = entry;
5034 this.head = entry;
5035 ++this.length;
5036};
5037
5038BufferList.prototype.shift = function () {
5039 if (this.length === 0) return;
5040 var ret = this.head.data;
5041 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
5042 --this.length;
5043 return ret;
5044};
5045
5046BufferList.prototype.clear = function () {
5047 this.head = this.tail = null;
5048 this.length = 0;
5049};
5050
5051BufferList.prototype.join = function (s) {
5052 if (this.length === 0) return '';
5053 var p = this.head;
5054 var ret = '' + p.data;
5055 while (p = p.next) {
5056 ret += s + p.data;
5057 }return ret;
5058};
5059
5060BufferList.prototype.concat = function (n) {
5061 if (this.length === 0) return bufferShim.alloc(0);
5062 if (this.length === 1) return this.head.data;
5063 var ret = bufferShim.allocUnsafe(n >>> 0);
5064 var p = this.head;
5065 var i = 0;
5066 while (p) {
5067 p.data.copy(ret, i);
5068 i += p.data.length;
5069 p = p.next;
5070 }
5071 return ret;
5072};
5073},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
5074module.exports = require("./lib/_stream_passthrough.js")
5075
5076},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
5077(function (process){
5078var Stream = (function (){
5079 try {
5080 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
5081 } catch(_){}
5082}());
5083exports = module.exports = require('./lib/_stream_readable.js');
5084exports.Stream = Stream || exports;
5085exports.Readable = exports;
5086exports.Writable = require('./lib/_stream_writable.js');
5087exports.Duplex = require('./lib/_stream_duplex.js');
5088exports.Transform = require('./lib/_stream_transform.js');
5089exports.PassThrough = require('./lib/_stream_passthrough.js');
5090
5091if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
5092 module.exports = Stream;
5093}
5094
5095}).call(this,require('_process'))
5096},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
5097module.exports = require("./lib/_stream_transform.js")
5098
5099},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
5100module.exports = require("./lib/_stream_writable.js")
5101
5102},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
5103// Copyright Joyent, Inc. and other Node contributors.
5104//
5105// Permission is hereby granted, free of charge, to any person obtaining a
5106// copy of this software and associated documentation files (the
5107// "Software"), to deal in the Software without restriction, including
5108// without limitation the rights to use, copy, modify, merge, publish,
5109// distribute, sublicense, and/or sell copies of the Software, and to permit
5110// persons to whom the Software is furnished to do so, subject to the
5111// following conditions:
5112//
5113// The above copyright notice and this permission notice shall be included
5114// in all copies or substantial portions of the Software.
5115//
5116// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5117// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5118// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5119// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5120// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5121// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5122// USE OR OTHER DEALINGS IN THE SOFTWARE.
5123
5124module.exports = Stream;
5125
5126var EE = require('events').EventEmitter;
5127var inherits = require('inherits');
5128
5129inherits(Stream, EE);
5130Stream.Readable = require('readable-stream/readable.js');
5131Stream.Writable = require('readable-stream/writable.js');
5132Stream.Duplex = require('readable-stream/duplex.js');
5133Stream.Transform = require('readable-stream/transform.js');
5134Stream.PassThrough = require('readable-stream/passthrough.js');
5135
5136// Backwards-compat with node 0.4.x
5137Stream.Stream = Stream;
5138
5139
5140
5141// old-style streams. Note that the pipe method (the only relevant
5142// part of this class) is overridden in the Readable class.
5143
5144function Stream() {
5145 EE.call(this);
5146}
5147
5148Stream.prototype.pipe = function(dest, options) {
5149 var source = this;
5150
5151 function ondata(chunk) {
5152 if (dest.writable) {
5153 if (false === dest.write(chunk) && source.pause) {
5154 source.pause();
5155 }
5156 }
5157 }
5158
5159 source.on('data', ondata);
5160
5161 function ondrain() {
5162 if (source.readable && source.resume) {
5163 source.resume();
5164 }
5165 }
5166
5167 dest.on('drain', ondrain);
5168
5169 // If the 'end' option is not supplied, dest.end() will be called when
5170 // source gets the 'end' or 'close' events. Only dest.end() once.
5171 if (!dest._isStdio && (!options || options.end !== false)) {
5172 source.on('end', onend);
5173 source.on('close', onclose);
5174 }
5175
5176 var didOnEnd = false;
5177 function onend() {
5178 if (didOnEnd) return;
5179 didOnEnd = true;
5180
5181 dest.end();
5182 }
5183
5184
5185 function onclose() {
5186 if (didOnEnd) return;
5187 didOnEnd = true;
5188
5189 if (typeof dest.destroy === 'function') dest.destroy();
5190 }
5191
5192 // don't leave dangling pipes when there are errors.
5193 function onerror(er) {
5194 cleanup();
5195 if (EE.listenerCount(this, 'error') === 0) {
5196 throw er; // Unhandled stream error in pipe.
5197 }
5198 }
5199
5200 source.on('error', onerror);
5201 dest.on('error', onerror);
5202
5203 // remove all the event listeners that were added.
5204 function cleanup() {
5205 source.removeListener('data', ondata);
5206 dest.removeListener('drain', ondrain);
5207
5208 source.removeListener('end', onend);
5209 source.removeListener('close', onclose);
5210
5211 source.removeListener('error', onerror);
5212 dest.removeListener('error', onerror);
5213
5214 source.removeListener('end', cleanup);
5215 source.removeListener('close', cleanup);
5216
5217 dest.removeListener('close', cleanup);
5218 }
5219
5220 source.on('end', cleanup);
5221 source.on('close', cleanup);
5222
5223 dest.on('close', cleanup);
5224
5225 dest.emit('pipe', source);
5226
5227 // Allow for unix-like usage: A.pipe(B).pipe(C)
5228 return dest;
5229};
5230
5231},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
5232// Copyright Joyent, Inc. and other Node contributors.
5233//
5234// Permission is hereby granted, free of charge, to any person obtaining a
5235// copy of this software and associated documentation files (the
5236// "Software"), to deal in the Software without restriction, including
5237// without limitation the rights to use, copy, modify, merge, publish,
5238// distribute, sublicense, and/or sell copies of the Software, and to permit
5239// persons to whom the Software is furnished to do so, subject to the
5240// following conditions:
5241//
5242// The above copyright notice and this permission notice shall be included
5243// in all copies or substantial portions of the Software.
5244//
5245// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5246// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5247// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5248// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5249// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5250// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5251// USE OR OTHER DEALINGS IN THE SOFTWARE.
5252
5253var Buffer = require('buffer').Buffer;
5254
5255var isBufferEncoding = Buffer.isEncoding
5256 || function(encoding) {
5257 switch (encoding && encoding.toLowerCase()) {
5258 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
5259 default: return false;
5260 }
5261 }
5262
5263
5264function assertEncoding(encoding) {
5265 if (encoding && !isBufferEncoding(encoding)) {
5266 throw new Error('Unknown encoding: ' + encoding);
5267 }
5268}
5269
5270// StringDecoder provides an interface for efficiently splitting a series of
5271// buffers into a series of JS strings without breaking apart multi-byte
5272// characters. CESU-8 is handled as part of the UTF-8 encoding.
5273//
5274// @TODO Handling all encodings inside a single object makes it very difficult
5275// to reason about this code, so it should be split up in the future.
5276// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
5277// points as used by CESU-8.
5278var StringDecoder = exports.StringDecoder = function(encoding) {
5279 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
5280 assertEncoding(encoding);
5281 switch (this.encoding) {
5282 case 'utf8':
5283 // CESU-8 represents each of Surrogate Pair by 3-bytes
5284 this.surrogateSize = 3;
5285 break;
5286 case 'ucs2':
5287 case 'utf16le':
5288 // UTF-16 represents each of Surrogate Pair by 2-bytes
5289 this.surrogateSize = 2;
5290 this.detectIncompleteChar = utf16DetectIncompleteChar;
5291 break;
5292 case 'base64':
5293 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
5294 this.surrogateSize = 3;
5295 this.detectIncompleteChar = base64DetectIncompleteChar;
5296 break;
5297 default:
5298 this.write = passThroughWrite;
5299 return;
5300 }
5301
5302 // Enough space to store all bytes of a single character. UTF-8 needs 4
5303 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
5304 this.charBuffer = new Buffer(6);
5305 // Number of bytes received for the current incomplete multi-byte character.
5306 this.charReceived = 0;
5307 // Number of bytes expected for the current incomplete multi-byte character.
5308 this.charLength = 0;
5309};
5310
5311
5312// write decodes the given buffer and returns it as JS string that is
5313// guaranteed to not contain any partial multi-byte characters. Any partial
5314// character found at the end of the buffer is buffered up, and will be
5315// returned when calling write again with the remaining bytes.
5316//
5317// Note: Converting a Buffer containing an orphan surrogate to a String
5318// currently works, but converting a String to a Buffer (via `new Buffer`, or
5319// Buffer#write) will replace incomplete surrogates with the unicode
5320// replacement character. See https://codereview.chromium.org/121173009/ .
5321StringDecoder.prototype.write = function(buffer) {
5322 var charStr = '';
5323 // if our last write ended with an incomplete multibyte character
5324 while (this.charLength) {
5325 // determine how many remaining bytes this buffer has to offer for this char
5326 var available = (buffer.length >= this.charLength - this.charReceived) ?
5327 this.charLength - this.charReceived :
5328 buffer.length;
5329
5330 // add the new bytes to the char buffer
5331 buffer.copy(this.charBuffer, this.charReceived, 0, available);
5332 this.charReceived += available;
5333
5334 if (this.charReceived < this.charLength) {
5335 // still not enough chars in this buffer? wait for more ...
5336 return '';
5337 }
5338
5339 // remove bytes belonging to the current character from the buffer
5340 buffer = buffer.slice(available, buffer.length);
5341
5342 // get the character that was split
5343 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
5344
5345 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
5346 var charCode = charStr.charCodeAt(charStr.length - 1);
5347 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
5348 this.charLength += this.surrogateSize;
5349 charStr = '';
5350 continue;
5351 }
5352 this.charReceived = this.charLength = 0;
5353
5354 // if there are no more bytes in this buffer, just emit our char
5355 if (buffer.length === 0) {
5356 return charStr;
5357 }
5358 break;
5359 }
5360
5361 // determine and set charLength / charReceived
5362 this.detectIncompleteChar(buffer);
5363
5364 var end = buffer.length;
5365 if (this.charLength) {
5366 // buffer the incomplete character bytes we got
5367 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
5368 end -= this.charReceived;
5369 }
5370
5371 charStr += buffer.toString(this.encoding, 0, end);
5372
5373 var end = charStr.length - 1;
5374 var charCode = charStr.charCodeAt(end);
5375 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
5376 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
5377 var size = this.surrogateSize;
5378 this.charLength += size;
5379 this.charReceived += size;
5380 this.charBuffer.copy(this.charBuffer, size, 0, size);
5381 buffer.copy(this.charBuffer, 0, 0, size);
5382 return charStr.substring(0, end);
5383 }
5384
5385 // or just emit the charStr
5386 return charStr;
5387};
5388
5389// detectIncompleteChar determines if there is an incomplete UTF-8 character at
5390// the end of the given buffer. If so, it sets this.charLength to the byte
5391// length that character, and sets this.charReceived to the number of bytes
5392// that are available for this character.
5393StringDecoder.prototype.detectIncompleteChar = function(buffer) {
5394 // determine how many bytes we have to check at the end of this buffer
5395 var i = (buffer.length >= 3) ? 3 : buffer.length;
5396
5397 // Figure out if one of the last i bytes of our buffer announces an
5398 // incomplete char.
5399 for (; i > 0; i--) {
5400 var c = buffer[buffer.length - i];
5401
5402 // See http://en.wikipedia.org/wiki/UTF-8#Description
5403
5404 // 110XXXXX
5405 if (i == 1 && c >> 5 == 0x06) {
5406 this.charLength = 2;
5407 break;
5408 }
5409
5410 // 1110XXXX
5411 if (i <= 2 && c >> 4 == 0x0E) {
5412 this.charLength = 3;
5413 break;
5414 }
5415
5416 // 11110XXX
5417 if (i <= 3 && c >> 3 == 0x1E) {
5418 this.charLength = 4;
5419 break;
5420 }
5421 }
5422 this.charReceived = i;
5423};
5424
5425StringDecoder.prototype.end = function(buffer) {
5426 var res = '';
5427 if (buffer && buffer.length)
5428 res = this.write(buffer);
5429
5430 if (this.charReceived) {
5431 var cr = this.charReceived;
5432 var buf = this.charBuffer;
5433 var enc = this.encoding;
5434 res += buf.slice(0, cr).toString(enc);
5435 }
5436
5437 return res;
5438};
5439
5440function passThroughWrite(buffer) {
5441 return buffer.toString(this.encoding);
5442}
5443
5444function utf16DetectIncompleteChar(buffer) {
5445 this.charReceived = buffer.length % 2;
5446 this.charLength = this.charReceived ? 2 : 0;
5447}
5448
5449function base64DetectIncompleteChar(buffer) {
5450 this.charReceived = buffer.length % 3;
5451 this.charLength = this.charReceived ? 3 : 0;
5452}
5453
5454},{"buffer":5}],27:[function(require,module,exports){
5455(function (global){
5456
5457/**
5458 * Module exports.
5459 */
5460
5461module.exports = deprecate;
5462
5463/**
5464 * Mark that a method should not be used.
5465 * Returns a modified function which warns once by default.
5466 *
5467 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
5468 *
5469 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
5470 * will throw an Error when invoked.
5471 *
5472 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
5473 * will invoke `console.trace()` instead of `console.error()`.
5474 *
5475 * @param {Function} fn - the function to deprecate
5476 * @param {String} msg - the string to print to the console when `fn` is invoked
5477 * @returns {Function} a new "deprecated" version of `fn`
5478 * @api public
5479 */
5480
5481function deprecate (fn, msg) {
5482 if (config('noDeprecation')) {
5483 return fn;
5484 }
5485
5486 var warned = false;
5487 function deprecated() {
5488 if (!warned) {
5489 if (config('throwDeprecation')) {
5490 throw new Error(msg);
5491 } else if (config('traceDeprecation')) {
5492 console.trace(msg);
5493 } else {
5494 console.warn(msg);
5495 }
5496 warned = true;
5497 }
5498 return fn.apply(this, arguments);
5499 }
5500
5501 return deprecated;
5502}
5503
5504/**
5505 * Checks `localStorage` for boolean values for the given `name`.
5506 *
5507 * @param {String} name
5508 * @returns {Boolean}
5509 * @api private
5510 */
5511
5512function config (name) {
5513 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
5514 try {
5515 if (!global.localStorage) return false;
5516 } catch (_) {
5517 return false;
5518 }
5519 var val = global.localStorage[name];
5520 if (null == val) return false;
5521 return String(val).toLowerCase() === 'true';
5522}
5523
5524}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5525},{}],28:[function(require,module,exports){
5526arguments[4][9][0].apply(exports,arguments)
5527},{"dup":9}],29:[function(require,module,exports){
5528module.exports = function isBuffer(arg) {
5529 return arg && typeof arg === 'object'
5530 && typeof arg.copy === 'function'
5531 && typeof arg.fill === 'function'
5532 && typeof arg.readUInt8 === 'function';
5533}
5534},{}],30:[function(require,module,exports){
5535(function (process,global){
5536// Copyright Joyent, Inc. and other Node contributors.
5537//
5538// Permission is hereby granted, free of charge, to any person obtaining a
5539// copy of this software and associated documentation files (the
5540// "Software"), to deal in the Software without restriction, including
5541// without limitation the rights to use, copy, modify, merge, publish,
5542// distribute, sublicense, and/or sell copies of the Software, and to permit
5543// persons to whom the Software is furnished to do so, subject to the
5544// following conditions:
5545//
5546// The above copyright notice and this permission notice shall be included
5547// in all copies or substantial portions of the Software.
5548//
5549// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5550// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5551// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5552// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5553// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5554// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5555// USE OR OTHER DEALINGS IN THE SOFTWARE.
5556
5557var formatRegExp = /%[sdj%]/g;
5558exports.format = function(f) {
5559 if (!isString(f)) {
5560 var objects = [];
5561 for (var i = 0; i < arguments.length; i++) {
5562 objects.push(inspect(arguments[i]));
5563 }
5564 return objects.join(' ');
5565 }
5566
5567 var i = 1;
5568 var args = arguments;
5569 var len = args.length;
5570 var str = String(f).replace(formatRegExp, function(x) {
5571 if (x === '%%') return '%';
5572 if (i >= len) return x;
5573 switch (x) {
5574 case '%s': return String(args[i++]);
5575 case '%d': return Number(args[i++]);
5576 case '%j':
5577 try {
5578 return JSON.stringify(args[i++]);
5579 } catch (_) {
5580 return '[Circular]';
5581 }
5582 default:
5583 return x;
5584 }
5585 });
5586 for (var x = args[i]; i < len; x = args[++i]) {
5587 if (isNull(x) || !isObject(x)) {
5588 str += ' ' + x;
5589 } else {
5590 str += ' ' + inspect(x);
5591 }
5592 }
5593 return str;
5594};
5595
5596
5597// Mark that a method should not be used.
5598// Returns a modified function which warns once by default.
5599// If --no-deprecation is set, then it is a no-op.
5600exports.deprecate = function(fn, msg) {
5601 // Allow for deprecating things in the process of starting up.
5602 if (isUndefined(global.process)) {
5603 return function() {
5604 return exports.deprecate(fn, msg).apply(this, arguments);
5605 };
5606 }
5607
5608 if (process.noDeprecation === true) {
5609 return fn;
5610 }
5611
5612 var warned = false;
5613 function deprecated() {
5614 if (!warned) {
5615 if (process.throwDeprecation) {
5616 throw new Error(msg);
5617 } else if (process.traceDeprecation) {
5618 console.trace(msg);
5619 } else {
5620 console.error(msg);
5621 }
5622 warned = true;
5623 }
5624 return fn.apply(this, arguments);
5625 }
5626
5627 return deprecated;
5628};
5629
5630
5631var debugs = {};
5632var debugEnviron;
5633exports.debuglog = function(set) {
5634 if (isUndefined(debugEnviron))
5635 debugEnviron = process.env.NODE_DEBUG || '';
5636 set = set.toUpperCase();
5637 if (!debugs[set]) {
5638 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
5639 var pid = process.pid;
5640 debugs[set] = function() {
5641 var msg = exports.format.apply(exports, arguments);
5642 console.error('%s %d: %s', set, pid, msg);
5643 };
5644 } else {
5645 debugs[set] = function() {};
5646 }
5647 }
5648 return debugs[set];
5649};
5650
5651
5652/**
5653 * Echos the value of a value. Trys to print the value out
5654 * in the best way possible given the different types.
5655 *
5656 * @param {Object} obj The object to print out.
5657 * @param {Object} opts Optional options object that alters the output.
5658 */
5659/* legacy: obj, showHidden, depth, colors*/
5660function inspect(obj, opts) {
5661 // default options
5662 var ctx = {
5663 seen: [],
5664 stylize: stylizeNoColor
5665 };
5666 // legacy...
5667 if (arguments.length >= 3) ctx.depth = arguments[2];
5668 if (arguments.length >= 4) ctx.colors = arguments[3];
5669 if (isBoolean(opts)) {
5670 // legacy...
5671 ctx.showHidden = opts;
5672 } else if (opts) {
5673 // got an "options" object
5674 exports._extend(ctx, opts);
5675 }
5676 // set default options
5677 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
5678 if (isUndefined(ctx.depth)) ctx.depth = 2;
5679 if (isUndefined(ctx.colors)) ctx.colors = false;
5680 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
5681 if (ctx.colors) ctx.stylize = stylizeWithColor;
5682 return formatValue(ctx, obj, ctx.depth);
5683}
5684exports.inspect = inspect;
5685
5686
5687// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
5688inspect.colors = {
5689 'bold' : [1, 22],
5690 'italic' : [3, 23],
5691 'underline' : [4, 24],
5692 'inverse' : [7, 27],
5693 'white' : [37, 39],
5694 'grey' : [90, 39],
5695 'black' : [30, 39],
5696 'blue' : [34, 39],
5697 'cyan' : [36, 39],
5698 'green' : [32, 39],
5699 'magenta' : [35, 39],
5700 'red' : [31, 39],
5701 'yellow' : [33, 39]
5702};
5703
5704// Don't use 'blue' not visible on cmd.exe
5705inspect.styles = {
5706 'special': 'cyan',
5707 'number': 'yellow',
5708 'boolean': 'yellow',
5709 'undefined': 'grey',
5710 'null': 'bold',
5711 'string': 'green',
5712 'date': 'magenta',
5713 // "name": intentionally not styling
5714 'regexp': 'red'
5715};
5716
5717
5718function stylizeWithColor(str, styleType) {
5719 var style = inspect.styles[styleType];
5720
5721 if (style) {
5722 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
5723 '\u001b[' + inspect.colors[style][1] + 'm';
5724 } else {
5725 return str;
5726 }
5727}
5728
5729
5730function stylizeNoColor(str, styleType) {
5731 return str;
5732}
5733
5734
5735function arrayToHash(array) {
5736 var hash = {};
5737
5738 array.forEach(function(val, idx) {
5739 hash[val] = true;
5740 });
5741
5742 return hash;
5743}
5744
5745
5746function formatValue(ctx, value, recurseTimes) {
5747 // Provide a hook for user-specified inspect functions.
5748 // Check that value is an object with an inspect function on it
5749 if (ctx.customInspect &&
5750 value &&
5751 isFunction(value.inspect) &&
5752 // Filter out the util module, it's inspect function is special
5753 value.inspect !== exports.inspect &&
5754 // Also filter out any prototype objects using the circular check.
5755 !(value.constructor && value.constructor.prototype === value)) {
5756 var ret = value.inspect(recurseTimes, ctx);
5757 if (!isString(ret)) {
5758 ret = formatValue(ctx, ret, recurseTimes);
5759 }
5760 return ret;
5761 }
5762
5763 // Primitive types cannot have properties
5764 var primitive = formatPrimitive(ctx, value);
5765 if (primitive) {
5766 return primitive;
5767 }
5768
5769 // Look up the keys of the object.
5770 var keys = Object.keys(value);
5771 var visibleKeys = arrayToHash(keys);
5772
5773 if (ctx.showHidden) {
5774 keys = Object.getOwnPropertyNames(value);
5775 }
5776
5777 // IE doesn't make error fields non-enumerable
5778 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
5779 if (isError(value)
5780 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
5781 return formatError(value);
5782 }
5783
5784 // Some type of object without properties can be shortcutted.
5785 if (keys.length === 0) {
5786 if (isFunction(value)) {
5787 var name = value.name ? ': ' + value.name : '';
5788 return ctx.stylize('[Function' + name + ']', 'special');
5789 }
5790 if (isRegExp(value)) {
5791 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
5792 }
5793 if (isDate(value)) {
5794 return ctx.stylize(Date.prototype.toString.call(value), 'date');
5795 }
5796 if (isError(value)) {
5797 return formatError(value);
5798 }
5799 }
5800
5801 var base = '', array = false, braces = ['{', '}'];
5802
5803 // Make Array say that they are Array
5804 if (isArray(value)) {
5805 array = true;
5806 braces = ['[', ']'];
5807 }
5808
5809 // Make functions say that they are functions
5810 if (isFunction(value)) {
5811 var n = value.name ? ': ' + value.name : '';
5812 base = ' [Function' + n + ']';
5813 }
5814
5815 // Make RegExps say that they are RegExps
5816 if (isRegExp(value)) {
5817 base = ' ' + RegExp.prototype.toString.call(value);
5818 }
5819
5820 // Make dates with properties first say the date
5821 if (isDate(value)) {
5822 base = ' ' + Date.prototype.toUTCString.call(value);
5823 }
5824
5825 // Make error with message first say the error
5826 if (isError(value)) {
5827 base = ' ' + formatError(value);
5828 }
5829
5830 if (keys.length === 0 && (!array || value.length == 0)) {
5831 return braces[0] + base + braces[1];
5832 }
5833
5834 if (recurseTimes < 0) {
5835 if (isRegExp(value)) {
5836 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
5837 } else {
5838 return ctx.stylize('[Object]', 'special');
5839 }
5840 }
5841
5842 ctx.seen.push(value);
5843
5844 var output;
5845 if (array) {
5846 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
5847 } else {
5848 output = keys.map(function(key) {
5849 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
5850 });
5851 }
5852
5853 ctx.seen.pop();
5854
5855 return reduceToSingleString(output, base, braces);
5856}
5857
5858
5859function formatPrimitive(ctx, value) {
5860 if (isUndefined(value))
5861 return ctx.stylize('undefined', 'undefined');
5862 if (isString(value)) {
5863 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
5864 .replace(/'/g, "\\'")
5865 .replace(/\\"/g, '"') + '\'';
5866 return ctx.stylize(simple, 'string');
5867 }
5868 if (isNumber(value))
5869 return ctx.stylize('' + value, 'number');
5870 if (isBoolean(value))
5871 return ctx.stylize('' + value, 'boolean');
5872 // For some reason typeof null is "object", so special case here.
5873 if (isNull(value))
5874 return ctx.stylize('null', 'null');
5875}
5876
5877
5878function formatError(value) {
5879 return '[' + Error.prototype.toString.call(value) + ']';
5880}
5881
5882
5883function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
5884 var output = [];
5885 for (var i = 0, l = value.length; i < l; ++i) {
5886 if (hasOwnProperty(value, String(i))) {
5887 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
5888 String(i), true));
5889 } else {
5890 output.push('');
5891 }
5892 }
5893 keys.forEach(function(key) {
5894 if (!key.match(/^\d+$/)) {
5895 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
5896 key, true));
5897 }
5898 });
5899 return output;
5900}
5901
5902
5903function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
5904 var name, str, desc;
5905 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
5906 if (desc.get) {
5907 if (desc.set) {
5908 str = ctx.stylize('[Getter/Setter]', 'special');
5909 } else {
5910 str = ctx.stylize('[Getter]', 'special');
5911 }
5912 } else {
5913 if (desc.set) {
5914 str = ctx.stylize('[Setter]', 'special');
5915 }
5916 }
5917 if (!hasOwnProperty(visibleKeys, key)) {
5918 name = '[' + key + ']';
5919 }
5920 if (!str) {
5921 if (ctx.seen.indexOf(desc.value) < 0) {
5922 if (isNull(recurseTimes)) {
5923 str = formatValue(ctx, desc.value, null);
5924 } else {
5925 str = formatValue(ctx, desc.value, recurseTimes - 1);
5926 }
5927 if (str.indexOf('\n') > -1) {
5928 if (array) {
5929 str = str.split('\n').map(function(line) {
5930 return ' ' + line;
5931 }).join('\n').substr(2);
5932 } else {
5933 str = '\n' + str.split('\n').map(function(line) {
5934 return ' ' + line;
5935 }).join('\n');
5936 }
5937 }
5938 } else {
5939 str = ctx.stylize('[Circular]', 'special');
5940 }
5941 }
5942 if (isUndefined(name)) {
5943 if (array && key.match(/^\d+$/)) {
5944 return str;
5945 }
5946 name = JSON.stringify('' + key);
5947 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
5948 name = name.substr(1, name.length - 2);
5949 name = ctx.stylize(name, 'name');
5950 } else {
5951 name = name.replace(/'/g, "\\'")
5952 .replace(/\\"/g, '"')
5953 .replace(/(^"|"$)/g, "'");
5954 name = ctx.stylize(name, 'string');
5955 }
5956 }
5957
5958 return name + ': ' + str;
5959}
5960
5961
5962function reduceToSingleString(output, base, braces) {
5963 var numLinesEst = 0;
5964 var length = output.reduce(function(prev, cur) {
5965 numLinesEst++;
5966 if (cur.indexOf('\n') >= 0) numLinesEst++;
5967 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
5968 }, 0);
5969
5970 if (length > 60) {
5971 return braces[0] +
5972 (base === '' ? '' : base + '\n ') +
5973 ' ' +
5974 output.join(',\n ') +
5975 ' ' +
5976 braces[1];
5977 }
5978
5979 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
5980}
5981
5982
5983// NOTE: These type checking functions intentionally don't use `instanceof`
5984// because it is fragile and can be easily faked with `Object.create()`.
5985function isArray(ar) {
5986 return Array.isArray(ar);
5987}
5988exports.isArray = isArray;
5989
5990function isBoolean(arg) {
5991 return typeof arg === 'boolean';
5992}
5993exports.isBoolean = isBoolean;
5994
5995function isNull(arg) {
5996 return arg === null;
5997}
5998exports.isNull = isNull;
5999
6000function isNullOrUndefined(arg) {
6001 return arg == null;
6002}
6003exports.isNullOrUndefined = isNullOrUndefined;
6004
6005function isNumber(arg) {
6006 return typeof arg === 'number';
6007}
6008exports.isNumber = isNumber;
6009
6010function isString(arg) {
6011 return typeof arg === 'string';
6012}
6013exports.isString = isString;
6014
6015function isSymbol(arg) {
6016 return typeof arg === 'symbol';
6017}
6018exports.isSymbol = isSymbol;
6019
6020function isUndefined(arg) {
6021 return arg === void 0;
6022}
6023exports.isUndefined = isUndefined;
6024
6025function isRegExp(re) {
6026 return isObject(re) && objectToString(re) === '[object RegExp]';
6027}
6028exports.isRegExp = isRegExp;
6029
6030function isObject(arg) {
6031 return typeof arg === 'object' && arg !== null;
6032}
6033exports.isObject = isObject;
6034
6035function isDate(d) {
6036 return isObject(d) && objectToString(d) === '[object Date]';
6037}
6038exports.isDate = isDate;
6039
6040function isError(e) {
6041 return isObject(e) &&
6042 (objectToString(e) === '[object Error]' || e instanceof Error);
6043}
6044exports.isError = isError;
6045
6046function isFunction(arg) {
6047 return typeof arg === 'function';
6048}
6049exports.isFunction = isFunction;
6050
6051function isPrimitive(arg) {
6052 return arg === null ||
6053 typeof arg === 'boolean' ||
6054 typeof arg === 'number' ||
6055 typeof arg === 'string' ||
6056 typeof arg === 'symbol' || // ES6 symbol
6057 typeof arg === 'undefined';
6058}
6059exports.isPrimitive = isPrimitive;
6060
6061exports.isBuffer = require('./support/isBuffer');
6062
6063function objectToString(o) {
6064 return Object.prototype.toString.call(o);
6065}
6066
6067
6068function pad(n) {
6069 return n < 10 ? '0' + n.toString(10) : n.toString(10);
6070}
6071
6072
6073var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
6074 'Oct', 'Nov', 'Dec'];
6075
6076// 26 Feb 16:19:34
6077function timestamp() {
6078 var d = new Date();
6079 var time = [pad(d.getHours()),
6080 pad(d.getMinutes()),
6081 pad(d.getSeconds())].join(':');
6082 return [d.getDate(), months[d.getMonth()], time].join(' ');
6083}
6084
6085
6086// log is just a thin wrapper to console.log that prepends a timestamp
6087exports.log = function() {
6088 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
6089};
6090
6091
6092/**
6093 * Inherit the prototype methods from one constructor into another.
6094 *
6095 * The Function.prototype.inherits from lang.js rewritten as a standalone
6096 * function (not on Function.prototype). NOTE: If this file is to be loaded
6097 * during bootstrapping this function needs to be rewritten using some native
6098 * functions as prototype setup using normal JavaScript does not work as
6099 * expected during bootstrapping (see mirror.js in r114903).
6100 *
6101 * @param {function} ctor Constructor function which needs to inherit the
6102 * prototype.
6103 * @param {function} superCtor Constructor function to inherit prototype from.
6104 */
6105exports.inherits = require('inherits');
6106
6107exports._extend = function(origin, add) {
6108 // Don't do anything if add isn't an object
6109 if (!add || !isObject(add)) return origin;
6110
6111 var keys = Object.keys(add);
6112 var i = keys.length;
6113 while (i--) {
6114 origin[keys[i]] = add[keys[i]];
6115 }
6116 return origin;
6117};
6118
6119function hasOwnProperty(obj, prop) {
6120 return Object.prototype.hasOwnProperty.call(obj, prop);
6121}
6122
6123}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
6124},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
6125(function (Buffer){
6126const createKeccakHash = require('keccak')
6127const secp256k1 = require('secp256k1')
6128const assert = require('assert')
6129const rlp = require('rlp')
6130const BN = require('bn.js')
6131const createHash = require('create-hash')
6132Object.assign(exports, require('ethjs-util'))
6133
6134/**
6135 * the max integer that this VM can handle (a ```BN```)
6136 * @var {BN} MAX_INTEGER
6137 */
6138exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
6139
6140/**
6141 * 2^256 (a ```BN```)
6142 * @var {BN} TWO_POW256
6143 */
6144exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
6145
6146/**
6147 * SHA3-256 hash of null (a ```String```)
6148 * @var {String} SHA3_NULL_S
6149 */
6150exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
6151
6152/**
6153 * SHA3-256 hash of null (a ```Buffer```)
6154 * @var {Buffer} SHA3_NULL
6155 */
6156exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
6157
6158/**
6159 * SHA3-256 of an RLP of an empty array (a ```String```)
6160 * @var {String} SHA3_RLP_ARRAY_S
6161 */
6162exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
6163
6164/**
6165 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
6166 * @var {Buffer} SHA3_RLP_ARRAY
6167 */
6168exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
6169
6170/**
6171 * SHA3-256 hash of the RLP of null (a ```String```)
6172 * @var {String} SHA3_RLP_S
6173 */
6174exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
6175
6176/**
6177 * SHA3-256 hash of the RLP of null (a ```Buffer```)
6178 * @var {Buffer} SHA3_RLP
6179 */
6180exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
6181
6182/**
6183 * [`BN`](https://github.com/indutny/bn.js)
6184 * @var {Function}
6185 */
6186exports.BN = BN
6187
6188/**
6189 * [`rlp`](https://github.com/ethereumjs/rlp)
6190 * @var {Function}
6191 */
6192exports.rlp = rlp
6193
6194/**
6195 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
6196 * @var {Object}
6197 */
6198exports.secp256k1 = secp256k1
6199
6200/**
6201 * Returns a buffer filled with 0s
6202 * @method zeros
6203 * @param {Number} bytes the number of bytes the buffer should be
6204 * @return {Buffer}
6205 */
6206exports.zeros = function (bytes) {
6207 return Buffer.allocUnsafe(bytes).fill(0)
6208}
6209
6210/**
6211 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
6212 * Or it truncates the beginning if it exceeds.
6213 * @method lsetLength
6214 * @param {Buffer|Array} msg the value to pad
6215 * @param {Number} length the number of bytes the output should be
6216 * @param {Boolean} [right=false] whether to start padding form the left or right
6217 * @return {Buffer|Array}
6218 */
6219exports.setLengthLeft = exports.setLength = function (msg, length, right) {
6220 var buf = exports.zeros(length)
6221 msg = exports.toBuffer(msg)
6222 if (right) {
6223 if (msg.length < length) {
6224 msg.copy(buf)
6225 return buf
6226 }
6227 return msg.slice(0, length)
6228 } else {
6229 if (msg.length < length) {
6230 msg.copy(buf, length - msg.length)
6231 return buf
6232 }
6233 return msg.slice(-length)
6234 }
6235}
6236
6237/**
6238 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
6239 * Or it truncates the beginning if it exceeds.
6240 * @param {Buffer|Array} msg the value to pad
6241 * @param {Number} length the number of bytes the output should be
6242 * @return {Buffer|Array}
6243 */
6244exports.setLengthRight = function (msg, length) {
6245 return exports.setLength(msg, length, true)
6246}
6247
6248/**
6249 * Trims leading zeros from a `Buffer` or an `Array`
6250 * @param {Buffer|Array|String} a
6251 * @return {Buffer|Array|String}
6252 */
6253exports.unpad = exports.stripZeros = function (a) {
6254 a = exports.stripHexPrefix(a)
6255 var first = a[0]
6256 while (a.length > 0 && first.toString() === '0') {
6257 a = a.slice(1)
6258 first = a[0]
6259 }
6260 return a
6261}
6262/**
6263 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
6264 * @param {*} v the value
6265 */
6266exports.toBuffer = function (v) {
6267 if (!Buffer.isBuffer(v)) {
6268 if (Array.isArray(v)) {
6269 v = Buffer.from(v)
6270 } else if (typeof v === 'string') {
6271 if (exports.isHexPrefixed(v)) {
6272 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
6273 } else {
6274 v = Buffer.from(v)
6275 }
6276 } else if (typeof v === 'number') {
6277 v = exports.intToBuffer(v)
6278 } else if (v === null || v === undefined) {
6279 v = Buffer.allocUnsafe(0)
6280 } else if (v.toArray) {
6281 // converts a BN to a Buffer
6282 v = Buffer.from(v.toArray())
6283 } else {
6284 throw new Error('invalid type')
6285 }
6286 }
6287 return v
6288}
6289
6290/**
6291 * Converts a `Buffer` to a `Number`
6292 * @param {Buffer} buf
6293 * @return {Number}
6294 * @throws If the input number exceeds 53 bits.
6295 */
6296exports.bufferToInt = function (buf) {
6297 return new BN(exports.toBuffer(buf)).toNumber()
6298}
6299
6300/**
6301 * Converts a `Buffer` into a hex `String`
6302 * @param {Buffer} buf
6303 * @return {String}
6304 */
6305exports.bufferToHex = function (buf) {
6306 buf = exports.toBuffer(buf)
6307 return '0x' + buf.toString('hex')
6308}
6309
6310/**
6311 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
6312 * @param {Buffer} num
6313 * @return {BN}
6314 */
6315exports.fromSigned = function (num) {
6316 return new BN(num).fromTwos(256)
6317}
6318
6319/**
6320 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
6321 * @param {BN} num
6322 * @return {Buffer}
6323 */
6324exports.toUnsigned = function (num) {
6325 return Buffer.from(num.toTwos(256).toArray())
6326}
6327
6328/**
6329 * Creates SHA-3 hash of the input
6330 * @param {Buffer|Array|String|Number} a the input data
6331 * @param {Number} [bits=256] the SHA width
6332 * @return {Buffer}
6333 */
6334exports.sha3 = function (a, bits) {
6335 a = exports.toBuffer(a)
6336 if (!bits) bits = 256
6337
6338 return createKeccakHash('keccak' + bits).update(a).digest()
6339}
6340
6341/**
6342 * Creates SHA256 hash of the input
6343 * @param {Buffer|Array|String|Number} a the input data
6344 * @return {Buffer}
6345 */
6346exports.sha256 = function (a) {
6347 a = exports.toBuffer(a)
6348 return createHash('sha256').update(a).digest()
6349}
6350
6351/**
6352 * Creates RIPEMD160 hash of the input
6353 * @param {Buffer|Array|String|Number} a the input data
6354 * @param {Boolean} padded whether it should be padded to 256 bits or not
6355 * @return {Buffer}
6356 */
6357exports.ripemd160 = function (a, padded) {
6358 a = exports.toBuffer(a)
6359 var hash = createHash('rmd160').update(a).digest()
6360 if (padded === true) {
6361 return exports.setLength(hash, 32)
6362 } else {
6363 return hash
6364 }
6365}
6366
6367/**
6368 * Creates SHA-3 hash of the RLP encoded version of the input
6369 * @param {Buffer|Array|String|Number} a the input data
6370 * @return {Buffer}
6371 */
6372exports.rlphash = function (a) {
6373 return exports.sha3(rlp.encode(a))
6374}
6375
6376/**
6377 * Checks if the private key satisfies the rules of the curve secp256k1.
6378 * @param {Buffer} privateKey
6379 * @return {Boolean}
6380 */
6381exports.isValidPrivate = function (privateKey) {
6382 return secp256k1.privateKeyVerify(privateKey)
6383}
6384
6385/**
6386 * Checks if the public key satisfies the rules of the curve secp256k1
6387 * and the requirements of Ethereum.
6388 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
6389 * @param {Boolean} [sanitize=false] Accept public keys in other formats
6390 * @return {Boolean}
6391 */
6392exports.isValidPublic = function (publicKey, sanitize) {
6393 if (publicKey.length === 64) {
6394 // Convert to SEC1 for secp256k1
6395 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
6396 }
6397
6398 if (!sanitize) {
6399 return false
6400 }
6401
6402 return secp256k1.publicKeyVerify(publicKey)
6403}
6404
6405/**
6406 * Returns the ethereum address of a given public key.
6407 * Accepts "Ethereum public keys" and SEC1 encoded keys.
6408 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
6409 * @param {Boolean} [sanitize=false] Accept public keys in other formats
6410 * @return {Buffer}
6411 */
6412exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
6413 pubKey = exports.toBuffer(pubKey)
6414 if (sanitize && (pubKey.length !== 64)) {
6415 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
6416 }
6417 assert(pubKey.length === 64)
6418 // Only take the lower 160bits of the hash
6419 return exports.sha3(pubKey).slice(-20)
6420}
6421
6422/**
6423 * Returns the ethereum public key of a given private key
6424 * @param {Buffer} privateKey A private key must be 256 bits wide
6425 * @return {Buffer}
6426 */
6427var privateToPublic = exports.privateToPublic = function (privateKey) {
6428 privateKey = exports.toBuffer(privateKey)
6429 // skip the type flag and use the X, Y points
6430 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
6431}
6432
6433/**
6434 * Converts a public key to the Ethereum format.
6435 * @param {Buffer} publicKey
6436 * @return {Buffer}
6437 */
6438exports.importPublic = function (publicKey) {
6439 publicKey = exports.toBuffer(publicKey)
6440 if (publicKey.length !== 64) {
6441 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
6442 }
6443 return publicKey
6444}
6445
6446/**
6447 * ECDSA sign
6448 * @param {Buffer} msgHash
6449 * @param {Buffer} privateKey
6450 * @return {Object}
6451 */
6452exports.ecsign = function (msgHash, privateKey) {
6453 var sig = secp256k1.sign(msgHash, privateKey)
6454
6455 var ret = {}
6456 ret.r = sig.signature.slice(0, 32)
6457 ret.s = sig.signature.slice(32, 64)
6458 ret.v = sig.recovery + 27
6459 return ret
6460}
6461
6462/**
6463 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
6464 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
6465 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
6466 * used to produce the signature.
6467 * @param message
6468 * @returns {Buffer} hash
6469 */
6470exports.hashPersonalMessage = function (message) {
6471 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
6472 return exports.sha3(Buffer.concat([prefix, message]))
6473}
6474
6475/**
6476 * ECDSA public key recovery from signature
6477 * @param {Buffer} msgHash
6478 * @param {Number} v
6479 * @param {Buffer} r
6480 * @param {Buffer} s
6481 * @return {Buffer} publicKey
6482 */
6483exports.ecrecover = function (msgHash, v, r, s) {
6484 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
6485 var recovery = v - 27
6486 if (recovery !== 0 && recovery !== 1) {
6487 throw new Error('Invalid signature v value')
6488 }
6489 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
6490 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
6491}
6492
6493/**
6494 * Convert signature parameters into the format of `eth_sign` RPC method
6495 * @param {Number} v
6496 * @param {Buffer} r
6497 * @param {Buffer} s
6498 * @return {String} sig
6499 */
6500exports.toRpcSig = function (v, r, s) {
6501 // NOTE: with potential introduction of chainId this might need to be updated
6502 if (v !== 27 && v !== 28) {
6503 throw new Error('Invalid recovery id')
6504 }
6505
6506 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
6507 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
6508 return exports.bufferToHex(Buffer.concat([
6509 exports.setLengthLeft(r, 32),
6510 exports.setLengthLeft(s, 32),
6511 exports.toBuffer(v - 27)
6512 ]))
6513}
6514
6515/**
6516 * Convert signature format of the `eth_sign` RPC method to signature parameters
6517 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
6518 * @param {String} sig
6519 * @return {Object}
6520 */
6521exports.fromRpcSig = function (sig) {
6522 sig = exports.toBuffer(sig)
6523
6524 // NOTE: with potential introduction of chainId this might need to be updated
6525 if (sig.length !== 65) {
6526 throw new Error('Invalid signature length')
6527 }
6528
6529 var v = sig[64]
6530 // support both versions of `eth_sign` responses
6531 if (v < 27) {
6532 v += 27
6533 }
6534
6535 return {
6536 v: v,
6537 r: sig.slice(0, 32),
6538 s: sig.slice(32, 64)
6539 }
6540}
6541
6542/**
6543 * Returns the ethereum address of a given private key
6544 * @param {Buffer} privateKey A private key must be 256 bits wide
6545 * @return {Buffer}
6546 */
6547exports.privateToAddress = function (privateKey) {
6548 return exports.publicToAddress(privateToPublic(privateKey))
6549}
6550
6551/**
6552 * Checks if the address is a valid. Accepts checksummed addresses too
6553 * @param {String} address
6554 * @return {Boolean}
6555 */
6556exports.isValidAddress = function (address) {
6557 return /^0x[0-9a-fA-F]{40}$/i.test(address)
6558}
6559
6560/**
6561 * Returns a checksummed address
6562 * @param {String} address
6563 * @return {String}
6564 */
6565exports.toChecksumAddress = function (address) {
6566 address = exports.stripHexPrefix(address).toLowerCase()
6567 var hash = exports.sha3(address).toString('hex')
6568 var ret = '0x'
6569
6570 for (var i = 0; i < address.length; i++) {
6571 if (parseInt(hash[i], 16) >= 8) {
6572 ret += address[i].toUpperCase()
6573 } else {
6574 ret += address[i]
6575 }
6576 }
6577
6578 return ret
6579}
6580
6581/**
6582 * Checks if the address is a valid checksummed address
6583 * @param {Buffer} address
6584 * @return {Boolean}
6585 */
6586exports.isValidChecksumAddress = function (address) {
6587 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
6588}
6589
6590/**
6591 * Generates an address of a newly created contract
6592 * @param {Buffer} from the address which is creating this new address
6593 * @param {Buffer} nonce the nonce of the from account
6594 * @return {Buffer}
6595 */
6596exports.generateAddress = function (from, nonce) {
6597 from = exports.toBuffer(from)
6598 nonce = new BN(nonce)
6599
6600 if (nonce.isZero()) {
6601 // in RLP we want to encode null in the case of zero nonce
6602 // read the RLP documentation for an answer if you dare
6603 nonce = null
6604 } else {
6605 nonce = Buffer.from(nonce.toArray())
6606 }
6607
6608 // Only take the lower 160bits of the hash
6609 return exports.rlphash([from, nonce]).slice(-20)
6610}
6611
6612/**
6613 * Returns true if the supplied address belongs to a precompiled account
6614 * @param {Buffer|String} address
6615 * @return {Boolean}
6616 */
6617exports.isPrecompiled = function (address) {
6618 var a = exports.unpad(address)
6619 return a.length === 1 && a[0] > 0 && a[0] < 5
6620}
6621
6622/**
6623 * Adds "0x" to a given `String` if it does not already start with "0x"
6624 * @param {String} str
6625 * @return {String}
6626 */
6627exports.addHexPrefix = function (str) {
6628 if (typeof str !== 'string') {
6629 return str
6630 }
6631
6632 return exports.isHexPrefixed(str) ? str : '0x' + str
6633}
6634
6635/**
6636 * Validate ECDSA signature
6637 * @method isValidSignature
6638 * @param {Buffer} v
6639 * @param {Buffer} r
6640 * @param {Buffer} s
6641 * @param {Boolean} [homestead=true]
6642 * @return {Boolean}
6643 */
6644
6645exports.isValidSignature = function (v, r, s, homestead) {
6646 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
6647 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
6648
6649 if (r.length !== 32 || s.length !== 32) {
6650 return false
6651 }
6652
6653 if (v !== 27 && v !== 28) {
6654 return false
6655 }
6656
6657 r = new BN(r)
6658 s = new BN(s)
6659
6660 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
6661 return false
6662 }
6663
6664 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
6665 return false
6666 }
6667
6668 return true
6669}
6670
6671/**
6672 * Converts a `Buffer` or `Array` to JSON
6673 * @param {Buffer|Array} ba
6674 * @return {Array|String|null}
6675 */
6676exports.baToJSON = function (ba) {
6677 if (Buffer.isBuffer(ba)) {
6678 return '0x' + ba.toString('hex')
6679 } else if (ba instanceof Array) {
6680 var array = []
6681 for (var i = 0; i < ba.length; i++) {
6682 array.push(exports.baToJSON(ba[i]))
6683 }
6684 return array
6685 }
6686}
6687
6688/**
6689 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
6690 * @param {Object} self the `Object` to define properties on
6691 * @param {Array} fields an array fields to define. Fields can contain:
6692 * * `name` - the name of the properties
6693 * * `length` - the number of bytes the field can have
6694 * * `allowLess` - if the field can be less than the length
6695 * * `allowEmpty`
6696 * @param {*} data data to be validated against the definitions
6697 */
6698exports.defineProperties = function (self, fields, data) {
6699 self.raw = []
6700 self._fields = []
6701
6702 // attach the `toJSON`
6703 self.toJSON = function (label) {
6704 if (label) {
6705 var obj = {}
6706 self._fields.forEach(function (field) {
6707 obj[field] = '0x' + self[field].toString('hex')
6708 })
6709 return obj
6710 }
6711 return exports.baToJSON(this.raw)
6712 }
6713
6714 self.serialize = function serialize () {
6715 return rlp.encode(self.raw)
6716 }
6717
6718 fields.forEach(function (field, i) {
6719 self._fields.push(field.name)
6720 function getter () {
6721 return self.raw[i]
6722 }
6723 function setter (v) {
6724 v = exports.toBuffer(v)
6725
6726 if (v.toString('hex') === '00' && !field.allowZero) {
6727 v = Buffer.allocUnsafe(0)
6728 }
6729
6730 if (field.allowLess && field.length) {
6731 v = exports.stripZeros(v)
6732 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
6733 } else if (!(field.allowZero && v.length === 0) && field.length) {
6734 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
6735 }
6736
6737 self.raw[i] = v
6738 }
6739
6740 Object.defineProperty(self, field.name, {
6741 enumerable: true,
6742 configurable: true,
6743 get: getter,
6744 set: setter
6745 })
6746
6747 if (field.default) {
6748 self[field.name] = field.default
6749 }
6750
6751 // attach alias
6752 if (field.alias) {
6753 Object.defineProperty(self, field.alias, {
6754 enumerable: false,
6755 configurable: true,
6756 set: setter,
6757 get: getter
6758 })
6759 }
6760 })
6761
6762 // if the constuctor is passed data
6763 if (data) {
6764 if (typeof data === 'string') {
6765 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
6766 }
6767
6768 if (Buffer.isBuffer(data)) {
6769 data = rlp.decode(data)
6770 }
6771
6772 if (Array.isArray(data)) {
6773 if (data.length > self._fields.length) {
6774 throw (new Error('wrong number of fields in data'))
6775 }
6776
6777 // make sure all the items are buffers
6778 data.forEach(function (d, i) {
6779 self[self._fields[i]] = exports.toBuffer(d)
6780 })
6781 } else if (typeof data === 'object') {
6782 const keys = Object.keys(data)
6783 fields.forEach(function (field) {
6784 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
6785 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
6786 })
6787 } else {
6788 throw new Error('invalid data')
6789 }
6790 }
6791}
6792
6793}).call(this,require("buffer").Buffer)
6794},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
6795(function (Buffer){
6796// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
6797// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
6798// NOTE: SIGHASH byte ignored AND restricted, truncate before use
6799
6800function check (buffer) {
6801 if (buffer.length < 8) return false
6802 if (buffer.length > 72) return false
6803 if (buffer[0] !== 0x30) return false
6804 if (buffer[1] !== buffer.length - 2) return false
6805 if (buffer[2] !== 0x02) return false
6806
6807 var lenR = buffer[3]
6808 if (lenR === 0) return false
6809 if (5 + lenR >= buffer.length) return false
6810 if (buffer[4 + lenR] !== 0x02) return false
6811
6812 var lenS = buffer[5 + lenR]
6813 if (lenS === 0) return false
6814 if ((6 + lenR + lenS) !== buffer.length) return false
6815
6816 if (buffer[4] & 0x80) return false
6817 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
6818
6819 if (buffer[lenR + 6] & 0x80) return false
6820 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
6821 return true
6822}
6823
6824function decode (buffer) {
6825 if (buffer.length < 8) throw new Error('DER sequence length is too short')
6826 if (buffer.length > 72) throw new Error('DER sequence length is too long')
6827 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
6828 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
6829 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
6830
6831 var lenR = buffer[3]
6832 if (lenR === 0) throw new Error('R length is zero')
6833 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
6834 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
6835
6836 var lenS = buffer[5 + lenR]
6837 if (lenS === 0) throw new Error('S length is zero')
6838 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
6839
6840 if (buffer[4] & 0x80) throw new Error('R value is negative')
6841 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
6842
6843 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
6844 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
6845
6846 // non-BIP66 - extract R, S values
6847 return {
6848 r: buffer.slice(4, 4 + lenR),
6849 s: buffer.slice(6 + lenR)
6850 }
6851}
6852
6853/*
6854 * Expects r and s to be positive DER integers.
6855 *
6856 * The DER format uses the most significant bit as a sign bit (& 0x80).
6857 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
6858 *
6859 * Examples:
6860 *
6861 * 0 => 0x00
6862 * 1 => 0x01
6863 * -1 => 0xff
6864 * 127 => 0x7f
6865 * -127 => 0x81
6866 * 128 => 0x0080
6867 * -128 => 0x80
6868 * 255 => 0x00ff
6869 * -255 => 0xff01
6870 * 16300 => 0x3fac
6871 * -16300 => 0xc054
6872 * 62300 => 0x00f35c
6873 * -62300 => 0xff0ca4
6874*/
6875function encode (r, s) {
6876 var lenR = r.length
6877 var lenS = s.length
6878 if (lenR === 0) throw new Error('R length is zero')
6879 if (lenS === 0) throw new Error('S length is zero')
6880 if (lenR > 33) throw new Error('R length is too long')
6881 if (lenS > 33) throw new Error('S length is too long')
6882 if (r[0] & 0x80) throw new Error('R value is negative')
6883 if (s[0] & 0x80) throw new Error('S value is negative')
6884 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
6885 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
6886
6887 var signature = new Buffer(6 + lenR + lenS)
6888
6889 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
6890 signature[0] = 0x30
6891 signature[1] = signature.length - 2
6892 signature[2] = 0x02
6893 signature[3] = r.length
6894 r.copy(signature, 4)
6895 signature[4 + lenR] = 0x02
6896 signature[5 + lenR] = s.length
6897 s.copy(signature, 6 + lenR)
6898
6899 return signature
6900}
6901
6902module.exports = {
6903 check: check,
6904 decode: decode,
6905 encode: encode
6906}
6907
6908}).call(this,require("buffer").Buffer)
6909},{"buffer":5}],33:[function(require,module,exports){
6910(function (module, exports) {
6911 'use strict';
6912
6913 // Utils
6914 function assert (val, msg) {
6915 if (!val) throw new Error(msg || 'Assertion failed');
6916 }
6917
6918 // Could use `inherits` module, but don't want to move from single file
6919 // architecture yet.
6920 function inherits (ctor, superCtor) {
6921 ctor.super_ = superCtor;
6922 var TempCtor = function () {};
6923 TempCtor.prototype = superCtor.prototype;
6924 ctor.prototype = new TempCtor();
6925 ctor.prototype.constructor = ctor;
6926 }
6927
6928 // BN
6929
6930 function BN (number, base, endian) {
6931 if (BN.isBN(number)) {
6932 return number;
6933 }
6934
6935 this.negative = 0;
6936 this.words = null;
6937 this.length = 0;
6938
6939 // Reduction context
6940 this.red = null;
6941
6942 if (number !== null) {
6943 if (base === 'le' || base === 'be') {
6944 endian = base;
6945 base = 10;
6946 }
6947
6948 this._init(number || 0, base || 10, endian || 'be');
6949 }
6950 }
6951 if (typeof module === 'object') {
6952 module.exports = BN;
6953 } else {
6954 exports.BN = BN;
6955 }
6956
6957 BN.BN = BN;
6958 BN.wordSize = 26;
6959
6960 var Buffer;
6961 try {
6962 Buffer = require('buf' + 'fer').Buffer;
6963 } catch (e) {
6964 }
6965
6966 BN.isBN = function isBN (num) {
6967 if (num instanceof BN) {
6968 return true;
6969 }
6970
6971 return num !== null && typeof num === 'object' &&
6972 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
6973 };
6974
6975 BN.max = function max (left, right) {
6976 if (left.cmp(right) > 0) return left;
6977 return right;
6978 };
6979
6980 BN.min = function min (left, right) {
6981 if (left.cmp(right) < 0) return left;
6982 return right;
6983 };
6984
6985 BN.prototype._init = function init (number, base, endian) {
6986 if (typeof number === 'number') {
6987 return this._initNumber(number, base, endian);
6988 }
6989
6990 if (typeof number === 'object') {
6991 return this._initArray(number, base, endian);
6992 }
6993
6994 if (base === 'hex') {
6995 base = 16;
6996 }
6997 assert(base === (base | 0) && base >= 2 && base <= 36);
6998
6999 number = number.toString().replace(/\s+/g, '');
7000 var start = 0;
7001 if (number[0] === '-') {
7002 start++;
7003 }
7004
7005 if (base === 16) {
7006 this._parseHex(number, start);
7007 } else {
7008 this._parseBase(number, base, start);
7009 }
7010
7011 if (number[0] === '-') {
7012 this.negative = 1;
7013 }
7014
7015 this.strip();
7016
7017 if (endian !== 'le') return;
7018
7019 this._initArray(this.toArray(), base, endian);
7020 };
7021
7022 BN.prototype._initNumber = function _initNumber (number, base, endian) {
7023 if (number < 0) {
7024 this.negative = 1;
7025 number = -number;
7026 }
7027 if (number < 0x4000000) {
7028 this.words = [ number & 0x3ffffff ];
7029 this.length = 1;
7030 } else if (number < 0x10000000000000) {
7031 this.words = [
7032 number & 0x3ffffff,
7033 (number / 0x4000000) & 0x3ffffff
7034 ];
7035 this.length = 2;
7036 } else {
7037 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
7038 this.words = [
7039 number & 0x3ffffff,
7040 (number / 0x4000000) & 0x3ffffff,
7041 1
7042 ];
7043 this.length = 3;
7044 }
7045
7046 if (endian !== 'le') return;
7047
7048 // Reverse the bytes
7049 this._initArray(this.toArray(), base, endian);
7050 };
7051
7052 BN.prototype._initArray = function _initArray (number, base, endian) {
7053 // Perhaps a Uint8Array
7054 assert(typeof number.length === 'number');
7055 if (number.length <= 0) {
7056 this.words = [ 0 ];
7057 this.length = 1;
7058 return this;
7059 }
7060
7061 this.length = Math.ceil(number.length / 3);
7062 this.words = new Array(this.length);
7063 for (var i = 0; i < this.length; i++) {
7064 this.words[i] = 0;
7065 }
7066
7067 var j, w;
7068 var off = 0;
7069 if (endian === 'be') {
7070 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
7071 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
7072 this.words[j] |= (w << off) & 0x3ffffff;
7073 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
7074 off += 24;
7075 if (off >= 26) {
7076 off -= 26;
7077 j++;
7078 }
7079 }
7080 } else if (endian === 'le') {
7081 for (i = 0, j = 0; i < number.length; i += 3) {
7082 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
7083 this.words[j] |= (w << off) & 0x3ffffff;
7084 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
7085 off += 24;
7086 if (off >= 26) {
7087 off -= 26;
7088 j++;
7089 }
7090 }
7091 }
7092 return this.strip();
7093 };
7094
7095 function parseHex (str, start, end) {
7096 var r = 0;
7097 var len = Math.min(str.length, end);
7098 for (var i = start; i < len; i++) {
7099 var c = str.charCodeAt(i) - 48;
7100
7101 r <<= 4;
7102
7103 // 'a' - 'f'
7104 if (c >= 49 && c <= 54) {
7105 r |= c - 49 + 0xa;
7106
7107 // 'A' - 'F'
7108 } else if (c >= 17 && c <= 22) {
7109 r |= c - 17 + 0xa;
7110
7111 // '0' - '9'
7112 } else {
7113 r |= c & 0xf;
7114 }
7115 }
7116 return r;
7117 }
7118
7119 BN.prototype._parseHex = function _parseHex (number, start) {
7120 // Create possibly bigger array to ensure that it fits the number
7121 this.length = Math.ceil((number.length - start) / 6);
7122 this.words = new Array(this.length);
7123 for (var i = 0; i < this.length; i++) {
7124 this.words[i] = 0;
7125 }
7126
7127 var j, w;
7128 // Scan 24-bit chunks and add them to the number
7129 var off = 0;
7130 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
7131 w = parseHex(number, i, i + 6);
7132 this.words[j] |= (w << off) & 0x3ffffff;
7133 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
7134 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
7135 off += 24;
7136 if (off >= 26) {
7137 off -= 26;
7138 j++;
7139 }
7140 }
7141 if (i + 6 !== start) {
7142 w = parseHex(number, start, i + 6);
7143 this.words[j] |= (w << off) & 0x3ffffff;
7144 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
7145 }
7146 this.strip();
7147 };
7148
7149 function parseBase (str, start, end, mul) {
7150 var r = 0;
7151 var len = Math.min(str.length, end);
7152 for (var i = start; i < len; i++) {
7153 var c = str.charCodeAt(i) - 48;
7154
7155 r *= mul;
7156
7157 // 'a'
7158 if (c >= 49) {
7159 r += c - 49 + 0xa;
7160
7161 // 'A'
7162 } else if (c >= 17) {
7163 r += c - 17 + 0xa;
7164
7165 // '0' - '9'
7166 } else {
7167 r += c;
7168 }
7169 }
7170 return r;
7171 }
7172
7173 BN.prototype._parseBase = function _parseBase (number, base, start) {
7174 // Initialize as zero
7175 this.words = [ 0 ];
7176 this.length = 1;
7177
7178 // Find length of limb in base
7179 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
7180 limbLen++;
7181 }
7182 limbLen--;
7183 limbPow = (limbPow / base) | 0;
7184
7185 var total = number.length - start;
7186 var mod = total % limbLen;
7187 var end = Math.min(total, total - mod) + start;
7188
7189 var word = 0;
7190 for (var i = start; i < end; i += limbLen) {
7191 word = parseBase(number, i, i + limbLen, base);
7192
7193 this.imuln(limbPow);
7194 if (this.words[0] + word < 0x4000000) {
7195 this.words[0] += word;
7196 } else {
7197 this._iaddn(word);
7198 }
7199 }
7200
7201 if (mod !== 0) {
7202 var pow = 1;
7203 word = parseBase(number, i, number.length, base);
7204
7205 for (i = 0; i < mod; i++) {
7206 pow *= base;
7207 }
7208
7209 this.imuln(pow);
7210 if (this.words[0] + word < 0x4000000) {
7211 this.words[0] += word;
7212 } else {
7213 this._iaddn(word);
7214 }
7215 }
7216 };
7217
7218 BN.prototype.copy = function copy (dest) {
7219 dest.words = new Array(this.length);
7220 for (var i = 0; i < this.length; i++) {
7221 dest.words[i] = this.words[i];
7222 }
7223 dest.length = this.length;
7224 dest.negative = this.negative;
7225 dest.red = this.red;
7226 };
7227
7228 BN.prototype.clone = function clone () {
7229 var r = new BN(null);
7230 this.copy(r);
7231 return r;
7232 };
7233
7234 BN.prototype._expand = function _expand (size) {
7235 while (this.length < size) {
7236 this.words[this.length++] = 0;
7237 }
7238 return this;
7239 };
7240
7241 // Remove leading `0` from `this`
7242 BN.prototype.strip = function strip () {
7243 while (this.length > 1 && this.words[this.length - 1] === 0) {
7244 this.length--;
7245 }
7246 return this._normSign();
7247 };
7248
7249 BN.prototype._normSign = function _normSign () {
7250 // -0 = 0
7251 if (this.length === 1 && this.words[0] === 0) {
7252 this.negative = 0;
7253 }
7254 return this;
7255 };
7256
7257 BN.prototype.inspect = function inspect () {
7258 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
7259 };
7260
7261 /*
7262
7263 var zeros = [];
7264 var groupSizes = [];
7265 var groupBases = [];
7266
7267 var s = '';
7268 var i = -1;
7269 while (++i < BN.wordSize) {
7270 zeros[i] = s;
7271 s += '0';
7272 }
7273 groupSizes[0] = 0;
7274 groupSizes[1] = 0;
7275 groupBases[0] = 0;
7276 groupBases[1] = 0;
7277 var base = 2 - 1;
7278 while (++base < 36 + 1) {
7279 var groupSize = 0;
7280 var groupBase = 1;
7281 while (groupBase < (1 << BN.wordSize) / base) {
7282 groupBase *= base;
7283 groupSize += 1;
7284 }
7285 groupSizes[base] = groupSize;
7286 groupBases[base] = groupBase;
7287 }
7288
7289 */
7290
7291 var zeros = [
7292 '',
7293 '0',
7294 '00',
7295 '000',
7296 '0000',
7297 '00000',
7298 '000000',
7299 '0000000',
7300 '00000000',
7301 '000000000',
7302 '0000000000',
7303 '00000000000',
7304 '000000000000',
7305 '0000000000000',
7306 '00000000000000',
7307 '000000000000000',
7308 '0000000000000000',
7309 '00000000000000000',
7310 '000000000000000000',
7311 '0000000000000000000',
7312 '00000000000000000000',
7313 '000000000000000000000',
7314 '0000000000000000000000',
7315 '00000000000000000000000',
7316 '000000000000000000000000',
7317 '0000000000000000000000000'
7318 ];
7319
7320 var groupSizes = [
7321 0, 0,
7322 25, 16, 12, 11, 10, 9, 8,
7323 8, 7, 7, 7, 7, 6, 6,
7324 6, 6, 6, 6, 6, 5, 5,
7325 5, 5, 5, 5, 5, 5, 5,
7326 5, 5, 5, 5, 5, 5, 5
7327 ];
7328
7329 var groupBases = [
7330 0, 0,
7331 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
7332 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
7333 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
7334 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
7335 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
7336 ];
7337
7338 BN.prototype.toString = function toString (base, padding) {
7339 base = base || 10;
7340 padding = padding | 0 || 1;
7341
7342 var out;
7343 if (base === 16 || base === 'hex') {
7344 out = '';
7345 var off = 0;
7346 var carry = 0;
7347 for (var i = 0; i < this.length; i++) {
7348 var w = this.words[i];
7349 var word = (((w << off) | carry) & 0xffffff).toString(16);
7350 carry = (w >>> (24 - off)) & 0xffffff;
7351 if (carry !== 0 || i !== this.length - 1) {
7352 out = zeros[6 - word.length] + word + out;
7353 } else {
7354 out = word + out;
7355 }
7356 off += 2;
7357 if (off >= 26) {
7358 off -= 26;
7359 i--;
7360 }
7361 }
7362 if (carry !== 0) {
7363 out = carry.toString(16) + out;
7364 }
7365 while (out.length % padding !== 0) {
7366 out = '0' + out;
7367 }
7368 if (this.negative !== 0) {
7369 out = '-' + out;
7370 }
7371 return out;
7372 }
7373
7374 if (base === (base | 0) && base >= 2 && base <= 36) {
7375 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
7376 var groupSize = groupSizes[base];
7377 // var groupBase = Math.pow(base, groupSize);
7378 var groupBase = groupBases[base];
7379 out = '';
7380 var c = this.clone();
7381 c.negative = 0;
7382 while (!c.isZero()) {
7383 var r = c.modn(groupBase).toString(base);
7384 c = c.idivn(groupBase);
7385
7386 if (!c.isZero()) {
7387 out = zeros[groupSize - r.length] + r + out;
7388 } else {
7389 out = r + out;
7390 }
7391 }
7392 if (this.isZero()) {
7393 out = '0' + out;
7394 }
7395 while (out.length % padding !== 0) {
7396 out = '0' + out;
7397 }
7398 if (this.negative !== 0) {
7399 out = '-' + out;
7400 }
7401 return out;
7402 }
7403
7404 assert(false, 'Base should be between 2 and 36');
7405 };
7406
7407 BN.prototype.toNumber = function toNumber () {
7408 var ret = this.words[0];
7409 if (this.length === 2) {
7410 ret += this.words[1] * 0x4000000;
7411 } else if (this.length === 3 && this.words[2] === 0x01) {
7412 // NOTE: at this stage it is known that the top bit is set
7413 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
7414 } else if (this.length > 2) {
7415 assert(false, 'Number can only safely store up to 53 bits');
7416 }
7417 return (this.negative !== 0) ? -ret : ret;
7418 };
7419
7420 BN.prototype.toJSON = function toJSON () {
7421 return this.toString(16);
7422 };
7423
7424 BN.prototype.toBuffer = function toBuffer (endian, length) {
7425 assert(typeof Buffer !== 'undefined');
7426 return this.toArrayLike(Buffer, endian, length);
7427 };
7428
7429 BN.prototype.toArray = function toArray (endian, length) {
7430 return this.toArrayLike(Array, endian, length);
7431 };
7432
7433 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
7434 var byteLength = this.byteLength();
7435 var reqLength = length || Math.max(1, byteLength);
7436 assert(byteLength <= reqLength, 'byte array longer than desired length');
7437 assert(reqLength > 0, 'Requested array length <= 0');
7438
7439 this.strip();
7440 var littleEndian = endian === 'le';
7441 var res = new ArrayType(reqLength);
7442
7443 var b, i;
7444 var q = this.clone();
7445 if (!littleEndian) {
7446 // Assume big-endian
7447 for (i = 0; i < reqLength - byteLength; i++) {
7448 res[i] = 0;
7449 }
7450
7451 for (i = 0; !q.isZero(); i++) {
7452 b = q.andln(0xff);
7453 q.iushrn(8);
7454
7455 res[reqLength - i - 1] = b;
7456 }
7457 } else {
7458 for (i = 0; !q.isZero(); i++) {
7459 b = q.andln(0xff);
7460 q.iushrn(8);
7461
7462 res[i] = b;
7463 }
7464
7465 for (; i < reqLength; i++) {
7466 res[i] = 0;
7467 }
7468 }
7469
7470 return res;
7471 };
7472
7473 if (Math.clz32) {
7474 BN.prototype._countBits = function _countBits (w) {
7475 return 32 - Math.clz32(w);
7476 };
7477 } else {
7478 BN.prototype._countBits = function _countBits (w) {
7479 var t = w;
7480 var r = 0;
7481 if (t >= 0x1000) {
7482 r += 13;
7483 t >>>= 13;
7484 }
7485 if (t >= 0x40) {
7486 r += 7;
7487 t >>>= 7;
7488 }
7489 if (t >= 0x8) {
7490 r += 4;
7491 t >>>= 4;
7492 }
7493 if (t >= 0x02) {
7494 r += 2;
7495 t >>>= 2;
7496 }
7497 return r + t;
7498 };
7499 }
7500
7501 BN.prototype._zeroBits = function _zeroBits (w) {
7502 // Short-cut
7503 if (w === 0) return 26;
7504
7505 var t = w;
7506 var r = 0;
7507 if ((t & 0x1fff) === 0) {
7508 r += 13;
7509 t >>>= 13;
7510 }
7511 if ((t & 0x7f) === 0) {
7512 r += 7;
7513 t >>>= 7;
7514 }
7515 if ((t & 0xf) === 0) {
7516 r += 4;
7517 t >>>= 4;
7518 }
7519 if ((t & 0x3) === 0) {
7520 r += 2;
7521 t >>>= 2;
7522 }
7523 if ((t & 0x1) === 0) {
7524 r++;
7525 }
7526 return r;
7527 };
7528
7529 // Return number of used bits in a BN
7530 BN.prototype.bitLength = function bitLength () {
7531 var w = this.words[this.length - 1];
7532 var hi = this._countBits(w);
7533 return (this.length - 1) * 26 + hi;
7534 };
7535
7536 function toBitArray (num) {
7537 var w = new Array(num.bitLength());
7538
7539 for (var bit = 0; bit < w.length; bit++) {
7540 var off = (bit / 26) | 0;
7541 var wbit = bit % 26;
7542
7543 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
7544 }
7545
7546 return w;
7547 }
7548
7549 // Number of trailing zero bits
7550 BN.prototype.zeroBits = function zeroBits () {
7551 if (this.isZero()) return 0;
7552
7553 var r = 0;
7554 for (var i = 0; i < this.length; i++) {
7555 var b = this._zeroBits(this.words[i]);
7556 r += b;
7557 if (b !== 26) break;
7558 }
7559 return r;
7560 };
7561
7562 BN.prototype.byteLength = function byteLength () {
7563 return Math.ceil(this.bitLength() / 8);
7564 };
7565
7566 BN.prototype.toTwos = function toTwos (width) {
7567 if (this.negative !== 0) {
7568 return this.abs().inotn(width).iaddn(1);
7569 }
7570 return this.clone();
7571 };
7572
7573 BN.prototype.fromTwos = function fromTwos (width) {
7574 if (this.testn(width - 1)) {
7575 return this.notn(width).iaddn(1).ineg();
7576 }
7577 return this.clone();
7578 };
7579
7580 BN.prototype.isNeg = function isNeg () {
7581 return this.negative !== 0;
7582 };
7583
7584 // Return negative clone of `this`
7585 BN.prototype.neg = function neg () {
7586 return this.clone().ineg();
7587 };
7588
7589 BN.prototype.ineg = function ineg () {
7590 if (!this.isZero()) {
7591 this.negative ^= 1;
7592 }
7593
7594 return this;
7595 };
7596
7597 // Or `num` with `this` in-place
7598 BN.prototype.iuor = function iuor (num) {
7599 while (this.length < num.length) {
7600 this.words[this.length++] = 0;
7601 }
7602
7603 for (var i = 0; i < num.length; i++) {
7604 this.words[i] = this.words[i] | num.words[i];
7605 }
7606
7607 return this.strip();
7608 };
7609
7610 BN.prototype.ior = function ior (num) {
7611 assert((this.negative | num.negative) === 0);
7612 return this.iuor(num);
7613 };
7614
7615 // Or `num` with `this`
7616 BN.prototype.or = function or (num) {
7617 if (this.length > num.length) return this.clone().ior(num);
7618 return num.clone().ior(this);
7619 };
7620
7621 BN.prototype.uor = function uor (num) {
7622 if (this.length > num.length) return this.clone().iuor(num);
7623 return num.clone().iuor(this);
7624 };
7625
7626 // And `num` with `this` in-place
7627 BN.prototype.iuand = function iuand (num) {
7628 // b = min-length(num, this)
7629 var b;
7630 if (this.length > num.length) {
7631 b = num;
7632 } else {
7633 b = this;
7634 }
7635
7636 for (var i = 0; i < b.length; i++) {
7637 this.words[i] = this.words[i] & num.words[i];
7638 }
7639
7640 this.length = b.length;
7641
7642 return this.strip();
7643 };
7644
7645 BN.prototype.iand = function iand (num) {
7646 assert((this.negative | num.negative) === 0);
7647 return this.iuand(num);
7648 };
7649
7650 // And `num` with `this`
7651 BN.prototype.and = function and (num) {
7652 if (this.length > num.length) return this.clone().iand(num);
7653 return num.clone().iand(this);
7654 };
7655
7656 BN.prototype.uand = function uand (num) {
7657 if (this.length > num.length) return this.clone().iuand(num);
7658 return num.clone().iuand(this);
7659 };
7660
7661 // Xor `num` with `this` in-place
7662 BN.prototype.iuxor = function iuxor (num) {
7663 // a.length > b.length
7664 var a;
7665 var b;
7666 if (this.length > num.length) {
7667 a = this;
7668 b = num;
7669 } else {
7670 a = num;
7671 b = this;
7672 }
7673
7674 for (var i = 0; i < b.length; i++) {
7675 this.words[i] = a.words[i] ^ b.words[i];
7676 }
7677
7678 if (this !== a) {
7679 for (; i < a.length; i++) {
7680 this.words[i] = a.words[i];
7681 }
7682 }
7683
7684 this.length = a.length;
7685
7686 return this.strip();
7687 };
7688
7689 BN.prototype.ixor = function ixor (num) {
7690 assert((this.negative | num.negative) === 0);
7691 return this.iuxor(num);
7692 };
7693
7694 // Xor `num` with `this`
7695 BN.prototype.xor = function xor (num) {
7696 if (this.length > num.length) return this.clone().ixor(num);
7697 return num.clone().ixor(this);
7698 };
7699
7700 BN.prototype.uxor = function uxor (num) {
7701 if (this.length > num.length) return this.clone().iuxor(num);
7702 return num.clone().iuxor(this);
7703 };
7704
7705 // Not ``this`` with ``width`` bitwidth
7706 BN.prototype.inotn = function inotn (width) {
7707 assert(typeof width === 'number' && width >= 0);
7708
7709 var bytesNeeded = Math.ceil(width / 26) | 0;
7710 var bitsLeft = width % 26;
7711
7712 // Extend the buffer with leading zeroes
7713 this._expand(bytesNeeded);
7714
7715 if (bitsLeft > 0) {
7716 bytesNeeded--;
7717 }
7718
7719 // Handle complete words
7720 for (var i = 0; i < bytesNeeded; i++) {
7721 this.words[i] = ~this.words[i] & 0x3ffffff;
7722 }
7723
7724 // Handle the residue
7725 if (bitsLeft > 0) {
7726 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
7727 }
7728
7729 // And remove leading zeroes
7730 return this.strip();
7731 };
7732
7733 BN.prototype.notn = function notn (width) {
7734 return this.clone().inotn(width);
7735 };
7736
7737 // Set `bit` of `this`
7738 BN.prototype.setn = function setn (bit, val) {
7739 assert(typeof bit === 'number' && bit >= 0);
7740
7741 var off = (bit / 26) | 0;
7742 var wbit = bit % 26;
7743
7744 this._expand(off + 1);
7745
7746 if (val) {
7747 this.words[off] = this.words[off] | (1 << wbit);
7748 } else {
7749 this.words[off] = this.words[off] & ~(1 << wbit);
7750 }
7751
7752 return this.strip();
7753 };
7754
7755 // Add `num` to `this` in-place
7756 BN.prototype.iadd = function iadd (num) {
7757 var r;
7758
7759 // negative + positive
7760 if (this.negative !== 0 && num.negative === 0) {
7761 this.negative = 0;
7762 r = this.isub(num);
7763 this.negative ^= 1;
7764 return this._normSign();
7765
7766 // positive + negative
7767 } else if (this.negative === 0 && num.negative !== 0) {
7768 num.negative = 0;
7769 r = this.isub(num);
7770 num.negative = 1;
7771 return r._normSign();
7772 }
7773
7774 // a.length > b.length
7775 var a, b;
7776 if (this.length > num.length) {
7777 a = this;
7778 b = num;
7779 } else {
7780 a = num;
7781 b = this;
7782 }
7783
7784 var carry = 0;
7785 for (var i = 0; i < b.length; i++) {
7786 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
7787 this.words[i] = r & 0x3ffffff;
7788 carry = r >>> 26;
7789 }
7790 for (; carry !== 0 && i < a.length; i++) {
7791 r = (a.words[i] | 0) + carry;
7792 this.words[i] = r & 0x3ffffff;
7793 carry = r >>> 26;
7794 }
7795
7796 this.length = a.length;
7797 if (carry !== 0) {
7798 this.words[this.length] = carry;
7799 this.length++;
7800 // Copy the rest of the words
7801 } else if (a !== this) {
7802 for (; i < a.length; i++) {
7803 this.words[i] = a.words[i];
7804 }
7805 }
7806
7807 return this;
7808 };
7809
7810 // Add `num` to `this`
7811 BN.prototype.add = function add (num) {
7812 var res;
7813 if (num.negative !== 0 && this.negative === 0) {
7814 num.negative = 0;
7815 res = this.sub(num);
7816 num.negative ^= 1;
7817 return res;
7818 } else if (num.negative === 0 && this.negative !== 0) {
7819 this.negative = 0;
7820 res = num.sub(this);
7821 this.negative = 1;
7822 return res;
7823 }
7824
7825 if (this.length > num.length) return this.clone().iadd(num);
7826
7827 return num.clone().iadd(this);
7828 };
7829
7830 // Subtract `num` from `this` in-place
7831 BN.prototype.isub = function isub (num) {
7832 // this - (-num) = this + num
7833 if (num.negative !== 0) {
7834 num.negative = 0;
7835 var r = this.iadd(num);
7836 num.negative = 1;
7837 return r._normSign();
7838
7839 // -this - num = -(this + num)
7840 } else if (this.negative !== 0) {
7841 this.negative = 0;
7842 this.iadd(num);
7843 this.negative = 1;
7844 return this._normSign();
7845 }
7846
7847 // At this point both numbers are positive
7848 var cmp = this.cmp(num);
7849
7850 // Optimization - zeroify
7851 if (cmp === 0) {
7852 this.negative = 0;
7853 this.length = 1;
7854 this.words[0] = 0;
7855 return this;
7856 }
7857
7858 // a > b
7859 var a, b;
7860 if (cmp > 0) {
7861 a = this;
7862 b = num;
7863 } else {
7864 a = num;
7865 b = this;
7866 }
7867
7868 var carry = 0;
7869 for (var i = 0; i < b.length; i++) {
7870 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
7871 carry = r >> 26;
7872 this.words[i] = r & 0x3ffffff;
7873 }
7874 for (; carry !== 0 && i < a.length; i++) {
7875 r = (a.words[i] | 0) + carry;
7876 carry = r >> 26;
7877 this.words[i] = r & 0x3ffffff;
7878 }
7879
7880 // Copy rest of the words
7881 if (carry === 0 && i < a.length && a !== this) {
7882 for (; i < a.length; i++) {
7883 this.words[i] = a.words[i];
7884 }
7885 }
7886
7887 this.length = Math.max(this.length, i);
7888
7889 if (a !== this) {
7890 this.negative = 1;
7891 }
7892
7893 return this.strip();
7894 };
7895
7896 // Subtract `num` from `this`
7897 BN.prototype.sub = function sub (num) {
7898 return this.clone().isub(num);
7899 };
7900
7901 function smallMulTo (self, num, out) {
7902 out.negative = num.negative ^ self.negative;
7903 var len = (self.length + num.length) | 0;
7904 out.length = len;
7905 len = (len - 1) | 0;
7906
7907 // Peel one iteration (compiler can't do it, because of code complexity)
7908 var a = self.words[0] | 0;
7909 var b = num.words[0] | 0;
7910 var r = a * b;
7911
7912 var lo = r & 0x3ffffff;
7913 var carry = (r / 0x4000000) | 0;
7914 out.words[0] = lo;
7915
7916 for (var k = 1; k < len; k++) {
7917 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
7918 // note that ncarry could be >= 0x3ffffff
7919 var ncarry = carry >>> 26;
7920 var rword = carry & 0x3ffffff;
7921 var maxJ = Math.min(k, num.length - 1);
7922 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
7923 var i = (k - j) | 0;
7924 a = self.words[i] | 0;
7925 b = num.words[j] | 0;
7926 r = a * b + rword;
7927 ncarry += (r / 0x4000000) | 0;
7928 rword = r & 0x3ffffff;
7929 }
7930 out.words[k] = rword | 0;
7931 carry = ncarry | 0;
7932 }
7933 if (carry !== 0) {
7934 out.words[k] = carry | 0;
7935 } else {
7936 out.length--;
7937 }
7938
7939 return out.strip();
7940 }
7941
7942 // TODO(indutny): it may be reasonable to omit it for users who don't need
7943 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
7944 // multiplication (like elliptic secp256k1).
7945 var comb10MulTo = function comb10MulTo (self, num, out) {
7946 var a = self.words;
7947 var b = num.words;
7948 var o = out.words;
7949 var c = 0;
7950 var lo;
7951 var mid;
7952 var hi;
7953 var a0 = a[0] | 0;
7954 var al0 = a0 & 0x1fff;
7955 var ah0 = a0 >>> 13;
7956 var a1 = a[1] | 0;
7957 var al1 = a1 & 0x1fff;
7958 var ah1 = a1 >>> 13;
7959 var a2 = a[2] | 0;
7960 var al2 = a2 & 0x1fff;
7961 var ah2 = a2 >>> 13;
7962 var a3 = a[3] | 0;
7963 var al3 = a3 & 0x1fff;
7964 var ah3 = a3 >>> 13;
7965 var a4 = a[4] | 0;
7966 var al4 = a4 & 0x1fff;
7967 var ah4 = a4 >>> 13;
7968 var a5 = a[5] | 0;
7969 var al5 = a5 & 0x1fff;
7970 var ah5 = a5 >>> 13;
7971 var a6 = a[6] | 0;
7972 var al6 = a6 & 0x1fff;
7973 var ah6 = a6 >>> 13;
7974 var a7 = a[7] | 0;
7975 var al7 = a7 & 0x1fff;
7976 var ah7 = a7 >>> 13;
7977 var a8 = a[8] | 0;
7978 var al8 = a8 & 0x1fff;
7979 var ah8 = a8 >>> 13;
7980 var a9 = a[9] | 0;
7981 var al9 = a9 & 0x1fff;
7982 var ah9 = a9 >>> 13;
7983 var b0 = b[0] | 0;
7984 var bl0 = b0 & 0x1fff;
7985 var bh0 = b0 >>> 13;
7986 var b1 = b[1] | 0;
7987 var bl1 = b1 & 0x1fff;
7988 var bh1 = b1 >>> 13;
7989 var b2 = b[2] | 0;
7990 var bl2 = b2 & 0x1fff;
7991 var bh2 = b2 >>> 13;
7992 var b3 = b[3] | 0;
7993 var bl3 = b3 & 0x1fff;
7994 var bh3 = b3 >>> 13;
7995 var b4 = b[4] | 0;
7996 var bl4 = b4 & 0x1fff;
7997 var bh4 = b4 >>> 13;
7998 var b5 = b[5] | 0;
7999 var bl5 = b5 & 0x1fff;
8000 var bh5 = b5 >>> 13;
8001 var b6 = b[6] | 0;
8002 var bl6 = b6 & 0x1fff;
8003 var bh6 = b6 >>> 13;
8004 var b7 = b[7] | 0;
8005 var bl7 = b7 & 0x1fff;
8006 var bh7 = b7 >>> 13;
8007 var b8 = b[8] | 0;
8008 var bl8 = b8 & 0x1fff;
8009 var bh8 = b8 >>> 13;
8010 var b9 = b[9] | 0;
8011 var bl9 = b9 & 0x1fff;
8012 var bh9 = b9 >>> 13;
8013
8014 out.negative = self.negative ^ num.negative;
8015 out.length = 19;
8016 /* k = 0 */
8017 lo = Math.imul(al0, bl0);
8018 mid = Math.imul(al0, bh0);
8019 mid = (mid + Math.imul(ah0, bl0)) | 0;
8020 hi = Math.imul(ah0, bh0);
8021 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8022 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
8023 w0 &= 0x3ffffff;
8024 /* k = 1 */
8025 lo = Math.imul(al1, bl0);
8026 mid = Math.imul(al1, bh0);
8027 mid = (mid + Math.imul(ah1, bl0)) | 0;
8028 hi = Math.imul(ah1, bh0);
8029 lo = (lo + Math.imul(al0, bl1)) | 0;
8030 mid = (mid + Math.imul(al0, bh1)) | 0;
8031 mid = (mid + Math.imul(ah0, bl1)) | 0;
8032 hi = (hi + Math.imul(ah0, bh1)) | 0;
8033 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8034 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
8035 w1 &= 0x3ffffff;
8036 /* k = 2 */
8037 lo = Math.imul(al2, bl0);
8038 mid = Math.imul(al2, bh0);
8039 mid = (mid + Math.imul(ah2, bl0)) | 0;
8040 hi = Math.imul(ah2, bh0);
8041 lo = (lo + Math.imul(al1, bl1)) | 0;
8042 mid = (mid + Math.imul(al1, bh1)) | 0;
8043 mid = (mid + Math.imul(ah1, bl1)) | 0;
8044 hi = (hi + Math.imul(ah1, bh1)) | 0;
8045 lo = (lo + Math.imul(al0, bl2)) | 0;
8046 mid = (mid + Math.imul(al0, bh2)) | 0;
8047 mid = (mid + Math.imul(ah0, bl2)) | 0;
8048 hi = (hi + Math.imul(ah0, bh2)) | 0;
8049 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8050 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
8051 w2 &= 0x3ffffff;
8052 /* k = 3 */
8053 lo = Math.imul(al3, bl0);
8054 mid = Math.imul(al3, bh0);
8055 mid = (mid + Math.imul(ah3, bl0)) | 0;
8056 hi = Math.imul(ah3, bh0);
8057 lo = (lo + Math.imul(al2, bl1)) | 0;
8058 mid = (mid + Math.imul(al2, bh1)) | 0;
8059 mid = (mid + Math.imul(ah2, bl1)) | 0;
8060 hi = (hi + Math.imul(ah2, bh1)) | 0;
8061 lo = (lo + Math.imul(al1, bl2)) | 0;
8062 mid = (mid + Math.imul(al1, bh2)) | 0;
8063 mid = (mid + Math.imul(ah1, bl2)) | 0;
8064 hi = (hi + Math.imul(ah1, bh2)) | 0;
8065 lo = (lo + Math.imul(al0, bl3)) | 0;
8066 mid = (mid + Math.imul(al0, bh3)) | 0;
8067 mid = (mid + Math.imul(ah0, bl3)) | 0;
8068 hi = (hi + Math.imul(ah0, bh3)) | 0;
8069 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8070 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
8071 w3 &= 0x3ffffff;
8072 /* k = 4 */
8073 lo = Math.imul(al4, bl0);
8074 mid = Math.imul(al4, bh0);
8075 mid = (mid + Math.imul(ah4, bl0)) | 0;
8076 hi = Math.imul(ah4, bh0);
8077 lo = (lo + Math.imul(al3, bl1)) | 0;
8078 mid = (mid + Math.imul(al3, bh1)) | 0;
8079 mid = (mid + Math.imul(ah3, bl1)) | 0;
8080 hi = (hi + Math.imul(ah3, bh1)) | 0;
8081 lo = (lo + Math.imul(al2, bl2)) | 0;
8082 mid = (mid + Math.imul(al2, bh2)) | 0;
8083 mid = (mid + Math.imul(ah2, bl2)) | 0;
8084 hi = (hi + Math.imul(ah2, bh2)) | 0;
8085 lo = (lo + Math.imul(al1, bl3)) | 0;
8086 mid = (mid + Math.imul(al1, bh3)) | 0;
8087 mid = (mid + Math.imul(ah1, bl3)) | 0;
8088 hi = (hi + Math.imul(ah1, bh3)) | 0;
8089 lo = (lo + Math.imul(al0, bl4)) | 0;
8090 mid = (mid + Math.imul(al0, bh4)) | 0;
8091 mid = (mid + Math.imul(ah0, bl4)) | 0;
8092 hi = (hi + Math.imul(ah0, bh4)) | 0;
8093 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8094 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
8095 w4 &= 0x3ffffff;
8096 /* k = 5 */
8097 lo = Math.imul(al5, bl0);
8098 mid = Math.imul(al5, bh0);
8099 mid = (mid + Math.imul(ah5, bl0)) | 0;
8100 hi = Math.imul(ah5, bh0);
8101 lo = (lo + Math.imul(al4, bl1)) | 0;
8102 mid = (mid + Math.imul(al4, bh1)) | 0;
8103 mid = (mid + Math.imul(ah4, bl1)) | 0;
8104 hi = (hi + Math.imul(ah4, bh1)) | 0;
8105 lo = (lo + Math.imul(al3, bl2)) | 0;
8106 mid = (mid + Math.imul(al3, bh2)) | 0;
8107 mid = (mid + Math.imul(ah3, bl2)) | 0;
8108 hi = (hi + Math.imul(ah3, bh2)) | 0;
8109 lo = (lo + Math.imul(al2, bl3)) | 0;
8110 mid = (mid + Math.imul(al2, bh3)) | 0;
8111 mid = (mid + Math.imul(ah2, bl3)) | 0;
8112 hi = (hi + Math.imul(ah2, bh3)) | 0;
8113 lo = (lo + Math.imul(al1, bl4)) | 0;
8114 mid = (mid + Math.imul(al1, bh4)) | 0;
8115 mid = (mid + Math.imul(ah1, bl4)) | 0;
8116 hi = (hi + Math.imul(ah1, bh4)) | 0;
8117 lo = (lo + Math.imul(al0, bl5)) | 0;
8118 mid = (mid + Math.imul(al0, bh5)) | 0;
8119 mid = (mid + Math.imul(ah0, bl5)) | 0;
8120 hi = (hi + Math.imul(ah0, bh5)) | 0;
8121 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8122 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
8123 w5 &= 0x3ffffff;
8124 /* k = 6 */
8125 lo = Math.imul(al6, bl0);
8126 mid = Math.imul(al6, bh0);
8127 mid = (mid + Math.imul(ah6, bl0)) | 0;
8128 hi = Math.imul(ah6, bh0);
8129 lo = (lo + Math.imul(al5, bl1)) | 0;
8130 mid = (mid + Math.imul(al5, bh1)) | 0;
8131 mid = (mid + Math.imul(ah5, bl1)) | 0;
8132 hi = (hi + Math.imul(ah5, bh1)) | 0;
8133 lo = (lo + Math.imul(al4, bl2)) | 0;
8134 mid = (mid + Math.imul(al4, bh2)) | 0;
8135 mid = (mid + Math.imul(ah4, bl2)) | 0;
8136 hi = (hi + Math.imul(ah4, bh2)) | 0;
8137 lo = (lo + Math.imul(al3, bl3)) | 0;
8138 mid = (mid + Math.imul(al3, bh3)) | 0;
8139 mid = (mid + Math.imul(ah3, bl3)) | 0;
8140 hi = (hi + Math.imul(ah3, bh3)) | 0;
8141 lo = (lo + Math.imul(al2, bl4)) | 0;
8142 mid = (mid + Math.imul(al2, bh4)) | 0;
8143 mid = (mid + Math.imul(ah2, bl4)) | 0;
8144 hi = (hi + Math.imul(ah2, bh4)) | 0;
8145 lo = (lo + Math.imul(al1, bl5)) | 0;
8146 mid = (mid + Math.imul(al1, bh5)) | 0;
8147 mid = (mid + Math.imul(ah1, bl5)) | 0;
8148 hi = (hi + Math.imul(ah1, bh5)) | 0;
8149 lo = (lo + Math.imul(al0, bl6)) | 0;
8150 mid = (mid + Math.imul(al0, bh6)) | 0;
8151 mid = (mid + Math.imul(ah0, bl6)) | 0;
8152 hi = (hi + Math.imul(ah0, bh6)) | 0;
8153 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8154 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
8155 w6 &= 0x3ffffff;
8156 /* k = 7 */
8157 lo = Math.imul(al7, bl0);
8158 mid = Math.imul(al7, bh0);
8159 mid = (mid + Math.imul(ah7, bl0)) | 0;
8160 hi = Math.imul(ah7, bh0);
8161 lo = (lo + Math.imul(al6, bl1)) | 0;
8162 mid = (mid + Math.imul(al6, bh1)) | 0;
8163 mid = (mid + Math.imul(ah6, bl1)) | 0;
8164 hi = (hi + Math.imul(ah6, bh1)) | 0;
8165 lo = (lo + Math.imul(al5, bl2)) | 0;
8166 mid = (mid + Math.imul(al5, bh2)) | 0;
8167 mid = (mid + Math.imul(ah5, bl2)) | 0;
8168 hi = (hi + Math.imul(ah5, bh2)) | 0;
8169 lo = (lo + Math.imul(al4, bl3)) | 0;
8170 mid = (mid + Math.imul(al4, bh3)) | 0;
8171 mid = (mid + Math.imul(ah4, bl3)) | 0;
8172 hi = (hi + Math.imul(ah4, bh3)) | 0;
8173 lo = (lo + Math.imul(al3, bl4)) | 0;
8174 mid = (mid + Math.imul(al3, bh4)) | 0;
8175 mid = (mid + Math.imul(ah3, bl4)) | 0;
8176 hi = (hi + Math.imul(ah3, bh4)) | 0;
8177 lo = (lo + Math.imul(al2, bl5)) | 0;
8178 mid = (mid + Math.imul(al2, bh5)) | 0;
8179 mid = (mid + Math.imul(ah2, bl5)) | 0;
8180 hi = (hi + Math.imul(ah2, bh5)) | 0;
8181 lo = (lo + Math.imul(al1, bl6)) | 0;
8182 mid = (mid + Math.imul(al1, bh6)) | 0;
8183 mid = (mid + Math.imul(ah1, bl6)) | 0;
8184 hi = (hi + Math.imul(ah1, bh6)) | 0;
8185 lo = (lo + Math.imul(al0, bl7)) | 0;
8186 mid = (mid + Math.imul(al0, bh7)) | 0;
8187 mid = (mid + Math.imul(ah0, bl7)) | 0;
8188 hi = (hi + Math.imul(ah0, bh7)) | 0;
8189 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8190 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
8191 w7 &= 0x3ffffff;
8192 /* k = 8 */
8193 lo = Math.imul(al8, bl0);
8194 mid = Math.imul(al8, bh0);
8195 mid = (mid + Math.imul(ah8, bl0)) | 0;
8196 hi = Math.imul(ah8, bh0);
8197 lo = (lo + Math.imul(al7, bl1)) | 0;
8198 mid = (mid + Math.imul(al7, bh1)) | 0;
8199 mid = (mid + Math.imul(ah7, bl1)) | 0;
8200 hi = (hi + Math.imul(ah7, bh1)) | 0;
8201 lo = (lo + Math.imul(al6, bl2)) | 0;
8202 mid = (mid + Math.imul(al6, bh2)) | 0;
8203 mid = (mid + Math.imul(ah6, bl2)) | 0;
8204 hi = (hi + Math.imul(ah6, bh2)) | 0;
8205 lo = (lo + Math.imul(al5, bl3)) | 0;
8206 mid = (mid + Math.imul(al5, bh3)) | 0;
8207 mid = (mid + Math.imul(ah5, bl3)) | 0;
8208 hi = (hi + Math.imul(ah5, bh3)) | 0;
8209 lo = (lo + Math.imul(al4, bl4)) | 0;
8210 mid = (mid + Math.imul(al4, bh4)) | 0;
8211 mid = (mid + Math.imul(ah4, bl4)) | 0;
8212 hi = (hi + Math.imul(ah4, bh4)) | 0;
8213 lo = (lo + Math.imul(al3, bl5)) | 0;
8214 mid = (mid + Math.imul(al3, bh5)) | 0;
8215 mid = (mid + Math.imul(ah3, bl5)) | 0;
8216 hi = (hi + Math.imul(ah3, bh5)) | 0;
8217 lo = (lo + Math.imul(al2, bl6)) | 0;
8218 mid = (mid + Math.imul(al2, bh6)) | 0;
8219 mid = (mid + Math.imul(ah2, bl6)) | 0;
8220 hi = (hi + Math.imul(ah2, bh6)) | 0;
8221 lo = (lo + Math.imul(al1, bl7)) | 0;
8222 mid = (mid + Math.imul(al1, bh7)) | 0;
8223 mid = (mid + Math.imul(ah1, bl7)) | 0;
8224 hi = (hi + Math.imul(ah1, bh7)) | 0;
8225 lo = (lo + Math.imul(al0, bl8)) | 0;
8226 mid = (mid + Math.imul(al0, bh8)) | 0;
8227 mid = (mid + Math.imul(ah0, bl8)) | 0;
8228 hi = (hi + Math.imul(ah0, bh8)) | 0;
8229 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8230 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
8231 w8 &= 0x3ffffff;
8232 /* k = 9 */
8233 lo = Math.imul(al9, bl0);
8234 mid = Math.imul(al9, bh0);
8235 mid = (mid + Math.imul(ah9, bl0)) | 0;
8236 hi = Math.imul(ah9, bh0);
8237 lo = (lo + Math.imul(al8, bl1)) | 0;
8238 mid = (mid + Math.imul(al8, bh1)) | 0;
8239 mid = (mid + Math.imul(ah8, bl1)) | 0;
8240 hi = (hi + Math.imul(ah8, bh1)) | 0;
8241 lo = (lo + Math.imul(al7, bl2)) | 0;
8242 mid = (mid + Math.imul(al7, bh2)) | 0;
8243 mid = (mid + Math.imul(ah7, bl2)) | 0;
8244 hi = (hi + Math.imul(ah7, bh2)) | 0;
8245 lo = (lo + Math.imul(al6, bl3)) | 0;
8246 mid = (mid + Math.imul(al6, bh3)) | 0;
8247 mid = (mid + Math.imul(ah6, bl3)) | 0;
8248 hi = (hi + Math.imul(ah6, bh3)) | 0;
8249 lo = (lo + Math.imul(al5, bl4)) | 0;
8250 mid = (mid + Math.imul(al5, bh4)) | 0;
8251 mid = (mid + Math.imul(ah5, bl4)) | 0;
8252 hi = (hi + Math.imul(ah5, bh4)) | 0;
8253 lo = (lo + Math.imul(al4, bl5)) | 0;
8254 mid = (mid + Math.imul(al4, bh5)) | 0;
8255 mid = (mid + Math.imul(ah4, bl5)) | 0;
8256 hi = (hi + Math.imul(ah4, bh5)) | 0;
8257 lo = (lo + Math.imul(al3, bl6)) | 0;
8258 mid = (mid + Math.imul(al3, bh6)) | 0;
8259 mid = (mid + Math.imul(ah3, bl6)) | 0;
8260 hi = (hi + Math.imul(ah3, bh6)) | 0;
8261 lo = (lo + Math.imul(al2, bl7)) | 0;
8262 mid = (mid + Math.imul(al2, bh7)) | 0;
8263 mid = (mid + Math.imul(ah2, bl7)) | 0;
8264 hi = (hi + Math.imul(ah2, bh7)) | 0;
8265 lo = (lo + Math.imul(al1, bl8)) | 0;
8266 mid = (mid + Math.imul(al1, bh8)) | 0;
8267 mid = (mid + Math.imul(ah1, bl8)) | 0;
8268 hi = (hi + Math.imul(ah1, bh8)) | 0;
8269 lo = (lo + Math.imul(al0, bl9)) | 0;
8270 mid = (mid + Math.imul(al0, bh9)) | 0;
8271 mid = (mid + Math.imul(ah0, bl9)) | 0;
8272 hi = (hi + Math.imul(ah0, bh9)) | 0;
8273 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8274 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
8275 w9 &= 0x3ffffff;
8276 /* k = 10 */
8277 lo = Math.imul(al9, bl1);
8278 mid = Math.imul(al9, bh1);
8279 mid = (mid + Math.imul(ah9, bl1)) | 0;
8280 hi = Math.imul(ah9, bh1);
8281 lo = (lo + Math.imul(al8, bl2)) | 0;
8282 mid = (mid + Math.imul(al8, bh2)) | 0;
8283 mid = (mid + Math.imul(ah8, bl2)) | 0;
8284 hi = (hi + Math.imul(ah8, bh2)) | 0;
8285 lo = (lo + Math.imul(al7, bl3)) | 0;
8286 mid = (mid + Math.imul(al7, bh3)) | 0;
8287 mid = (mid + Math.imul(ah7, bl3)) | 0;
8288 hi = (hi + Math.imul(ah7, bh3)) | 0;
8289 lo = (lo + Math.imul(al6, bl4)) | 0;
8290 mid = (mid + Math.imul(al6, bh4)) | 0;
8291 mid = (mid + Math.imul(ah6, bl4)) | 0;
8292 hi = (hi + Math.imul(ah6, bh4)) | 0;
8293 lo = (lo + Math.imul(al5, bl5)) | 0;
8294 mid = (mid + Math.imul(al5, bh5)) | 0;
8295 mid = (mid + Math.imul(ah5, bl5)) | 0;
8296 hi = (hi + Math.imul(ah5, bh5)) | 0;
8297 lo = (lo + Math.imul(al4, bl6)) | 0;
8298 mid = (mid + Math.imul(al4, bh6)) | 0;
8299 mid = (mid + Math.imul(ah4, bl6)) | 0;
8300 hi = (hi + Math.imul(ah4, bh6)) | 0;
8301 lo = (lo + Math.imul(al3, bl7)) | 0;
8302 mid = (mid + Math.imul(al3, bh7)) | 0;
8303 mid = (mid + Math.imul(ah3, bl7)) | 0;
8304 hi = (hi + Math.imul(ah3, bh7)) | 0;
8305 lo = (lo + Math.imul(al2, bl8)) | 0;
8306 mid = (mid + Math.imul(al2, bh8)) | 0;
8307 mid = (mid + Math.imul(ah2, bl8)) | 0;
8308 hi = (hi + Math.imul(ah2, bh8)) | 0;
8309 lo = (lo + Math.imul(al1, bl9)) | 0;
8310 mid = (mid + Math.imul(al1, bh9)) | 0;
8311 mid = (mid + Math.imul(ah1, bl9)) | 0;
8312 hi = (hi + Math.imul(ah1, bh9)) | 0;
8313 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8314 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
8315 w10 &= 0x3ffffff;
8316 /* k = 11 */
8317 lo = Math.imul(al9, bl2);
8318 mid = Math.imul(al9, bh2);
8319 mid = (mid + Math.imul(ah9, bl2)) | 0;
8320 hi = Math.imul(ah9, bh2);
8321 lo = (lo + Math.imul(al8, bl3)) | 0;
8322 mid = (mid + Math.imul(al8, bh3)) | 0;
8323 mid = (mid + Math.imul(ah8, bl3)) | 0;
8324 hi = (hi + Math.imul(ah8, bh3)) | 0;
8325 lo = (lo + Math.imul(al7, bl4)) | 0;
8326 mid = (mid + Math.imul(al7, bh4)) | 0;
8327 mid = (mid + Math.imul(ah7, bl4)) | 0;
8328 hi = (hi + Math.imul(ah7, bh4)) | 0;
8329 lo = (lo + Math.imul(al6, bl5)) | 0;
8330 mid = (mid + Math.imul(al6, bh5)) | 0;
8331 mid = (mid + Math.imul(ah6, bl5)) | 0;
8332 hi = (hi + Math.imul(ah6, bh5)) | 0;
8333 lo = (lo + Math.imul(al5, bl6)) | 0;
8334 mid = (mid + Math.imul(al5, bh6)) | 0;
8335 mid = (mid + Math.imul(ah5, bl6)) | 0;
8336 hi = (hi + Math.imul(ah5, bh6)) | 0;
8337 lo = (lo + Math.imul(al4, bl7)) | 0;
8338 mid = (mid + Math.imul(al4, bh7)) | 0;
8339 mid = (mid + Math.imul(ah4, bl7)) | 0;
8340 hi = (hi + Math.imul(ah4, bh7)) | 0;
8341 lo = (lo + Math.imul(al3, bl8)) | 0;
8342 mid = (mid + Math.imul(al3, bh8)) | 0;
8343 mid = (mid + Math.imul(ah3, bl8)) | 0;
8344 hi = (hi + Math.imul(ah3, bh8)) | 0;
8345 lo = (lo + Math.imul(al2, bl9)) | 0;
8346 mid = (mid + Math.imul(al2, bh9)) | 0;
8347 mid = (mid + Math.imul(ah2, bl9)) | 0;
8348 hi = (hi + Math.imul(ah2, bh9)) | 0;
8349 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8350 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
8351 w11 &= 0x3ffffff;
8352 /* k = 12 */
8353 lo = Math.imul(al9, bl3);
8354 mid = Math.imul(al9, bh3);
8355 mid = (mid + Math.imul(ah9, bl3)) | 0;
8356 hi = Math.imul(ah9, bh3);
8357 lo = (lo + Math.imul(al8, bl4)) | 0;
8358 mid = (mid + Math.imul(al8, bh4)) | 0;
8359 mid = (mid + Math.imul(ah8, bl4)) | 0;
8360 hi = (hi + Math.imul(ah8, bh4)) | 0;
8361 lo = (lo + Math.imul(al7, bl5)) | 0;
8362 mid = (mid + Math.imul(al7, bh5)) | 0;
8363 mid = (mid + Math.imul(ah7, bl5)) | 0;
8364 hi = (hi + Math.imul(ah7, bh5)) | 0;
8365 lo = (lo + Math.imul(al6, bl6)) | 0;
8366 mid = (mid + Math.imul(al6, bh6)) | 0;
8367 mid = (mid + Math.imul(ah6, bl6)) | 0;
8368 hi = (hi + Math.imul(ah6, bh6)) | 0;
8369 lo = (lo + Math.imul(al5, bl7)) | 0;
8370 mid = (mid + Math.imul(al5, bh7)) | 0;
8371 mid = (mid + Math.imul(ah5, bl7)) | 0;
8372 hi = (hi + Math.imul(ah5, bh7)) | 0;
8373 lo = (lo + Math.imul(al4, bl8)) | 0;
8374 mid = (mid + Math.imul(al4, bh8)) | 0;
8375 mid = (mid + Math.imul(ah4, bl8)) | 0;
8376 hi = (hi + Math.imul(ah4, bh8)) | 0;
8377 lo = (lo + Math.imul(al3, bl9)) | 0;
8378 mid = (mid + Math.imul(al3, bh9)) | 0;
8379 mid = (mid + Math.imul(ah3, bl9)) | 0;
8380 hi = (hi + Math.imul(ah3, bh9)) | 0;
8381 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8382 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
8383 w12 &= 0x3ffffff;
8384 /* k = 13 */
8385 lo = Math.imul(al9, bl4);
8386 mid = Math.imul(al9, bh4);
8387 mid = (mid + Math.imul(ah9, bl4)) | 0;
8388 hi = Math.imul(ah9, bh4);
8389 lo = (lo + Math.imul(al8, bl5)) | 0;
8390 mid = (mid + Math.imul(al8, bh5)) | 0;
8391 mid = (mid + Math.imul(ah8, bl5)) | 0;
8392 hi = (hi + Math.imul(ah8, bh5)) | 0;
8393 lo = (lo + Math.imul(al7, bl6)) | 0;
8394 mid = (mid + Math.imul(al7, bh6)) | 0;
8395 mid = (mid + Math.imul(ah7, bl6)) | 0;
8396 hi = (hi + Math.imul(ah7, bh6)) | 0;
8397 lo = (lo + Math.imul(al6, bl7)) | 0;
8398 mid = (mid + Math.imul(al6, bh7)) | 0;
8399 mid = (mid + Math.imul(ah6, bl7)) | 0;
8400 hi = (hi + Math.imul(ah6, bh7)) | 0;
8401 lo = (lo + Math.imul(al5, bl8)) | 0;
8402 mid = (mid + Math.imul(al5, bh8)) | 0;
8403 mid = (mid + Math.imul(ah5, bl8)) | 0;
8404 hi = (hi + Math.imul(ah5, bh8)) | 0;
8405 lo = (lo + Math.imul(al4, bl9)) | 0;
8406 mid = (mid + Math.imul(al4, bh9)) | 0;
8407 mid = (mid + Math.imul(ah4, bl9)) | 0;
8408 hi = (hi + Math.imul(ah4, bh9)) | 0;
8409 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8410 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
8411 w13 &= 0x3ffffff;
8412 /* k = 14 */
8413 lo = Math.imul(al9, bl5);
8414 mid = Math.imul(al9, bh5);
8415 mid = (mid + Math.imul(ah9, bl5)) | 0;
8416 hi = Math.imul(ah9, bh5);
8417 lo = (lo + Math.imul(al8, bl6)) | 0;
8418 mid = (mid + Math.imul(al8, bh6)) | 0;
8419 mid = (mid + Math.imul(ah8, bl6)) | 0;
8420 hi = (hi + Math.imul(ah8, bh6)) | 0;
8421 lo = (lo + Math.imul(al7, bl7)) | 0;
8422 mid = (mid + Math.imul(al7, bh7)) | 0;
8423 mid = (mid + Math.imul(ah7, bl7)) | 0;
8424 hi = (hi + Math.imul(ah7, bh7)) | 0;
8425 lo = (lo + Math.imul(al6, bl8)) | 0;
8426 mid = (mid + Math.imul(al6, bh8)) | 0;
8427 mid = (mid + Math.imul(ah6, bl8)) | 0;
8428 hi = (hi + Math.imul(ah6, bh8)) | 0;
8429 lo = (lo + Math.imul(al5, bl9)) | 0;
8430 mid = (mid + Math.imul(al5, bh9)) | 0;
8431 mid = (mid + Math.imul(ah5, bl9)) | 0;
8432 hi = (hi + Math.imul(ah5, bh9)) | 0;
8433 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8434 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
8435 w14 &= 0x3ffffff;
8436 /* k = 15 */
8437 lo = Math.imul(al9, bl6);
8438 mid = Math.imul(al9, bh6);
8439 mid = (mid + Math.imul(ah9, bl6)) | 0;
8440 hi = Math.imul(ah9, bh6);
8441 lo = (lo + Math.imul(al8, bl7)) | 0;
8442 mid = (mid + Math.imul(al8, bh7)) | 0;
8443 mid = (mid + Math.imul(ah8, bl7)) | 0;
8444 hi = (hi + Math.imul(ah8, bh7)) | 0;
8445 lo = (lo + Math.imul(al7, bl8)) | 0;
8446 mid = (mid + Math.imul(al7, bh8)) | 0;
8447 mid = (mid + Math.imul(ah7, bl8)) | 0;
8448 hi = (hi + Math.imul(ah7, bh8)) | 0;
8449 lo = (lo + Math.imul(al6, bl9)) | 0;
8450 mid = (mid + Math.imul(al6, bh9)) | 0;
8451 mid = (mid + Math.imul(ah6, bl9)) | 0;
8452 hi = (hi + Math.imul(ah6, bh9)) | 0;
8453 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8454 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
8455 w15 &= 0x3ffffff;
8456 /* k = 16 */
8457 lo = Math.imul(al9, bl7);
8458 mid = Math.imul(al9, bh7);
8459 mid = (mid + Math.imul(ah9, bl7)) | 0;
8460 hi = Math.imul(ah9, bh7);
8461 lo = (lo + Math.imul(al8, bl8)) | 0;
8462 mid = (mid + Math.imul(al8, bh8)) | 0;
8463 mid = (mid + Math.imul(ah8, bl8)) | 0;
8464 hi = (hi + Math.imul(ah8, bh8)) | 0;
8465 lo = (lo + Math.imul(al7, bl9)) | 0;
8466 mid = (mid + Math.imul(al7, bh9)) | 0;
8467 mid = (mid + Math.imul(ah7, bl9)) | 0;
8468 hi = (hi + Math.imul(ah7, bh9)) | 0;
8469 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8470 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
8471 w16 &= 0x3ffffff;
8472 /* k = 17 */
8473 lo = Math.imul(al9, bl8);
8474 mid = Math.imul(al9, bh8);
8475 mid = (mid + Math.imul(ah9, bl8)) | 0;
8476 hi = Math.imul(ah9, bh8);
8477 lo = (lo + Math.imul(al8, bl9)) | 0;
8478 mid = (mid + Math.imul(al8, bh9)) | 0;
8479 mid = (mid + Math.imul(ah8, bl9)) | 0;
8480 hi = (hi + Math.imul(ah8, bh9)) | 0;
8481 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8482 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
8483 w17 &= 0x3ffffff;
8484 /* k = 18 */
8485 lo = Math.imul(al9, bl9);
8486 mid = Math.imul(al9, bh9);
8487 mid = (mid + Math.imul(ah9, bl9)) | 0;
8488 hi = Math.imul(ah9, bh9);
8489 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
8490 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
8491 w18 &= 0x3ffffff;
8492 o[0] = w0;
8493 o[1] = w1;
8494 o[2] = w2;
8495 o[3] = w3;
8496 o[4] = w4;
8497 o[5] = w5;
8498 o[6] = w6;
8499 o[7] = w7;
8500 o[8] = w8;
8501 o[9] = w9;
8502 o[10] = w10;
8503 o[11] = w11;
8504 o[12] = w12;
8505 o[13] = w13;
8506 o[14] = w14;
8507 o[15] = w15;
8508 o[16] = w16;
8509 o[17] = w17;
8510 o[18] = w18;
8511 if (c !== 0) {
8512 o[19] = c;
8513 out.length++;
8514 }
8515 return out;
8516 };
8517
8518 // Polyfill comb
8519 if (!Math.imul) {
8520 comb10MulTo = smallMulTo;
8521 }
8522
8523 function bigMulTo (self, num, out) {
8524 out.negative = num.negative ^ self.negative;
8525 out.length = self.length + num.length;
8526
8527 var carry = 0;
8528 var hncarry = 0;
8529 for (var k = 0; k < out.length - 1; k++) {
8530 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
8531 // note that ncarry could be >= 0x3ffffff
8532 var ncarry = hncarry;
8533 hncarry = 0;
8534 var rword = carry & 0x3ffffff;
8535 var maxJ = Math.min(k, num.length - 1);
8536 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
8537 var i = k - j;
8538 var a = self.words[i] | 0;
8539 var b = num.words[j] | 0;
8540 var r = a * b;
8541
8542 var lo = r & 0x3ffffff;
8543 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
8544 lo = (lo + rword) | 0;
8545 rword = lo & 0x3ffffff;
8546 ncarry = (ncarry + (lo >>> 26)) | 0;
8547
8548 hncarry += ncarry >>> 26;
8549 ncarry &= 0x3ffffff;
8550 }
8551 out.words[k] = rword;
8552 carry = ncarry;
8553 ncarry = hncarry;
8554 }
8555 if (carry !== 0) {
8556 out.words[k] = carry;
8557 } else {
8558 out.length--;
8559 }
8560
8561 return out.strip();
8562 }
8563
8564 function jumboMulTo (self, num, out) {
8565 var fftm = new FFTM();
8566 return fftm.mulp(self, num, out);
8567 }
8568
8569 BN.prototype.mulTo = function mulTo (num, out) {
8570 var res;
8571 var len = this.length + num.length;
8572 if (this.length === 10 && num.length === 10) {
8573 res = comb10MulTo(this, num, out);
8574 } else if (len < 63) {
8575 res = smallMulTo(this, num, out);
8576 } else if (len < 1024) {
8577 res = bigMulTo(this, num, out);
8578 } else {
8579 res = jumboMulTo(this, num, out);
8580 }
8581
8582 return res;
8583 };
8584
8585 // Cooley-Tukey algorithm for FFT
8586 // slightly revisited to rely on looping instead of recursion
8587
8588 function FFTM (x, y) {
8589 this.x = x;
8590 this.y = y;
8591 }
8592
8593 FFTM.prototype.makeRBT = function makeRBT (N) {
8594 var t = new Array(N);
8595 var l = BN.prototype._countBits(N) - 1;
8596 for (var i = 0; i < N; i++) {
8597 t[i] = this.revBin(i, l, N);
8598 }
8599
8600 return t;
8601 };
8602
8603 // Returns binary-reversed representation of `x`
8604 FFTM.prototype.revBin = function revBin (x, l, N) {
8605 if (x === 0 || x === N - 1) return x;
8606
8607 var rb = 0;
8608 for (var i = 0; i < l; i++) {
8609 rb |= (x & 1) << (l - i - 1);
8610 x >>= 1;
8611 }
8612
8613 return rb;
8614 };
8615
8616 // Performs "tweedling" phase, therefore 'emulating'
8617 // behaviour of the recursive algorithm
8618 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
8619 for (var i = 0; i < N; i++) {
8620 rtws[i] = rws[rbt[i]];
8621 itws[i] = iws[rbt[i]];
8622 }
8623 };
8624
8625 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
8626 this.permute(rbt, rws, iws, rtws, itws, N);
8627
8628 for (var s = 1; s < N; s <<= 1) {
8629 var l = s << 1;
8630
8631 var rtwdf = Math.cos(2 * Math.PI / l);
8632 var itwdf = Math.sin(2 * Math.PI / l);
8633
8634 for (var p = 0; p < N; p += l) {
8635 var rtwdf_ = rtwdf;
8636 var itwdf_ = itwdf;
8637
8638 for (var j = 0; j < s; j++) {
8639 var re = rtws[p + j];
8640 var ie = itws[p + j];
8641
8642 var ro = rtws[p + j + s];
8643 var io = itws[p + j + s];
8644
8645 var rx = rtwdf_ * ro - itwdf_ * io;
8646
8647 io = rtwdf_ * io + itwdf_ * ro;
8648 ro = rx;
8649
8650 rtws[p + j] = re + ro;
8651 itws[p + j] = ie + io;
8652
8653 rtws[p + j + s] = re - ro;
8654 itws[p + j + s] = ie - io;
8655
8656 /* jshint maxdepth : false */
8657 if (j !== l) {
8658 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
8659
8660 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
8661 rtwdf_ = rx;
8662 }
8663 }
8664 }
8665 }
8666 };
8667
8668 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
8669 var N = Math.max(m, n) | 1;
8670 var odd = N & 1;
8671 var i = 0;
8672 for (N = N / 2 | 0; N; N = N >>> 1) {
8673 i++;
8674 }
8675
8676 return 1 << i + 1 + odd;
8677 };
8678
8679 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
8680 if (N <= 1) return;
8681
8682 for (var i = 0; i < N / 2; i++) {
8683 var t = rws[i];
8684
8685 rws[i] = rws[N - i - 1];
8686 rws[N - i - 1] = t;
8687
8688 t = iws[i];
8689
8690 iws[i] = -iws[N - i - 1];
8691 iws[N - i - 1] = -t;
8692 }
8693 };
8694
8695 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
8696 var carry = 0;
8697 for (var i = 0; i < N / 2; i++) {
8698 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
8699 Math.round(ws[2 * i] / N) +
8700 carry;
8701
8702 ws[i] = w & 0x3ffffff;
8703
8704 if (w < 0x4000000) {
8705 carry = 0;
8706 } else {
8707 carry = w / 0x4000000 | 0;
8708 }
8709 }
8710
8711 return ws;
8712 };
8713
8714 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
8715 var carry = 0;
8716 for (var i = 0; i < len; i++) {
8717 carry = carry + (ws[i] | 0);
8718
8719 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
8720 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
8721 }
8722
8723 // Pad with zeroes
8724 for (i = 2 * len; i < N; ++i) {
8725 rws[i] = 0;
8726 }
8727
8728 assert(carry === 0);
8729 assert((carry & ~0x1fff) === 0);
8730 };
8731
8732 FFTM.prototype.stub = function stub (N) {
8733 var ph = new Array(N);
8734 for (var i = 0; i < N; i++) {
8735 ph[i] = 0;
8736 }
8737
8738 return ph;
8739 };
8740
8741 FFTM.prototype.mulp = function mulp (x, y, out) {
8742 var N = 2 * this.guessLen13b(x.length, y.length);
8743
8744 var rbt = this.makeRBT(N);
8745
8746 var _ = this.stub(N);
8747
8748 var rws = new Array(N);
8749 var rwst = new Array(N);
8750 var iwst = new Array(N);
8751
8752 var nrws = new Array(N);
8753 var nrwst = new Array(N);
8754 var niwst = new Array(N);
8755
8756 var rmws = out.words;
8757 rmws.length = N;
8758
8759 this.convert13b(x.words, x.length, rws, N);
8760 this.convert13b(y.words, y.length, nrws, N);
8761
8762 this.transform(rws, _, rwst, iwst, N, rbt);
8763 this.transform(nrws, _, nrwst, niwst, N, rbt);
8764
8765 for (var i = 0; i < N; i++) {
8766 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
8767 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
8768 rwst[i] = rx;
8769 }
8770
8771 this.conjugate(rwst, iwst, N);
8772 this.transform(rwst, iwst, rmws, _, N, rbt);
8773 this.conjugate(rmws, _, N);
8774 this.normalize13b(rmws, N);
8775
8776 out.negative = x.negative ^ y.negative;
8777 out.length = x.length + y.length;
8778 return out.strip();
8779 };
8780
8781 // Multiply `this` by `num`
8782 BN.prototype.mul = function mul (num) {
8783 var out = new BN(null);
8784 out.words = new Array(this.length + num.length);
8785 return this.mulTo(num, out);
8786 };
8787
8788 // Multiply employing FFT
8789 BN.prototype.mulf = function mulf (num) {
8790 var out = new BN(null);
8791 out.words = new Array(this.length + num.length);
8792 return jumboMulTo(this, num, out);
8793 };
8794
8795 // In-place Multiplication
8796 BN.prototype.imul = function imul (num) {
8797 return this.clone().mulTo(num, this);
8798 };
8799
8800 BN.prototype.imuln = function imuln (num) {
8801 assert(typeof num === 'number');
8802 assert(num < 0x4000000);
8803
8804 // Carry
8805 var carry = 0;
8806 for (var i = 0; i < this.length; i++) {
8807 var w = (this.words[i] | 0) * num;
8808 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
8809 carry >>= 26;
8810 carry += (w / 0x4000000) | 0;
8811 // NOTE: lo is 27bit maximum
8812 carry += lo >>> 26;
8813 this.words[i] = lo & 0x3ffffff;
8814 }
8815
8816 if (carry !== 0) {
8817 this.words[i] = carry;
8818 this.length++;
8819 }
8820
8821 return this;
8822 };
8823
8824 BN.prototype.muln = function muln (num) {
8825 return this.clone().imuln(num);
8826 };
8827
8828 // `this` * `this`
8829 BN.prototype.sqr = function sqr () {
8830 return this.mul(this);
8831 };
8832
8833 // `this` * `this` in-place
8834 BN.prototype.isqr = function isqr () {
8835 return this.imul(this.clone());
8836 };
8837
8838 // Math.pow(`this`, `num`)
8839 BN.prototype.pow = function pow (num) {
8840 var w = toBitArray(num);
8841 if (w.length === 0) return new BN(1);
8842
8843 // Skip leading zeroes
8844 var res = this;
8845 for (var i = 0; i < w.length; i++, res = res.sqr()) {
8846 if (w[i] !== 0) break;
8847 }
8848
8849 if (++i < w.length) {
8850 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
8851 if (w[i] === 0) continue;
8852
8853 res = res.mul(q);
8854 }
8855 }
8856
8857 return res;
8858 };
8859
8860 // Shift-left in-place
8861 BN.prototype.iushln = function iushln (bits) {
8862 assert(typeof bits === 'number' && bits >= 0);
8863 var r = bits % 26;
8864 var s = (bits - r) / 26;
8865 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
8866 var i;
8867
8868 if (r !== 0) {
8869 var carry = 0;
8870
8871 for (i = 0; i < this.length; i++) {
8872 var newCarry = this.words[i] & carryMask;
8873 var c = ((this.words[i] | 0) - newCarry) << r;
8874 this.words[i] = c | carry;
8875 carry = newCarry >>> (26 - r);
8876 }
8877
8878 if (carry) {
8879 this.words[i] = carry;
8880 this.length++;
8881 }
8882 }
8883
8884 if (s !== 0) {
8885 for (i = this.length - 1; i >= 0; i--) {
8886 this.words[i + s] = this.words[i];
8887 }
8888
8889 for (i = 0; i < s; i++) {
8890 this.words[i] = 0;
8891 }
8892
8893 this.length += s;
8894 }
8895
8896 return this.strip();
8897 };
8898
8899 BN.prototype.ishln = function ishln (bits) {
8900 // TODO(indutny): implement me
8901 assert(this.negative === 0);
8902 return this.iushln(bits);
8903 };
8904
8905 // Shift-right in-place
8906 // NOTE: `hint` is a lowest bit before trailing zeroes
8907 // NOTE: if `extended` is present - it will be filled with destroyed bits
8908 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
8909 assert(typeof bits === 'number' && bits >= 0);
8910 var h;
8911 if (hint) {
8912 h = (hint - (hint % 26)) / 26;
8913 } else {
8914 h = 0;
8915 }
8916
8917 var r = bits % 26;
8918 var s = Math.min((bits - r) / 26, this.length);
8919 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
8920 var maskedWords = extended;
8921
8922 h -= s;
8923 h = Math.max(0, h);
8924
8925 // Extended mode, copy masked part
8926 if (maskedWords) {
8927 for (var i = 0; i < s; i++) {
8928 maskedWords.words[i] = this.words[i];
8929 }
8930 maskedWords.length = s;
8931 }
8932
8933 if (s === 0) {
8934 // No-op, we should not move anything at all
8935 } else if (this.length > s) {
8936 this.length -= s;
8937 for (i = 0; i < this.length; i++) {
8938 this.words[i] = this.words[i + s];
8939 }
8940 } else {
8941 this.words[0] = 0;
8942 this.length = 1;
8943 }
8944
8945 var carry = 0;
8946 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
8947 var word = this.words[i] | 0;
8948 this.words[i] = (carry << (26 - r)) | (word >>> r);
8949 carry = word & mask;
8950 }
8951
8952 // Push carried bits as a mask
8953 if (maskedWords && carry !== 0) {
8954 maskedWords.words[maskedWords.length++] = carry;
8955 }
8956
8957 if (this.length === 0) {
8958 this.words[0] = 0;
8959 this.length = 1;
8960 }
8961
8962 return this.strip();
8963 };
8964
8965 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
8966 // TODO(indutny): implement me
8967 assert(this.negative === 0);
8968 return this.iushrn(bits, hint, extended);
8969 };
8970
8971 // Shift-left
8972 BN.prototype.shln = function shln (bits) {
8973 return this.clone().ishln(bits);
8974 };
8975
8976 BN.prototype.ushln = function ushln (bits) {
8977 return this.clone().iushln(bits);
8978 };
8979
8980 // Shift-right
8981 BN.prototype.shrn = function shrn (bits) {
8982 return this.clone().ishrn(bits);
8983 };
8984
8985 BN.prototype.ushrn = function ushrn (bits) {
8986 return this.clone().iushrn(bits);
8987 };
8988
8989 // Test if n bit is set
8990 BN.prototype.testn = function testn (bit) {
8991 assert(typeof bit === 'number' && bit >= 0);
8992 var r = bit % 26;
8993 var s = (bit - r) / 26;
8994 var q = 1 << r;
8995
8996 // Fast case: bit is much higher than all existing words
8997 if (this.length <= s) return false;
8998
8999 // Check bit and return
9000 var w = this.words[s];
9001
9002 return !!(w & q);
9003 };
9004
9005 // Return only lowers bits of number (in-place)
9006 BN.prototype.imaskn = function imaskn (bits) {
9007 assert(typeof bits === 'number' && bits >= 0);
9008 var r = bits % 26;
9009 var s = (bits - r) / 26;
9010
9011 assert(this.negative === 0, 'imaskn works only with positive numbers');
9012
9013 if (this.length <= s) {
9014 return this;
9015 }
9016
9017 if (r !== 0) {
9018 s++;
9019 }
9020 this.length = Math.min(s, this.length);
9021
9022 if (r !== 0) {
9023 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
9024 this.words[this.length - 1] &= mask;
9025 }
9026
9027 return this.strip();
9028 };
9029
9030 // Return only lowers bits of number
9031 BN.prototype.maskn = function maskn (bits) {
9032 return this.clone().imaskn(bits);
9033 };
9034
9035 // Add plain number `num` to `this`
9036 BN.prototype.iaddn = function iaddn (num) {
9037 assert(typeof num === 'number');
9038 assert(num < 0x4000000);
9039 if (num < 0) return this.isubn(-num);
9040
9041 // Possible sign change
9042 if (this.negative !== 0) {
9043 if (this.length === 1 && (this.words[0] | 0) < num) {
9044 this.words[0] = num - (this.words[0] | 0);
9045 this.negative = 0;
9046 return this;
9047 }
9048
9049 this.negative = 0;
9050 this.isubn(num);
9051 this.negative = 1;
9052 return this;
9053 }
9054
9055 // Add without checks
9056 return this._iaddn(num);
9057 };
9058
9059 BN.prototype._iaddn = function _iaddn (num) {
9060 this.words[0] += num;
9061
9062 // Carry
9063 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
9064 this.words[i] -= 0x4000000;
9065 if (i === this.length - 1) {
9066 this.words[i + 1] = 1;
9067 } else {
9068 this.words[i + 1]++;
9069 }
9070 }
9071 this.length = Math.max(this.length, i + 1);
9072
9073 return this;
9074 };
9075
9076 // Subtract plain number `num` from `this`
9077 BN.prototype.isubn = function isubn (num) {
9078 assert(typeof num === 'number');
9079 assert(num < 0x4000000);
9080 if (num < 0) return this.iaddn(-num);
9081
9082 if (this.negative !== 0) {
9083 this.negative = 0;
9084 this.iaddn(num);
9085 this.negative = 1;
9086 return this;
9087 }
9088
9089 this.words[0] -= num;
9090
9091 if (this.length === 1 && this.words[0] < 0) {
9092 this.words[0] = -this.words[0];
9093 this.negative = 1;
9094 } else {
9095 // Carry
9096 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
9097 this.words[i] += 0x4000000;
9098 this.words[i + 1] -= 1;
9099 }
9100 }
9101
9102 return this.strip();
9103 };
9104
9105 BN.prototype.addn = function addn (num) {
9106 return this.clone().iaddn(num);
9107 };
9108
9109 BN.prototype.subn = function subn (num) {
9110 return this.clone().isubn(num);
9111 };
9112
9113 BN.prototype.iabs = function iabs () {
9114 this.negative = 0;
9115
9116 return this;
9117 };
9118
9119 BN.prototype.abs = function abs () {
9120 return this.clone().iabs();
9121 };
9122
9123 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
9124 var len = num.length + shift;
9125 var i;
9126
9127 this._expand(len);
9128
9129 var w;
9130 var carry = 0;
9131 for (i = 0; i < num.length; i++) {
9132 w = (this.words[i + shift] | 0) + carry;
9133 var right = (num.words[i] | 0) * mul;
9134 w -= right & 0x3ffffff;
9135 carry = (w >> 26) - ((right / 0x4000000) | 0);
9136 this.words[i + shift] = w & 0x3ffffff;
9137 }
9138 for (; i < this.length - shift; i++) {
9139 w = (this.words[i + shift] | 0) + carry;
9140 carry = w >> 26;
9141 this.words[i + shift] = w & 0x3ffffff;
9142 }
9143
9144 if (carry === 0) return this.strip();
9145
9146 // Subtraction overflow
9147 assert(carry === -1);
9148 carry = 0;
9149 for (i = 0; i < this.length; i++) {
9150 w = -(this.words[i] | 0) + carry;
9151 carry = w >> 26;
9152 this.words[i] = w & 0x3ffffff;
9153 }
9154 this.negative = 1;
9155
9156 return this.strip();
9157 };
9158
9159 BN.prototype._wordDiv = function _wordDiv (num, mode) {
9160 var shift = this.length - num.length;
9161
9162 var a = this.clone();
9163 var b = num;
9164
9165 // Normalize
9166 var bhi = b.words[b.length - 1] | 0;
9167 var bhiBits = this._countBits(bhi);
9168 shift = 26 - bhiBits;
9169 if (shift !== 0) {
9170 b = b.ushln(shift);
9171 a.iushln(shift);
9172 bhi = b.words[b.length - 1] | 0;
9173 }
9174
9175 // Initialize quotient
9176 var m = a.length - b.length;
9177 var q;
9178
9179 if (mode !== 'mod') {
9180 q = new BN(null);
9181 q.length = m + 1;
9182 q.words = new Array(q.length);
9183 for (var i = 0; i < q.length; i++) {
9184 q.words[i] = 0;
9185 }
9186 }
9187
9188 var diff = a.clone()._ishlnsubmul(b, 1, m);
9189 if (diff.negative === 0) {
9190 a = diff;
9191 if (q) {
9192 q.words[m] = 1;
9193 }
9194 }
9195
9196 for (var j = m - 1; j >= 0; j--) {
9197 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
9198 (a.words[b.length + j - 1] | 0);
9199
9200 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
9201 // (0x7ffffff)
9202 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
9203
9204 a._ishlnsubmul(b, qj, j);
9205 while (a.negative !== 0) {
9206 qj--;
9207 a.negative = 0;
9208 a._ishlnsubmul(b, 1, j);
9209 if (!a.isZero()) {
9210 a.negative ^= 1;
9211 }
9212 }
9213 if (q) {
9214 q.words[j] = qj;
9215 }
9216 }
9217 if (q) {
9218 q.strip();
9219 }
9220 a.strip();
9221
9222 // Denormalize
9223 if (mode !== 'div' && shift !== 0) {
9224 a.iushrn(shift);
9225 }
9226
9227 return {
9228 div: q || null,
9229 mod: a
9230 };
9231 };
9232
9233 // NOTE: 1) `mode` can be set to `mod` to request mod only,
9234 // to `div` to request div only, or be absent to
9235 // request both div & mod
9236 // 2) `positive` is true if unsigned mod is requested
9237 BN.prototype.divmod = function divmod (num, mode, positive) {
9238 assert(!num.isZero());
9239
9240 if (this.isZero()) {
9241 return {
9242 div: new BN(0),
9243 mod: new BN(0)
9244 };
9245 }
9246
9247 var div, mod, res;
9248 if (this.negative !== 0 && num.negative === 0) {
9249 res = this.neg().divmod(num, mode);
9250
9251 if (mode !== 'mod') {
9252 div = res.div.neg();
9253 }
9254
9255 if (mode !== 'div') {
9256 mod = res.mod.neg();
9257 if (positive && mod.negative !== 0) {
9258 mod.iadd(num);
9259 }
9260 }
9261
9262 return {
9263 div: div,
9264 mod: mod
9265 };
9266 }
9267
9268 if (this.negative === 0 && num.negative !== 0) {
9269 res = this.divmod(num.neg(), mode);
9270
9271 if (mode !== 'mod') {
9272 div = res.div.neg();
9273 }
9274
9275 return {
9276 div: div,
9277 mod: res.mod
9278 };
9279 }
9280
9281 if ((this.negative & num.negative) !== 0) {
9282 res = this.neg().divmod(num.neg(), mode);
9283
9284 if (mode !== 'div') {
9285 mod = res.mod.neg();
9286 if (positive && mod.negative !== 0) {
9287 mod.isub(num);
9288 }
9289 }
9290
9291 return {
9292 div: res.div,
9293 mod: mod
9294 };
9295 }
9296
9297 // Both numbers are positive at this point
9298
9299 // Strip both numbers to approximate shift value
9300 if (num.length > this.length || this.cmp(num) < 0) {
9301 return {
9302 div: new BN(0),
9303 mod: this
9304 };
9305 }
9306
9307 // Very short reduction
9308 if (num.length === 1) {
9309 if (mode === 'div') {
9310 return {
9311 div: this.divn(num.words[0]),
9312 mod: null
9313 };
9314 }
9315
9316 if (mode === 'mod') {
9317 return {
9318 div: null,
9319 mod: new BN(this.modn(num.words[0]))
9320 };
9321 }
9322
9323 return {
9324 div: this.divn(num.words[0]),
9325 mod: new BN(this.modn(num.words[0]))
9326 };
9327 }
9328
9329 return this._wordDiv(num, mode);
9330 };
9331
9332 // Find `this` / `num`
9333 BN.prototype.div = function div (num) {
9334 return this.divmod(num, 'div', false).div;
9335 };
9336
9337 // Find `this` % `num`
9338 BN.prototype.mod = function mod (num) {
9339 return this.divmod(num, 'mod', false).mod;
9340 };
9341
9342 BN.prototype.umod = function umod (num) {
9343 return this.divmod(num, 'mod', true).mod;
9344 };
9345
9346 // Find Round(`this` / `num`)
9347 BN.prototype.divRound = function divRound (num) {
9348 var dm = this.divmod(num);
9349
9350 // Fast case - exact division
9351 if (dm.mod.isZero()) return dm.div;
9352
9353 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
9354
9355 var half = num.ushrn(1);
9356 var r2 = num.andln(1);
9357 var cmp = mod.cmp(half);
9358
9359 // Round down
9360 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
9361
9362 // Round up
9363 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
9364 };
9365
9366 BN.prototype.modn = function modn (num) {
9367 assert(num <= 0x3ffffff);
9368 var p = (1 << 26) % num;
9369
9370 var acc = 0;
9371 for (var i = this.length - 1; i >= 0; i--) {
9372 acc = (p * acc + (this.words[i] | 0)) % num;
9373 }
9374
9375 return acc;
9376 };
9377
9378 // In-place division by number
9379 BN.prototype.idivn = function idivn (num) {
9380 assert(num <= 0x3ffffff);
9381
9382 var carry = 0;
9383 for (var i = this.length - 1; i >= 0; i--) {
9384 var w = (this.words[i] | 0) + carry * 0x4000000;
9385 this.words[i] = (w / num) | 0;
9386 carry = w % num;
9387 }
9388
9389 return this.strip();
9390 };
9391
9392 BN.prototype.divn = function divn (num) {
9393 return this.clone().idivn(num);
9394 };
9395
9396 BN.prototype.egcd = function egcd (p) {
9397 assert(p.negative === 0);
9398 assert(!p.isZero());
9399
9400 var x = this;
9401 var y = p.clone();
9402
9403 if (x.negative !== 0) {
9404 x = x.umod(p);
9405 } else {
9406 x = x.clone();
9407 }
9408
9409 // A * x + B * y = x
9410 var A = new BN(1);
9411 var B = new BN(0);
9412
9413 // C * x + D * y = y
9414 var C = new BN(0);
9415 var D = new BN(1);
9416
9417 var g = 0;
9418
9419 while (x.isEven() && y.isEven()) {
9420 x.iushrn(1);
9421 y.iushrn(1);
9422 ++g;
9423 }
9424
9425 var yp = y.clone();
9426 var xp = x.clone();
9427
9428 while (!x.isZero()) {
9429 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
9430 if (i > 0) {
9431 x.iushrn(i);
9432 while (i-- > 0) {
9433 if (A.isOdd() || B.isOdd()) {
9434 A.iadd(yp);
9435 B.isub(xp);
9436 }
9437
9438 A.iushrn(1);
9439 B.iushrn(1);
9440 }
9441 }
9442
9443 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
9444 if (j > 0) {
9445 y.iushrn(j);
9446 while (j-- > 0) {
9447 if (C.isOdd() || D.isOdd()) {
9448 C.iadd(yp);
9449 D.isub(xp);
9450 }
9451
9452 C.iushrn(1);
9453 D.iushrn(1);
9454 }
9455 }
9456
9457 if (x.cmp(y) >= 0) {
9458 x.isub(y);
9459 A.isub(C);
9460 B.isub(D);
9461 } else {
9462 y.isub(x);
9463 C.isub(A);
9464 D.isub(B);
9465 }
9466 }
9467
9468 return {
9469 a: C,
9470 b: D,
9471 gcd: y.iushln(g)
9472 };
9473 };
9474
9475 // This is reduced incarnation of the binary EEA
9476 // above, designated to invert members of the
9477 // _prime_ fields F(p) at a maximal speed
9478 BN.prototype._invmp = function _invmp (p) {
9479 assert(p.negative === 0);
9480 assert(!p.isZero());
9481
9482 var a = this;
9483 var b = p.clone();
9484
9485 if (a.negative !== 0) {
9486 a = a.umod(p);
9487 } else {
9488 a = a.clone();
9489 }
9490
9491 var x1 = new BN(1);
9492 var x2 = new BN(0);
9493
9494 var delta = b.clone();
9495
9496 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
9497 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
9498 if (i > 0) {
9499 a.iushrn(i);
9500 while (i-- > 0) {
9501 if (x1.isOdd()) {
9502 x1.iadd(delta);
9503 }
9504
9505 x1.iushrn(1);
9506 }
9507 }
9508
9509 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
9510 if (j > 0) {
9511 b.iushrn(j);
9512 while (j-- > 0) {
9513 if (x2.isOdd()) {
9514 x2.iadd(delta);
9515 }
9516
9517 x2.iushrn(1);
9518 }
9519 }
9520
9521 if (a.cmp(b) >= 0) {
9522 a.isub(b);
9523 x1.isub(x2);
9524 } else {
9525 b.isub(a);
9526 x2.isub(x1);
9527 }
9528 }
9529
9530 var res;
9531 if (a.cmpn(1) === 0) {
9532 res = x1;
9533 } else {
9534 res = x2;
9535 }
9536
9537 if (res.cmpn(0) < 0) {
9538 res.iadd(p);
9539 }
9540
9541 return res;
9542 };
9543
9544 BN.prototype.gcd = function gcd (num) {
9545 if (this.isZero()) return num.abs();
9546 if (num.isZero()) return this.abs();
9547
9548 var a = this.clone();
9549 var b = num.clone();
9550 a.negative = 0;
9551 b.negative = 0;
9552
9553 // Remove common factor of two
9554 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
9555 a.iushrn(1);
9556 b.iushrn(1);
9557 }
9558
9559 do {
9560 while (a.isEven()) {
9561 a.iushrn(1);
9562 }
9563 while (b.isEven()) {
9564 b.iushrn(1);
9565 }
9566
9567 var r = a.cmp(b);
9568 if (r < 0) {
9569 // Swap `a` and `b` to make `a` always bigger than `b`
9570 var t = a;
9571 a = b;
9572 b = t;
9573 } else if (r === 0 || b.cmpn(1) === 0) {
9574 break;
9575 }
9576
9577 a.isub(b);
9578 } while (true);
9579
9580 return b.iushln(shift);
9581 };
9582
9583 // Invert number in the field F(num)
9584 BN.prototype.invm = function invm (num) {
9585 return this.egcd(num).a.umod(num);
9586 };
9587
9588 BN.prototype.isEven = function isEven () {
9589 return (this.words[0] & 1) === 0;
9590 };
9591
9592 BN.prototype.isOdd = function isOdd () {
9593 return (this.words[0] & 1) === 1;
9594 };
9595
9596 // And first word and num
9597 BN.prototype.andln = function andln (num) {
9598 return this.words[0] & num;
9599 };
9600
9601 // Increment at the bit position in-line
9602 BN.prototype.bincn = function bincn (bit) {
9603 assert(typeof bit === 'number');
9604 var r = bit % 26;
9605 var s = (bit - r) / 26;
9606 var q = 1 << r;
9607
9608 // Fast case: bit is much higher than all existing words
9609 if (this.length <= s) {
9610 this._expand(s + 1);
9611 this.words[s] |= q;
9612 return this;
9613 }
9614
9615 // Add bit and propagate, if needed
9616 var carry = q;
9617 for (var i = s; carry !== 0 && i < this.length; i++) {
9618 var w = this.words[i] | 0;
9619 w += carry;
9620 carry = w >>> 26;
9621 w &= 0x3ffffff;
9622 this.words[i] = w;
9623 }
9624 if (carry !== 0) {
9625 this.words[i] = carry;
9626 this.length++;
9627 }
9628 return this;
9629 };
9630
9631 BN.prototype.isZero = function isZero () {
9632 return this.length === 1 && this.words[0] === 0;
9633 };
9634
9635 BN.prototype.cmpn = function cmpn (num) {
9636 var negative = num < 0;
9637
9638 if (this.negative !== 0 && !negative) return -1;
9639 if (this.negative === 0 && negative) return 1;
9640
9641 this.strip();
9642
9643 var res;
9644 if (this.length > 1) {
9645 res = 1;
9646 } else {
9647 if (negative) {
9648 num = -num;
9649 }
9650
9651 assert(num <= 0x3ffffff, 'Number is too big');
9652
9653 var w = this.words[0] | 0;
9654 res = w === num ? 0 : w < num ? -1 : 1;
9655 }
9656 if (this.negative !== 0) return -res | 0;
9657 return res;
9658 };
9659
9660 // Compare two numbers and return:
9661 // 1 - if `this` > `num`
9662 // 0 - if `this` == `num`
9663 // -1 - if `this` < `num`
9664 BN.prototype.cmp = function cmp (num) {
9665 if (this.negative !== 0 && num.negative === 0) return -1;
9666 if (this.negative === 0 && num.negative !== 0) return 1;
9667
9668 var res = this.ucmp(num);
9669 if (this.negative !== 0) return -res | 0;
9670 return res;
9671 };
9672
9673 // Unsigned comparison
9674 BN.prototype.ucmp = function ucmp (num) {
9675 // At this point both numbers have the same sign
9676 if (this.length > num.length) return 1;
9677 if (this.length < num.length) return -1;
9678
9679 var res = 0;
9680 for (var i = this.length - 1; i >= 0; i--) {
9681 var a = this.words[i] | 0;
9682 var b = num.words[i] | 0;
9683
9684 if (a === b) continue;
9685 if (a < b) {
9686 res = -1;
9687 } else if (a > b) {
9688 res = 1;
9689 }
9690 break;
9691 }
9692 return res;
9693 };
9694
9695 BN.prototype.gtn = function gtn (num) {
9696 return this.cmpn(num) === 1;
9697 };
9698
9699 BN.prototype.gt = function gt (num) {
9700 return this.cmp(num) === 1;
9701 };
9702
9703 BN.prototype.gten = function gten (num) {
9704 return this.cmpn(num) >= 0;
9705 };
9706
9707 BN.prototype.gte = function gte (num) {
9708 return this.cmp(num) >= 0;
9709 };
9710
9711 BN.prototype.ltn = function ltn (num) {
9712 return this.cmpn(num) === -1;
9713 };
9714
9715 BN.prototype.lt = function lt (num) {
9716 return this.cmp(num) === -1;
9717 };
9718
9719 BN.prototype.lten = function lten (num) {
9720 return this.cmpn(num) <= 0;
9721 };
9722
9723 BN.prototype.lte = function lte (num) {
9724 return this.cmp(num) <= 0;
9725 };
9726
9727 BN.prototype.eqn = function eqn (num) {
9728 return this.cmpn(num) === 0;
9729 };
9730
9731 BN.prototype.eq = function eq (num) {
9732 return this.cmp(num) === 0;
9733 };
9734
9735 //
9736 // A reduce context, could be using montgomery or something better, depending
9737 // on the `m` itself.
9738 //
9739 BN.red = function red (num) {
9740 return new Red(num);
9741 };
9742
9743 BN.prototype.toRed = function toRed (ctx) {
9744 assert(!this.red, 'Already a number in reduction context');
9745 assert(this.negative === 0, 'red works only with positives');
9746 return ctx.convertTo(this)._forceRed(ctx);
9747 };
9748
9749 BN.prototype.fromRed = function fromRed () {
9750 assert(this.red, 'fromRed works only with numbers in reduction context');
9751 return this.red.convertFrom(this);
9752 };
9753
9754 BN.prototype._forceRed = function _forceRed (ctx) {
9755 this.red = ctx;
9756 return this;
9757 };
9758
9759 BN.prototype.forceRed = function forceRed (ctx) {
9760 assert(!this.red, 'Already a number in reduction context');
9761 return this._forceRed(ctx);
9762 };
9763
9764 BN.prototype.redAdd = function redAdd (num) {
9765 assert(this.red, 'redAdd works only with red numbers');
9766 return this.red.add(this, num);
9767 };
9768
9769 BN.prototype.redIAdd = function redIAdd (num) {
9770 assert(this.red, 'redIAdd works only with red numbers');
9771 return this.red.iadd(this, num);
9772 };
9773
9774 BN.prototype.redSub = function redSub (num) {
9775 assert(this.red, 'redSub works only with red numbers');
9776 return this.red.sub(this, num);
9777 };
9778
9779 BN.prototype.redISub = function redISub (num) {
9780 assert(this.red, 'redISub works only with red numbers');
9781 return this.red.isub(this, num);
9782 };
9783
9784 BN.prototype.redShl = function redShl (num) {
9785 assert(this.red, 'redShl works only with red numbers');
9786 return this.red.shl(this, num);
9787 };
9788
9789 BN.prototype.redMul = function redMul (num) {
9790 assert(this.red, 'redMul works only with red numbers');
9791 this.red._verify2(this, num);
9792 return this.red.mul(this, num);
9793 };
9794
9795 BN.prototype.redIMul = function redIMul (num) {
9796 assert(this.red, 'redMul works only with red numbers');
9797 this.red._verify2(this, num);
9798 return this.red.imul(this, num);
9799 };
9800
9801 BN.prototype.redSqr = function redSqr () {
9802 assert(this.red, 'redSqr works only with red numbers');
9803 this.red._verify1(this);
9804 return this.red.sqr(this);
9805 };
9806
9807 BN.prototype.redISqr = function redISqr () {
9808 assert(this.red, 'redISqr works only with red numbers');
9809 this.red._verify1(this);
9810 return this.red.isqr(this);
9811 };
9812
9813 // Square root over p
9814 BN.prototype.redSqrt = function redSqrt () {
9815 assert(this.red, 'redSqrt works only with red numbers');
9816 this.red._verify1(this);
9817 return this.red.sqrt(this);
9818 };
9819
9820 BN.prototype.redInvm = function redInvm () {
9821 assert(this.red, 'redInvm works only with red numbers');
9822 this.red._verify1(this);
9823 return this.red.invm(this);
9824 };
9825
9826 // Return negative clone of `this` % `red modulo`
9827 BN.prototype.redNeg = function redNeg () {
9828 assert(this.red, 'redNeg works only with red numbers');
9829 this.red._verify1(this);
9830 return this.red.neg(this);
9831 };
9832
9833 BN.prototype.redPow = function redPow (num) {
9834 assert(this.red && !num.red, 'redPow(normalNum)');
9835 this.red._verify1(this);
9836 return this.red.pow(this, num);
9837 };
9838
9839 // Prime numbers with efficient reduction
9840 var primes = {
9841 k256: null,
9842 p224: null,
9843 p192: null,
9844 p25519: null
9845 };
9846
9847 // Pseudo-Mersenne prime
9848 function MPrime (name, p) {
9849 // P = 2 ^ N - K
9850 this.name = name;
9851 this.p = new BN(p, 16);
9852 this.n = this.p.bitLength();
9853 this.k = new BN(1).iushln(this.n).isub(this.p);
9854
9855 this.tmp = this._tmp();
9856 }
9857
9858 MPrime.prototype._tmp = function _tmp () {
9859 var tmp = new BN(null);
9860 tmp.words = new Array(Math.ceil(this.n / 13));
9861 return tmp;
9862 };
9863
9864 MPrime.prototype.ireduce = function ireduce (num) {
9865 // Assumes that `num` is less than `P^2`
9866 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
9867 var r = num;
9868 var rlen;
9869
9870 do {
9871 this.split(r, this.tmp);
9872 r = this.imulK(r);
9873 r = r.iadd(this.tmp);
9874 rlen = r.bitLength();
9875 } while (rlen > this.n);
9876
9877 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
9878 if (cmp === 0) {
9879 r.words[0] = 0;
9880 r.length = 1;
9881 } else if (cmp > 0) {
9882 r.isub(this.p);
9883 } else {
9884 r.strip();
9885 }
9886
9887 return r;
9888 };
9889
9890 MPrime.prototype.split = function split (input, out) {
9891 input.iushrn(this.n, 0, out);
9892 };
9893
9894 MPrime.prototype.imulK = function imulK (num) {
9895 return num.imul(this.k);
9896 };
9897
9898 function K256 () {
9899 MPrime.call(
9900 this,
9901 'k256',
9902 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
9903 }
9904 inherits(K256, MPrime);
9905
9906 K256.prototype.split = function split (input, output) {
9907 // 256 = 9 * 26 + 22
9908 var mask = 0x3fffff;
9909
9910 var outLen = Math.min(input.length, 9);
9911 for (var i = 0; i < outLen; i++) {
9912 output.words[i] = input.words[i];
9913 }
9914 output.length = outLen;
9915
9916 if (input.length <= 9) {
9917 input.words[0] = 0;
9918 input.length = 1;
9919 return;
9920 }
9921
9922 // Shift by 9 limbs
9923 var prev = input.words[9];
9924 output.words[output.length++] = prev & mask;
9925
9926 for (i = 10; i < input.length; i++) {
9927 var next = input.words[i] | 0;
9928 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
9929 prev = next;
9930 }
9931 prev >>>= 22;
9932 input.words[i - 10] = prev;
9933 if (prev === 0 && input.length > 10) {
9934 input.length -= 10;
9935 } else {
9936 input.length -= 9;
9937 }
9938 };
9939
9940 K256.prototype.imulK = function imulK (num) {
9941 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
9942 num.words[num.length] = 0;
9943 num.words[num.length + 1] = 0;
9944 num.length += 2;
9945
9946 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
9947 var lo = 0;
9948 for (var i = 0; i < num.length; i++) {
9949 var w = num.words[i] | 0;
9950 lo += w * 0x3d1;
9951 num.words[i] = lo & 0x3ffffff;
9952 lo = w * 0x40 + ((lo / 0x4000000) | 0);
9953 }
9954
9955 // Fast length reduction
9956 if (num.words[num.length - 1] === 0) {
9957 num.length--;
9958 if (num.words[num.length - 1] === 0) {
9959 num.length--;
9960 }
9961 }
9962 return num;
9963 };
9964
9965 function P224 () {
9966 MPrime.call(
9967 this,
9968 'p224',
9969 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
9970 }
9971 inherits(P224, MPrime);
9972
9973 function P192 () {
9974 MPrime.call(
9975 this,
9976 'p192',
9977 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
9978 }
9979 inherits(P192, MPrime);
9980
9981 function P25519 () {
9982 // 2 ^ 255 - 19
9983 MPrime.call(
9984 this,
9985 '25519',
9986 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
9987 }
9988 inherits(P25519, MPrime);
9989
9990 P25519.prototype.imulK = function imulK (num) {
9991 // K = 0x13
9992 var carry = 0;
9993 for (var i = 0; i < num.length; i++) {
9994 var hi = (num.words[i] | 0) * 0x13 + carry;
9995 var lo = hi & 0x3ffffff;
9996 hi >>>= 26;
9997
9998 num.words[i] = lo;
9999 carry = hi;
10000 }
10001 if (carry !== 0) {
10002 num.words[num.length++] = carry;
10003 }
10004 return num;
10005 };
10006
10007 // Exported mostly for testing purposes, use plain name instead
10008 BN._prime = function prime (name) {
10009 // Cached version of prime
10010 if (primes[name]) return primes[name];
10011
10012 var prime;
10013 if (name === 'k256') {
10014 prime = new K256();
10015 } else if (name === 'p224') {
10016 prime = new P224();
10017 } else if (name === 'p192') {
10018 prime = new P192();
10019 } else if (name === 'p25519') {
10020 prime = new P25519();
10021 } else {
10022 throw new Error('Unknown prime ' + name);
10023 }
10024 primes[name] = prime;
10025
10026 return prime;
10027 };
10028
10029 //
10030 // Base reduction engine
10031 //
10032 function Red (m) {
10033 if (typeof m === 'string') {
10034 var prime = BN._prime(m);
10035 this.m = prime.p;
10036 this.prime = prime;
10037 } else {
10038 assert(m.gtn(1), 'modulus must be greater than 1');
10039 this.m = m;
10040 this.prime = null;
10041 }
10042 }
10043
10044 Red.prototype._verify1 = function _verify1 (a) {
10045 assert(a.negative === 0, 'red works only with positives');
10046 assert(a.red, 'red works only with red numbers');
10047 };
10048
10049 Red.prototype._verify2 = function _verify2 (a, b) {
10050 assert((a.negative | b.negative) === 0, 'red works only with positives');
10051 assert(a.red && a.red === b.red,
10052 'red works only with red numbers');
10053 };
10054
10055 Red.prototype.imod = function imod (a) {
10056 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
10057 return a.umod(this.m)._forceRed(this);
10058 };
10059
10060 Red.prototype.neg = function neg (a) {
10061 if (a.isZero()) {
10062 return a.clone();
10063 }
10064
10065 return this.m.sub(a)._forceRed(this);
10066 };
10067
10068 Red.prototype.add = function add (a, b) {
10069 this._verify2(a, b);
10070
10071 var res = a.add(b);
10072 if (res.cmp(this.m) >= 0) {
10073 res.isub(this.m);
10074 }
10075 return res._forceRed(this);
10076 };
10077
10078 Red.prototype.iadd = function iadd (a, b) {
10079 this._verify2(a, b);
10080
10081 var res = a.iadd(b);
10082 if (res.cmp(this.m) >= 0) {
10083 res.isub(this.m);
10084 }
10085 return res;
10086 };
10087
10088 Red.prototype.sub = function sub (a, b) {
10089 this._verify2(a, b);
10090
10091 var res = a.sub(b);
10092 if (res.cmpn(0) < 0) {
10093 res.iadd(this.m);
10094 }
10095 return res._forceRed(this);
10096 };
10097
10098 Red.prototype.isub = function isub (a, b) {
10099 this._verify2(a, b);
10100
10101 var res = a.isub(b);
10102 if (res.cmpn(0) < 0) {
10103 res.iadd(this.m);
10104 }
10105 return res;
10106 };
10107
10108 Red.prototype.shl = function shl (a, num) {
10109 this._verify1(a);
10110 return this.imod(a.ushln(num));
10111 };
10112
10113 Red.prototype.imul = function imul (a, b) {
10114 this._verify2(a, b);
10115 return this.imod(a.imul(b));
10116 };
10117
10118 Red.prototype.mul = function mul (a, b) {
10119 this._verify2(a, b);
10120 return this.imod(a.mul(b));
10121 };
10122
10123 Red.prototype.isqr = function isqr (a) {
10124 return this.imul(a, a.clone());
10125 };
10126
10127 Red.prototype.sqr = function sqr (a) {
10128 return this.mul(a, a);
10129 };
10130
10131 Red.prototype.sqrt = function sqrt (a) {
10132 if (a.isZero()) return a.clone();
10133
10134 var mod3 = this.m.andln(3);
10135 assert(mod3 % 2 === 1);
10136
10137 // Fast case
10138 if (mod3 === 3) {
10139 var pow = this.m.add(new BN(1)).iushrn(2);
10140 return this.pow(a, pow);
10141 }
10142
10143 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
10144 //
10145 // Find Q and S, that Q * 2 ^ S = (P - 1)
10146 var q = this.m.subn(1);
10147 var s = 0;
10148 while (!q.isZero() && q.andln(1) === 0) {
10149 s++;
10150 q.iushrn(1);
10151 }
10152 assert(!q.isZero());
10153
10154 var one = new BN(1).toRed(this);
10155 var nOne = one.redNeg();
10156
10157 // Find quadratic non-residue
10158 // NOTE: Max is such because of generalized Riemann hypothesis.
10159 var lpow = this.m.subn(1).iushrn(1);
10160 var z = this.m.bitLength();
10161 z = new BN(2 * z * z).toRed(this);
10162
10163 while (this.pow(z, lpow).cmp(nOne) !== 0) {
10164 z.redIAdd(nOne);
10165 }
10166
10167 var c = this.pow(z, q);
10168 var r = this.pow(a, q.addn(1).iushrn(1));
10169 var t = this.pow(a, q);
10170 var m = s;
10171 while (t.cmp(one) !== 0) {
10172 var tmp = t;
10173 for (var i = 0; tmp.cmp(one) !== 0; i++) {
10174 tmp = tmp.redSqr();
10175 }
10176 assert(i < m);
10177 var b = this.pow(c, new BN(1).iushln(m - i - 1));
10178
10179 r = r.redMul(b);
10180 c = b.redSqr();
10181 t = t.redMul(c);
10182 m = i;
10183 }
10184
10185 return r;
10186 };
10187
10188 Red.prototype.invm = function invm (a) {
10189 var inv = a._invmp(this.m);
10190 if (inv.negative !== 0) {
10191 inv.negative = 0;
10192 return this.imod(inv).redNeg();
10193 } else {
10194 return this.imod(inv);
10195 }
10196 };
10197
10198 Red.prototype.pow = function pow (a, num) {
10199 if (num.isZero()) return new BN(1);
10200 if (num.cmpn(1) === 0) return a.clone();
10201
10202 var windowSize = 4;
10203 var wnd = new Array(1 << windowSize);
10204 wnd[0] = new BN(1).toRed(this);
10205 wnd[1] = a;
10206 for (var i = 2; i < wnd.length; i++) {
10207 wnd[i] = this.mul(wnd[i - 1], a);
10208 }
10209
10210 var res = wnd[0];
10211 var current = 0;
10212 var currentLen = 0;
10213 var start = num.bitLength() % 26;
10214 if (start === 0) {
10215 start = 26;
10216 }
10217
10218 for (i = num.length - 1; i >= 0; i--) {
10219 var word = num.words[i];
10220 for (var j = start - 1; j >= 0; j--) {
10221 var bit = (word >> j) & 1;
10222 if (res !== wnd[0]) {
10223 res = this.sqr(res);
10224 }
10225
10226 if (bit === 0 && current === 0) {
10227 currentLen = 0;
10228 continue;
10229 }
10230
10231 current <<= 1;
10232 current |= bit;
10233 currentLen++;
10234 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
10235
10236 res = this.mul(res, wnd[current]);
10237 currentLen = 0;
10238 current = 0;
10239 }
10240 start = 26;
10241 }
10242
10243 return res;
10244 };
10245
10246 Red.prototype.convertTo = function convertTo (num) {
10247 var r = num.umod(this.m);
10248
10249 return r === num ? r.clone() : r;
10250 };
10251
10252 Red.prototype.convertFrom = function convertFrom (num) {
10253 var res = num.clone();
10254 res.red = null;
10255 return res;
10256 };
10257
10258 //
10259 // Montgomery method engine
10260 //
10261
10262 BN.mont = function mont (num) {
10263 return new Mont(num);
10264 };
10265
10266 function Mont (m) {
10267 Red.call(this, m);
10268
10269 this.shift = this.m.bitLength();
10270 if (this.shift % 26 !== 0) {
10271 this.shift += 26 - (this.shift % 26);
10272 }
10273
10274 this.r = new BN(1).iushln(this.shift);
10275 this.r2 = this.imod(this.r.sqr());
10276 this.rinv = this.r._invmp(this.m);
10277
10278 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
10279 this.minv = this.minv.umod(this.r);
10280 this.minv = this.r.sub(this.minv);
10281 }
10282 inherits(Mont, Red);
10283
10284 Mont.prototype.convertTo = function convertTo (num) {
10285 return this.imod(num.ushln(this.shift));
10286 };
10287
10288 Mont.prototype.convertFrom = function convertFrom (num) {
10289 var r = this.imod(num.mul(this.rinv));
10290 r.red = null;
10291 return r;
10292 };
10293
10294 Mont.prototype.imul = function imul (a, b) {
10295 if (a.isZero() || b.isZero()) {
10296 a.words[0] = 0;
10297 a.length = 1;
10298 return a;
10299 }
10300
10301 var t = a.imul(b);
10302 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
10303 var u = t.isub(c).iushrn(this.shift);
10304 var res = u;
10305
10306 if (u.cmp(this.m) >= 0) {
10307 res = u.isub(this.m);
10308 } else if (u.cmpn(0) < 0) {
10309 res = u.iadd(this.m);
10310 }
10311
10312 return res._forceRed(this);
10313 };
10314
10315 Mont.prototype.mul = function mul (a, b) {
10316 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
10317
10318 var t = a.mul(b);
10319 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
10320 var u = t.isub(c).iushrn(this.shift);
10321 var res = u;
10322 if (u.cmp(this.m) >= 0) {
10323 res = u.isub(this.m);
10324 } else if (u.cmpn(0) < 0) {
10325 res = u.iadd(this.m);
10326 }
10327
10328 return res._forceRed(this);
10329 };
10330
10331 Mont.prototype.invm = function invm (a) {
10332 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
10333 var res = this.imod(a._invmp(this.m).mul(this.r2));
10334 return res._forceRed(this);
10335 };
10336})(typeof module === 'undefined' || module, this);
10337
10338},{}],34:[function(require,module,exports){
10339var r;
10340
10341module.exports = function rand(len) {
10342 if (!r)
10343 r = new Rand(null);
10344
10345 return r.generate(len);
10346};
10347
10348function Rand(rand) {
10349 this.rand = rand;
10350}
10351module.exports.Rand = Rand;
10352
10353Rand.prototype.generate = function generate(len) {
10354 return this._rand(len);
10355};
10356
10357if (typeof self === 'object') {
10358 if (self.crypto && self.crypto.getRandomValues) {
10359 // Modern browsers
10360 Rand.prototype._rand = function _rand(n) {
10361 var arr = new Uint8Array(n);
10362 self.crypto.getRandomValues(arr);
10363 return arr;
10364 };
10365 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
10366 // IE
10367 Rand.prototype._rand = function _rand(n) {
10368 var arr = new Uint8Array(n);
10369 self.msCrypto.getRandomValues(arr);
10370 return arr;
10371 };
10372 } else {
10373 // Old junk
10374 Rand.prototype._rand = function() {
10375 throw new Error('Not implemented yet');
10376 };
10377 }
10378} else {
10379 // Node.js or Web worker with no crypto support
10380 try {
10381 var crypto = require('crypto');
10382
10383 Rand.prototype._rand = function _rand(n) {
10384 return crypto.randomBytes(n);
10385 };
10386 } catch (e) {
10387 // Emulate crypto API using randy
10388 Rand.prototype._rand = function _rand(n) {
10389 var res = new Uint8Array(n);
10390 for (var i = 0; i < res.length; i++)
10391 res[i] = this.rand.getByte();
10392 return res;
10393 };
10394 }
10395}
10396
10397},{"crypto":3}],35:[function(require,module,exports){
10398(function (Buffer){
10399var Transform = require('stream').Transform
10400var inherits = require('inherits')
10401var StringDecoder = require('string_decoder').StringDecoder
10402module.exports = CipherBase
10403inherits(CipherBase, Transform)
10404function CipherBase (hashMode) {
10405 Transform.call(this)
10406 this.hashMode = typeof hashMode === 'string'
10407 if (this.hashMode) {
10408 this[hashMode] = this._finalOrDigest
10409 } else {
10410 this.final = this._finalOrDigest
10411 }
10412 this._decoder = null
10413 this._encoding = null
10414}
10415CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
10416 if (typeof data === 'string') {
10417 data = new Buffer(data, inputEnc)
10418 }
10419 var outData = this._update(data)
10420 if (this.hashMode) {
10421 return this
10422 }
10423 if (outputEnc) {
10424 outData = this._toString(outData, outputEnc)
10425 }
10426 return outData
10427}
10428
10429CipherBase.prototype.setAutoPadding = function () {}
10430
10431CipherBase.prototype.getAuthTag = function () {
10432 throw new Error('trying to get auth tag in unsupported state')
10433}
10434
10435CipherBase.prototype.setAuthTag = function () {
10436 throw new Error('trying to set auth tag in unsupported state')
10437}
10438
10439CipherBase.prototype.setAAD = function () {
10440 throw new Error('trying to set aad in unsupported state')
10441}
10442
10443CipherBase.prototype._transform = function (data, _, next) {
10444 var err
10445 try {
10446 if (this.hashMode) {
10447 this._update(data)
10448 } else {
10449 this.push(this._update(data))
10450 }
10451 } catch (e) {
10452 err = e
10453 } finally {
10454 next(err)
10455 }
10456}
10457CipherBase.prototype._flush = function (done) {
10458 var err
10459 try {
10460 this.push(this._final())
10461 } catch (e) {
10462 err = e
10463 } finally {
10464 done(err)
10465 }
10466}
10467CipherBase.prototype._finalOrDigest = function (outputEnc) {
10468 var outData = this._final() || new Buffer('')
10469 if (outputEnc) {
10470 outData = this._toString(outData, outputEnc, true)
10471 }
10472 return outData
10473}
10474
10475CipherBase.prototype._toString = function (value, enc, fin) {
10476 if (!this._decoder) {
10477 this._decoder = new StringDecoder(enc)
10478 this._encoding = enc
10479 }
10480 if (this._encoding !== enc) {
10481 throw new Error('can\'t switch encodings')
10482 }
10483 var out = this._decoder.write(value)
10484 if (fin) {
10485 out += this._decoder.end()
10486 }
10487 return out
10488}
10489
10490}).call(this,require("buffer").Buffer)
10491},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
10492(function (Buffer){
10493'use strict';
10494var inherits = require('inherits')
10495var md5 = require('./md5')
10496var rmd160 = require('ripemd160')
10497var sha = require('sha.js')
10498
10499var Base = require('cipher-base')
10500
10501function HashNoConstructor(hash) {
10502 Base.call(this, 'digest')
10503
10504 this._hash = hash
10505 this.buffers = []
10506}
10507
10508inherits(HashNoConstructor, Base)
10509
10510HashNoConstructor.prototype._update = function (data) {
10511 this.buffers.push(data)
10512}
10513
10514HashNoConstructor.prototype._final = function () {
10515 var buf = Buffer.concat(this.buffers)
10516 var r = this._hash(buf)
10517 this.buffers = null
10518
10519 return r
10520}
10521
10522function Hash(hash) {
10523 Base.call(this, 'digest')
10524
10525 this._hash = hash
10526}
10527
10528inherits(Hash, Base)
10529
10530Hash.prototype._update = function (data) {
10531 this._hash.update(data)
10532}
10533
10534Hash.prototype._final = function () {
10535 return this._hash.digest()
10536}
10537
10538module.exports = function createHash (alg) {
10539 alg = alg.toLowerCase()
10540 if ('md5' === alg) return new HashNoConstructor(md5)
10541 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
10542
10543 return new Hash(sha(alg))
10544}
10545
10546}).call(this,require("buffer").Buffer)
10547},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
10548(function (Buffer){
10549'use strict';
10550var intSize = 4;
10551var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
10552var chrsz = 8;
10553
10554function toArray(buf, bigEndian) {
10555 if ((buf.length % intSize) !== 0) {
10556 var len = buf.length + (intSize - (buf.length % intSize));
10557 buf = Buffer.concat([buf, zeroBuffer], len);
10558 }
10559
10560 var arr = [];
10561 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
10562 for (var i = 0; i < buf.length; i += intSize) {
10563 arr.push(fn.call(buf, i));
10564 }
10565 return arr;
10566}
10567
10568function toBuffer(arr, size, bigEndian) {
10569 var buf = new Buffer(size);
10570 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
10571 for (var i = 0; i < arr.length; i++) {
10572 fn.call(buf, arr[i], i * 4, true);
10573 }
10574 return buf;
10575}
10576
10577function hash(buf, fn, hashSize, bigEndian) {
10578 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
10579 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
10580 return toBuffer(arr, hashSize, bigEndian);
10581}
10582exports.hash = hash;
10583}).call(this,require("buffer").Buffer)
10584},{"buffer":5}],38:[function(require,module,exports){
10585'use strict';
10586/*
10587 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
10588 * Digest Algorithm, as defined in RFC 1321.
10589 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
10590 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
10591 * Distributed under the BSD License
10592 * See http://pajhome.org.uk/crypt/md5 for more info.
10593 */
10594
10595var helpers = require('./helpers');
10596
10597/*
10598 * Calculate the MD5 of an array of little-endian words, and a bit length
10599 */
10600function core_md5(x, len)
10601{
10602 /* append padding */
10603 x[len >> 5] |= 0x80 << ((len) % 32);
10604 x[(((len + 64) >>> 9) << 4) + 14] = len;
10605
10606 var a = 1732584193;
10607 var b = -271733879;
10608 var c = -1732584194;
10609 var d = 271733878;
10610
10611 for(var i = 0; i < x.length; i += 16)
10612 {
10613 var olda = a;
10614 var oldb = b;
10615 var oldc = c;
10616 var oldd = d;
10617
10618 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
10619 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
10620 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
10621 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
10622 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
10623 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
10624 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
10625 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
10626 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
10627 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
10628 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
10629 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
10630 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
10631 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
10632 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
10633 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
10634
10635 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
10636 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
10637 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
10638 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
10639 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
10640 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
10641 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
10642 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
10643 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
10644 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
10645 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
10646 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
10647 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
10648 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
10649 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
10650 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
10651
10652 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
10653 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
10654 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
10655 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
10656 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
10657 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
10658 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
10659 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
10660 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
10661 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
10662 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
10663 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
10664 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
10665 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
10666 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
10667 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
10668
10669 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
10670 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
10671 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
10672 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
10673 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
10674 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
10675 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
10676 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
10677 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
10678 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
10679 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
10680 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
10681 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
10682 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
10683 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
10684 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
10685
10686 a = safe_add(a, olda);
10687 b = safe_add(b, oldb);
10688 c = safe_add(c, oldc);
10689 d = safe_add(d, oldd);
10690 }
10691 return Array(a, b, c, d);
10692
10693}
10694
10695/*
10696 * These functions implement the four basic operations the algorithm uses.
10697 */
10698function md5_cmn(q, a, b, x, s, t)
10699{
10700 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
10701}
10702function md5_ff(a, b, c, d, x, s, t)
10703{
10704 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
10705}
10706function md5_gg(a, b, c, d, x, s, t)
10707{
10708 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
10709}
10710function md5_hh(a, b, c, d, x, s, t)
10711{
10712 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
10713}
10714function md5_ii(a, b, c, d, x, s, t)
10715{
10716 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
10717}
10718
10719/*
10720 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
10721 * to work around bugs in some JS interpreters.
10722 */
10723function safe_add(x, y)
10724{
10725 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
10726 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
10727 return (msw << 16) | (lsw & 0xFFFF);
10728}
10729
10730/*
10731 * Bitwise rotate a 32-bit number to the left.
10732 */
10733function bit_rol(num, cnt)
10734{
10735 return (num << cnt) | (num >>> (32 - cnt));
10736}
10737
10738module.exports = function md5(buf) {
10739 return helpers.hash(buf, core_md5, 16);
10740};
10741},{"./helpers":37}],39:[function(require,module,exports){
10742'use strict';
10743
10744var elliptic = exports;
10745
10746elliptic.version = require('../package.json').version;
10747elliptic.utils = require('./elliptic/utils');
10748elliptic.rand = require('brorand');
10749elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
10750elliptic.curve = require('./elliptic/curve');
10751elliptic.curves = require('./elliptic/curves');
10752
10753// Protocols
10754elliptic.ec = require('./elliptic/ec');
10755elliptic.eddsa = require('./elliptic/eddsa');
10756
10757},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
10758'use strict';
10759
10760var BN = require('bn.js');
10761var elliptic = require('../../elliptic');
10762var utils = elliptic.utils;
10763var getNAF = utils.getNAF;
10764var getJSF = utils.getJSF;
10765var assert = utils.assert;
10766
10767function BaseCurve(type, conf) {
10768 this.type = type;
10769 this.p = new BN(conf.p, 16);
10770
10771 // Use Montgomery, when there is no fast reduction for the prime
10772 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
10773
10774 // Useful for many curves
10775 this.zero = new BN(0).toRed(this.red);
10776 this.one = new BN(1).toRed(this.red);
10777 this.two = new BN(2).toRed(this.red);
10778
10779 // Curve configuration, optional
10780 this.n = conf.n && new BN(conf.n, 16);
10781 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
10782
10783 // Temporary arrays
10784 this._wnafT1 = new Array(4);
10785 this._wnafT2 = new Array(4);
10786 this._wnafT3 = new Array(4);
10787 this._wnafT4 = new Array(4);
10788
10789 // Generalized Greg Maxwell's trick
10790 var adjustCount = this.n && this.p.div(this.n);
10791 if (!adjustCount || adjustCount.cmpn(100) > 0) {
10792 this.redN = null;
10793 } else {
10794 this._maxwellTrick = true;
10795 this.redN = this.n.toRed(this.red);
10796 }
10797}
10798module.exports = BaseCurve;
10799
10800BaseCurve.prototype.point = function point() {
10801 throw new Error('Not implemented');
10802};
10803
10804BaseCurve.prototype.validate = function validate() {
10805 throw new Error('Not implemented');
10806};
10807
10808BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
10809 assert(p.precomputed);
10810 var doubles = p._getDoubles();
10811
10812 var naf = getNAF(k, 1);
10813 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
10814 I /= 3;
10815
10816 // Translate into more windowed form
10817 var repr = [];
10818 for (var j = 0; j < naf.length; j += doubles.step) {
10819 var nafW = 0;
10820 for (var k = j + doubles.step - 1; k >= j; k--)
10821 nafW = (nafW << 1) + naf[k];
10822 repr.push(nafW);
10823 }
10824
10825 var a = this.jpoint(null, null, null);
10826 var b = this.jpoint(null, null, null);
10827 for (var i = I; i > 0; i--) {
10828 for (var j = 0; j < repr.length; j++) {
10829 var nafW = repr[j];
10830 if (nafW === i)
10831 b = b.mixedAdd(doubles.points[j]);
10832 else if (nafW === -i)
10833 b = b.mixedAdd(doubles.points[j].neg());
10834 }
10835 a = a.add(b);
10836 }
10837 return a.toP();
10838};
10839
10840BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
10841 var w = 4;
10842
10843 // Precompute window
10844 var nafPoints = p._getNAFPoints(w);
10845 w = nafPoints.wnd;
10846 var wnd = nafPoints.points;
10847
10848 // Get NAF form
10849 var naf = getNAF(k, w);
10850
10851 // Add `this`*(N+1) for every w-NAF index
10852 var acc = this.jpoint(null, null, null);
10853 for (var i = naf.length - 1; i >= 0; i--) {
10854 // Count zeroes
10855 for (var k = 0; i >= 0 && naf[i] === 0; i--)
10856 k++;
10857 if (i >= 0)
10858 k++;
10859 acc = acc.dblp(k);
10860
10861 if (i < 0)
10862 break;
10863 var z = naf[i];
10864 assert(z !== 0);
10865 if (p.type === 'affine') {
10866 // J +- P
10867 if (z > 0)
10868 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
10869 else
10870 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
10871 } else {
10872 // J +- J
10873 if (z > 0)
10874 acc = acc.add(wnd[(z - 1) >> 1]);
10875 else
10876 acc = acc.add(wnd[(-z - 1) >> 1].neg());
10877 }
10878 }
10879 return p.type === 'affine' ? acc.toP() : acc;
10880};
10881
10882BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
10883 points,
10884 coeffs,
10885 len,
10886 jacobianResult) {
10887 var wndWidth = this._wnafT1;
10888 var wnd = this._wnafT2;
10889 var naf = this._wnafT3;
10890
10891 // Fill all arrays
10892 var max = 0;
10893 for (var i = 0; i < len; i++) {
10894 var p = points[i];
10895 var nafPoints = p._getNAFPoints(defW);
10896 wndWidth[i] = nafPoints.wnd;
10897 wnd[i] = nafPoints.points;
10898 }
10899
10900 // Comb small window NAFs
10901 for (var i = len - 1; i >= 1; i -= 2) {
10902 var a = i - 1;
10903 var b = i;
10904 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
10905 naf[a] = getNAF(coeffs[a], wndWidth[a]);
10906 naf[b] = getNAF(coeffs[b], wndWidth[b]);
10907 max = Math.max(naf[a].length, max);
10908 max = Math.max(naf[b].length, max);
10909 continue;
10910 }
10911
10912 var comb = [
10913 points[a], /* 1 */
10914 null, /* 3 */
10915 null, /* 5 */
10916 points[b] /* 7 */
10917 ];
10918
10919 // Try to avoid Projective points, if possible
10920 if (points[a].y.cmp(points[b].y) === 0) {
10921 comb[1] = points[a].add(points[b]);
10922 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
10923 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
10924 comb[1] = points[a].toJ().mixedAdd(points[b]);
10925 comb[2] = points[a].add(points[b].neg());
10926 } else {
10927 comb[1] = points[a].toJ().mixedAdd(points[b]);
10928 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
10929 }
10930
10931 var index = [
10932 -3, /* -1 -1 */
10933 -1, /* -1 0 */
10934 -5, /* -1 1 */
10935 -7, /* 0 -1 */
10936 0, /* 0 0 */
10937 7, /* 0 1 */
10938 5, /* 1 -1 */
10939 1, /* 1 0 */
10940 3 /* 1 1 */
10941 ];
10942
10943 var jsf = getJSF(coeffs[a], coeffs[b]);
10944 max = Math.max(jsf[0].length, max);
10945 naf[a] = new Array(max);
10946 naf[b] = new Array(max);
10947 for (var j = 0; j < max; j++) {
10948 var ja = jsf[0][j] | 0;
10949 var jb = jsf[1][j] | 0;
10950
10951 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
10952 naf[b][j] = 0;
10953 wnd[a] = comb;
10954 }
10955 }
10956
10957 var acc = this.jpoint(null, null, null);
10958 var tmp = this._wnafT4;
10959 for (var i = max; i >= 0; i--) {
10960 var k = 0;
10961
10962 while (i >= 0) {
10963 var zero = true;
10964 for (var j = 0; j < len; j++) {
10965 tmp[j] = naf[j][i] | 0;
10966 if (tmp[j] !== 0)
10967 zero = false;
10968 }
10969 if (!zero)
10970 break;
10971 k++;
10972 i--;
10973 }
10974 if (i >= 0)
10975 k++;
10976 acc = acc.dblp(k);
10977 if (i < 0)
10978 break;
10979
10980 for (var j = 0; j < len; j++) {
10981 var z = tmp[j];
10982 var p;
10983 if (z === 0)
10984 continue;
10985 else if (z > 0)
10986 p = wnd[j][(z - 1) >> 1];
10987 else if (z < 0)
10988 p = wnd[j][(-z - 1) >> 1].neg();
10989
10990 if (p.type === 'affine')
10991 acc = acc.mixedAdd(p);
10992 else
10993 acc = acc.add(p);
10994 }
10995 }
10996 // Zeroify references
10997 for (var i = 0; i < len; i++)
10998 wnd[i] = null;
10999
11000 if (jacobianResult)
11001 return acc;
11002 else
11003 return acc.toP();
11004};
11005
11006function BasePoint(curve, type) {
11007 this.curve = curve;
11008 this.type = type;
11009 this.precomputed = null;
11010}
11011BaseCurve.BasePoint = BasePoint;
11012
11013BasePoint.prototype.eq = function eq(/*other*/) {
11014 throw new Error('Not implemented');
11015};
11016
11017BasePoint.prototype.validate = function validate() {
11018 return this.curve.validate(this);
11019};
11020
11021BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
11022 bytes = utils.toArray(bytes, enc);
11023
11024 var len = this.p.byteLength();
11025
11026 // uncompressed, hybrid-odd, hybrid-even
11027 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
11028 bytes.length - 1 === 2 * len) {
11029 if (bytes[0] === 0x06)
11030 assert(bytes[bytes.length - 1] % 2 === 0);
11031 else if (bytes[0] === 0x07)
11032 assert(bytes[bytes.length - 1] % 2 === 1);
11033
11034 var res = this.point(bytes.slice(1, 1 + len),
11035 bytes.slice(1 + len, 1 + 2 * len));
11036
11037 return res;
11038 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
11039 bytes.length - 1 === len) {
11040 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
11041 }
11042 throw new Error('Unknown point format');
11043};
11044
11045BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
11046 return this.encode(enc, true);
11047};
11048
11049BasePoint.prototype._encode = function _encode(compact) {
11050 var len = this.curve.p.byteLength();
11051 var x = this.getX().toArray('be', len);
11052
11053 if (compact)
11054 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
11055
11056 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
11057};
11058
11059BasePoint.prototype.encode = function encode(enc, compact) {
11060 return utils.encode(this._encode(compact), enc);
11061};
11062
11063BasePoint.prototype.precompute = function precompute(power) {
11064 if (this.precomputed)
11065 return this;
11066
11067 var precomputed = {
11068 doubles: null,
11069 naf: null,
11070 beta: null
11071 };
11072 precomputed.naf = this._getNAFPoints(8);
11073 precomputed.doubles = this._getDoubles(4, power);
11074 precomputed.beta = this._getBeta();
11075 this.precomputed = precomputed;
11076
11077 return this;
11078};
11079
11080BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
11081 if (!this.precomputed)
11082 return false;
11083
11084 var doubles = this.precomputed.doubles;
11085 if (!doubles)
11086 return false;
11087
11088 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
11089};
11090
11091BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
11092 if (this.precomputed && this.precomputed.doubles)
11093 return this.precomputed.doubles;
11094
11095 var doubles = [ this ];
11096 var acc = this;
11097 for (var i = 0; i < power; i += step) {
11098 for (var j = 0; j < step; j++)
11099 acc = acc.dbl();
11100 doubles.push(acc);
11101 }
11102 return {
11103 step: step,
11104 points: doubles
11105 };
11106};
11107
11108BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
11109 if (this.precomputed && this.precomputed.naf)
11110 return this.precomputed.naf;
11111
11112 var res = [ this ];
11113 var max = (1 << wnd) - 1;
11114 var dbl = max === 1 ? null : this.dbl();
11115 for (var i = 1; i < max; i++)
11116 res[i] = res[i - 1].add(dbl);
11117 return {
11118 wnd: wnd,
11119 points: res
11120 };
11121};
11122
11123BasePoint.prototype._getBeta = function _getBeta() {
11124 return null;
11125};
11126
11127BasePoint.prototype.dblp = function dblp(k) {
11128 var r = this;
11129 for (var i = 0; i < k; i++)
11130 r = r.dbl();
11131 return r;
11132};
11133
11134},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
11135'use strict';
11136
11137var curve = require('../curve');
11138var elliptic = require('../../elliptic');
11139var BN = require('bn.js');
11140var inherits = require('inherits');
11141var Base = curve.base;
11142
11143var assert = elliptic.utils.assert;
11144
11145function EdwardsCurve(conf) {
11146 // NOTE: Important as we are creating point in Base.call()
11147 this.twisted = (conf.a | 0) !== 1;
11148 this.mOneA = this.twisted && (conf.a | 0) === -1;
11149 this.extended = this.mOneA;
11150
11151 Base.call(this, 'edwards', conf);
11152
11153 this.a = new BN(conf.a, 16).umod(this.red.m);
11154 this.a = this.a.toRed(this.red);
11155 this.c = new BN(conf.c, 16).toRed(this.red);
11156 this.c2 = this.c.redSqr();
11157 this.d = new BN(conf.d, 16).toRed(this.red);
11158 this.dd = this.d.redAdd(this.d);
11159
11160 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
11161 this.oneC = (conf.c | 0) === 1;
11162}
11163inherits(EdwardsCurve, Base);
11164module.exports = EdwardsCurve;
11165
11166EdwardsCurve.prototype._mulA = function _mulA(num) {
11167 if (this.mOneA)
11168 return num.redNeg();
11169 else
11170 return this.a.redMul(num);
11171};
11172
11173EdwardsCurve.prototype._mulC = function _mulC(num) {
11174 if (this.oneC)
11175 return num;
11176 else
11177 return this.c.redMul(num);
11178};
11179
11180// Just for compatibility with Short curve
11181EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
11182 return this.point(x, y, z, t);
11183};
11184
11185EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
11186 x = new BN(x, 16);
11187 if (!x.red)
11188 x = x.toRed(this.red);
11189
11190 var x2 = x.redSqr();
11191 var rhs = this.c2.redSub(this.a.redMul(x2));
11192 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
11193
11194 var y2 = rhs.redMul(lhs.redInvm());
11195 var y = y2.redSqrt();
11196 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
11197 throw new Error('invalid point');
11198
11199 var isOdd = y.fromRed().isOdd();
11200 if (odd && !isOdd || !odd && isOdd)
11201 y = y.redNeg();
11202
11203 return this.point(x, y);
11204};
11205
11206EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
11207 y = new BN(y, 16);
11208 if (!y.red)
11209 y = y.toRed(this.red);
11210
11211 // x^2 = (y^2 - 1) / (d y^2 + 1)
11212 var y2 = y.redSqr();
11213 var lhs = y2.redSub(this.one);
11214 var rhs = y2.redMul(this.d).redAdd(this.one);
11215 var x2 = lhs.redMul(rhs.redInvm());
11216
11217 if (x2.cmp(this.zero) === 0) {
11218 if (odd)
11219 throw new Error('invalid point');
11220 else
11221 return this.point(this.zero, y);
11222 }
11223
11224 var x = x2.redSqrt();
11225 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
11226 throw new Error('invalid point');
11227
11228 if (x.isOdd() !== odd)
11229 x = x.redNeg();
11230
11231 return this.point(x, y);
11232};
11233
11234EdwardsCurve.prototype.validate = function validate(point) {
11235 if (point.isInfinity())
11236 return true;
11237
11238 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
11239 point.normalize();
11240
11241 var x2 = point.x.redSqr();
11242 var y2 = point.y.redSqr();
11243 var lhs = x2.redMul(this.a).redAdd(y2);
11244 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
11245
11246 return lhs.cmp(rhs) === 0;
11247};
11248
11249function Point(curve, x, y, z, t) {
11250 Base.BasePoint.call(this, curve, 'projective');
11251 if (x === null && y === null && z === null) {
11252 this.x = this.curve.zero;
11253 this.y = this.curve.one;
11254 this.z = this.curve.one;
11255 this.t = this.curve.zero;
11256 this.zOne = true;
11257 } else {
11258 this.x = new BN(x, 16);
11259 this.y = new BN(y, 16);
11260 this.z = z ? new BN(z, 16) : this.curve.one;
11261 this.t = t && new BN(t, 16);
11262 if (!this.x.red)
11263 this.x = this.x.toRed(this.curve.red);
11264 if (!this.y.red)
11265 this.y = this.y.toRed(this.curve.red);
11266 if (!this.z.red)
11267 this.z = this.z.toRed(this.curve.red);
11268 if (this.t && !this.t.red)
11269 this.t = this.t.toRed(this.curve.red);
11270 this.zOne = this.z === this.curve.one;
11271
11272 // Use extended coordinates
11273 if (this.curve.extended && !this.t) {
11274 this.t = this.x.redMul(this.y);
11275 if (!this.zOne)
11276 this.t = this.t.redMul(this.z.redInvm());
11277 }
11278 }
11279}
11280inherits(Point, Base.BasePoint);
11281
11282EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
11283 return Point.fromJSON(this, obj);
11284};
11285
11286EdwardsCurve.prototype.point = function point(x, y, z, t) {
11287 return new Point(this, x, y, z, t);
11288};
11289
11290Point.fromJSON = function fromJSON(curve, obj) {
11291 return new Point(curve, obj[0], obj[1], obj[2]);
11292};
11293
11294Point.prototype.inspect = function inspect() {
11295 if (this.isInfinity())
11296 return '<EC Point Infinity>';
11297 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
11298 ' y: ' + this.y.fromRed().toString(16, 2) +
11299 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
11300};
11301
11302Point.prototype.isInfinity = function isInfinity() {
11303 // XXX This code assumes that zero is always zero in red
11304 return this.x.cmpn(0) === 0 &&
11305 this.y.cmp(this.z) === 0;
11306};
11307
11308Point.prototype._extDbl = function _extDbl() {
11309 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
11310 // #doubling-dbl-2008-hwcd
11311 // 4M + 4S
11312
11313 // A = X1^2
11314 var a = this.x.redSqr();
11315 // B = Y1^2
11316 var b = this.y.redSqr();
11317 // C = 2 * Z1^2
11318 var c = this.z.redSqr();
11319 c = c.redIAdd(c);
11320 // D = a * A
11321 var d = this.curve._mulA(a);
11322 // E = (X1 + Y1)^2 - A - B
11323 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
11324 // G = D + B
11325 var g = d.redAdd(b);
11326 // F = G - C
11327 var f = g.redSub(c);
11328 // H = D - B
11329 var h = d.redSub(b);
11330 // X3 = E * F
11331 var nx = e.redMul(f);
11332 // Y3 = G * H
11333 var ny = g.redMul(h);
11334 // T3 = E * H
11335 var nt = e.redMul(h);
11336 // Z3 = F * G
11337 var nz = f.redMul(g);
11338 return this.curve.point(nx, ny, nz, nt);
11339};
11340
11341Point.prototype._projDbl = function _projDbl() {
11342 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
11343 // #doubling-dbl-2008-bbjlp
11344 // #doubling-dbl-2007-bl
11345 // and others
11346 // Generally 3M + 4S or 2M + 4S
11347
11348 // B = (X1 + Y1)^2
11349 var b = this.x.redAdd(this.y).redSqr();
11350 // C = X1^2
11351 var c = this.x.redSqr();
11352 // D = Y1^2
11353 var d = this.y.redSqr();
11354
11355 var nx;
11356 var ny;
11357 var nz;
11358 if (this.curve.twisted) {
11359 // E = a * C
11360 var e = this.curve._mulA(c);
11361 // F = E + D
11362 var f = e.redAdd(d);
11363 if (this.zOne) {
11364 // X3 = (B - C - D) * (F - 2)
11365 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
11366 // Y3 = F * (E - D)
11367 ny = f.redMul(e.redSub(d));
11368 // Z3 = F^2 - 2 * F
11369 nz = f.redSqr().redSub(f).redSub(f);
11370 } else {
11371 // H = Z1^2
11372 var h = this.z.redSqr();
11373 // J = F - 2 * H
11374 var j = f.redSub(h).redISub(h);
11375 // X3 = (B-C-D)*J
11376 nx = b.redSub(c).redISub(d).redMul(j);
11377 // Y3 = F * (E - D)
11378 ny = f.redMul(e.redSub(d));
11379 // Z3 = F * J
11380 nz = f.redMul(j);
11381 }
11382 } else {
11383 // E = C + D
11384 var e = c.redAdd(d);
11385 // H = (c * Z1)^2
11386 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
11387 // J = E - 2 * H
11388 var j = e.redSub(h).redSub(h);
11389 // X3 = c * (B - E) * J
11390 nx = this.curve._mulC(b.redISub(e)).redMul(j);
11391 // Y3 = c * E * (C - D)
11392 ny = this.curve._mulC(e).redMul(c.redISub(d));
11393 // Z3 = E * J
11394 nz = e.redMul(j);
11395 }
11396 return this.curve.point(nx, ny, nz);
11397};
11398
11399Point.prototype.dbl = function dbl() {
11400 if (this.isInfinity())
11401 return this;
11402
11403 // Double in extended coordinates
11404 if (this.curve.extended)
11405 return this._extDbl();
11406 else
11407 return this._projDbl();
11408};
11409
11410Point.prototype._extAdd = function _extAdd(p) {
11411 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
11412 // #addition-add-2008-hwcd-3
11413 // 8M
11414
11415 // A = (Y1 - X1) * (Y2 - X2)
11416 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
11417 // B = (Y1 + X1) * (Y2 + X2)
11418 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
11419 // C = T1 * k * T2
11420 var c = this.t.redMul(this.curve.dd).redMul(p.t);
11421 // D = Z1 * 2 * Z2
11422 var d = this.z.redMul(p.z.redAdd(p.z));
11423 // E = B - A
11424 var e = b.redSub(a);
11425 // F = D - C
11426 var f = d.redSub(c);
11427 // G = D + C
11428 var g = d.redAdd(c);
11429 // H = B + A
11430 var h = b.redAdd(a);
11431 // X3 = E * F
11432 var nx = e.redMul(f);
11433 // Y3 = G * H
11434 var ny = g.redMul(h);
11435 // T3 = E * H
11436 var nt = e.redMul(h);
11437 // Z3 = F * G
11438 var nz = f.redMul(g);
11439 return this.curve.point(nx, ny, nz, nt);
11440};
11441
11442Point.prototype._projAdd = function _projAdd(p) {
11443 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
11444 // #addition-add-2008-bbjlp
11445 // #addition-add-2007-bl
11446 // 10M + 1S
11447
11448 // A = Z1 * Z2
11449 var a = this.z.redMul(p.z);
11450 // B = A^2
11451 var b = a.redSqr();
11452 // C = X1 * X2
11453 var c = this.x.redMul(p.x);
11454 // D = Y1 * Y2
11455 var d = this.y.redMul(p.y);
11456 // E = d * C * D
11457 var e = this.curve.d.redMul(c).redMul(d);
11458 // F = B - E
11459 var f = b.redSub(e);
11460 // G = B + E
11461 var g = b.redAdd(e);
11462 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
11463 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
11464 var nx = a.redMul(f).redMul(tmp);
11465 var ny;
11466 var nz;
11467 if (this.curve.twisted) {
11468 // Y3 = A * G * (D - a * C)
11469 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
11470 // Z3 = F * G
11471 nz = f.redMul(g);
11472 } else {
11473 // Y3 = A * G * (D - C)
11474 ny = a.redMul(g).redMul(d.redSub(c));
11475 // Z3 = c * F * G
11476 nz = this.curve._mulC(f).redMul(g);
11477 }
11478 return this.curve.point(nx, ny, nz);
11479};
11480
11481Point.prototype.add = function add(p) {
11482 if (this.isInfinity())
11483 return p;
11484 if (p.isInfinity())
11485 return this;
11486
11487 if (this.curve.extended)
11488 return this._extAdd(p);
11489 else
11490 return this._projAdd(p);
11491};
11492
11493Point.prototype.mul = function mul(k) {
11494 if (this._hasDoubles(k))
11495 return this.curve._fixedNafMul(this, k);
11496 else
11497 return this.curve._wnafMul(this, k);
11498};
11499
11500Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
11501 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
11502};
11503
11504Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
11505 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
11506};
11507
11508Point.prototype.normalize = function normalize() {
11509 if (this.zOne)
11510 return this;
11511
11512 // Normalize coordinates
11513 var zi = this.z.redInvm();
11514 this.x = this.x.redMul(zi);
11515 this.y = this.y.redMul(zi);
11516 if (this.t)
11517 this.t = this.t.redMul(zi);
11518 this.z = this.curve.one;
11519 this.zOne = true;
11520 return this;
11521};
11522
11523Point.prototype.neg = function neg() {
11524 return this.curve.point(this.x.redNeg(),
11525 this.y,
11526 this.z,
11527 this.t && this.t.redNeg());
11528};
11529
11530Point.prototype.getX = function getX() {
11531 this.normalize();
11532 return this.x.fromRed();
11533};
11534
11535Point.prototype.getY = function getY() {
11536 this.normalize();
11537 return this.y.fromRed();
11538};
11539
11540Point.prototype.eq = function eq(other) {
11541 return this === other ||
11542 this.getX().cmp(other.getX()) === 0 &&
11543 this.getY().cmp(other.getY()) === 0;
11544};
11545
11546Point.prototype.eqXToP = function eqXToP(x) {
11547 var rx = x.toRed(this.curve.red).redMul(this.z);
11548 if (this.x.cmp(rx) === 0)
11549 return true;
11550
11551 var xc = x.clone();
11552 var t = this.curve.redN.redMul(this.z);
11553 for (;;) {
11554 xc.iadd(this.curve.n);
11555 if (xc.cmp(this.curve.p) >= 0)
11556 return false;
11557
11558 rx.redIAdd(t);
11559 if (this.x.cmp(rx) === 0)
11560 return true;
11561 }
11562 return false;
11563};
11564
11565// Compatibility with BaseCurve
11566Point.prototype.toP = Point.prototype.normalize;
11567Point.prototype.mixedAdd = Point.prototype.add;
11568
11569},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
11570'use strict';
11571
11572var curve = exports;
11573
11574curve.base = require('./base');
11575curve.short = require('./short');
11576curve.mont = require('./mont');
11577curve.edwards = require('./edwards');
11578
11579},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
11580'use strict';
11581
11582var curve = require('../curve');
11583var BN = require('bn.js');
11584var inherits = require('inherits');
11585var Base = curve.base;
11586
11587var elliptic = require('../../elliptic');
11588var utils = elliptic.utils;
11589
11590function MontCurve(conf) {
11591 Base.call(this, 'mont', conf);
11592
11593 this.a = new BN(conf.a, 16).toRed(this.red);
11594 this.b = new BN(conf.b, 16).toRed(this.red);
11595 this.i4 = new BN(4).toRed(this.red).redInvm();
11596 this.two = new BN(2).toRed(this.red);
11597 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
11598}
11599inherits(MontCurve, Base);
11600module.exports = MontCurve;
11601
11602MontCurve.prototype.validate = function validate(point) {
11603 var x = point.normalize().x;
11604 var x2 = x.redSqr();
11605 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
11606 var y = rhs.redSqrt();
11607
11608 return y.redSqr().cmp(rhs) === 0;
11609};
11610
11611function Point(curve, x, z) {
11612 Base.BasePoint.call(this, curve, 'projective');
11613 if (x === null && z === null) {
11614 this.x = this.curve.one;
11615 this.z = this.curve.zero;
11616 } else {
11617 this.x = new BN(x, 16);
11618 this.z = new BN(z, 16);
11619 if (!this.x.red)
11620 this.x = this.x.toRed(this.curve.red);
11621 if (!this.z.red)
11622 this.z = this.z.toRed(this.curve.red);
11623 }
11624}
11625inherits(Point, Base.BasePoint);
11626
11627MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
11628 return this.point(utils.toArray(bytes, enc), 1);
11629};
11630
11631MontCurve.prototype.point = function point(x, z) {
11632 return new Point(this, x, z);
11633};
11634
11635MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
11636 return Point.fromJSON(this, obj);
11637};
11638
11639Point.prototype.precompute = function precompute() {
11640 // No-op
11641};
11642
11643Point.prototype._encode = function _encode() {
11644 return this.getX().toArray('be', this.curve.p.byteLength());
11645};
11646
11647Point.fromJSON = function fromJSON(curve, obj) {
11648 return new Point(curve, obj[0], obj[1] || curve.one);
11649};
11650
11651Point.prototype.inspect = function inspect() {
11652 if (this.isInfinity())
11653 return '<EC Point Infinity>';
11654 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
11655 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
11656};
11657
11658Point.prototype.isInfinity = function isInfinity() {
11659 // XXX This code assumes that zero is always zero in red
11660 return this.z.cmpn(0) === 0;
11661};
11662
11663Point.prototype.dbl = function dbl() {
11664 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
11665 // 2M + 2S + 4A
11666
11667 // A = X1 + Z1
11668 var a = this.x.redAdd(this.z);
11669 // AA = A^2
11670 var aa = a.redSqr();
11671 // B = X1 - Z1
11672 var b = this.x.redSub(this.z);
11673 // BB = B^2
11674 var bb = b.redSqr();
11675 // C = AA - BB
11676 var c = aa.redSub(bb);
11677 // X3 = AA * BB
11678 var nx = aa.redMul(bb);
11679 // Z3 = C * (BB + A24 * C)
11680 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
11681 return this.curve.point(nx, nz);
11682};
11683
11684Point.prototype.add = function add() {
11685 throw new Error('Not supported on Montgomery curve');
11686};
11687
11688Point.prototype.diffAdd = function diffAdd(p, diff) {
11689 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
11690 // 4M + 2S + 6A
11691
11692 // A = X2 + Z2
11693 var a = this.x.redAdd(this.z);
11694 // B = X2 - Z2
11695 var b = this.x.redSub(this.z);
11696 // C = X3 + Z3
11697 var c = p.x.redAdd(p.z);
11698 // D = X3 - Z3
11699 var d = p.x.redSub(p.z);
11700 // DA = D * A
11701 var da = d.redMul(a);
11702 // CB = C * B
11703 var cb = c.redMul(b);
11704 // X5 = Z1 * (DA + CB)^2
11705 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
11706 // Z5 = X1 * (DA - CB)^2
11707 var nz = diff.x.redMul(da.redISub(cb).redSqr());
11708 return this.curve.point(nx, nz);
11709};
11710
11711Point.prototype.mul = function mul(k) {
11712 var t = k.clone();
11713 var a = this; // (N / 2) * Q + Q
11714 var b = this.curve.point(null, null); // (N / 2) * Q
11715 var c = this; // Q
11716
11717 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
11718 bits.push(t.andln(1));
11719
11720 for (var i = bits.length - 1; i >= 0; i--) {
11721 if (bits[i] === 0) {
11722 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
11723 a = a.diffAdd(b, c);
11724 // N * Q = 2 * ((N / 2) * Q + Q))
11725 b = b.dbl();
11726 } else {
11727 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
11728 b = a.diffAdd(b, c);
11729 // N * Q + Q = 2 * ((N / 2) * Q + Q)
11730 a = a.dbl();
11731 }
11732 }
11733 return b;
11734};
11735
11736Point.prototype.mulAdd = function mulAdd() {
11737 throw new Error('Not supported on Montgomery curve');
11738};
11739
11740Point.prototype.jumlAdd = function jumlAdd() {
11741 throw new Error('Not supported on Montgomery curve');
11742};
11743
11744Point.prototype.eq = function eq(other) {
11745 return this.getX().cmp(other.getX()) === 0;
11746};
11747
11748Point.prototype.normalize = function normalize() {
11749 this.x = this.x.redMul(this.z.redInvm());
11750 this.z = this.curve.one;
11751 return this;
11752};
11753
11754Point.prototype.getX = function getX() {
11755 // Normalize coordinates
11756 this.normalize();
11757
11758 return this.x.fromRed();
11759};
11760
11761},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
11762'use strict';
11763
11764var curve = require('../curve');
11765var elliptic = require('../../elliptic');
11766var BN = require('bn.js');
11767var inherits = require('inherits');
11768var Base = curve.base;
11769
11770var assert = elliptic.utils.assert;
11771
11772function ShortCurve(conf) {
11773 Base.call(this, 'short', conf);
11774
11775 this.a = new BN(conf.a, 16).toRed(this.red);
11776 this.b = new BN(conf.b, 16).toRed(this.red);
11777 this.tinv = this.two.redInvm();
11778
11779 this.zeroA = this.a.fromRed().cmpn(0) === 0;
11780 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
11781
11782 // If the curve is endomorphic, precalculate beta and lambda
11783 this.endo = this._getEndomorphism(conf);
11784 this._endoWnafT1 = new Array(4);
11785 this._endoWnafT2 = new Array(4);
11786}
11787inherits(ShortCurve, Base);
11788module.exports = ShortCurve;
11789
11790ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
11791 // No efficient endomorphism
11792 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
11793 return;
11794
11795 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
11796 var beta;
11797 var lambda;
11798 if (conf.beta) {
11799 beta = new BN(conf.beta, 16).toRed(this.red);
11800 } else {
11801 var betas = this._getEndoRoots(this.p);
11802 // Choose the smallest beta
11803 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
11804 beta = beta.toRed(this.red);
11805 }
11806 if (conf.lambda) {
11807 lambda = new BN(conf.lambda, 16);
11808 } else {
11809 // Choose the lambda that is matching selected beta
11810 var lambdas = this._getEndoRoots(this.n);
11811 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
11812 lambda = lambdas[0];
11813 } else {
11814 lambda = lambdas[1];
11815 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
11816 }
11817 }
11818
11819 // Get basis vectors, used for balanced length-two representation
11820 var basis;
11821 if (conf.basis) {
11822 basis = conf.basis.map(function(vec) {
11823 return {
11824 a: new BN(vec.a, 16),
11825 b: new BN(vec.b, 16)
11826 };
11827 });
11828 } else {
11829 basis = this._getEndoBasis(lambda);
11830 }
11831
11832 return {
11833 beta: beta,
11834 lambda: lambda,
11835 basis: basis
11836 };
11837};
11838
11839ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
11840 // Find roots of for x^2 + x + 1 in F
11841 // Root = (-1 +- Sqrt(-3)) / 2
11842 //
11843 var red = num === this.p ? this.red : BN.mont(num);
11844 var tinv = new BN(2).toRed(red).redInvm();
11845 var ntinv = tinv.redNeg();
11846
11847 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
11848
11849 var l1 = ntinv.redAdd(s).fromRed();
11850 var l2 = ntinv.redSub(s).fromRed();
11851 return [ l1, l2 ];
11852};
11853
11854ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
11855 // aprxSqrt >= sqrt(this.n)
11856 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
11857
11858 // 3.74
11859 // Run EGCD, until r(L + 1) < aprxSqrt
11860 var u = lambda;
11861 var v = this.n.clone();
11862 var x1 = new BN(1);
11863 var y1 = new BN(0);
11864 var x2 = new BN(0);
11865 var y2 = new BN(1);
11866
11867 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
11868 var a0;
11869 var b0;
11870 // First vector
11871 var a1;
11872 var b1;
11873 // Second vector
11874 var a2;
11875 var b2;
11876
11877 var prevR;
11878 var i = 0;
11879 var r;
11880 var x;
11881 while (u.cmpn(0) !== 0) {
11882 var q = v.div(u);
11883 r = v.sub(q.mul(u));
11884 x = x2.sub(q.mul(x1));
11885 var y = y2.sub(q.mul(y1));
11886
11887 if (!a1 && r.cmp(aprxSqrt) < 0) {
11888 a0 = prevR.neg();
11889 b0 = x1;
11890 a1 = r.neg();
11891 b1 = x;
11892 } else if (a1 && ++i === 2) {
11893 break;
11894 }
11895 prevR = r;
11896
11897 v = u;
11898 u = r;
11899 x2 = x1;
11900 x1 = x;
11901 y2 = y1;
11902 y1 = y;
11903 }
11904 a2 = r.neg();
11905 b2 = x;
11906
11907 var len1 = a1.sqr().add(b1.sqr());
11908 var len2 = a2.sqr().add(b2.sqr());
11909 if (len2.cmp(len1) >= 0) {
11910 a2 = a0;
11911 b2 = b0;
11912 }
11913
11914 // Normalize signs
11915 if (a1.negative) {
11916 a1 = a1.neg();
11917 b1 = b1.neg();
11918 }
11919 if (a2.negative) {
11920 a2 = a2.neg();
11921 b2 = b2.neg();
11922 }
11923
11924 return [
11925 { a: a1, b: b1 },
11926 { a: a2, b: b2 }
11927 ];
11928};
11929
11930ShortCurve.prototype._endoSplit = function _endoSplit(k) {
11931 var basis = this.endo.basis;
11932 var v1 = basis[0];
11933 var v2 = basis[1];
11934
11935 var c1 = v2.b.mul(k).divRound(this.n);
11936 var c2 = v1.b.neg().mul(k).divRound(this.n);
11937
11938 var p1 = c1.mul(v1.a);
11939 var p2 = c2.mul(v2.a);
11940 var q1 = c1.mul(v1.b);
11941 var q2 = c2.mul(v2.b);
11942
11943 // Calculate answer
11944 var k1 = k.sub(p1).sub(p2);
11945 var k2 = q1.add(q2).neg();
11946 return { k1: k1, k2: k2 };
11947};
11948
11949ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
11950 x = new BN(x, 16);
11951 if (!x.red)
11952 x = x.toRed(this.red);
11953
11954 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
11955 var y = y2.redSqrt();
11956 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
11957 throw new Error('invalid point');
11958
11959 // XXX Is there any way to tell if the number is odd without converting it
11960 // to non-red form?
11961 var isOdd = y.fromRed().isOdd();
11962 if (odd && !isOdd || !odd && isOdd)
11963 y = y.redNeg();
11964
11965 return this.point(x, y);
11966};
11967
11968ShortCurve.prototype.validate = function validate(point) {
11969 if (point.inf)
11970 return true;
11971
11972 var x = point.x;
11973 var y = point.y;
11974
11975 var ax = this.a.redMul(x);
11976 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
11977 return y.redSqr().redISub(rhs).cmpn(0) === 0;
11978};
11979
11980ShortCurve.prototype._endoWnafMulAdd =
11981 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
11982 var npoints = this._endoWnafT1;
11983 var ncoeffs = this._endoWnafT2;
11984 for (var i = 0; i < points.length; i++) {
11985 var split = this._endoSplit(coeffs[i]);
11986 var p = points[i];
11987 var beta = p._getBeta();
11988
11989 if (split.k1.negative) {
11990 split.k1.ineg();
11991 p = p.neg(true);
11992 }
11993 if (split.k2.negative) {
11994 split.k2.ineg();
11995 beta = beta.neg(true);
11996 }
11997
11998 npoints[i * 2] = p;
11999 npoints[i * 2 + 1] = beta;
12000 ncoeffs[i * 2] = split.k1;
12001 ncoeffs[i * 2 + 1] = split.k2;
12002 }
12003 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
12004
12005 // Clean-up references to points and coefficients
12006 for (var j = 0; j < i * 2; j++) {
12007 npoints[j] = null;
12008 ncoeffs[j] = null;
12009 }
12010 return res;
12011};
12012
12013function Point(curve, x, y, isRed) {
12014 Base.BasePoint.call(this, curve, 'affine');
12015 if (x === null && y === null) {
12016 this.x = null;
12017 this.y = null;
12018 this.inf = true;
12019 } else {
12020 this.x = new BN(x, 16);
12021 this.y = new BN(y, 16);
12022 // Force redgomery representation when loading from JSON
12023 if (isRed) {
12024 this.x.forceRed(this.curve.red);
12025 this.y.forceRed(this.curve.red);
12026 }
12027 if (!this.x.red)
12028 this.x = this.x.toRed(this.curve.red);
12029 if (!this.y.red)
12030 this.y = this.y.toRed(this.curve.red);
12031 this.inf = false;
12032 }
12033}
12034inherits(Point, Base.BasePoint);
12035
12036ShortCurve.prototype.point = function point(x, y, isRed) {
12037 return new Point(this, x, y, isRed);
12038};
12039
12040ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
12041 return Point.fromJSON(this, obj, red);
12042};
12043
12044Point.prototype._getBeta = function _getBeta() {
12045 if (!this.curve.endo)
12046 return;
12047
12048 var pre = this.precomputed;
12049 if (pre && pre.beta)
12050 return pre.beta;
12051
12052 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
12053 if (pre) {
12054 var curve = this.curve;
12055 var endoMul = function(p) {
12056 return curve.point(p.x.redMul(curve.endo.beta), p.y);
12057 };
12058 pre.beta = beta;
12059 beta.precomputed = {
12060 beta: null,
12061 naf: pre.naf && {
12062 wnd: pre.naf.wnd,
12063 points: pre.naf.points.map(endoMul)
12064 },
12065 doubles: pre.doubles && {
12066 step: pre.doubles.step,
12067 points: pre.doubles.points.map(endoMul)
12068 }
12069 };
12070 }
12071 return beta;
12072};
12073
12074Point.prototype.toJSON = function toJSON() {
12075 if (!this.precomputed)
12076 return [ this.x, this.y ];
12077
12078 return [ this.x, this.y, this.precomputed && {
12079 doubles: this.precomputed.doubles && {
12080 step: this.precomputed.doubles.step,
12081 points: this.precomputed.doubles.points.slice(1)
12082 },
12083 naf: this.precomputed.naf && {
12084 wnd: this.precomputed.naf.wnd,
12085 points: this.precomputed.naf.points.slice(1)
12086 }
12087 } ];
12088};
12089
12090Point.fromJSON = function fromJSON(curve, obj, red) {
12091 if (typeof obj === 'string')
12092 obj = JSON.parse(obj);
12093 var res = curve.point(obj[0], obj[1], red);
12094 if (!obj[2])
12095 return res;
12096
12097 function obj2point(obj) {
12098 return curve.point(obj[0], obj[1], red);
12099 }
12100
12101 var pre = obj[2];
12102 res.precomputed = {
12103 beta: null,
12104 doubles: pre.doubles && {
12105 step: pre.doubles.step,
12106 points: [ res ].concat(pre.doubles.points.map(obj2point))
12107 },
12108 naf: pre.naf && {
12109 wnd: pre.naf.wnd,
12110 points: [ res ].concat(pre.naf.points.map(obj2point))
12111 }
12112 };
12113 return res;
12114};
12115
12116Point.prototype.inspect = function inspect() {
12117 if (this.isInfinity())
12118 return '<EC Point Infinity>';
12119 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
12120 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
12121};
12122
12123Point.prototype.isInfinity = function isInfinity() {
12124 return this.inf;
12125};
12126
12127Point.prototype.add = function add(p) {
12128 // O + P = P
12129 if (this.inf)
12130 return p;
12131
12132 // P + O = P
12133 if (p.inf)
12134 return this;
12135
12136 // P + P = 2P
12137 if (this.eq(p))
12138 return this.dbl();
12139
12140 // P + (-P) = O
12141 if (this.neg().eq(p))
12142 return this.curve.point(null, null);
12143
12144 // P + Q = O
12145 if (this.x.cmp(p.x) === 0)
12146 return this.curve.point(null, null);
12147
12148 var c = this.y.redSub(p.y);
12149 if (c.cmpn(0) !== 0)
12150 c = c.redMul(this.x.redSub(p.x).redInvm());
12151 var nx = c.redSqr().redISub(this.x).redISub(p.x);
12152 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
12153 return this.curve.point(nx, ny);
12154};
12155
12156Point.prototype.dbl = function dbl() {
12157 if (this.inf)
12158 return this;
12159
12160 // 2P = O
12161 var ys1 = this.y.redAdd(this.y);
12162 if (ys1.cmpn(0) === 0)
12163 return this.curve.point(null, null);
12164
12165 var a = this.curve.a;
12166
12167 var x2 = this.x.redSqr();
12168 var dyinv = ys1.redInvm();
12169 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
12170
12171 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
12172 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
12173 return this.curve.point(nx, ny);
12174};
12175
12176Point.prototype.getX = function getX() {
12177 return this.x.fromRed();
12178};
12179
12180Point.prototype.getY = function getY() {
12181 return this.y.fromRed();
12182};
12183
12184Point.prototype.mul = function mul(k) {
12185 k = new BN(k, 16);
12186
12187 if (this._hasDoubles(k))
12188 return this.curve._fixedNafMul(this, k);
12189 else if (this.curve.endo)
12190 return this.curve._endoWnafMulAdd([ this ], [ k ]);
12191 else
12192 return this.curve._wnafMul(this, k);
12193};
12194
12195Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
12196 var points = [ this, p2 ];
12197 var coeffs = [ k1, k2 ];
12198 if (this.curve.endo)
12199 return this.curve._endoWnafMulAdd(points, coeffs);
12200 else
12201 return this.curve._wnafMulAdd(1, points, coeffs, 2);
12202};
12203
12204Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
12205 var points = [ this, p2 ];
12206 var coeffs = [ k1, k2 ];
12207 if (this.curve.endo)
12208 return this.curve._endoWnafMulAdd(points, coeffs, true);
12209 else
12210 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
12211};
12212
12213Point.prototype.eq = function eq(p) {
12214 return this === p ||
12215 this.inf === p.inf &&
12216 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
12217};
12218
12219Point.prototype.neg = function neg(_precompute) {
12220 if (this.inf)
12221 return this;
12222
12223 var res = this.curve.point(this.x, this.y.redNeg());
12224 if (_precompute && this.precomputed) {
12225 var pre = this.precomputed;
12226 var negate = function(p) {
12227 return p.neg();
12228 };
12229 res.precomputed = {
12230 naf: pre.naf && {
12231 wnd: pre.naf.wnd,
12232 points: pre.naf.points.map(negate)
12233 },
12234 doubles: pre.doubles && {
12235 step: pre.doubles.step,
12236 points: pre.doubles.points.map(negate)
12237 }
12238 };
12239 }
12240 return res;
12241};
12242
12243Point.prototype.toJ = function toJ() {
12244 if (this.inf)
12245 return this.curve.jpoint(null, null, null);
12246
12247 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
12248 return res;
12249};
12250
12251function JPoint(curve, x, y, z) {
12252 Base.BasePoint.call(this, curve, 'jacobian');
12253 if (x === null && y === null && z === null) {
12254 this.x = this.curve.one;
12255 this.y = this.curve.one;
12256 this.z = new BN(0);
12257 } else {
12258 this.x = new BN(x, 16);
12259 this.y = new BN(y, 16);
12260 this.z = new BN(z, 16);
12261 }
12262 if (!this.x.red)
12263 this.x = this.x.toRed(this.curve.red);
12264 if (!this.y.red)
12265 this.y = this.y.toRed(this.curve.red);
12266 if (!this.z.red)
12267 this.z = this.z.toRed(this.curve.red);
12268
12269 this.zOne = this.z === this.curve.one;
12270}
12271inherits(JPoint, Base.BasePoint);
12272
12273ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
12274 return new JPoint(this, x, y, z);
12275};
12276
12277JPoint.prototype.toP = function toP() {
12278 if (this.isInfinity())
12279 return this.curve.point(null, null);
12280
12281 var zinv = this.z.redInvm();
12282 var zinv2 = zinv.redSqr();
12283 var ax = this.x.redMul(zinv2);
12284 var ay = this.y.redMul(zinv2).redMul(zinv);
12285
12286 return this.curve.point(ax, ay);
12287};
12288
12289JPoint.prototype.neg = function neg() {
12290 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
12291};
12292
12293JPoint.prototype.add = function add(p) {
12294 // O + P = P
12295 if (this.isInfinity())
12296 return p;
12297
12298 // P + O = P
12299 if (p.isInfinity())
12300 return this;
12301
12302 // 12M + 4S + 7A
12303 var pz2 = p.z.redSqr();
12304 var z2 = this.z.redSqr();
12305 var u1 = this.x.redMul(pz2);
12306 var u2 = p.x.redMul(z2);
12307 var s1 = this.y.redMul(pz2.redMul(p.z));
12308 var s2 = p.y.redMul(z2.redMul(this.z));
12309
12310 var h = u1.redSub(u2);
12311 var r = s1.redSub(s2);
12312 if (h.cmpn(0) === 0) {
12313 if (r.cmpn(0) !== 0)
12314 return this.curve.jpoint(null, null, null);
12315 else
12316 return this.dbl();
12317 }
12318
12319 var h2 = h.redSqr();
12320 var h3 = h2.redMul(h);
12321 var v = u1.redMul(h2);
12322
12323 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
12324 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
12325 var nz = this.z.redMul(p.z).redMul(h);
12326
12327 return this.curve.jpoint(nx, ny, nz);
12328};
12329
12330JPoint.prototype.mixedAdd = function mixedAdd(p) {
12331 // O + P = P
12332 if (this.isInfinity())
12333 return p.toJ();
12334
12335 // P + O = P
12336 if (p.isInfinity())
12337 return this;
12338
12339 // 8M + 3S + 7A
12340 var z2 = this.z.redSqr();
12341 var u1 = this.x;
12342 var u2 = p.x.redMul(z2);
12343 var s1 = this.y;
12344 var s2 = p.y.redMul(z2).redMul(this.z);
12345
12346 var h = u1.redSub(u2);
12347 var r = s1.redSub(s2);
12348 if (h.cmpn(0) === 0) {
12349 if (r.cmpn(0) !== 0)
12350 return this.curve.jpoint(null, null, null);
12351 else
12352 return this.dbl();
12353 }
12354
12355 var h2 = h.redSqr();
12356 var h3 = h2.redMul(h);
12357 var v = u1.redMul(h2);
12358
12359 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
12360 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
12361 var nz = this.z.redMul(h);
12362
12363 return this.curve.jpoint(nx, ny, nz);
12364};
12365
12366JPoint.prototype.dblp = function dblp(pow) {
12367 if (pow === 0)
12368 return this;
12369 if (this.isInfinity())
12370 return this;
12371 if (!pow)
12372 return this.dbl();
12373
12374 if (this.curve.zeroA || this.curve.threeA) {
12375 var r = this;
12376 for (var i = 0; i < pow; i++)
12377 r = r.dbl();
12378 return r;
12379 }
12380
12381 // 1M + 2S + 1A + N * (4S + 5M + 8A)
12382 // N = 1 => 6M + 6S + 9A
12383 var a = this.curve.a;
12384 var tinv = this.curve.tinv;
12385
12386 var jx = this.x;
12387 var jy = this.y;
12388 var jz = this.z;
12389 var jz4 = jz.redSqr().redSqr();
12390
12391 // Reuse results
12392 var jyd = jy.redAdd(jy);
12393 for (var i = 0; i < pow; i++) {
12394 var jx2 = jx.redSqr();
12395 var jyd2 = jyd.redSqr();
12396 var jyd4 = jyd2.redSqr();
12397 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
12398
12399 var t1 = jx.redMul(jyd2);
12400 var nx = c.redSqr().redISub(t1.redAdd(t1));
12401 var t2 = t1.redISub(nx);
12402 var dny = c.redMul(t2);
12403 dny = dny.redIAdd(dny).redISub(jyd4);
12404 var nz = jyd.redMul(jz);
12405 if (i + 1 < pow)
12406 jz4 = jz4.redMul(jyd4);
12407
12408 jx = nx;
12409 jz = nz;
12410 jyd = dny;
12411 }
12412
12413 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
12414};
12415
12416JPoint.prototype.dbl = function dbl() {
12417 if (this.isInfinity())
12418 return this;
12419
12420 if (this.curve.zeroA)
12421 return this._zeroDbl();
12422 else if (this.curve.threeA)
12423 return this._threeDbl();
12424 else
12425 return this._dbl();
12426};
12427
12428JPoint.prototype._zeroDbl = function _zeroDbl() {
12429 var nx;
12430 var ny;
12431 var nz;
12432 // Z = 1
12433 if (this.zOne) {
12434 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
12435 // #doubling-mdbl-2007-bl
12436 // 1M + 5S + 14A
12437
12438 // XX = X1^2
12439 var xx = this.x.redSqr();
12440 // YY = Y1^2
12441 var yy = this.y.redSqr();
12442 // YYYY = YY^2
12443 var yyyy = yy.redSqr();
12444 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
12445 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12446 s = s.redIAdd(s);
12447 // M = 3 * XX + a; a = 0
12448 var m = xx.redAdd(xx).redIAdd(xx);
12449 // T = M ^ 2 - 2*S
12450 var t = m.redSqr().redISub(s).redISub(s);
12451
12452 // 8 * YYYY
12453 var yyyy8 = yyyy.redIAdd(yyyy);
12454 yyyy8 = yyyy8.redIAdd(yyyy8);
12455 yyyy8 = yyyy8.redIAdd(yyyy8);
12456
12457 // X3 = T
12458 nx = t;
12459 // Y3 = M * (S - T) - 8 * YYYY
12460 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
12461 // Z3 = 2*Y1
12462 nz = this.y.redAdd(this.y);
12463 } else {
12464 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
12465 // #doubling-dbl-2009-l
12466 // 2M + 5S + 13A
12467
12468 // A = X1^2
12469 var a = this.x.redSqr();
12470 // B = Y1^2
12471 var b = this.y.redSqr();
12472 // C = B^2
12473 var c = b.redSqr();
12474 // D = 2 * ((X1 + B)^2 - A - C)
12475 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
12476 d = d.redIAdd(d);
12477 // E = 3 * A
12478 var e = a.redAdd(a).redIAdd(a);
12479 // F = E^2
12480 var f = e.redSqr();
12481
12482 // 8 * C
12483 var c8 = c.redIAdd(c);
12484 c8 = c8.redIAdd(c8);
12485 c8 = c8.redIAdd(c8);
12486
12487 // X3 = F - 2 * D
12488 nx = f.redISub(d).redISub(d);
12489 // Y3 = E * (D - X3) - 8 * C
12490 ny = e.redMul(d.redISub(nx)).redISub(c8);
12491 // Z3 = 2 * Y1 * Z1
12492 nz = this.y.redMul(this.z);
12493 nz = nz.redIAdd(nz);
12494 }
12495
12496 return this.curve.jpoint(nx, ny, nz);
12497};
12498
12499JPoint.prototype._threeDbl = function _threeDbl() {
12500 var nx;
12501 var ny;
12502 var nz;
12503 // Z = 1
12504 if (this.zOne) {
12505 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
12506 // #doubling-mdbl-2007-bl
12507 // 1M + 5S + 15A
12508
12509 // XX = X1^2
12510 var xx = this.x.redSqr();
12511 // YY = Y1^2
12512 var yy = this.y.redSqr();
12513 // YYYY = YY^2
12514 var yyyy = yy.redSqr();
12515 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
12516 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12517 s = s.redIAdd(s);
12518 // M = 3 * XX + a
12519 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
12520 // T = M^2 - 2 * S
12521 var t = m.redSqr().redISub(s).redISub(s);
12522 // X3 = T
12523 nx = t;
12524 // Y3 = M * (S - T) - 8 * YYYY
12525 var yyyy8 = yyyy.redIAdd(yyyy);
12526 yyyy8 = yyyy8.redIAdd(yyyy8);
12527 yyyy8 = yyyy8.redIAdd(yyyy8);
12528 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
12529 // Z3 = 2 * Y1
12530 nz = this.y.redAdd(this.y);
12531 } else {
12532 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
12533 // 3M + 5S
12534
12535 // delta = Z1^2
12536 var delta = this.z.redSqr();
12537 // gamma = Y1^2
12538 var gamma = this.y.redSqr();
12539 // beta = X1 * gamma
12540 var beta = this.x.redMul(gamma);
12541 // alpha = 3 * (X1 - delta) * (X1 + delta)
12542 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
12543 alpha = alpha.redAdd(alpha).redIAdd(alpha);
12544 // X3 = alpha^2 - 8 * beta
12545 var beta4 = beta.redIAdd(beta);
12546 beta4 = beta4.redIAdd(beta4);
12547 var beta8 = beta4.redAdd(beta4);
12548 nx = alpha.redSqr().redISub(beta8);
12549 // Z3 = (Y1 + Z1)^2 - gamma - delta
12550 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
12551 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
12552 var ggamma8 = gamma.redSqr();
12553 ggamma8 = ggamma8.redIAdd(ggamma8);
12554 ggamma8 = ggamma8.redIAdd(ggamma8);
12555 ggamma8 = ggamma8.redIAdd(ggamma8);
12556 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
12557 }
12558
12559 return this.curve.jpoint(nx, ny, nz);
12560};
12561
12562JPoint.prototype._dbl = function _dbl() {
12563 var a = this.curve.a;
12564
12565 // 4M + 6S + 10A
12566 var jx = this.x;
12567 var jy = this.y;
12568 var jz = this.z;
12569 var jz4 = jz.redSqr().redSqr();
12570
12571 var jx2 = jx.redSqr();
12572 var jy2 = jy.redSqr();
12573
12574 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
12575
12576 var jxd4 = jx.redAdd(jx);
12577 jxd4 = jxd4.redIAdd(jxd4);
12578 var t1 = jxd4.redMul(jy2);
12579 var nx = c.redSqr().redISub(t1.redAdd(t1));
12580 var t2 = t1.redISub(nx);
12581
12582 var jyd8 = jy2.redSqr();
12583 jyd8 = jyd8.redIAdd(jyd8);
12584 jyd8 = jyd8.redIAdd(jyd8);
12585 jyd8 = jyd8.redIAdd(jyd8);
12586 var ny = c.redMul(t2).redISub(jyd8);
12587 var nz = jy.redAdd(jy).redMul(jz);
12588
12589 return this.curve.jpoint(nx, ny, nz);
12590};
12591
12592JPoint.prototype.trpl = function trpl() {
12593 if (!this.curve.zeroA)
12594 return this.dbl().add(this);
12595
12596 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
12597 // 5M + 10S + ...
12598
12599 // XX = X1^2
12600 var xx = this.x.redSqr();
12601 // YY = Y1^2
12602 var yy = this.y.redSqr();
12603 // ZZ = Z1^2
12604 var zz = this.z.redSqr();
12605 // YYYY = YY^2
12606 var yyyy = yy.redSqr();
12607 // M = 3 * XX + a * ZZ2; a = 0
12608 var m = xx.redAdd(xx).redIAdd(xx);
12609 // MM = M^2
12610 var mm = m.redSqr();
12611 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
12612 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
12613 e = e.redIAdd(e);
12614 e = e.redAdd(e).redIAdd(e);
12615 e = e.redISub(mm);
12616 // EE = E^2
12617 var ee = e.redSqr();
12618 // T = 16*YYYY
12619 var t = yyyy.redIAdd(yyyy);
12620 t = t.redIAdd(t);
12621 t = t.redIAdd(t);
12622 t = t.redIAdd(t);
12623 // U = (M + E)^2 - MM - EE - T
12624 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
12625 // X3 = 4 * (X1 * EE - 4 * YY * U)
12626 var yyu4 = yy.redMul(u);
12627 yyu4 = yyu4.redIAdd(yyu4);
12628 yyu4 = yyu4.redIAdd(yyu4);
12629 var nx = this.x.redMul(ee).redISub(yyu4);
12630 nx = nx.redIAdd(nx);
12631 nx = nx.redIAdd(nx);
12632 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
12633 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
12634 ny = ny.redIAdd(ny);
12635 ny = ny.redIAdd(ny);
12636 ny = ny.redIAdd(ny);
12637 // Z3 = (Z1 + E)^2 - ZZ - EE
12638 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
12639
12640 return this.curve.jpoint(nx, ny, nz);
12641};
12642
12643JPoint.prototype.mul = function mul(k, kbase) {
12644 k = new BN(k, kbase);
12645
12646 return this.curve._wnafMul(this, k);
12647};
12648
12649JPoint.prototype.eq = function eq(p) {
12650 if (p.type === 'affine')
12651 return this.eq(p.toJ());
12652
12653 if (this === p)
12654 return true;
12655
12656 // x1 * z2^2 == x2 * z1^2
12657 var z2 = this.z.redSqr();
12658 var pz2 = p.z.redSqr();
12659 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
12660 return false;
12661
12662 // y1 * z2^3 == y2 * z1^3
12663 var z3 = z2.redMul(this.z);
12664 var pz3 = pz2.redMul(p.z);
12665 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
12666};
12667
12668JPoint.prototype.eqXToP = function eqXToP(x) {
12669 var zs = this.z.redSqr();
12670 var rx = x.toRed(this.curve.red).redMul(zs);
12671 if (this.x.cmp(rx) === 0)
12672 return true;
12673
12674 var xc = x.clone();
12675 var t = this.curve.redN.redMul(zs);
12676 for (;;) {
12677 xc.iadd(this.curve.n);
12678 if (xc.cmp(this.curve.p) >= 0)
12679 return false;
12680
12681 rx.redIAdd(t);
12682 if (this.x.cmp(rx) === 0)
12683 return true;
12684 }
12685 return false;
12686};
12687
12688JPoint.prototype.inspect = function inspect() {
12689 if (this.isInfinity())
12690 return '<EC JPoint Infinity>';
12691 return '<EC JPoint x: ' + this.x.toString(16, 2) +
12692 ' y: ' + this.y.toString(16, 2) +
12693 ' z: ' + this.z.toString(16, 2) + '>';
12694};
12695
12696JPoint.prototype.isInfinity = function isInfinity() {
12697 // XXX This code assumes that zero is always zero in red
12698 return this.z.cmpn(0) === 0;
12699};
12700
12701},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
12702'use strict';
12703
12704var curves = exports;
12705
12706var hash = require('hash.js');
12707var elliptic = require('../elliptic');
12708
12709var assert = elliptic.utils.assert;
12710
12711function PresetCurve(options) {
12712 if (options.type === 'short')
12713 this.curve = new elliptic.curve.short(options);
12714 else if (options.type === 'edwards')
12715 this.curve = new elliptic.curve.edwards(options);
12716 else
12717 this.curve = new elliptic.curve.mont(options);
12718 this.g = this.curve.g;
12719 this.n = this.curve.n;
12720 this.hash = options.hash;
12721
12722 assert(this.g.validate(), 'Invalid curve');
12723 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
12724}
12725curves.PresetCurve = PresetCurve;
12726
12727function defineCurve(name, options) {
12728 Object.defineProperty(curves, name, {
12729 configurable: true,
12730 enumerable: true,
12731 get: function() {
12732 var curve = new PresetCurve(options);
12733 Object.defineProperty(curves, name, {
12734 configurable: true,
12735 enumerable: true,
12736 value: curve
12737 });
12738 return curve;
12739 }
12740 });
12741}
12742
12743defineCurve('p192', {
12744 type: 'short',
12745 prime: 'p192',
12746 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
12747 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
12748 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
12749 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
12750 hash: hash.sha256,
12751 gRed: false,
12752 g: [
12753 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
12754 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
12755 ]
12756});
12757
12758defineCurve('p224', {
12759 type: 'short',
12760 prime: 'p224',
12761 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
12762 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
12763 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
12764 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
12765 hash: hash.sha256,
12766 gRed: false,
12767 g: [
12768 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
12769 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
12770 ]
12771});
12772
12773defineCurve('p256', {
12774 type: 'short',
12775 prime: null,
12776 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
12777 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
12778 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
12779 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
12780 hash: hash.sha256,
12781 gRed: false,
12782 g: [
12783 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
12784 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
12785 ]
12786});
12787
12788defineCurve('p384', {
12789 type: 'short',
12790 prime: null,
12791 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12792 'fffffffe ffffffff 00000000 00000000 ffffffff',
12793 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12794 'fffffffe ffffffff 00000000 00000000 fffffffc',
12795 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
12796 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
12797 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
12798 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
12799 hash: hash.sha384,
12800 gRed: false,
12801 g: [
12802 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
12803 '5502f25d bf55296c 3a545e38 72760ab7',
12804 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
12805 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
12806 ]
12807});
12808
12809defineCurve('p521', {
12810 type: 'short',
12811 prime: null,
12812 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12813 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12814 'ffffffff ffffffff ffffffff ffffffff ffffffff',
12815 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12816 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12817 'ffffffff ffffffff ffffffff ffffffff fffffffc',
12818 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
12819 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
12820 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
12821 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
12822 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
12823 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
12824 hash: hash.sha512,
12825 gRed: false,
12826 g: [
12827 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
12828 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
12829 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
12830 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
12831 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
12832 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
12833 ]
12834});
12835
12836defineCurve('curve25519', {
12837 type: 'mont',
12838 prime: 'p25519',
12839 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
12840 a: '76d06',
12841 b: '1',
12842 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
12843 hash: hash.sha256,
12844 gRed: false,
12845 g: [
12846 '9'
12847 ]
12848});
12849
12850defineCurve('ed25519', {
12851 type: 'edwards',
12852 prime: 'p25519',
12853 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
12854 a: '-1',
12855 c: '1',
12856 // -121665 * (121666^(-1)) (mod P)
12857 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
12858 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
12859 hash: hash.sha256,
12860 gRed: false,
12861 g: [
12862 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
12863
12864 // 4/5
12865 '6666666666666666666666666666666666666666666666666666666666666658'
12866 ]
12867});
12868
12869var pre;
12870try {
12871 pre = require('./precomputed/secp256k1');
12872} catch (e) {
12873 pre = undefined;
12874}
12875
12876defineCurve('secp256k1', {
12877 type: 'short',
12878 prime: 'k256',
12879 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
12880 a: '0',
12881 b: '7',
12882 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
12883 h: '1',
12884 hash: hash.sha256,
12885
12886 // Precomputed endomorphism
12887 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
12888 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
12889 basis: [
12890 {
12891 a: '3086d221a7d46bcde86c90e49284eb15',
12892 b: '-e4437ed6010e88286f547fa90abfe4c3'
12893 },
12894 {
12895 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
12896 b: '3086d221a7d46bcde86c90e49284eb15'
12897 }
12898 ],
12899
12900 gRed: false,
12901 g: [
12902 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
12903 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
12904 pre
12905 ]
12906});
12907
12908},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
12909'use strict';
12910
12911var BN = require('bn.js');
12912var elliptic = require('../../elliptic');
12913var utils = elliptic.utils;
12914var assert = utils.assert;
12915
12916var KeyPair = require('./key');
12917var Signature = require('./signature');
12918
12919function EC(options) {
12920 if (!(this instanceof EC))
12921 return new EC(options);
12922
12923 // Shortcut `elliptic.ec(curve-name)`
12924 if (typeof options === 'string') {
12925 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
12926
12927 options = elliptic.curves[options];
12928 }
12929
12930 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
12931 if (options instanceof elliptic.curves.PresetCurve)
12932 options = { curve: options };
12933
12934 this.curve = options.curve.curve;
12935 this.n = this.curve.n;
12936 this.nh = this.n.ushrn(1);
12937 this.g = this.curve.g;
12938
12939 // Point on curve
12940 this.g = options.curve.g;
12941 this.g.precompute(options.curve.n.bitLength() + 1);
12942
12943 // Hash for function for DRBG
12944 this.hash = options.hash || options.curve.hash;
12945}
12946module.exports = EC;
12947
12948EC.prototype.keyPair = function keyPair(options) {
12949 return new KeyPair(this, options);
12950};
12951
12952EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
12953 return KeyPair.fromPrivate(this, priv, enc);
12954};
12955
12956EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
12957 return KeyPair.fromPublic(this, pub, enc);
12958};
12959
12960EC.prototype.genKeyPair = function genKeyPair(options) {
12961 if (!options)
12962 options = {};
12963
12964 // Instantiate Hmac_DRBG
12965 var drbg = new elliptic.hmacDRBG({
12966 hash: this.hash,
12967 pers: options.pers,
12968 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
12969 nonce: this.n.toArray()
12970 });
12971
12972 var bytes = this.n.byteLength();
12973 var ns2 = this.n.sub(new BN(2));
12974 do {
12975 var priv = new BN(drbg.generate(bytes));
12976 if (priv.cmp(ns2) > 0)
12977 continue;
12978
12979 priv.iaddn(1);
12980 return this.keyFromPrivate(priv);
12981 } while (true);
12982};
12983
12984EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
12985 var delta = msg.byteLength() * 8 - this.n.bitLength();
12986 if (delta > 0)
12987 msg = msg.ushrn(delta);
12988 if (!truncOnly && msg.cmp(this.n) >= 0)
12989 return msg.sub(this.n);
12990 else
12991 return msg;
12992};
12993
12994EC.prototype.sign = function sign(msg, key, enc, options) {
12995 if (typeof enc === 'object') {
12996 options = enc;
12997 enc = null;
12998 }
12999 if (!options)
13000 options = {};
13001
13002 key = this.keyFromPrivate(key, enc);
13003 msg = this._truncateToN(new BN(msg, 16));
13004
13005 // Zero-extend key to provide enough entropy
13006 var bytes = this.n.byteLength();
13007 var bkey = key.getPrivate().toArray('be', bytes);
13008
13009 // Zero-extend nonce to have the same byte size as N
13010 var nonce = msg.toArray('be', bytes);
13011
13012 // Instantiate Hmac_DRBG
13013 var drbg = new elliptic.hmacDRBG({
13014 hash: this.hash,
13015 entropy: bkey,
13016 nonce: nonce,
13017 pers: options.pers,
13018 persEnc: options.persEnc
13019 });
13020
13021 // Number of bytes to generate
13022 var ns1 = this.n.sub(new BN(1));
13023
13024 for (var iter = 0; true; iter++) {
13025 var k = options.k ?
13026 options.k(iter) :
13027 new BN(drbg.generate(this.n.byteLength()));
13028 k = this._truncateToN(k, true);
13029 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
13030 continue;
13031
13032 var kp = this.g.mul(k);
13033 if (kp.isInfinity())
13034 continue;
13035
13036 var kpX = kp.getX();
13037 var r = kpX.umod(this.n);
13038 if (r.cmpn(0) === 0)
13039 continue;
13040
13041 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
13042 s = s.umod(this.n);
13043 if (s.cmpn(0) === 0)
13044 continue;
13045
13046 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
13047 (kpX.cmp(r) !== 0 ? 2 : 0);
13048
13049 // Use complement of `s`, if it is > `n / 2`
13050 if (options.canonical && s.cmp(this.nh) > 0) {
13051 s = this.n.sub(s);
13052 recoveryParam ^= 1;
13053 }
13054
13055 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
13056 }
13057};
13058
13059EC.prototype.verify = function verify(msg, signature, key, enc) {
13060 msg = this._truncateToN(new BN(msg, 16));
13061 key = this.keyFromPublic(key, enc);
13062 signature = new Signature(signature, 'hex');
13063
13064 // Perform primitive values validation
13065 var r = signature.r;
13066 var s = signature.s;
13067 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
13068 return false;
13069 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
13070 return false;
13071
13072 // Validate signature
13073 var sinv = s.invm(this.n);
13074 var u1 = sinv.mul(msg).umod(this.n);
13075 var u2 = sinv.mul(r).umod(this.n);
13076
13077 if (!this.curve._maxwellTrick) {
13078 var p = this.g.mulAdd(u1, key.getPublic(), u2);
13079 if (p.isInfinity())
13080 return false;
13081
13082 return p.getX().umod(this.n).cmp(r) === 0;
13083 }
13084
13085 // NOTE: Greg Maxwell's trick, inspired by:
13086 // https://git.io/vad3K
13087
13088 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
13089 if (p.isInfinity())
13090 return false;
13091
13092 // Compare `p.x` of Jacobian point with `r`,
13093 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
13094 // inverse of `p.z^2`
13095 return p.eqXToP(r);
13096};
13097
13098EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
13099 assert((3 & j) === j, 'The recovery param is more than two bits');
13100 signature = new Signature(signature, enc);
13101
13102 var n = this.n;
13103 var e = new BN(msg);
13104 var r = signature.r;
13105 var s = signature.s;
13106
13107 // A set LSB signifies that the y-coordinate is odd
13108 var isYOdd = j & 1;
13109 var isSecondKey = j >> 1;
13110 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
13111 throw new Error('Unable to find sencond key candinate');
13112
13113 // 1.1. Let x = r + jn.
13114 if (isSecondKey)
13115 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
13116 else
13117 r = this.curve.pointFromX(r, isYOdd);
13118
13119 var rInv = signature.r.invm(n);
13120 var s1 = n.sub(e).mul(rInv).umod(n);
13121 var s2 = s.mul(rInv).umod(n);
13122
13123 // 1.6.1 Compute Q = r^-1 (sR - eG)
13124 // Q = r^-1 (sR + -eG)
13125 return this.g.mulAdd(s1, r, s2);
13126};
13127
13128EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
13129 signature = new Signature(signature, enc);
13130 if (signature.recoveryParam !== null)
13131 return signature.recoveryParam;
13132
13133 for (var i = 0; i < 4; i++) {
13134 var Qprime;
13135 try {
13136 Qprime = this.recoverPubKey(e, signature, i);
13137 } catch (e) {
13138 continue;
13139 }
13140
13141 if (Qprime.eq(Q))
13142 return i;
13143 }
13144 throw new Error('Unable to find valid recovery factor');
13145};
13146
13147},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
13148'use strict';
13149
13150var BN = require('bn.js');
13151var elliptic = require('../../elliptic');
13152var utils = elliptic.utils;
13153var assert = utils.assert;
13154
13155function KeyPair(ec, options) {
13156 this.ec = ec;
13157 this.priv = null;
13158 this.pub = null;
13159
13160 // KeyPair(ec, { priv: ..., pub: ... })
13161 if (options.priv)
13162 this._importPrivate(options.priv, options.privEnc);
13163 if (options.pub)
13164 this._importPublic(options.pub, options.pubEnc);
13165}
13166module.exports = KeyPair;
13167
13168KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
13169 if (pub instanceof KeyPair)
13170 return pub;
13171
13172 return new KeyPair(ec, {
13173 pub: pub,
13174 pubEnc: enc
13175 });
13176};
13177
13178KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
13179 if (priv instanceof KeyPair)
13180 return priv;
13181
13182 return new KeyPair(ec, {
13183 priv: priv,
13184 privEnc: enc
13185 });
13186};
13187
13188KeyPair.prototype.validate = function validate() {
13189 var pub = this.getPublic();
13190
13191 if (pub.isInfinity())
13192 return { result: false, reason: 'Invalid public key' };
13193 if (!pub.validate())
13194 return { result: false, reason: 'Public key is not a point' };
13195 if (!pub.mul(this.ec.curve.n).isInfinity())
13196 return { result: false, reason: 'Public key * N != O' };
13197
13198 return { result: true, reason: null };
13199};
13200
13201KeyPair.prototype.getPublic = function getPublic(compact, enc) {
13202 // compact is optional argument
13203 if (typeof compact === 'string') {
13204 enc = compact;
13205 compact = null;
13206 }
13207
13208 if (!this.pub)
13209 this.pub = this.ec.g.mul(this.priv);
13210
13211 if (!enc)
13212 return this.pub;
13213
13214 return this.pub.encode(enc, compact);
13215};
13216
13217KeyPair.prototype.getPrivate = function getPrivate(enc) {
13218 if (enc === 'hex')
13219 return this.priv.toString(16, 2);
13220 else
13221 return this.priv;
13222};
13223
13224KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
13225 this.priv = new BN(key, enc || 16);
13226
13227 // Ensure that the priv won't be bigger than n, otherwise we may fail
13228 // in fixed multiplication method
13229 this.priv = this.priv.umod(this.ec.curve.n);
13230};
13231
13232KeyPair.prototype._importPublic = function _importPublic(key, enc) {
13233 if (key.x || key.y) {
13234 // Montgomery points only have an `x` coordinate.
13235 // Weierstrass/Edwards points on the other hand have both `x` and
13236 // `y` coordinates.
13237 if (this.ec.curve.type === 'mont') {
13238 assert(key.x, 'Need x coordinate');
13239 } else if (this.ec.curve.type === 'short' ||
13240 this.ec.curve.type === 'edwards') {
13241 assert(key.x && key.y, 'Need both x and y coordinate');
13242 }
13243 this.pub = this.ec.curve.point(key.x, key.y);
13244 return;
13245 }
13246 this.pub = this.ec.curve.decodePoint(key, enc);
13247};
13248
13249// ECDH
13250KeyPair.prototype.derive = function derive(pub) {
13251 return pub.mul(this.priv).getX();
13252};
13253
13254// ECDSA
13255KeyPair.prototype.sign = function sign(msg, enc, options) {
13256 return this.ec.sign(msg, this, enc, options);
13257};
13258
13259KeyPair.prototype.verify = function verify(msg, signature) {
13260 return this.ec.verify(msg, signature, this);
13261};
13262
13263KeyPair.prototype.inspect = function inspect() {
13264 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
13265 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
13266};
13267
13268},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
13269'use strict';
13270
13271var BN = require('bn.js');
13272
13273var elliptic = require('../../elliptic');
13274var utils = elliptic.utils;
13275var assert = utils.assert;
13276
13277function Signature(options, enc) {
13278 if (options instanceof Signature)
13279 return options;
13280
13281 if (this._importDER(options, enc))
13282 return;
13283
13284 assert(options.r && options.s, 'Signature without r or s');
13285 this.r = new BN(options.r, 16);
13286 this.s = new BN(options.s, 16);
13287 if (options.recoveryParam === undefined)
13288 this.recoveryParam = null;
13289 else
13290 this.recoveryParam = options.recoveryParam;
13291}
13292module.exports = Signature;
13293
13294function Position() {
13295 this.place = 0;
13296}
13297
13298function getLength(buf, p) {
13299 var initial = buf[p.place++];
13300 if (!(initial & 0x80)) {
13301 return initial;
13302 }
13303 var octetLen = initial & 0xf;
13304 var val = 0;
13305 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
13306 val <<= 8;
13307 val |= buf[off];
13308 }
13309 p.place = off;
13310 return val;
13311}
13312
13313function rmPadding(buf) {
13314 var i = 0;
13315 var len = buf.length - 1;
13316 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
13317 i++;
13318 }
13319 if (i === 0) {
13320 return buf;
13321 }
13322 return buf.slice(i);
13323}
13324
13325Signature.prototype._importDER = function _importDER(data, enc) {
13326 data = utils.toArray(data, enc);
13327 var p = new Position();
13328 if (data[p.place++] !== 0x30) {
13329 return false;
13330 }
13331 var len = getLength(data, p);
13332 if ((len + p.place) !== data.length) {
13333 return false;
13334 }
13335 if (data[p.place++] !== 0x02) {
13336 return false;
13337 }
13338 var rlen = getLength(data, p);
13339 var r = data.slice(p.place, rlen + p.place);
13340 p.place += rlen;
13341 if (data[p.place++] !== 0x02) {
13342 return false;
13343 }
13344 var slen = getLength(data, p);
13345 if (data.length !== slen + p.place) {
13346 return false;
13347 }
13348 var s = data.slice(p.place, slen + p.place);
13349 if (r[0] === 0 && (r[1] & 0x80)) {
13350 r = r.slice(1);
13351 }
13352 if (s[0] === 0 && (s[1] & 0x80)) {
13353 s = s.slice(1);
13354 }
13355
13356 this.r = new BN(r);
13357 this.s = new BN(s);
13358 this.recoveryParam = null;
13359
13360 return true;
13361};
13362
13363function constructLength(arr, len) {
13364 if (len < 0x80) {
13365 arr.push(len);
13366 return;
13367 }
13368 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
13369 arr.push(octets | 0x80);
13370 while (--octets) {
13371 arr.push((len >>> (octets << 3)) & 0xff);
13372 }
13373 arr.push(len);
13374}
13375
13376Signature.prototype.toDER = function toDER(enc) {
13377 var r = this.r.toArray();
13378 var s = this.s.toArray();
13379
13380 // Pad values
13381 if (r[0] & 0x80)
13382 r = [ 0 ].concat(r);
13383 // Pad values
13384 if (s[0] & 0x80)
13385 s = [ 0 ].concat(s);
13386
13387 r = rmPadding(r);
13388 s = rmPadding(s);
13389
13390 while (!s[0] && !(s[1] & 0x80)) {
13391 s = s.slice(1);
13392 }
13393 var arr = [ 0x02 ];
13394 constructLength(arr, r.length);
13395 arr = arr.concat(r);
13396 arr.push(0x02);
13397 constructLength(arr, s.length);
13398 var backHalf = arr.concat(s);
13399 var res = [ 0x30 ];
13400 constructLength(res, backHalf.length);
13401 res = res.concat(backHalf);
13402 return utils.encode(res, enc);
13403};
13404
13405},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
13406'use strict';
13407
13408var hash = require('hash.js');
13409var elliptic = require('../../elliptic');
13410var utils = elliptic.utils;
13411var assert = utils.assert;
13412var parseBytes = utils.parseBytes;
13413var KeyPair = require('./key');
13414var Signature = require('./signature');
13415
13416function EDDSA(curve) {
13417 assert(curve === 'ed25519', 'only tested with ed25519 so far');
13418
13419 if (!(this instanceof EDDSA))
13420 return new EDDSA(curve);
13421
13422 var curve = elliptic.curves[curve].curve;
13423 this.curve = curve;
13424 this.g = curve.g;
13425 this.g.precompute(curve.n.bitLength() + 1);
13426
13427 this.pointClass = curve.point().constructor;
13428 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
13429 this.hash = hash.sha512;
13430}
13431
13432module.exports = EDDSA;
13433
13434/**
13435* @param {Array|String} message - message bytes
13436* @param {Array|String|KeyPair} secret - secret bytes or a keypair
13437* @returns {Signature} - signature
13438*/
13439EDDSA.prototype.sign = function sign(message, secret) {
13440 message = parseBytes(message);
13441 var key = this.keyFromSecret(secret);
13442 var r = this.hashInt(key.messagePrefix(), message);
13443 var R = this.g.mul(r);
13444 var Rencoded = this.encodePoint(R);
13445 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
13446 .mul(key.priv());
13447 var S = r.add(s_).umod(this.curve.n);
13448 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
13449};
13450
13451/**
13452* @param {Array} message - message bytes
13453* @param {Array|String|Signature} sig - sig bytes
13454* @param {Array|String|Point|KeyPair} pub - public key
13455* @returns {Boolean} - true if public key matches sig of message
13456*/
13457EDDSA.prototype.verify = function verify(message, sig, pub) {
13458 message = parseBytes(message);
13459 sig = this.makeSignature(sig);
13460 var key = this.keyFromPublic(pub);
13461 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
13462 var SG = this.g.mul(sig.S());
13463 var RplusAh = sig.R().add(key.pub().mul(h));
13464 return RplusAh.eq(SG);
13465};
13466
13467EDDSA.prototype.hashInt = function hashInt() {
13468 var hash = this.hash();
13469 for (var i = 0; i < arguments.length; i++)
13470 hash.update(arguments[i]);
13471 return utils.intFromLE(hash.digest()).umod(this.curve.n);
13472};
13473
13474EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
13475 return KeyPair.fromPublic(this, pub);
13476};
13477
13478EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
13479 return KeyPair.fromSecret(this, secret);
13480};
13481
13482EDDSA.prototype.makeSignature = function makeSignature(sig) {
13483 if (sig instanceof Signature)
13484 return sig;
13485 return new Signature(this, sig);
13486};
13487
13488/**
13489* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
13490*
13491* EDDSA defines methods for encoding and decoding points and integers. These are
13492* helper convenience methods, that pass along to utility functions implied
13493* parameters.
13494*
13495*/
13496EDDSA.prototype.encodePoint = function encodePoint(point) {
13497 var enc = point.getY().toArray('le', this.encodingLength);
13498 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
13499 return enc;
13500};
13501
13502EDDSA.prototype.decodePoint = function decodePoint(bytes) {
13503 bytes = utils.parseBytes(bytes);
13504
13505 var lastIx = bytes.length - 1;
13506 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
13507 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
13508
13509 var y = utils.intFromLE(normed);
13510 return this.curve.pointFromY(y, xIsOdd);
13511};
13512
13513EDDSA.prototype.encodeInt = function encodeInt(num) {
13514 return num.toArray('le', this.encodingLength);
13515};
13516
13517EDDSA.prototype.decodeInt = function decodeInt(bytes) {
13518 return utils.intFromLE(bytes);
13519};
13520
13521EDDSA.prototype.isPoint = function isPoint(val) {
13522 return val instanceof this.pointClass;
13523};
13524
13525},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
13526'use strict';
13527
13528var elliptic = require('../../elliptic');
13529var utils = elliptic.utils;
13530var assert = utils.assert;
13531var parseBytes = utils.parseBytes;
13532var cachedProperty = utils.cachedProperty;
13533
13534/**
13535* @param {EDDSA} eddsa - instance
13536* @param {Object} params - public/private key parameters
13537*
13538* @param {Array<Byte>} [params.secret] - secret seed bytes
13539* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
13540* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
13541*
13542*/
13543function KeyPair(eddsa, params) {
13544 this.eddsa = eddsa;
13545 this._secret = parseBytes(params.secret);
13546 if (eddsa.isPoint(params.pub))
13547 this._pub = params.pub;
13548 else
13549 this._pubBytes = parseBytes(params.pub);
13550}
13551
13552KeyPair.fromPublic = function fromPublic(eddsa, pub) {
13553 if (pub instanceof KeyPair)
13554 return pub;
13555 return new KeyPair(eddsa, { pub: pub });
13556};
13557
13558KeyPair.fromSecret = function fromSecret(eddsa, secret) {
13559 if (secret instanceof KeyPair)
13560 return secret;
13561 return new KeyPair(eddsa, { secret: secret });
13562};
13563
13564KeyPair.prototype.secret = function secret() {
13565 return this._secret;
13566};
13567
13568cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
13569 return this.eddsa.encodePoint(this.pub());
13570});
13571
13572cachedProperty(KeyPair, 'pub', function pub() {
13573 if (this._pubBytes)
13574 return this.eddsa.decodePoint(this._pubBytes);
13575 return this.eddsa.g.mul(this.priv());
13576});
13577
13578cachedProperty(KeyPair, 'privBytes', function privBytes() {
13579 var eddsa = this.eddsa;
13580 var hash = this.hash();
13581 var lastIx = eddsa.encodingLength - 1;
13582
13583 var a = hash.slice(0, eddsa.encodingLength);
13584 a[0] &= 248;
13585 a[lastIx] &= 127;
13586 a[lastIx] |= 64;
13587
13588 return a;
13589});
13590
13591cachedProperty(KeyPair, 'priv', function priv() {
13592 return this.eddsa.decodeInt(this.privBytes());
13593});
13594
13595cachedProperty(KeyPair, 'hash', function hash() {
13596 return this.eddsa.hash().update(this.secret()).digest();
13597});
13598
13599cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
13600 return this.hash().slice(this.eddsa.encodingLength);
13601});
13602
13603KeyPair.prototype.sign = function sign(message) {
13604 assert(this._secret, 'KeyPair can only verify');
13605 return this.eddsa.sign(message, this);
13606};
13607
13608KeyPair.prototype.verify = function verify(message, sig) {
13609 return this.eddsa.verify(message, sig, this);
13610};
13611
13612KeyPair.prototype.getSecret = function getSecret(enc) {
13613 assert(this._secret, 'KeyPair is public only');
13614 return utils.encode(this.secret(), enc);
13615};
13616
13617KeyPair.prototype.getPublic = function getPublic(enc) {
13618 return utils.encode(this.pubBytes(), enc);
13619};
13620
13621module.exports = KeyPair;
13622
13623},{"../../elliptic":39}],51:[function(require,module,exports){
13624'use strict';
13625
13626var BN = require('bn.js');
13627var elliptic = require('../../elliptic');
13628var utils = elliptic.utils;
13629var assert = utils.assert;
13630var cachedProperty = utils.cachedProperty;
13631var parseBytes = utils.parseBytes;
13632
13633/**
13634* @param {EDDSA} eddsa - eddsa instance
13635* @param {Array<Bytes>|Object} sig -
13636* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
13637* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
13638* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
13639* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
13640*/
13641function Signature(eddsa, sig) {
13642 this.eddsa = eddsa;
13643
13644 if (typeof sig !== 'object')
13645 sig = parseBytes(sig);
13646
13647 if (Array.isArray(sig)) {
13648 sig = {
13649 R: sig.slice(0, eddsa.encodingLength),
13650 S: sig.slice(eddsa.encodingLength)
13651 };
13652 }
13653
13654 assert(sig.R && sig.S, 'Signature without R or S');
13655
13656 if (eddsa.isPoint(sig.R))
13657 this._R = sig.R;
13658 if (sig.S instanceof BN)
13659 this._S = sig.S;
13660
13661 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
13662 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
13663}
13664
13665cachedProperty(Signature, 'S', function S() {
13666 return this.eddsa.decodeInt(this.Sencoded());
13667});
13668
13669cachedProperty(Signature, 'R', function R() {
13670 return this.eddsa.decodePoint(this.Rencoded());
13671});
13672
13673cachedProperty(Signature, 'Rencoded', function Rencoded() {
13674 return this.eddsa.encodePoint(this.R());
13675});
13676
13677cachedProperty(Signature, 'Sencoded', function Sencoded() {
13678 return this.eddsa.encodeInt(this.S());
13679});
13680
13681Signature.prototype.toBytes = function toBytes() {
13682 return this.Rencoded().concat(this.Sencoded());
13683};
13684
13685Signature.prototype.toHex = function toHex() {
13686 return utils.encode(this.toBytes(), 'hex').toUpperCase();
13687};
13688
13689module.exports = Signature;
13690
13691},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
13692'use strict';
13693
13694var hash = require('hash.js');
13695var elliptic = require('../elliptic');
13696var utils = elliptic.utils;
13697var assert = utils.assert;
13698
13699function HmacDRBG(options) {
13700 if (!(this instanceof HmacDRBG))
13701 return new HmacDRBG(options);
13702 this.hash = options.hash;
13703 this.predResist = !!options.predResist;
13704
13705 this.outLen = this.hash.outSize;
13706 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
13707
13708 this.reseed = null;
13709 this.reseedInterval = null;
13710 this.K = null;
13711 this.V = null;
13712
13713 var entropy = utils.toArray(options.entropy, options.entropyEnc);
13714 var nonce = utils.toArray(options.nonce, options.nonceEnc);
13715 var pers = utils.toArray(options.pers, options.persEnc);
13716 assert(entropy.length >= (this.minEntropy / 8),
13717 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
13718 this._init(entropy, nonce, pers);
13719}
13720module.exports = HmacDRBG;
13721
13722HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
13723 var seed = entropy.concat(nonce).concat(pers);
13724
13725 this.K = new Array(this.outLen / 8);
13726 this.V = new Array(this.outLen / 8);
13727 for (var i = 0; i < this.V.length; i++) {
13728 this.K[i] = 0x00;
13729 this.V[i] = 0x01;
13730 }
13731
13732 this._update(seed);
13733 this.reseed = 1;
13734 this.reseedInterval = 0x1000000000000; // 2^48
13735};
13736
13737HmacDRBG.prototype._hmac = function hmac() {
13738 return new hash.hmac(this.hash, this.K);
13739};
13740
13741HmacDRBG.prototype._update = function update(seed) {
13742 var kmac = this._hmac()
13743 .update(this.V)
13744 .update([ 0x00 ]);
13745 if (seed)
13746 kmac = kmac.update(seed);
13747 this.K = kmac.digest();
13748 this.V = this._hmac().update(this.V).digest();
13749 if (!seed)
13750 return;
13751
13752 this.K = this._hmac()
13753 .update(this.V)
13754 .update([ 0x01 ])
13755 .update(seed)
13756 .digest();
13757 this.V = this._hmac().update(this.V).digest();
13758};
13759
13760HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
13761 // Optional entropy enc
13762 if (typeof entropyEnc !== 'string') {
13763 addEnc = add;
13764 add = entropyEnc;
13765 entropyEnc = null;
13766 }
13767
13768 entropy = utils.toBuffer(entropy, entropyEnc);
13769 add = utils.toBuffer(add, addEnc);
13770
13771 assert(entropy.length >= (this.minEntropy / 8),
13772 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
13773
13774 this._update(entropy.concat(add || []));
13775 this.reseed = 1;
13776};
13777
13778HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
13779 if (this.reseed > this.reseedInterval)
13780 throw new Error('Reseed is required');
13781
13782 // Optional encoding
13783 if (typeof enc !== 'string') {
13784 addEnc = add;
13785 add = enc;
13786 enc = null;
13787 }
13788
13789 // Optional additional data
13790 if (add) {
13791 add = utils.toArray(add, addEnc);
13792 this._update(add);
13793 }
13794
13795 var temp = [];
13796 while (temp.length < len) {
13797 this.V = this._hmac().update(this.V).digest();
13798 temp = temp.concat(this.V);
13799 }
13800
13801 var res = temp.slice(0, len);
13802 this._update(add);
13803 this.reseed++;
13804 return utils.encode(res, enc);
13805};
13806
13807},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
13808module.exports = {
13809 doubles: {
13810 step: 4,
13811 points: [
13812 [
13813 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
13814 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
13815 ],
13816 [
13817 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
13818 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
13819 ],
13820 [
13821 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
13822 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
13823 ],
13824 [
13825 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
13826 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
13827 ],
13828 [
13829 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
13830 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
13831 ],
13832 [
13833 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
13834 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
13835 ],
13836 [
13837 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
13838 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
13839 ],
13840 [
13841 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
13842 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
13843 ],
13844 [
13845 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
13846 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
13847 ],
13848 [
13849 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
13850 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
13851 ],
13852 [
13853 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
13854 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
13855 ],
13856 [
13857 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
13858 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
13859 ],
13860 [
13861 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
13862 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
13863 ],
13864 [
13865 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
13866 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
13867 ],
13868 [
13869 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
13870 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
13871 ],
13872 [
13873 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
13874 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
13875 ],
13876 [
13877 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
13878 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
13879 ],
13880 [
13881 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
13882 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
13883 ],
13884 [
13885 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
13886 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
13887 ],
13888 [
13889 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
13890 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
13891 ],
13892 [
13893 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
13894 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
13895 ],
13896 [
13897 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
13898 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
13899 ],
13900 [
13901 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
13902 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
13903 ],
13904 [
13905 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
13906 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
13907 ],
13908 [
13909 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
13910 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
13911 ],
13912 [
13913 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
13914 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
13915 ],
13916 [
13917 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
13918 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
13919 ],
13920 [
13921 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
13922 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
13923 ],
13924 [
13925 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
13926 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
13927 ],
13928 [
13929 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
13930 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
13931 ],
13932 [
13933 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
13934 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
13935 ],
13936 [
13937 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
13938 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
13939 ],
13940 [
13941 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
13942 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
13943 ],
13944 [
13945 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
13946 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
13947 ],
13948 [
13949 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
13950 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
13951 ],
13952 [
13953 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
13954 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
13955 ],
13956 [
13957 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
13958 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
13959 ],
13960 [
13961 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
13962 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
13963 ],
13964 [
13965 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
13966 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
13967 ],
13968 [
13969 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
13970 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
13971 ],
13972 [
13973 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
13974 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
13975 ],
13976 [
13977 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
13978 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
13979 ],
13980 [
13981 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
13982 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
13983 ],
13984 [
13985 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
13986 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
13987 ],
13988 [
13989 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
13990 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
13991 ],
13992 [
13993 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
13994 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
13995 ],
13996 [
13997 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
13998 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
13999 ],
14000 [
14001 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
14002 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
14003 ],
14004 [
14005 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
14006 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
14007 ],
14008 [
14009 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
14010 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
14011 ],
14012 [
14013 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
14014 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
14015 ],
14016 [
14017 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
14018 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
14019 ],
14020 [
14021 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
14022 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
14023 ],
14024 [
14025 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
14026 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
14027 ],
14028 [
14029 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
14030 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
14031 ],
14032 [
14033 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
14034 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
14035 ],
14036 [
14037 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
14038 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
14039 ],
14040 [
14041 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
14042 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
14043 ],
14044 [
14045 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
14046 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
14047 ],
14048 [
14049 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
14050 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
14051 ],
14052 [
14053 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
14054 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
14055 ],
14056 [
14057 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
14058 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
14059 ],
14060 [
14061 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
14062 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
14063 ],
14064 [
14065 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
14066 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
14067 ],
14068 [
14069 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
14070 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
14071 ]
14072 ]
14073 },
14074 naf: {
14075 wnd: 7,
14076 points: [
14077 [
14078 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
14079 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
14080 ],
14081 [
14082 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
14083 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
14084 ],
14085 [
14086 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
14087 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
14088 ],
14089 [
14090 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
14091 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
14092 ],
14093 [
14094 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
14095 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
14096 ],
14097 [
14098 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
14099 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
14100 ],
14101 [
14102 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
14103 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
14104 ],
14105 [
14106 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
14107 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
14108 ],
14109 [
14110 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
14111 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
14112 ],
14113 [
14114 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
14115 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
14116 ],
14117 [
14118 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
14119 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
14120 ],
14121 [
14122 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
14123 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
14124 ],
14125 [
14126 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
14127 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
14128 ],
14129 [
14130 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
14131 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
14132 ],
14133 [
14134 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
14135 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
14136 ],
14137 [
14138 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
14139 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
14140 ],
14141 [
14142 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
14143 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
14144 ],
14145 [
14146 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
14147 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
14148 ],
14149 [
14150 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
14151 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
14152 ],
14153 [
14154 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
14155 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
14156 ],
14157 [
14158 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
14159 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
14160 ],
14161 [
14162 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
14163 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
14164 ],
14165 [
14166 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
14167 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
14168 ],
14169 [
14170 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
14171 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
14172 ],
14173 [
14174 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
14175 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
14176 ],
14177 [
14178 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
14179 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
14180 ],
14181 [
14182 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
14183 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
14184 ],
14185 [
14186 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
14187 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
14188 ],
14189 [
14190 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
14191 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
14192 ],
14193 [
14194 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
14195 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
14196 ],
14197 [
14198 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
14199 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
14200 ],
14201 [
14202 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
14203 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
14204 ],
14205 [
14206 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
14207 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
14208 ],
14209 [
14210 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
14211 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
14212 ],
14213 [
14214 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
14215 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
14216 ],
14217 [
14218 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
14219 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
14220 ],
14221 [
14222 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
14223 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
14224 ],
14225 [
14226 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
14227 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
14228 ],
14229 [
14230 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
14231 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
14232 ],
14233 [
14234 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
14235 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
14236 ],
14237 [
14238 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
14239 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
14240 ],
14241 [
14242 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
14243 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
14244 ],
14245 [
14246 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
14247 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
14248 ],
14249 [
14250 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
14251 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
14252 ],
14253 [
14254 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
14255 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
14256 ],
14257 [
14258 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
14259 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
14260 ],
14261 [
14262 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
14263 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
14264 ],
14265 [
14266 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
14267 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
14268 ],
14269 [
14270 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
14271 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
14272 ],
14273 [
14274 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
14275 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
14276 ],
14277 [
14278 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
14279 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
14280 ],
14281 [
14282 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
14283 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
14284 ],
14285 [
14286 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
14287 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
14288 ],
14289 [
14290 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
14291 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
14292 ],
14293 [
14294 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
14295 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
14296 ],
14297 [
14298 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
14299 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
14300 ],
14301 [
14302 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
14303 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
14304 ],
14305 [
14306 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
14307 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
14308 ],
14309 [
14310 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
14311 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
14312 ],
14313 [
14314 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
14315 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
14316 ],
14317 [
14318 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
14319 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
14320 ],
14321 [
14322 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
14323 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
14324 ],
14325 [
14326 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
14327 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
14328 ],
14329 [
14330 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
14331 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
14332 ],
14333 [
14334 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
14335 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
14336 ],
14337 [
14338 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
14339 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
14340 ],
14341 [
14342 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
14343 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
14344 ],
14345 [
14346 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
14347 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
14348 ],
14349 [
14350 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
14351 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
14352 ],
14353 [
14354 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
14355 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
14356 ],
14357 [
14358 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
14359 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
14360 ],
14361 [
14362 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
14363 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
14364 ],
14365 [
14366 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
14367 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
14368 ],
14369 [
14370 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
14371 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
14372 ],
14373 [
14374 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
14375 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
14376 ],
14377 [
14378 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
14379 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
14380 ],
14381 [
14382 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
14383 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
14384 ],
14385 [
14386 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
14387 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
14388 ],
14389 [
14390 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
14391 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
14392 ],
14393 [
14394 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
14395 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
14396 ],
14397 [
14398 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
14399 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
14400 ],
14401 [
14402 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
14403 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
14404 ],
14405 [
14406 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
14407 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
14408 ],
14409 [
14410 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
14411 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
14412 ],
14413 [
14414 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
14415 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
14416 ],
14417 [
14418 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
14419 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
14420 ],
14421 [
14422 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
14423 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
14424 ],
14425 [
14426 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
14427 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
14428 ],
14429 [
14430 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
14431 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
14432 ],
14433 [
14434 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
14435 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
14436 ],
14437 [
14438 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
14439 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
14440 ],
14441 [
14442 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
14443 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
14444 ],
14445 [
14446 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
14447 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
14448 ],
14449 [
14450 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
14451 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
14452 ],
14453 [
14454 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
14455 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
14456 ],
14457 [
14458 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
14459 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
14460 ],
14461 [
14462 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
14463 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
14464 ],
14465 [
14466 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
14467 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
14468 ],
14469 [
14470 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
14471 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
14472 ],
14473 [
14474 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
14475 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
14476 ],
14477 [
14478 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
14479 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
14480 ],
14481 [
14482 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
14483 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
14484 ],
14485 [
14486 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
14487 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
14488 ],
14489 [
14490 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
14491 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
14492 ],
14493 [
14494 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
14495 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
14496 ],
14497 [
14498 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
14499 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
14500 ],
14501 [
14502 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
14503 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
14504 ],
14505 [
14506 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
14507 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
14508 ],
14509 [
14510 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
14511 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
14512 ],
14513 [
14514 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
14515 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
14516 ],
14517 [
14518 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
14519 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
14520 ],
14521 [
14522 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
14523 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
14524 ],
14525 [
14526 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
14527 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
14528 ],
14529 [
14530 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
14531 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
14532 ],
14533 [
14534 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
14535 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
14536 ],
14537 [
14538 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
14539 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
14540 ],
14541 [
14542 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
14543 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
14544 ],
14545 [
14546 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
14547 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
14548 ],
14549 [
14550 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
14551 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
14552 ],
14553 [
14554 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
14555 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
14556 ],
14557 [
14558 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
14559 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
14560 ],
14561 [
14562 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
14563 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
14564 ],
14565 [
14566 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
14567 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
14568 ],
14569 [
14570 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
14571 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
14572 ],
14573 [
14574 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
14575 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
14576 ],
14577 [
14578 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
14579 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
14580 ],
14581 [
14582 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
14583 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
14584 ]
14585 ]
14586 }
14587};
14588
14589},{}],54:[function(require,module,exports){
14590'use strict';
14591
14592var utils = exports;
14593var BN = require('bn.js');
14594
14595utils.assert = function assert(val, msg) {
14596 if (!val)
14597 throw new Error(msg || 'Assertion failed');
14598};
14599
14600function toArray(msg, enc) {
14601 if (Array.isArray(msg))
14602 return msg.slice();
14603 if (!msg)
14604 return [];
14605 var res = [];
14606 if (typeof msg !== 'string') {
14607 for (var i = 0; i < msg.length; i++)
14608 res[i] = msg[i] | 0;
14609 return res;
14610 }
14611 if (!enc) {
14612 for (var i = 0; i < msg.length; i++) {
14613 var c = msg.charCodeAt(i);
14614 var hi = c >> 8;
14615 var lo = c & 0xff;
14616 if (hi)
14617 res.push(hi, lo);
14618 else
14619 res.push(lo);
14620 }
14621 } else if (enc === 'hex') {
14622 msg = msg.replace(/[^a-z0-9]+/ig, '');
14623 if (msg.length % 2 !== 0)
14624 msg = '0' + msg;
14625 for (var i = 0; i < msg.length; i += 2)
14626 res.push(parseInt(msg[i] + msg[i + 1], 16));
14627 }
14628 return res;
14629}
14630utils.toArray = toArray;
14631
14632function zero2(word) {
14633 if (word.length === 1)
14634 return '0' + word;
14635 else
14636 return word;
14637}
14638utils.zero2 = zero2;
14639
14640function toHex(msg) {
14641 var res = '';
14642 for (var i = 0; i < msg.length; i++)
14643 res += zero2(msg[i].toString(16));
14644 return res;
14645}
14646utils.toHex = toHex;
14647
14648utils.encode = function encode(arr, enc) {
14649 if (enc === 'hex')
14650 return toHex(arr);
14651 else
14652 return arr;
14653};
14654
14655// Represent num in a w-NAF form
14656function getNAF(num, w) {
14657 var naf = [];
14658 var ws = 1 << (w + 1);
14659 var k = num.clone();
14660 while (k.cmpn(1) >= 0) {
14661 var z;
14662 if (k.isOdd()) {
14663 var mod = k.andln(ws - 1);
14664 if (mod > (ws >> 1) - 1)
14665 z = (ws >> 1) - mod;
14666 else
14667 z = mod;
14668 k.isubn(z);
14669 } else {
14670 z = 0;
14671 }
14672 naf.push(z);
14673
14674 // Optimization, shift by word if possible
14675 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
14676 for (var i = 1; i < shift; i++)
14677 naf.push(0);
14678 k.iushrn(shift);
14679 }
14680
14681 return naf;
14682}
14683utils.getNAF = getNAF;
14684
14685// Represent k1, k2 in a Joint Sparse Form
14686function getJSF(k1, k2) {
14687 var jsf = [
14688 [],
14689 []
14690 ];
14691
14692 k1 = k1.clone();
14693 k2 = k2.clone();
14694 var d1 = 0;
14695 var d2 = 0;
14696 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
14697
14698 // First phase
14699 var m14 = (k1.andln(3) + d1) & 3;
14700 var m24 = (k2.andln(3) + d2) & 3;
14701 if (m14 === 3)
14702 m14 = -1;
14703 if (m24 === 3)
14704 m24 = -1;
14705 var u1;
14706 if ((m14 & 1) === 0) {
14707 u1 = 0;
14708 } else {
14709 var m8 = (k1.andln(7) + d1) & 7;
14710 if ((m8 === 3 || m8 === 5) && m24 === 2)
14711 u1 = -m14;
14712 else
14713 u1 = m14;
14714 }
14715 jsf[0].push(u1);
14716
14717 var u2;
14718 if ((m24 & 1) === 0) {
14719 u2 = 0;
14720 } else {
14721 var m8 = (k2.andln(7) + d2) & 7;
14722 if ((m8 === 3 || m8 === 5) && m14 === 2)
14723 u2 = -m24;
14724 else
14725 u2 = m24;
14726 }
14727 jsf[1].push(u2);
14728
14729 // Second phase
14730 if (2 * d1 === u1 + 1)
14731 d1 = 1 - d1;
14732 if (2 * d2 === u2 + 1)
14733 d2 = 1 - d2;
14734 k1.iushrn(1);
14735 k2.iushrn(1);
14736 }
14737
14738 return jsf;
14739}
14740utils.getJSF = getJSF;
14741
14742function cachedProperty(obj, name, computer) {
14743 var key = '_' + name;
14744 obj.prototype[name] = function cachedProperty() {
14745 return this[key] !== undefined ? this[key] :
14746 this[key] = computer.call(this);
14747 };
14748}
14749utils.cachedProperty = cachedProperty;
14750
14751function parseBytes(bytes) {
14752 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
14753 bytes;
14754}
14755utils.parseBytes = parseBytes;
14756
14757function intFromLE(bytes) {
14758 return new BN(bytes, 'hex', 'le');
14759}
14760utils.intFromLE = intFromLE;
14761
14762
14763},{"bn.js":33}],55:[function(require,module,exports){
14764module.exports={
14765 "_args": [
14766 [
14767 {
14768 "raw": "elliptic@^6.2.3",
14769 "scope": null,
14770 "escapedName": "elliptic",
14771 "name": "elliptic",
14772 "rawSpec": "^6.2.3",
14773 "spec": ">=6.2.3 <7.0.0",
14774 "type": "range"
14775 },
14776 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
14777 ]
14778 ],
14779 "_from": "elliptic@>=6.2.3 <7.0.0",
14780 "_id": "elliptic@6.3.3",
14781 "_inCache": true,
14782 "_location": "/elliptic",
14783 "_nodeVersion": "7.0.0",
14784 "_npmOperationalInternal": {
14785 "host": "packages-18-east.internal.npmjs.com",
14786 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
14787 },
14788 "_npmUser": {
14789 "name": "indutny",
14790 "email": "fedor@indutny.com"
14791 },
14792 "_npmVersion": "3.10.8",
14793 "_phantomChildren": {},
14794 "_requested": {
14795 "raw": "elliptic@^6.2.3",
14796 "scope": null,
14797 "escapedName": "elliptic",
14798 "name": "elliptic",
14799 "rawSpec": "^6.2.3",
14800 "spec": ">=6.2.3 <7.0.0",
14801 "type": "range"
14802 },
14803 "_requiredBy": [
14804 "/browserify-sign",
14805 "/create-ecdh",
14806 "/secp256k1"
14807 ],
14808 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
14809 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
14810 "_shrinkwrap": null,
14811 "_spec": "elliptic@^6.2.3",
14812 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
14813 "author": {
14814 "name": "Fedor Indutny",
14815 "email": "fedor@indutny.com"
14816 },
14817 "bugs": {
14818 "url": "https://github.com/indutny/elliptic/issues"
14819 },
14820 "dependencies": {
14821 "bn.js": "^4.4.0",
14822 "brorand": "^1.0.1",
14823 "hash.js": "^1.0.0",
14824 "inherits": "^2.0.1"
14825 },
14826 "description": "EC cryptography",
14827 "devDependencies": {
14828 "brfs": "^1.4.3",
14829 "coveralls": "^2.11.3",
14830 "grunt": "^0.4.5",
14831 "grunt-browserify": "^5.0.0",
14832 "grunt-cli": "^1.2.0",
14833 "grunt-contrib-connect": "^1.0.0",
14834 "grunt-contrib-copy": "^1.0.0",
14835 "grunt-contrib-uglify": "^1.0.1",
14836 "grunt-mocha-istanbul": "^3.0.1",
14837 "grunt-saucelabs": "^8.6.2",
14838 "istanbul": "^0.4.2",
14839 "jscs": "^2.9.0",
14840 "jshint": "^2.6.0",
14841 "mocha": "^2.1.0"
14842 },
14843 "directories": {},
14844 "dist": {
14845 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
14846 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
14847 },
14848 "files": [
14849 "lib"
14850 ],
14851 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
14852 "homepage": "https://github.com/indutny/elliptic",
14853 "keywords": [
14854 "EC",
14855 "Elliptic",
14856 "curve",
14857 "Cryptography"
14858 ],
14859 "license": "MIT",
14860 "main": "lib/elliptic.js",
14861 "maintainers": [
14862 {
14863 "name": "indutny",
14864 "email": "fedor@indutny.com"
14865 }
14866 ],
14867 "name": "elliptic",
14868 "optionalDependencies": {},
14869 "readme": "ERROR: No README data found!",
14870 "repository": {
14871 "type": "git",
14872 "url": "git+ssh://git@github.com/indutny/elliptic.git"
14873 },
14874 "scripts": {
14875 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
14876 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
14877 "lint": "npm run jscs && npm run jshint",
14878 "test": "npm run lint && npm run unit",
14879 "unit": "istanbul test _mocha --reporter=spec test/index.js",
14880 "version": "grunt dist && git add dist/"
14881 },
14882 "version": "6.3.3"
14883}
14884
14885},{}],56:[function(require,module,exports){
14886(function (Buffer){
14887'use strict';
14888
14889var isHexPrefixed = require('is-hex-prefixed');
14890var stripHexPrefix = require('strip-hex-prefix');
14891
14892/**
14893 * Pads a `String` to have an even length
14894 * @param {String} value
14895 * @return {String} output
14896 */
14897function padToEven(value) {
14898 var a = value; // eslint-disable-line
14899
14900 if (typeof a !== 'string') {
14901 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
14902 }
14903
14904 if (a.length % 2) {
14905 a = '0' + a;
14906 }
14907
14908 return a;
14909}
14910
14911/**
14912 * Converts a `Number` into a hex `String`
14913 * @param {Number} i
14914 * @return {String}
14915 */
14916function intToHex(i) {
14917 var hex = i.toString(16); // eslint-disable-line
14918
14919 return '0x' + padToEven(hex);
14920}
14921
14922/**
14923 * Converts an `Number` to a `Buffer`
14924 * @param {Number} i
14925 * @return {Buffer}
14926 */
14927function intToBuffer(i) {
14928 var hex = intToHex(i);
14929
14930 return new Buffer(hex.slice(2), 'hex');
14931}
14932
14933/**
14934 * Get the binary size of a string
14935 * @param {String} str
14936 * @return {Number}
14937 */
14938function getBinarySize(str) {
14939 if (typeof str !== 'string') {
14940 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
14941 }
14942
14943 return Buffer.byteLength(str, 'utf8');
14944}
14945
14946/**
14947 * Returns TRUE if the first specified array contains all elements
14948 * from the second one. FALSE otherwise.
14949 *
14950 * @param {array} superset
14951 * @param {array} subset
14952 *
14953 * @returns {boolean}
14954 */
14955function arrayContainsArray(superset, subset, some) {
14956 if (Array.isArray(superset) !== true) {
14957 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
14958 }
14959 if (Array.isArray(subset) !== true) {
14960 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
14961 }
14962
14963 return subset[Boolean(some) && 'some' || 'every'](function (value) {
14964 return superset.indexOf(value) >= 0;
14965 });
14966}
14967
14968/**
14969 * Should be called to get utf8 from it's hex representation
14970 *
14971 * @method toUtf8
14972 * @param {String} string in hex
14973 * @returns {String} ascii string representation of hex value
14974 */
14975function toUtf8(hex) {
14976 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
14977
14978 return bufferValue.toString('utf8');
14979}
14980
14981/**
14982 * Should be called to get ascii from it's hex representation
14983 *
14984 * @method toAscii
14985 * @param {String} string in hex
14986 * @returns {String} ascii string representation of hex value
14987 */
14988function toAscii(hex) {
14989 var str = ''; // eslint-disable-line
14990 var i = 0,
14991 l = hex.length; // eslint-disable-line
14992
14993 if (hex.substring(0, 2) === '0x') {
14994 i = 2;
14995 }
14996
14997 for (; i < l; i += 2) {
14998 var code = parseInt(hex.substr(i, 2), 16);
14999 str += String.fromCharCode(code);
15000 }
15001
15002 return str;
15003}
15004
15005/**
15006 * Should be called to get hex representation (prefixed by 0x) of utf8 string
15007 *
15008 * @method fromUtf8
15009 * @param {String} string
15010 * @param {Number} optional padding
15011 * @returns {String} hex representation of input string
15012 */
15013function fromUtf8(stringValue) {
15014 var str = new Buffer(stringValue, 'utf8');
15015
15016 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
15017}
15018
15019/**
15020 * Should be called to get hex representation (prefixed by 0x) of ascii string
15021 *
15022 * @method fromAscii
15023 * @param {String} string
15024 * @param {Number} optional padding
15025 * @returns {String} hex representation of input string
15026 */
15027function fromAscii(stringValue) {
15028 var hex = ''; // eslint-disable-line
15029 for (var i = 0; i < stringValue.length; i++) {
15030 // eslint-disable-line
15031 var code = stringValue.charCodeAt(i);
15032 var n = code.toString(16);
15033 hex += n.length < 2 ? '0' + n : n;
15034 }
15035
15036 return '0x' + hex;
15037}
15038
15039/**
15040 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
15041 *
15042 * @method getKeys get specific key from inner object array of objects
15043 * @param {String} params
15044 * @param {String} key
15045 * @param {Boolean} allowEmpty
15046 * @returns {Array} output just a simple array of output keys
15047 */
15048function getKeys(params, key, allowEmpty) {
15049 if (!Array.isArray(params)) {
15050 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
15051 }
15052 if (typeof key !== 'string') {
15053 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
15054 }
15055
15056 var result = []; // eslint-disable-line
15057
15058 for (var i = 0; i < params.length; i++) {
15059 // eslint-disable-line
15060 var value = params[i][key]; // eslint-disable-line
15061 if (allowEmpty && !value) {
15062 value = '';
15063 } else if (typeof value !== 'string') {
15064 throw new Error('invalid abi');
15065 }
15066 result.push(value);
15067 }
15068
15069 return result;
15070}
15071
15072/**
15073 * Is the string a hex string.
15074 *
15075 * @method check if string is hex string of specific length
15076 * @param {String} value
15077 * @param {Number} length
15078 * @returns {Boolean} output the string is a hex string
15079 */
15080function isHexString(value, length) {
15081 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
15082 return false;
15083 }
15084
15085 if (length && value.length !== 2 + 2 * length) {
15086 return false;
15087 }
15088
15089 return true;
15090}
15091
15092module.exports = {
15093 arrayContainsArray: arrayContainsArray,
15094 intToBuffer: intToBuffer,
15095 getBinarySize: getBinarySize,
15096 isHexPrefixed: isHexPrefixed,
15097 stripHexPrefix: stripHexPrefix,
15098 padToEven: padToEven,
15099 intToHex: intToHex,
15100 fromAscii: fromAscii,
15101 fromUtf8: fromUtf8,
15102 toAscii: toAscii,
15103 toUtf8: toUtf8,
15104 getKeys: getKeys,
15105 isHexString: isHexString
15106};
15107}).call(this,require("buffer").Buffer)
15108},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
15109var hash = exports;
15110
15111hash.utils = require('./hash/utils');
15112hash.common = require('./hash/common');
15113hash.sha = require('./hash/sha');
15114hash.ripemd = require('./hash/ripemd');
15115hash.hmac = require('./hash/hmac');
15116
15117// Proxy hash functions to the main object
15118hash.sha1 = hash.sha.sha1;
15119hash.sha256 = hash.sha.sha256;
15120hash.sha224 = hash.sha.sha224;
15121hash.sha384 = hash.sha.sha384;
15122hash.sha512 = hash.sha.sha512;
15123hash.ripemd160 = hash.ripemd.ripemd160;
15124
15125},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
15126var hash = require('../hash');
15127var utils = hash.utils;
15128var assert = utils.assert;
15129
15130function BlockHash() {
15131 this.pending = null;
15132 this.pendingTotal = 0;
15133 this.blockSize = this.constructor.blockSize;
15134 this.outSize = this.constructor.outSize;
15135 this.hmacStrength = this.constructor.hmacStrength;
15136 this.padLength = this.constructor.padLength / 8;
15137 this.endian = 'big';
15138
15139 this._delta8 = this.blockSize / 8;
15140 this._delta32 = this.blockSize / 32;
15141}
15142exports.BlockHash = BlockHash;
15143
15144BlockHash.prototype.update = function update(msg, enc) {
15145 // Convert message to array, pad it, and join into 32bit blocks
15146 msg = utils.toArray(msg, enc);
15147 if (!this.pending)
15148 this.pending = msg;
15149 else
15150 this.pending = this.pending.concat(msg);
15151 this.pendingTotal += msg.length;
15152
15153 // Enough data, try updating
15154 if (this.pending.length >= this._delta8) {
15155 msg = this.pending;
15156
15157 // Process pending data in blocks
15158 var r = msg.length % this._delta8;
15159 this.pending = msg.slice(msg.length - r, msg.length);
15160 if (this.pending.length === 0)
15161 this.pending = null;
15162
15163 msg = utils.join32(msg, 0, msg.length - r, this.endian);
15164 for (var i = 0; i < msg.length; i += this._delta32)
15165 this._update(msg, i, i + this._delta32);
15166 }
15167
15168 return this;
15169};
15170
15171BlockHash.prototype.digest = function digest(enc) {
15172 this.update(this._pad());
15173 assert(this.pending === null);
15174
15175 return this._digest(enc);
15176};
15177
15178BlockHash.prototype._pad = function pad() {
15179 var len = this.pendingTotal;
15180 var bytes = this._delta8;
15181 var k = bytes - ((len + this.padLength) % bytes);
15182 var res = new Array(k + this.padLength);
15183 res[0] = 0x80;
15184 for (var i = 1; i < k; i++)
15185 res[i] = 0;
15186
15187 // Append length
15188 len <<= 3;
15189 if (this.endian === 'big') {
15190 for (var t = 8; t < this.padLength; t++)
15191 res[i++] = 0;
15192
15193 res[i++] = 0;
15194 res[i++] = 0;
15195 res[i++] = 0;
15196 res[i++] = 0;
15197 res[i++] = (len >>> 24) & 0xff;
15198 res[i++] = (len >>> 16) & 0xff;
15199 res[i++] = (len >>> 8) & 0xff;
15200 res[i++] = len & 0xff;
15201 } else {
15202 res[i++] = len & 0xff;
15203 res[i++] = (len >>> 8) & 0xff;
15204 res[i++] = (len >>> 16) & 0xff;
15205 res[i++] = (len >>> 24) & 0xff;
15206 res[i++] = 0;
15207 res[i++] = 0;
15208 res[i++] = 0;
15209 res[i++] = 0;
15210
15211 for (var t = 8; t < this.padLength; t++)
15212 res[i++] = 0;
15213 }
15214
15215 return res;
15216};
15217
15218},{"../hash":57}],59:[function(require,module,exports){
15219var hmac = exports;
15220
15221var hash = require('../hash');
15222var utils = hash.utils;
15223var assert = utils.assert;
15224
15225function Hmac(hash, key, enc) {
15226 if (!(this instanceof Hmac))
15227 return new Hmac(hash, key, enc);
15228 this.Hash = hash;
15229 this.blockSize = hash.blockSize / 8;
15230 this.outSize = hash.outSize / 8;
15231 this.inner = null;
15232 this.outer = null;
15233
15234 this._init(utils.toArray(key, enc));
15235}
15236module.exports = Hmac;
15237
15238Hmac.prototype._init = function init(key) {
15239 // Shorten key, if needed
15240 if (key.length > this.blockSize)
15241 key = new this.Hash().update(key).digest();
15242 assert(key.length <= this.blockSize);
15243
15244 // Add padding to key
15245 for (var i = key.length; i < this.blockSize; i++)
15246 key.push(0);
15247
15248 for (var i = 0; i < key.length; i++)
15249 key[i] ^= 0x36;
15250 this.inner = new this.Hash().update(key);
15251
15252 // 0x36 ^ 0x5c = 0x6a
15253 for (var i = 0; i < key.length; i++)
15254 key[i] ^= 0x6a;
15255 this.outer = new this.Hash().update(key);
15256};
15257
15258Hmac.prototype.update = function update(msg, enc) {
15259 this.inner.update(msg, enc);
15260 return this;
15261};
15262
15263Hmac.prototype.digest = function digest(enc) {
15264 this.outer.update(this.inner.digest());
15265 return this.outer.digest(enc);
15266};
15267
15268},{"../hash":57}],60:[function(require,module,exports){
15269var hash = require('../hash');
15270var utils = hash.utils;
15271
15272var rotl32 = utils.rotl32;
15273var sum32 = utils.sum32;
15274var sum32_3 = utils.sum32_3;
15275var sum32_4 = utils.sum32_4;
15276var BlockHash = hash.common.BlockHash;
15277
15278function RIPEMD160() {
15279 if (!(this instanceof RIPEMD160))
15280 return new RIPEMD160();
15281
15282 BlockHash.call(this);
15283
15284 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
15285 this.endian = 'little';
15286}
15287utils.inherits(RIPEMD160, BlockHash);
15288exports.ripemd160 = RIPEMD160;
15289
15290RIPEMD160.blockSize = 512;
15291RIPEMD160.outSize = 160;
15292RIPEMD160.hmacStrength = 192;
15293RIPEMD160.padLength = 64;
15294
15295RIPEMD160.prototype._update = function update(msg, start) {
15296 var A = this.h[0];
15297 var B = this.h[1];
15298 var C = this.h[2];
15299 var D = this.h[3];
15300 var E = this.h[4];
15301 var Ah = A;
15302 var Bh = B;
15303 var Ch = C;
15304 var Dh = D;
15305 var Eh = E;
15306 for (var j = 0; j < 80; j++) {
15307 var T = sum32(
15308 rotl32(
15309 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
15310 s[j]),
15311 E);
15312 A = E;
15313 E = D;
15314 D = rotl32(C, 10);
15315 C = B;
15316 B = T;
15317 T = sum32(
15318 rotl32(
15319 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
15320 sh[j]),
15321 Eh);
15322 Ah = Eh;
15323 Eh = Dh;
15324 Dh = rotl32(Ch, 10);
15325 Ch = Bh;
15326 Bh = T;
15327 }
15328 T = sum32_3(this.h[1], C, Dh);
15329 this.h[1] = sum32_3(this.h[2], D, Eh);
15330 this.h[2] = sum32_3(this.h[3], E, Ah);
15331 this.h[3] = sum32_3(this.h[4], A, Bh);
15332 this.h[4] = sum32_3(this.h[0], B, Ch);
15333 this.h[0] = T;
15334};
15335
15336RIPEMD160.prototype._digest = function digest(enc) {
15337 if (enc === 'hex')
15338 return utils.toHex32(this.h, 'little');
15339 else
15340 return utils.split32(this.h, 'little');
15341};
15342
15343function f(j, x, y, z) {
15344 if (j <= 15)
15345 return x ^ y ^ z;
15346 else if (j <= 31)
15347 return (x & y) | ((~x) & z);
15348 else if (j <= 47)
15349 return (x | (~y)) ^ z;
15350 else if (j <= 63)
15351 return (x & z) | (y & (~z));
15352 else
15353 return x ^ (y | (~z));
15354}
15355
15356function K(j) {
15357 if (j <= 15)
15358 return 0x00000000;
15359 else if (j <= 31)
15360 return 0x5a827999;
15361 else if (j <= 47)
15362 return 0x6ed9eba1;
15363 else if (j <= 63)
15364 return 0x8f1bbcdc;
15365 else
15366 return 0xa953fd4e;
15367}
15368
15369function Kh(j) {
15370 if (j <= 15)
15371 return 0x50a28be6;
15372 else if (j <= 31)
15373 return 0x5c4dd124;
15374 else if (j <= 47)
15375 return 0x6d703ef3;
15376 else if (j <= 63)
15377 return 0x7a6d76e9;
15378 else
15379 return 0x00000000;
15380}
15381
15382var r = [
15383 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
15384 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
15385 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
15386 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
15387 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
15388];
15389
15390var rh = [
15391 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
15392 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
15393 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
15394 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
15395 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
15396];
15397
15398var s = [
15399 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
15400 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
15401 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
15402 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
15403 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
15404];
15405
15406var sh = [
15407 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
15408 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
15409 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
15410 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
15411 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
15412];
15413
15414},{"../hash":57}],61:[function(require,module,exports){
15415var hash = require('../hash');
15416var utils = hash.utils;
15417var assert = utils.assert;
15418
15419var rotr32 = utils.rotr32;
15420var rotl32 = utils.rotl32;
15421var sum32 = utils.sum32;
15422var sum32_4 = utils.sum32_4;
15423var sum32_5 = utils.sum32_5;
15424var rotr64_hi = utils.rotr64_hi;
15425var rotr64_lo = utils.rotr64_lo;
15426var shr64_hi = utils.shr64_hi;
15427var shr64_lo = utils.shr64_lo;
15428var sum64 = utils.sum64;
15429var sum64_hi = utils.sum64_hi;
15430var sum64_lo = utils.sum64_lo;
15431var sum64_4_hi = utils.sum64_4_hi;
15432var sum64_4_lo = utils.sum64_4_lo;
15433var sum64_5_hi = utils.sum64_5_hi;
15434var sum64_5_lo = utils.sum64_5_lo;
15435var BlockHash = hash.common.BlockHash;
15436
15437var sha256_K = [
15438 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
15439 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
15440 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
15441 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
15442 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
15443 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
15444 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
15445 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
15446 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
15447 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
15448 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
15449 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
15450 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
15451 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
15452 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
15453 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
15454];
15455
15456var sha512_K = [
15457 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
15458 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
15459 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
15460 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
15461 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
15462 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
15463 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
15464 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
15465 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
15466 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
15467 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
15468 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
15469 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
15470 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
15471 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
15472 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
15473 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
15474 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
15475 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
15476 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
15477 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
15478 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
15479 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
15480 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
15481 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
15482 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
15483 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
15484 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
15485 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
15486 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
15487 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
15488 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
15489 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
15490 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
15491 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
15492 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
15493 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
15494 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
15495 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
15496 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
15497];
15498
15499var sha1_K = [
15500 0x5A827999, 0x6ED9EBA1,
15501 0x8F1BBCDC, 0xCA62C1D6
15502];
15503
15504function SHA256() {
15505 if (!(this instanceof SHA256))
15506 return new SHA256();
15507
15508 BlockHash.call(this);
15509 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
15510 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
15511 this.k = sha256_K;
15512 this.W = new Array(64);
15513}
15514utils.inherits(SHA256, BlockHash);
15515exports.sha256 = SHA256;
15516
15517SHA256.blockSize = 512;
15518SHA256.outSize = 256;
15519SHA256.hmacStrength = 192;
15520SHA256.padLength = 64;
15521
15522SHA256.prototype._update = function _update(msg, start) {
15523 var W = this.W;
15524
15525 for (var i = 0; i < 16; i++)
15526 W[i] = msg[start + i];
15527 for (; i < W.length; i++)
15528 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
15529
15530 var a = this.h[0];
15531 var b = this.h[1];
15532 var c = this.h[2];
15533 var d = this.h[3];
15534 var e = this.h[4];
15535 var f = this.h[5];
15536 var g = this.h[6];
15537 var h = this.h[7];
15538
15539 assert(this.k.length === W.length);
15540 for (var i = 0; i < W.length; i++) {
15541 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
15542 var T2 = sum32(s0_256(a), maj32(a, b, c));
15543 h = g;
15544 g = f;
15545 f = e;
15546 e = sum32(d, T1);
15547 d = c;
15548 c = b;
15549 b = a;
15550 a = sum32(T1, T2);
15551 }
15552
15553 this.h[0] = sum32(this.h[0], a);
15554 this.h[1] = sum32(this.h[1], b);
15555 this.h[2] = sum32(this.h[2], c);
15556 this.h[3] = sum32(this.h[3], d);
15557 this.h[4] = sum32(this.h[4], e);
15558 this.h[5] = sum32(this.h[5], f);
15559 this.h[6] = sum32(this.h[6], g);
15560 this.h[7] = sum32(this.h[7], h);
15561};
15562
15563SHA256.prototype._digest = function digest(enc) {
15564 if (enc === 'hex')
15565 return utils.toHex32(this.h, 'big');
15566 else
15567 return utils.split32(this.h, 'big');
15568};
15569
15570function SHA224() {
15571 if (!(this instanceof SHA224))
15572 return new SHA224();
15573
15574 SHA256.call(this);
15575 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
15576 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
15577}
15578utils.inherits(SHA224, SHA256);
15579exports.sha224 = SHA224;
15580
15581SHA224.blockSize = 512;
15582SHA224.outSize = 224;
15583SHA224.hmacStrength = 192;
15584SHA224.padLength = 64;
15585
15586SHA224.prototype._digest = function digest(enc) {
15587 // Just truncate output
15588 if (enc === 'hex')
15589 return utils.toHex32(this.h.slice(0, 7), 'big');
15590 else
15591 return utils.split32(this.h.slice(0, 7), 'big');
15592};
15593
15594function SHA512() {
15595 if (!(this instanceof SHA512))
15596 return new SHA512();
15597
15598 BlockHash.call(this);
15599 this.h = [ 0x6a09e667, 0xf3bcc908,
15600 0xbb67ae85, 0x84caa73b,
15601 0x3c6ef372, 0xfe94f82b,
15602 0xa54ff53a, 0x5f1d36f1,
15603 0x510e527f, 0xade682d1,
15604 0x9b05688c, 0x2b3e6c1f,
15605 0x1f83d9ab, 0xfb41bd6b,
15606 0x5be0cd19, 0x137e2179 ];
15607 this.k = sha512_K;
15608 this.W = new Array(160);
15609}
15610utils.inherits(SHA512, BlockHash);
15611exports.sha512 = SHA512;
15612
15613SHA512.blockSize = 1024;
15614SHA512.outSize = 512;
15615SHA512.hmacStrength = 192;
15616SHA512.padLength = 128;
15617
15618SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
15619 var W = this.W;
15620
15621 // 32 x 32bit words
15622 for (var i = 0; i < 32; i++)
15623 W[i] = msg[start + i];
15624 for (; i < W.length; i += 2) {
15625 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
15626 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
15627 var c1_hi = W[i - 14]; // i - 7
15628 var c1_lo = W[i - 13];
15629 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
15630 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
15631 var c3_hi = W[i - 32]; // i - 16
15632 var c3_lo = W[i - 31];
15633
15634 W[i] = sum64_4_hi(c0_hi, c0_lo,
15635 c1_hi, c1_lo,
15636 c2_hi, c2_lo,
15637 c3_hi, c3_lo);
15638 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
15639 c1_hi, c1_lo,
15640 c2_hi, c2_lo,
15641 c3_hi, c3_lo);
15642 }
15643};
15644
15645SHA512.prototype._update = function _update(msg, start) {
15646 this._prepareBlock(msg, start);
15647
15648 var W = this.W;
15649
15650 var ah = this.h[0];
15651 var al = this.h[1];
15652 var bh = this.h[2];
15653 var bl = this.h[3];
15654 var ch = this.h[4];
15655 var cl = this.h[5];
15656 var dh = this.h[6];
15657 var dl = this.h[7];
15658 var eh = this.h[8];
15659 var el = this.h[9];
15660 var fh = this.h[10];
15661 var fl = this.h[11];
15662 var gh = this.h[12];
15663 var gl = this.h[13];
15664 var hh = this.h[14];
15665 var hl = this.h[15];
15666
15667 assert(this.k.length === W.length);
15668 for (var i = 0; i < W.length; i += 2) {
15669 var c0_hi = hh;
15670 var c0_lo = hl;
15671 var c1_hi = s1_512_hi(eh, el);
15672 var c1_lo = s1_512_lo(eh, el);
15673 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
15674 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
15675 var c3_hi = this.k[i];
15676 var c3_lo = this.k[i + 1];
15677 var c4_hi = W[i];
15678 var c4_lo = W[i + 1];
15679
15680 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
15681 c1_hi, c1_lo,
15682 c2_hi, c2_lo,
15683 c3_hi, c3_lo,
15684 c4_hi, c4_lo);
15685 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
15686 c1_hi, c1_lo,
15687 c2_hi, c2_lo,
15688 c3_hi, c3_lo,
15689 c4_hi, c4_lo);
15690
15691 var c0_hi = s0_512_hi(ah, al);
15692 var c0_lo = s0_512_lo(ah, al);
15693 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
15694 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
15695
15696 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
15697 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
15698
15699 hh = gh;
15700 hl = gl;
15701
15702 gh = fh;
15703 gl = fl;
15704
15705 fh = eh;
15706 fl = el;
15707
15708 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
15709 el = sum64_lo(dl, dl, T1_hi, T1_lo);
15710
15711 dh = ch;
15712 dl = cl;
15713
15714 ch = bh;
15715 cl = bl;
15716
15717 bh = ah;
15718 bl = al;
15719
15720 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
15721 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
15722 }
15723
15724 sum64(this.h, 0, ah, al);
15725 sum64(this.h, 2, bh, bl);
15726 sum64(this.h, 4, ch, cl);
15727 sum64(this.h, 6, dh, dl);
15728 sum64(this.h, 8, eh, el);
15729 sum64(this.h, 10, fh, fl);
15730 sum64(this.h, 12, gh, gl);
15731 sum64(this.h, 14, hh, hl);
15732};
15733
15734SHA512.prototype._digest = function digest(enc) {
15735 if (enc === 'hex')
15736 return utils.toHex32(this.h, 'big');
15737 else
15738 return utils.split32(this.h, 'big');
15739};
15740
15741function SHA384() {
15742 if (!(this instanceof SHA384))
15743 return new SHA384();
15744
15745 SHA512.call(this);
15746 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
15747 0x629a292a, 0x367cd507,
15748 0x9159015a, 0x3070dd17,
15749 0x152fecd8, 0xf70e5939,
15750 0x67332667, 0xffc00b31,
15751 0x8eb44a87, 0x68581511,
15752 0xdb0c2e0d, 0x64f98fa7,
15753 0x47b5481d, 0xbefa4fa4 ];
15754}
15755utils.inherits(SHA384, SHA512);
15756exports.sha384 = SHA384;
15757
15758SHA384.blockSize = 1024;
15759SHA384.outSize = 384;
15760SHA384.hmacStrength = 192;
15761SHA384.padLength = 128;
15762
15763SHA384.prototype._digest = function digest(enc) {
15764 if (enc === 'hex')
15765 return utils.toHex32(this.h.slice(0, 12), 'big');
15766 else
15767 return utils.split32(this.h.slice(0, 12), 'big');
15768};
15769
15770function SHA1() {
15771 if (!(this instanceof SHA1))
15772 return new SHA1();
15773
15774 BlockHash.call(this);
15775 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
15776 0x10325476, 0xc3d2e1f0 ];
15777 this.W = new Array(80);
15778}
15779
15780utils.inherits(SHA1, BlockHash);
15781exports.sha1 = SHA1;
15782
15783SHA1.blockSize = 512;
15784SHA1.outSize = 160;
15785SHA1.hmacStrength = 80;
15786SHA1.padLength = 64;
15787
15788SHA1.prototype._update = function _update(msg, start) {
15789 var W = this.W;
15790
15791 for (var i = 0; i < 16; i++)
15792 W[i] = msg[start + i];
15793
15794 for(; i < W.length; i++)
15795 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
15796
15797 var a = this.h[0];
15798 var b = this.h[1];
15799 var c = this.h[2];
15800 var d = this.h[3];
15801 var e = this.h[4];
15802
15803 for (var i = 0; i < W.length; i++) {
15804 var s = ~~(i / 20);
15805 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
15806 e = d;
15807 d = c;
15808 c = rotl32(b, 30);
15809 b = a;
15810 a = t;
15811 }
15812
15813 this.h[0] = sum32(this.h[0], a);
15814 this.h[1] = sum32(this.h[1], b);
15815 this.h[2] = sum32(this.h[2], c);
15816 this.h[3] = sum32(this.h[3], d);
15817 this.h[4] = sum32(this.h[4], e);
15818};
15819
15820SHA1.prototype._digest = function digest(enc) {
15821 if (enc === 'hex')
15822 return utils.toHex32(this.h, 'big');
15823 else
15824 return utils.split32(this.h, 'big');
15825};
15826
15827function ch32(x, y, z) {
15828 return (x & y) ^ ((~x) & z);
15829}
15830
15831function maj32(x, y, z) {
15832 return (x & y) ^ (x & z) ^ (y & z);
15833}
15834
15835function p32(x, y, z) {
15836 return x ^ y ^ z;
15837}
15838
15839function s0_256(x) {
15840 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
15841}
15842
15843function s1_256(x) {
15844 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
15845}
15846
15847function g0_256(x) {
15848 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
15849}
15850
15851function g1_256(x) {
15852 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
15853}
15854
15855function ft_1(s, x, y, z) {
15856 if (s === 0)
15857 return ch32(x, y, z);
15858 if (s === 1 || s === 3)
15859 return p32(x, y, z);
15860 if (s === 2)
15861 return maj32(x, y, z);
15862}
15863
15864function ch64_hi(xh, xl, yh, yl, zh, zl) {
15865 var r = (xh & yh) ^ ((~xh) & zh);
15866 if (r < 0)
15867 r += 0x100000000;
15868 return r;
15869}
15870
15871function ch64_lo(xh, xl, yh, yl, zh, zl) {
15872 var r = (xl & yl) ^ ((~xl) & zl);
15873 if (r < 0)
15874 r += 0x100000000;
15875 return r;
15876}
15877
15878function maj64_hi(xh, xl, yh, yl, zh, zl) {
15879 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
15880 if (r < 0)
15881 r += 0x100000000;
15882 return r;
15883}
15884
15885function maj64_lo(xh, xl, yh, yl, zh, zl) {
15886 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
15887 if (r < 0)
15888 r += 0x100000000;
15889 return r;
15890}
15891
15892function s0_512_hi(xh, xl) {
15893 var c0_hi = rotr64_hi(xh, xl, 28);
15894 var c1_hi = rotr64_hi(xl, xh, 2); // 34
15895 var c2_hi = rotr64_hi(xl, xh, 7); // 39
15896
15897 var r = c0_hi ^ c1_hi ^ c2_hi;
15898 if (r < 0)
15899 r += 0x100000000;
15900 return r;
15901}
15902
15903function s0_512_lo(xh, xl) {
15904 var c0_lo = rotr64_lo(xh, xl, 28);
15905 var c1_lo = rotr64_lo(xl, xh, 2); // 34
15906 var c2_lo = rotr64_lo(xl, xh, 7); // 39
15907
15908 var r = c0_lo ^ c1_lo ^ c2_lo;
15909 if (r < 0)
15910 r += 0x100000000;
15911 return r;
15912}
15913
15914function s1_512_hi(xh, xl) {
15915 var c0_hi = rotr64_hi(xh, xl, 14);
15916 var c1_hi = rotr64_hi(xh, xl, 18);
15917 var c2_hi = rotr64_hi(xl, xh, 9); // 41
15918
15919 var r = c0_hi ^ c1_hi ^ c2_hi;
15920 if (r < 0)
15921 r += 0x100000000;
15922 return r;
15923}
15924
15925function s1_512_lo(xh, xl) {
15926 var c0_lo = rotr64_lo(xh, xl, 14);
15927 var c1_lo = rotr64_lo(xh, xl, 18);
15928 var c2_lo = rotr64_lo(xl, xh, 9); // 41
15929
15930 var r = c0_lo ^ c1_lo ^ c2_lo;
15931 if (r < 0)
15932 r += 0x100000000;
15933 return r;
15934}
15935
15936function g0_512_hi(xh, xl) {
15937 var c0_hi = rotr64_hi(xh, xl, 1);
15938 var c1_hi = rotr64_hi(xh, xl, 8);
15939 var c2_hi = shr64_hi(xh, xl, 7);
15940
15941 var r = c0_hi ^ c1_hi ^ c2_hi;
15942 if (r < 0)
15943 r += 0x100000000;
15944 return r;
15945}
15946
15947function g0_512_lo(xh, xl) {
15948 var c0_lo = rotr64_lo(xh, xl, 1);
15949 var c1_lo = rotr64_lo(xh, xl, 8);
15950 var c2_lo = shr64_lo(xh, xl, 7);
15951
15952 var r = c0_lo ^ c1_lo ^ c2_lo;
15953 if (r < 0)
15954 r += 0x100000000;
15955 return r;
15956}
15957
15958function g1_512_hi(xh, xl) {
15959 var c0_hi = rotr64_hi(xh, xl, 19);
15960 var c1_hi = rotr64_hi(xl, xh, 29); // 61
15961 var c2_hi = shr64_hi(xh, xl, 6);
15962
15963 var r = c0_hi ^ c1_hi ^ c2_hi;
15964 if (r < 0)
15965 r += 0x100000000;
15966 return r;
15967}
15968
15969function g1_512_lo(xh, xl) {
15970 var c0_lo = rotr64_lo(xh, xl, 19);
15971 var c1_lo = rotr64_lo(xl, xh, 29); // 61
15972 var c2_lo = shr64_lo(xh, xl, 6);
15973
15974 var r = c0_lo ^ c1_lo ^ c2_lo;
15975 if (r < 0)
15976 r += 0x100000000;
15977 return r;
15978}
15979
15980},{"../hash":57}],62:[function(require,module,exports){
15981var utils = exports;
15982var inherits = require('inherits');
15983
15984function toArray(msg, enc) {
15985 if (Array.isArray(msg))
15986 return msg.slice();
15987 if (!msg)
15988 return [];
15989 var res = [];
15990 if (typeof msg === 'string') {
15991 if (!enc) {
15992 for (var i = 0; i < msg.length; i++) {
15993 var c = msg.charCodeAt(i);
15994 var hi = c >> 8;
15995 var lo = c & 0xff;
15996 if (hi)
15997 res.push(hi, lo);
15998 else
15999 res.push(lo);
16000 }
16001 } else if (enc === 'hex') {
16002 msg = msg.replace(/[^a-z0-9]+/ig, '');
16003 if (msg.length % 2 !== 0)
16004 msg = '0' + msg;
16005 for (var i = 0; i < msg.length; i += 2)
16006 res.push(parseInt(msg[i] + msg[i + 1], 16));
16007 }
16008 } else {
16009 for (var i = 0; i < msg.length; i++)
16010 res[i] = msg[i] | 0;
16011 }
16012 return res;
16013}
16014utils.toArray = toArray;
16015
16016function toHex(msg) {
16017 var res = '';
16018 for (var i = 0; i < msg.length; i++)
16019 res += zero2(msg[i].toString(16));
16020 return res;
16021}
16022utils.toHex = toHex;
16023
16024function htonl(w) {
16025 var res = (w >>> 24) |
16026 ((w >>> 8) & 0xff00) |
16027 ((w << 8) & 0xff0000) |
16028 ((w & 0xff) << 24);
16029 return res >>> 0;
16030}
16031utils.htonl = htonl;
16032
16033function toHex32(msg, endian) {
16034 var res = '';
16035 for (var i = 0; i < msg.length; i++) {
16036 var w = msg[i];
16037 if (endian === 'little')
16038 w = htonl(w);
16039 res += zero8(w.toString(16));
16040 }
16041 return res;
16042}
16043utils.toHex32 = toHex32;
16044
16045function zero2(word) {
16046 if (word.length === 1)
16047 return '0' + word;
16048 else
16049 return word;
16050}
16051utils.zero2 = zero2;
16052
16053function zero8(word) {
16054 if (word.length === 7)
16055 return '0' + word;
16056 else if (word.length === 6)
16057 return '00' + word;
16058 else if (word.length === 5)
16059 return '000' + word;
16060 else if (word.length === 4)
16061 return '0000' + word;
16062 else if (word.length === 3)
16063 return '00000' + word;
16064 else if (word.length === 2)
16065 return '000000' + word;
16066 else if (word.length === 1)
16067 return '0000000' + word;
16068 else
16069 return word;
16070}
16071utils.zero8 = zero8;
16072
16073function join32(msg, start, end, endian) {
16074 var len = end - start;
16075 assert(len % 4 === 0);
16076 var res = new Array(len / 4);
16077 for (var i = 0, k = start; i < res.length; i++, k += 4) {
16078 var w;
16079 if (endian === 'big')
16080 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
16081 else
16082 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
16083 res[i] = w >>> 0;
16084 }
16085 return res;
16086}
16087utils.join32 = join32;
16088
16089function split32(msg, endian) {
16090 var res = new Array(msg.length * 4);
16091 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
16092 var m = msg[i];
16093 if (endian === 'big') {
16094 res[k] = m >>> 24;
16095 res[k + 1] = (m >>> 16) & 0xff;
16096 res[k + 2] = (m >>> 8) & 0xff;
16097 res[k + 3] = m & 0xff;
16098 } else {
16099 res[k + 3] = m >>> 24;
16100 res[k + 2] = (m >>> 16) & 0xff;
16101 res[k + 1] = (m >>> 8) & 0xff;
16102 res[k] = m & 0xff;
16103 }
16104 }
16105 return res;
16106}
16107utils.split32 = split32;
16108
16109function rotr32(w, b) {
16110 return (w >>> b) | (w << (32 - b));
16111}
16112utils.rotr32 = rotr32;
16113
16114function rotl32(w, b) {
16115 return (w << b) | (w >>> (32 - b));
16116}
16117utils.rotl32 = rotl32;
16118
16119function sum32(a, b) {
16120 return (a + b) >>> 0;
16121}
16122utils.sum32 = sum32;
16123
16124function sum32_3(a, b, c) {
16125 return (a + b + c) >>> 0;
16126}
16127utils.sum32_3 = sum32_3;
16128
16129function sum32_4(a, b, c, d) {
16130 return (a + b + c + d) >>> 0;
16131}
16132utils.sum32_4 = sum32_4;
16133
16134function sum32_5(a, b, c, d, e) {
16135 return (a + b + c + d + e) >>> 0;
16136}
16137utils.sum32_5 = sum32_5;
16138
16139function assert(cond, msg) {
16140 if (!cond)
16141 throw new Error(msg || 'Assertion failed');
16142}
16143utils.assert = assert;
16144
16145utils.inherits = inherits;
16146
16147function sum64(buf, pos, ah, al) {
16148 var bh = buf[pos];
16149 var bl = buf[pos + 1];
16150
16151 var lo = (al + bl) >>> 0;
16152 var hi = (lo < al ? 1 : 0) + ah + bh;
16153 buf[pos] = hi >>> 0;
16154 buf[pos + 1] = lo;
16155}
16156exports.sum64 = sum64;
16157
16158function sum64_hi(ah, al, bh, bl) {
16159 var lo = (al + bl) >>> 0;
16160 var hi = (lo < al ? 1 : 0) + ah + bh;
16161 return hi >>> 0;
16162};
16163exports.sum64_hi = sum64_hi;
16164
16165function sum64_lo(ah, al, bh, bl) {
16166 var lo = al + bl;
16167 return lo >>> 0;
16168};
16169exports.sum64_lo = sum64_lo;
16170
16171function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
16172 var carry = 0;
16173 var lo = al;
16174 lo = (lo + bl) >>> 0;
16175 carry += lo < al ? 1 : 0;
16176 lo = (lo + cl) >>> 0;
16177 carry += lo < cl ? 1 : 0;
16178 lo = (lo + dl) >>> 0;
16179 carry += lo < dl ? 1 : 0;
16180
16181 var hi = ah + bh + ch + dh + carry;
16182 return hi >>> 0;
16183};
16184exports.sum64_4_hi = sum64_4_hi;
16185
16186function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
16187 var lo = al + bl + cl + dl;
16188 return lo >>> 0;
16189};
16190exports.sum64_4_lo = sum64_4_lo;
16191
16192function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
16193 var carry = 0;
16194 var lo = al;
16195 lo = (lo + bl) >>> 0;
16196 carry += lo < al ? 1 : 0;
16197 lo = (lo + cl) >>> 0;
16198 carry += lo < cl ? 1 : 0;
16199 lo = (lo + dl) >>> 0;
16200 carry += lo < dl ? 1 : 0;
16201 lo = (lo + el) >>> 0;
16202 carry += lo < el ? 1 : 0;
16203
16204 var hi = ah + bh + ch + dh + eh + carry;
16205 return hi >>> 0;
16206};
16207exports.sum64_5_hi = sum64_5_hi;
16208
16209function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
16210 var lo = al + bl + cl + dl + el;
16211
16212 return lo >>> 0;
16213};
16214exports.sum64_5_lo = sum64_5_lo;
16215
16216function rotr64_hi(ah, al, num) {
16217 var r = (al << (32 - num)) | (ah >>> num);
16218 return r >>> 0;
16219};
16220exports.rotr64_hi = rotr64_hi;
16221
16222function rotr64_lo(ah, al, num) {
16223 var r = (ah << (32 - num)) | (al >>> num);
16224 return r >>> 0;
16225};
16226exports.rotr64_lo = rotr64_lo;
16227
16228function shr64_hi(ah, al, num) {
16229 return ah >>> num;
16230};
16231exports.shr64_hi = shr64_hi;
16232
16233function shr64_lo(ah, al, num) {
16234 var r = (ah << (32 - num)) | (al >>> num);
16235 return r >>> 0;
16236};
16237exports.shr64_lo = shr64_lo;
16238
16239},{"inherits":63}],63:[function(require,module,exports){
16240arguments[4][9][0].apply(exports,arguments)
16241},{"dup":9}],64:[function(require,module,exports){
16242/**
16243 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
16244 * @param {String} str the string input value
16245 * @return {Boolean} a boolean if it is or is not hex prefixed
16246 * @throws if the str input is not a string
16247 */
16248module.exports = function isHexPrefixed(str) {
16249 if (typeof str !== 'string') {
16250 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
16251 }
16252
16253 return str.slice(0, 2) === '0x';
16254}
16255
16256},{}],65:[function(require,module,exports){
16257'use strict'
16258module.exports = require('./lib/api')(require('./lib/keccak'))
16259
16260},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
16261'use strict'
16262var createKeccak = require('./keccak')
16263var createShake = require('./shake')
16264
16265module.exports = function (KeccakState) {
16266 var Keccak = createKeccak(KeccakState)
16267 var Shake = createShake(KeccakState)
16268
16269 return function (algorithm, options) {
16270 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
16271 switch (hash) {
16272 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
16273 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
16274 case 'keccak384': return new Keccak(832, 768, null, 384, options)
16275 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
16276
16277 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
16278 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
16279 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
16280 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
16281
16282 case 'shake128': return new Shake(1344, 256, 0x1f, options)
16283 case 'shake256': return new Shake(1088, 512, 0x1f, options)
16284
16285 default: throw new Error('Invald algorithm: ' + algorithm)
16286 }
16287 }
16288}
16289
16290},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
16291(function (Buffer){
16292'use strict'
16293var Transform = require('stream').Transform
16294var inherits = require('inherits')
16295
16296module.exports = function (KeccakState) {
16297 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
16298 Transform.call(this, options)
16299
16300 this._rate = rate
16301 this._capacity = capacity
16302 this._delimitedSuffix = delimitedSuffix
16303 this._hashBitLength = hashBitLength
16304 this._options = options
16305
16306 this._state = new KeccakState()
16307 this._state.initialize(rate, capacity)
16308 this._finalized = false
16309 }
16310
16311 inherits(Keccak, Transform)
16312
16313 Keccak.prototype._transform = function (chunk, encoding, callback) {
16314 var error = null
16315 try {
16316 this.update(chunk, encoding)
16317 } catch (err) {
16318 error = err
16319 }
16320
16321 callback(error)
16322 }
16323
16324 Keccak.prototype._flush = function (callback) {
16325 var error = null
16326 try {
16327 this.push(this.digest())
16328 } catch (err) {
16329 error = err
16330 }
16331
16332 callback(error)
16333 }
16334
16335 Keccak.prototype.update = function (data, encoding) {
16336 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
16337 if (this._finalized) throw new Error('Digest already called')
16338 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
16339
16340 this._state.absorb(data)
16341
16342 return this
16343 }
16344
16345 Keccak.prototype.digest = function (encoding) {
16346 if (this._finalized) throw new Error('Digest already called')
16347 this._finalized = true
16348
16349 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
16350 var digest = this._state.squeeze(this._hashBitLength / 8)
16351 if (encoding !== undefined) digest = digest.toString(encoding)
16352
16353 this._resetState()
16354
16355 return digest
16356 }
16357
16358 // remove result from memory
16359 Keccak.prototype._resetState = function () {
16360 this._state.initialize(this._rate, this._capacity)
16361 return this
16362 }
16363
16364 // because sometimes we need hash right now and little later
16365 Keccak.prototype._clone = function () {
16366 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
16367 this._state.copy(clone._state)
16368 clone._finalized = this._finalized
16369
16370 return clone
16371 }
16372
16373 return Keccak
16374}
16375
16376}).call(this,require("buffer").Buffer)
16377},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
16378(function (Buffer){
16379'use strict'
16380var Transform = require('stream').Transform
16381var inherits = require('inherits')
16382
16383module.exports = function (KeccakState) {
16384 function Shake (rate, capacity, delimitedSuffix, options) {
16385 Transform.call(this, options)
16386
16387 this._rate = rate
16388 this._capacity = capacity
16389 this._delimitedSuffix = delimitedSuffix
16390 this._options = options
16391
16392 this._state = new KeccakState()
16393 this._state.initialize(rate, capacity)
16394 this._finalized = false
16395 }
16396
16397 inherits(Shake, Transform)
16398
16399 Shake.prototype._transform = function (chunk, encoding, callback) {
16400 var error = null
16401 try {
16402 this.update(chunk, encoding)
16403 } catch (err) {
16404 error = err
16405 }
16406
16407 callback(error)
16408 }
16409
16410 Shake.prototype._flush = function () {}
16411
16412 Shake.prototype._read = function (size) {
16413 this.push(this.squeeze(size))
16414 }
16415
16416 Shake.prototype.update = function (data, encoding) {
16417 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
16418 if (this._finalized) throw new Error('Squeeze already called')
16419 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
16420
16421 this._state.absorb(data)
16422
16423 return this
16424 }
16425
16426 Shake.prototype.squeeze = function (dataByteLength, encoding) {
16427 if (!this._finalized) {
16428 this._finalized = true
16429 this._state.absorbLastFewBits(this._delimitedSuffix)
16430 }
16431
16432 var data = this._state.squeeze(dataByteLength)
16433 if (encoding !== undefined) data = data.toString(encoding)
16434
16435 return data
16436 }
16437
16438 Shake.prototype._resetState = function () {
16439 this._state.initialize(this._rate, this._capacity)
16440 return this
16441 }
16442
16443 Shake.prototype._clone = function () {
16444 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
16445 this._state.copy(clone._state)
16446 clone._finalized = this._finalized
16447
16448 return clone
16449 }
16450
16451 return Shake
16452}
16453
16454}).call(this,require("buffer").Buffer)
16455},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
16456'use strict'
16457var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
16458
16459exports.p1600 = function (s) {
16460 for (var round = 0; round < 24; ++round) {
16461 // theta
16462 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
16463 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
16464 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
16465 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
16466 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
16467 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
16468 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
16469 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
16470 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
16471 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
16472
16473 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
16474 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
16475 var t1slo0 = s[0] ^ lo
16476 var t1shi0 = s[1] ^ hi
16477 var t1slo5 = s[10] ^ lo
16478 var t1shi5 = s[11] ^ hi
16479 var t1slo10 = s[20] ^ lo
16480 var t1shi10 = s[21] ^ hi
16481 var t1slo15 = s[30] ^ lo
16482 var t1shi15 = s[31] ^ hi
16483 var t1slo20 = s[40] ^ lo
16484 var t1shi20 = s[41] ^ hi
16485 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
16486 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
16487 var t1slo1 = s[2] ^ lo
16488 var t1shi1 = s[3] ^ hi
16489 var t1slo6 = s[12] ^ lo
16490 var t1shi6 = s[13] ^ hi
16491 var t1slo11 = s[22] ^ lo
16492 var t1shi11 = s[23] ^ hi
16493 var t1slo16 = s[32] ^ lo
16494 var t1shi16 = s[33] ^ hi
16495 var t1slo21 = s[42] ^ lo
16496 var t1shi21 = s[43] ^ hi
16497 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
16498 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
16499 var t1slo2 = s[4] ^ lo
16500 var t1shi2 = s[5] ^ hi
16501 var t1slo7 = s[14] ^ lo
16502 var t1shi7 = s[15] ^ hi
16503 var t1slo12 = s[24] ^ lo
16504 var t1shi12 = s[25] ^ hi
16505 var t1slo17 = s[34] ^ lo
16506 var t1shi17 = s[35] ^ hi
16507 var t1slo22 = s[44] ^ lo
16508 var t1shi22 = s[45] ^ hi
16509 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
16510 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
16511 var t1slo3 = s[6] ^ lo
16512 var t1shi3 = s[7] ^ hi
16513 var t1slo8 = s[16] ^ lo
16514 var t1shi8 = s[17] ^ hi
16515 var t1slo13 = s[26] ^ lo
16516 var t1shi13 = s[27] ^ hi
16517 var t1slo18 = s[36] ^ lo
16518 var t1shi18 = s[37] ^ hi
16519 var t1slo23 = s[46] ^ lo
16520 var t1shi23 = s[47] ^ hi
16521 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
16522 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
16523 var t1slo4 = s[8] ^ lo
16524 var t1shi4 = s[9] ^ hi
16525 var t1slo9 = s[18] ^ lo
16526 var t1shi9 = s[19] ^ hi
16527 var t1slo14 = s[28] ^ lo
16528 var t1shi14 = s[29] ^ hi
16529 var t1slo19 = s[38] ^ lo
16530 var t1shi19 = s[39] ^ hi
16531 var t1slo24 = s[48] ^ lo
16532 var t1shi24 = s[49] ^ hi
16533
16534 // rho & pi
16535 var t2slo0 = t1slo0
16536 var t2shi0 = t1shi0
16537 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
16538 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
16539 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
16540 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
16541 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
16542 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
16543 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
16544 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
16545 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
16546 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
16547 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
16548 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
16549 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
16550 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
16551 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
16552 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
16553 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
16554 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
16555 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
16556 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
16557 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
16558 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
16559 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
16560 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
16561 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
16562 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
16563 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
16564 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
16565 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
16566 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
16567 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
16568 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
16569 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
16570 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
16571 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
16572 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
16573 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
16574 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
16575 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
16576 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
16577 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
16578 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
16579 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
16580 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
16581 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
16582 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
16583 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
16584 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
16585
16586 // chi
16587 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
16588 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
16589 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
16590 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
16591 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
16592 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
16593 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
16594 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
16595 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
16596 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
16597 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
16598 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
16599 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
16600 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
16601 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
16602 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
16603 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
16604 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
16605 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
16606 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
16607 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
16608 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
16609 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
16610 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
16611 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
16612 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
16613 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
16614 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
16615 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
16616 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
16617 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
16618 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
16619 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
16620 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
16621 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
16622 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
16623 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
16624 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
16625 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
16626 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
16627 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
16628 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
16629 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
16630 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
16631 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
16632 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
16633 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
16634 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
16635 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
16636 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
16637
16638 // iota
16639 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
16640 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
16641 }
16642}
16643
16644},{}],70:[function(require,module,exports){
16645(function (Buffer){
16646'use strict'
16647var keccakState = require('./keccak-state-unroll')
16648
16649function Keccak () {
16650 // much faster than `new Array(50)`
16651 this.state = [
16652 0, 0, 0, 0, 0,
16653 0, 0, 0, 0, 0,
16654 0, 0, 0, 0, 0,
16655 0, 0, 0, 0, 0,
16656 0, 0, 0, 0, 0
16657 ]
16658
16659 this.blockSize = null
16660 this.count = 0
16661 this.squeezing = false
16662}
16663
16664Keccak.prototype.initialize = function (rate, capacity) {
16665 for (var i = 0; i < 50; ++i) this.state[i] = 0
16666 this.blockSize = rate / 8
16667 this.count = 0
16668 this.squeezing = false
16669}
16670
16671Keccak.prototype.absorb = function (data) {
16672 for (var i = 0; i < data.length; ++i) {
16673 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
16674 this.count += 1
16675 if (this.count === this.blockSize) {
16676 keccakState.p1600(this.state)
16677 this.count = 0
16678 }
16679 }
16680}
16681
16682Keccak.prototype.absorbLastFewBits = function (bits) {
16683 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
16684 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
16685 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
16686 keccakState.p1600(this.state)
16687 this.count = 0
16688 this.squeezing = true
16689}
16690
16691Keccak.prototype.squeeze = function (length) {
16692 if (!this.squeezing) this.absorbLastFewBits(0x01)
16693
16694 var output = Buffer.allocUnsafe(length)
16695 for (var i = 0; i < length; ++i) {
16696 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
16697 this.count += 1
16698 if (this.count === this.blockSize) {
16699 keccakState.p1600(this.state)
16700 this.count = 0
16701 }
16702 }
16703
16704 return output
16705}
16706
16707Keccak.prototype.copy = function (dest) {
16708 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
16709 dest.blockSize = this.blockSize
16710 dest.count = this.count
16711 dest.squeezing = this.squeezing
16712}
16713
16714module.exports = Keccak
16715
16716}).call(this,require("buffer").Buffer)
16717},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
16718(function (Buffer){
16719/*
16720CryptoJS v3.1.2
16721code.google.com/p/crypto-js
16722(c) 2009-2013 by Jeff Mott. All rights reserved.
16723code.google.com/p/crypto-js/wiki/License
16724*/
16725/** @preserve
16726(c) 2012 by Cédric Mesnil. All rights reserved.
16727
16728Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
16729
16730 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
16731 - 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.
16732
16733THIS 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.
16734*/
16735
16736// constants table
16737var zl = [
16738 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16739 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
16740 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
16741 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
16742 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
16743]
16744
16745var zr = [
16746 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
16747 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
16748 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
16749 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
16750 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
16751]
16752
16753var sl = [
16754 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
16755 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
16756 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
16757 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
16758 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
16759]
16760
16761var sr = [
16762 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
16763 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
16764 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
16765 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
16766 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
16767]
16768
16769var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
16770var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
16771
16772function bytesToWords (bytes) {
16773 var words = []
16774 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
16775 words[b >>> 5] |= bytes[i] << (24 - b % 32)
16776 }
16777 return words
16778}
16779
16780function wordsToBytes (words) {
16781 var bytes = []
16782 for (var b = 0; b < words.length * 32; b += 8) {
16783 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
16784 }
16785 return bytes
16786}
16787
16788function processBlock (H, M, offset) {
16789 // swap endian
16790 for (var i = 0; i < 16; i++) {
16791 var offset_i = offset + i
16792 var M_offset_i = M[offset_i]
16793
16794 // Swap
16795 M[offset_i] = (
16796 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
16797 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
16798 )
16799 }
16800
16801 // Working variables
16802 var al, bl, cl, dl, el
16803 var ar, br, cr, dr, er
16804
16805 ar = al = H[0]
16806 br = bl = H[1]
16807 cr = cl = H[2]
16808 dr = dl = H[3]
16809 er = el = H[4]
16810
16811 // computation
16812 var t
16813 for (i = 0; i < 80; i += 1) {
16814 t = (al + M[offset + zl[i]]) | 0
16815 if (i < 16) {
16816 t += f1(bl, cl, dl) + hl[0]
16817 } else if (i < 32) {
16818 t += f2(bl, cl, dl) + hl[1]
16819 } else if (i < 48) {
16820 t += f3(bl, cl, dl) + hl[2]
16821 } else if (i < 64) {
16822 t += f4(bl, cl, dl) + hl[3]
16823 } else {// if (i<80) {
16824 t += f5(bl, cl, dl) + hl[4]
16825 }
16826 t = t | 0
16827 t = rotl(t, sl[i])
16828 t = (t + el) | 0
16829 al = el
16830 el = dl
16831 dl = rotl(cl, 10)
16832 cl = bl
16833 bl = t
16834
16835 t = (ar + M[offset + zr[i]]) | 0
16836 if (i < 16) {
16837 t += f5(br, cr, dr) + hr[0]
16838 } else if (i < 32) {
16839 t += f4(br, cr, dr) + hr[1]
16840 } else if (i < 48) {
16841 t += f3(br, cr, dr) + hr[2]
16842 } else if (i < 64) {
16843 t += f2(br, cr, dr) + hr[3]
16844 } else {// if (i<80) {
16845 t += f1(br, cr, dr) + hr[4]
16846 }
16847
16848 t = t | 0
16849 t = rotl(t, sr[i])
16850 t = (t + er) | 0
16851 ar = er
16852 er = dr
16853 dr = rotl(cr, 10)
16854 cr = br
16855 br = t
16856 }
16857
16858 // intermediate hash value
16859 t = (H[1] + cl + dr) | 0
16860 H[1] = (H[2] + dl + er) | 0
16861 H[2] = (H[3] + el + ar) | 0
16862 H[3] = (H[4] + al + br) | 0
16863 H[4] = (H[0] + bl + cr) | 0
16864 H[0] = t
16865}
16866
16867function f1 (x, y, z) {
16868 return ((x) ^ (y) ^ (z))
16869}
16870
16871function f2 (x, y, z) {
16872 return (((x) & (y)) | ((~x) & (z)))
16873}
16874
16875function f3 (x, y, z) {
16876 return (((x) | (~(y))) ^ (z))
16877}
16878
16879function f4 (x, y, z) {
16880 return (((x) & (z)) | ((y) & (~(z))))
16881}
16882
16883function f5 (x, y, z) {
16884 return ((x) ^ ((y) | (~(z))))
16885}
16886
16887function rotl (x, n) {
16888 return (x << n) | (x >>> (32 - n))
16889}
16890
16891function ripemd160 (message) {
16892 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
16893
16894 if (typeof message === 'string') {
16895 message = new Buffer(message, 'utf8')
16896 }
16897
16898 var m = bytesToWords(message)
16899
16900 var nBitsLeft = message.length * 8
16901 var nBitsTotal = message.length * 8
16902
16903 // Add padding
16904 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
16905 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
16906 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
16907 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
16908 )
16909
16910 for (var i = 0; i < m.length; i += 16) {
16911 processBlock(H, m, i)
16912 }
16913
16914 // swap endian
16915 for (i = 0; i < 5; i++) {
16916 // shortcut
16917 var H_i = H[i]
16918
16919 // Swap
16920 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
16921 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
16922 }
16923
16924 var digestbytes = wordsToBytes(H)
16925 return new Buffer(digestbytes)
16926}
16927
16928module.exports = ripemd160
16929
16930}).call(this,require("buffer").Buffer)
16931},{"buffer":5}],72:[function(require,module,exports){
16932(function (Buffer){
16933const assert = require('assert')
16934/**
16935 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
16936 * This function takes in a data, convert it to buffer if not, and a length for recursion
16937 *
16938 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
16939 * @returns {Buffer} - returns buffer of encoded data
16940 **/
16941exports.encode = function (input) {
16942 if (input instanceof Array) {
16943 var output = []
16944 for (var i = 0; i < input.length; i++) {
16945 output.push(exports.encode(input[i]))
16946 }
16947 var buf = Buffer.concat(output)
16948 return Buffer.concat([encodeLength(buf.length, 192), buf])
16949 } else {
16950 input = toBuffer(input)
16951 if (input.length === 1 && input[0] < 128) {
16952 return input
16953 } else {
16954 return Buffer.concat([encodeLength(input.length, 128), input])
16955 }
16956 }
16957}
16958
16959function safeParseInt (v, base) {
16960 if (v.slice(0, 2) === '00') {
16961 throw (new Error('invalid RLP: extra zeros'))
16962 }
16963
16964 return parseInt(v, base)
16965}
16966
16967function encodeLength (len, offset) {
16968 if (len < 56) {
16969 return new Buffer([len + offset])
16970 } else {
16971 var hexLength = intToHex(len)
16972 var lLength = hexLength.length / 2
16973 var firstByte = intToHex(offset + 55 + lLength)
16974 return new Buffer(firstByte + hexLength, 'hex')
16975 }
16976}
16977
16978/**
16979 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
16980 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
16981 * @returns {Array} - returns decode Array of Buffers containg the original message
16982 **/
16983exports.decode = function (input, stream) {
16984 if (!input || input.length === 0) {
16985 return new Buffer([])
16986 }
16987
16988 input = toBuffer(input)
16989 var decoded = _decode(input)
16990
16991 if (stream) {
16992 return decoded
16993 }
16994
16995 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
16996 return decoded.data
16997}
16998
16999exports.getLength = function (input) {
17000 if (!input || input.length === 0) {
17001 return new Buffer([])
17002 }
17003
17004 input = toBuffer(input)
17005 var firstByte = input[0]
17006 if (firstByte <= 0x7f) {
17007 return input.length
17008 } else if (firstByte <= 0xb7) {
17009 return firstByte - 0x7f
17010 } else if (firstByte <= 0xbf) {
17011 return firstByte - 0xb6
17012 } else if (firstByte <= 0xf7) {
17013 // a list between 0-55 bytes long
17014 return firstByte - 0xbf
17015 } else {
17016 // a list over 55 bytes long
17017 var llength = firstByte - 0xf6
17018 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17019 return llength + length
17020 }
17021}
17022
17023function _decode (input) {
17024 var length, llength, data, innerRemainder, d
17025 var decoded = []
17026 var firstByte = input[0]
17027
17028 if (firstByte <= 0x7f) {
17029 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
17030 return {
17031 data: input.slice(0, 1),
17032 remainder: input.slice(1)
17033 }
17034 } else if (firstByte <= 0xb7) {
17035 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
17036 // The range of the first byte is [0x80, 0xb7]
17037 length = firstByte - 0x7f
17038
17039 // set 0x80 null to 0
17040 if (firstByte === 0x80) {
17041 data = new Buffer([])
17042 } else {
17043 data = input.slice(1, length)
17044 }
17045
17046 if (length === 2 && data[0] < 0x80) {
17047 throw new Error('invalid rlp encoding: byte must be less 0x80')
17048 }
17049
17050 return {
17051 data: data,
17052 remainder: input.slice(length)
17053 }
17054 } else if (firstByte <= 0xbf) {
17055 llength = firstByte - 0xb6
17056 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17057 data = input.slice(llength, length + llength)
17058 if (data.length < length) {
17059 throw (new Error('invalid RLP'))
17060 }
17061
17062 return {
17063 data: data,
17064 remainder: input.slice(length + llength)
17065 }
17066 } else if (firstByte <= 0xf7) {
17067 // a list between 0-55 bytes long
17068 length = firstByte - 0xbf
17069 innerRemainder = input.slice(1, length)
17070 while (innerRemainder.length) {
17071 d = _decode(innerRemainder)
17072 decoded.push(d.data)
17073 innerRemainder = d.remainder
17074 }
17075
17076 return {
17077 data: decoded,
17078 remainder: input.slice(length)
17079 }
17080 } else {
17081 // a list over 55 bytes long
17082 llength = firstByte - 0xf6
17083 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
17084 var totalLength = llength + length
17085 if (totalLength > input.length) {
17086 throw new Error('invalid rlp: total length is larger than the data')
17087 }
17088
17089 innerRemainder = input.slice(llength, totalLength)
17090 if (innerRemainder.length === 0) {
17091 throw new Error('invalid rlp, List has a invalid length')
17092 }
17093
17094 while (innerRemainder.length) {
17095 d = _decode(innerRemainder)
17096 decoded.push(d.data)
17097 innerRemainder = d.remainder
17098 }
17099 return {
17100 data: decoded,
17101 remainder: input.slice(totalLength)
17102 }
17103 }
17104}
17105
17106function isHexPrefixed (str) {
17107 return str.slice(0, 2) === '0x'
17108}
17109
17110// Removes 0x from a given String
17111function stripHexPrefix (str) {
17112 if (typeof str !== 'string') {
17113 return str
17114 }
17115 return isHexPrefixed(str) ? str.slice(2) : str
17116}
17117
17118function intToHex (i) {
17119 var hex = i.toString(16)
17120 if (hex.length % 2) {
17121 hex = '0' + hex
17122 }
17123
17124 return hex
17125}
17126
17127function padToEven (a) {
17128 if (a.length % 2) a = '0' + a
17129 return a
17130}
17131
17132function intToBuffer (i) {
17133 var hex = intToHex(i)
17134 return new Buffer(hex, 'hex')
17135}
17136
17137function toBuffer (v) {
17138 if (!Buffer.isBuffer(v)) {
17139 if (typeof v === 'string') {
17140 if (isHexPrefixed(v)) {
17141 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
17142 } else {
17143 v = new Buffer(v)
17144 }
17145 } else if (typeof v === 'number') {
17146 if (!v) {
17147 v = new Buffer([])
17148 } else {
17149 v = intToBuffer(v)
17150 }
17151 } else if (v === null || v === undefined) {
17152 v = new Buffer([])
17153 } else if (v.toArray) {
17154 // converts a BN to a Buffer
17155 v = new Buffer(v.toArray())
17156 } else {
17157 throw new Error('invalid type')
17158 }
17159 }
17160 return v
17161}
17162
17163}).call(this,require("buffer").Buffer)
17164},{"assert":1,"buffer":5}],73:[function(require,module,exports){
17165'use strict'
17166module.exports = require('./lib')(require('./lib/elliptic'))
17167
17168},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
17169(function (Buffer){
17170'use strict'
17171var toString = Object.prototype.toString
17172
17173// TypeError
17174exports.isArray = function (value, message) {
17175 if (!Array.isArray(value)) throw TypeError(message)
17176}
17177
17178exports.isBoolean = function (value, message) {
17179 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
17180}
17181
17182exports.isBuffer = function (value, message) {
17183 if (!Buffer.isBuffer(value)) throw TypeError(message)
17184}
17185
17186exports.isFunction = function (value, message) {
17187 if (toString.call(value) !== '[object Function]') throw TypeError(message)
17188}
17189
17190exports.isNumber = function (value, message) {
17191 if (toString.call(value) !== '[object Number]') throw TypeError(message)
17192}
17193
17194exports.isObject = function (value, message) {
17195 if (toString.call(value) !== '[object Object]') throw TypeError(message)
17196}
17197
17198// RangeError
17199exports.isBufferLength = function (buffer, length, message) {
17200 if (buffer.length !== length) throw RangeError(message)
17201}
17202
17203exports.isBufferLength2 = function (buffer, length1, length2, message) {
17204 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
17205}
17206
17207exports.isLengthGTZero = function (value, message) {
17208 if (value.length === 0) throw RangeError(message)
17209}
17210
17211exports.isNumberInInterval = function (number, x, y, message) {
17212 if (number <= x || number >= y) throw RangeError(message)
17213}
17214
17215}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
17216},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
17217(function (Buffer){
17218'use strict'
17219var bip66 = require('bip66')
17220
17221var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
17222 // begin
17223 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
17224 // private key
17225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17227 // middle
17228 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
17229 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17230 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17231 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
17232 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
17233 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
17234 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17235 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
17236 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
17237 // public key
17238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17239 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17240 0x00
17241])
17242
17243var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
17244 // begin
17245 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
17246 // private key
17247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17249 // middle
17250 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
17251 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17252 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17253 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
17254 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
17255 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
17256 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
17257 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
17258 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
17259 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
17260 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
17261 // public key
17262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17266 0x00
17267])
17268
17269var ZERO_BUFFER_32 = new Buffer([
17270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
17272])
17273
17274exports.privateKeyExport = function (privateKey, publicKey, compressed) {
17275 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
17276 privateKey.copy(result, compressed ? 8 : 9)
17277 publicKey.copy(result, compressed ? 181 : 214)
17278 return result
17279}
17280
17281exports.privateKeyImport = function (privateKey) {
17282 var length = privateKey.length
17283
17284 // sequence header
17285 var index = 0
17286 if (length < index + 1 || privateKey[index] !== 0x30) return
17287 index += 1
17288
17289 // sequence length constructor
17290 if (length < index + 1 || !(privateKey[index] & 0x80)) return
17291
17292 var lenb = privateKey[index] & 0x7f
17293 index += 1
17294 if (lenb < 1 || lenb > 2) return
17295 if (length < index + lenb) return
17296
17297 // sequence length
17298 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
17299 index += lenb
17300 if (length < index + len) return
17301
17302 // sequence element 0: version number (=1)
17303 if (length < index + 3 ||
17304 privateKey[index] !== 0x02 ||
17305 privateKey[index + 1] !== 0x01 ||
17306 privateKey[index + 2] !== 0x01) {
17307 return
17308 }
17309 index += 3
17310
17311 // sequence element 1: octet string, up to 32 bytes
17312 if (length < index + 2 ||
17313 privateKey[index] !== 0x04 ||
17314 privateKey[index + 1] > 0x20 ||
17315 length < index + 2 + privateKey[index + 1]) {
17316 return
17317 }
17318
17319 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
17320}
17321
17322exports.signatureExport = function (sigObj) {
17323 var r = Buffer.concat([new Buffer([0]), sigObj.r])
17324 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
17325
17326 var s = Buffer.concat([new Buffer([0]), sigObj.s])
17327 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
17328
17329 return bip66.encode(r.slice(posR), s.slice(posS))
17330}
17331
17332exports.signatureImport = function (sig) {
17333 var r = new Buffer(ZERO_BUFFER_32)
17334 var s = new Buffer(ZERO_BUFFER_32)
17335
17336 try {
17337 var sigObj = bip66.decode(sig)
17338 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
17339 if (sigObj.r.length > 32) throw new Error('R length is too long')
17340 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
17341 if (sigObj.s.length > 32) throw new Error('S length is too long')
17342 } catch (err) {
17343 return
17344 }
17345
17346 sigObj.r.copy(r, 32 - sigObj.r.length)
17347 sigObj.s.copy(s, 32 - sigObj.s.length)
17348
17349 return { r: r, s: s }
17350}
17351
17352exports.signatureImportLax = function (sig) {
17353 var r = new Buffer(ZERO_BUFFER_32)
17354 var s = new Buffer(ZERO_BUFFER_32)
17355
17356 var length = sig.length
17357 var index = 0
17358
17359 // sequence tag byte
17360 if (sig[index++] !== 0x30) return
17361
17362 // sequence length byte
17363 var lenbyte = sig[index++]
17364 if (lenbyte & 0x80) {
17365 index += lenbyte - 0x80
17366 if (index > length) return
17367 }
17368
17369 // sequence tag byte for r
17370 if (sig[index++] !== 0x02) return
17371
17372 // length for r
17373 var rlen = sig[index++]
17374 if (rlen & 0x80) {
17375 lenbyte = rlen - 0x80
17376 if (index + lenbyte > length) return
17377 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
17378 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
17379 }
17380 if (rlen > length - index) return
17381 var rindex = index
17382 index += rlen
17383
17384 // sequence tag byte for s
17385 if (sig[index++] !== 0x02) return
17386
17387 // length for s
17388 var slen = sig[index++]
17389 if (slen & 0x80) {
17390 lenbyte = slen - 0x80
17391 if (index + lenbyte > length) return
17392 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
17393 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
17394 }
17395 if (slen > length - index) return
17396 var sindex = index
17397 index += slen
17398
17399 // ignore leading zeros in r
17400 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
17401 // copy r value
17402 if (rlen > 32) return
17403 var rvalue = sig.slice(rindex, rindex + rlen)
17404 rvalue.copy(r, 32 - rvalue.length)
17405
17406 // ignore leading zeros in s
17407 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
17408 // copy s value
17409 if (slen > 32) return
17410 var svalue = sig.slice(sindex, sindex + slen)
17411 svalue.copy(s, 32 - svalue.length)
17412
17413 return { r: r, s: s }
17414}
17415
17416}).call(this,require("buffer").Buffer)
17417},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
17418(function (Buffer){
17419'use strict'
17420var createHash = require('create-hash')
17421var BN = require('bn.js')
17422var EC = require('elliptic').ec
17423
17424var messages = require('../messages.json')
17425
17426var ec = new EC('secp256k1')
17427var ecparams = ec.curve
17428
17429function loadCompressedPublicKey (first, xBuffer) {
17430 var x = new BN(xBuffer)
17431
17432 // overflow
17433 if (x.cmp(ecparams.p) >= 0) return null
17434 x = x.toRed(ecparams.red)
17435
17436 // compute corresponding Y
17437 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
17438 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
17439
17440 return ec.keyPair({ pub: { x: x, y: y } })
17441}
17442
17443function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
17444 var x = new BN(xBuffer)
17445 var y = new BN(yBuffer)
17446
17447 // overflow
17448 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
17449
17450 x = x.toRed(ecparams.red)
17451 y = y.toRed(ecparams.red)
17452
17453 // is odd flag
17454 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
17455
17456 // x*x*x + b = y*y
17457 var x3 = x.redSqr().redIMul(x)
17458 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
17459
17460 return ec.keyPair({ pub: { x: x, y: y } })
17461}
17462
17463function loadPublicKey (publicKey) {
17464 var first = publicKey[0]
17465 switch (first) {
17466 case 0x02:
17467 case 0x03:
17468 if (publicKey.length !== 33) return null
17469 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
17470 case 0x04:
17471 case 0x06:
17472 case 0x07:
17473 if (publicKey.length !== 65) return null
17474 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
17475 default:
17476 return null
17477 }
17478}
17479
17480exports.privateKeyVerify = function (privateKey) {
17481 var bn = new BN(privateKey)
17482 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
17483}
17484
17485exports.privateKeyExport = function (privateKey, compressed) {
17486 var d = new BN(privateKey)
17487 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
17488
17489 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
17490}
17491
17492exports.privateKeyTweakAdd = function (privateKey, tweak) {
17493 var bn = new BN(tweak)
17494 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
17495
17496 bn.iadd(new BN(privateKey))
17497 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
17498 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
17499
17500 return bn.toArrayLike(Buffer, 'be', 32)
17501}
17502
17503exports.privateKeyTweakMul = function (privateKey, tweak) {
17504 var bn = new BN(tweak)
17505 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
17506
17507 bn.imul(new BN(privateKey))
17508 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
17509
17510 return bn.toArrayLike(Buffer, 'be', 32)
17511}
17512
17513exports.publicKeyCreate = function (privateKey, compressed) {
17514 var d = new BN(privateKey)
17515 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
17516
17517 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
17518}
17519
17520exports.publicKeyConvert = function (publicKey, compressed) {
17521 var pair = loadPublicKey(publicKey)
17522 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17523
17524 return new Buffer(pair.getPublic(compressed, true))
17525}
17526
17527exports.publicKeyVerify = function (publicKey) {
17528 return loadPublicKey(publicKey) !== null
17529}
17530
17531exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
17532 var pair = loadPublicKey(publicKey)
17533 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17534
17535 tweak = new BN(tweak)
17536 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
17537
17538 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
17539}
17540
17541exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
17542 var pair = loadPublicKey(publicKey)
17543 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17544
17545 tweak = new BN(tweak)
17546 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
17547
17548 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
17549}
17550
17551exports.publicKeyCombine = function (publicKeys, compressed) {
17552 var pairs = new Array(publicKeys.length)
17553 for (var i = 0; i < publicKeys.length; ++i) {
17554 pairs[i] = loadPublicKey(publicKeys[i])
17555 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17556 }
17557
17558 var point = pairs[0].pub
17559 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
17560 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
17561
17562 return new Buffer(point.encode(true, compressed))
17563}
17564
17565exports.signatureNormalize = function (signature) {
17566 var r = new BN(signature.slice(0, 32))
17567 var s = new BN(signature.slice(32, 64))
17568 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17569
17570 var result = new Buffer(signature)
17571 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
17572
17573 return result
17574}
17575
17576exports.signatureExport = function (signature) {
17577 var r = signature.slice(0, 32)
17578 var s = signature.slice(32, 64)
17579 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17580
17581 return { r: r, s: s }
17582}
17583
17584exports.signatureImport = function (sigObj) {
17585 var r = new BN(sigObj.r)
17586 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
17587
17588 var s = new BN(sigObj.s)
17589 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
17590
17591 return Buffer.concat([
17592 r.toArrayLike(Buffer, 'be', 32),
17593 s.toArrayLike(Buffer, 'be', 32)
17594 ])
17595}
17596
17597exports.sign = function (message, privateKey, noncefn, data) {
17598 if (typeof noncefn === 'function') {
17599 var getNonce = noncefn
17600 noncefn = function (counter) {
17601 var nonce = getNonce(message, privateKey, null, data, counter)
17602 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
17603
17604 return new BN(nonce)
17605 }
17606 }
17607
17608 var d = new BN(privateKey)
17609 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
17610
17611 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
17612 return {
17613 signature: Buffer.concat([
17614 result.r.toArrayLike(Buffer, 'be', 32),
17615 result.s.toArrayLike(Buffer, 'be', 32)
17616 ]),
17617 recovery: result.recoveryParam
17618 }
17619}
17620
17621exports.verify = function (message, signature, publicKey) {
17622 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
17623
17624 var sigr = new BN(sigObj.r)
17625 var sigs = new BN(sigObj.s)
17626 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17627 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
17628
17629 var pair = loadPublicKey(publicKey)
17630 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17631
17632 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
17633}
17634
17635exports.recover = function (message, signature, recovery, compressed) {
17636 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
17637
17638 var sigr = new BN(sigObj.r)
17639 var sigs = new BN(sigObj.s)
17640 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
17641
17642 try {
17643 if (sigr.isZero() || sigs.isZero()) throw new Error()
17644
17645 var point = ec.recoverPubKey(message, sigObj, recovery)
17646 return new Buffer(point.encode(true, compressed))
17647 } catch (err) {
17648 throw new Error(messages.ECDSA_RECOVER_FAIL)
17649 }
17650}
17651
17652exports.ecdh = function (publicKey, privateKey) {
17653 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
17654 return createHash('sha256').update(shared).digest()
17655}
17656
17657exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
17658 var pair = loadPublicKey(publicKey)
17659 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
17660
17661 var scalar = new BN(privateKey)
17662 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
17663
17664 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
17665}
17666
17667}).call(this,require("buffer").Buffer)
17668},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
17669'use strict'
17670var assert = require('./assert')
17671var der = require('./der')
17672var messages = require('./messages.json')
17673
17674function initCompressedValue (value, defaultValue) {
17675 if (value === undefined) return defaultValue
17676
17677 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
17678 return value
17679}
17680
17681module.exports = function (secp256k1) {
17682 return {
17683 privateKeyVerify: function (privateKey) {
17684 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17685 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
17686 },
17687
17688 privateKeyExport: function (privateKey, compressed) {
17689 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17690 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17691
17692 compressed = initCompressedValue(compressed, true)
17693 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
17694
17695 return der.privateKeyExport(privateKey, publicKey, compressed)
17696 },
17697
17698 privateKeyImport: function (privateKey) {
17699 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17700
17701 privateKey = der.privateKeyImport(privateKey)
17702 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
17703
17704 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
17705 },
17706
17707 privateKeyTweakAdd: function (privateKey, tweak) {
17708 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17709 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17710
17711 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17712 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17713
17714 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
17715 },
17716
17717 privateKeyTweakMul: function (privateKey, tweak) {
17718 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17719 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17720
17721 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17722 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17723
17724 return secp256k1.privateKeyTweakMul(privateKey, tweak)
17725 },
17726
17727 publicKeyCreate: function (privateKey, compressed) {
17728 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17729 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17730
17731 compressed = initCompressedValue(compressed, true)
17732
17733 return secp256k1.publicKeyCreate(privateKey, compressed)
17734 },
17735
17736 publicKeyConvert: function (publicKey, compressed) {
17737 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17738 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17739
17740 compressed = initCompressedValue(compressed, true)
17741
17742 return secp256k1.publicKeyConvert(publicKey, compressed)
17743 },
17744
17745 publicKeyVerify: function (publicKey) {
17746 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17747 return secp256k1.publicKeyVerify(publicKey)
17748 },
17749
17750 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
17751 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17752 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17753
17754 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17755 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17756
17757 compressed = initCompressedValue(compressed, true)
17758
17759 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
17760 },
17761
17762 publicKeyTweakMul: function (publicKey, tweak, compressed) {
17763 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17764 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17765
17766 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
17767 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
17768
17769 compressed = initCompressedValue(compressed, true)
17770
17771 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
17772 },
17773
17774 publicKeyCombine: function (publicKeys, compressed) {
17775 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
17776 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
17777 for (var i = 0; i < publicKeys.length; ++i) {
17778 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
17779 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17780 }
17781
17782 compressed = initCompressedValue(compressed, true)
17783
17784 return secp256k1.publicKeyCombine(publicKeys, compressed)
17785 },
17786
17787 signatureNormalize: function (signature) {
17788 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17789 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17790
17791 return secp256k1.signatureNormalize(signature)
17792 },
17793
17794 signatureExport: function (signature) {
17795 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17796 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17797
17798 var sigObj = secp256k1.signatureExport(signature)
17799 return der.signatureExport(sigObj)
17800 },
17801
17802 signatureImport: function (sig) {
17803 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17804 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17805
17806 var sigObj = der.signatureImport(sig)
17807 if (sigObj) return secp256k1.signatureImport(sigObj)
17808
17809 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
17810 },
17811
17812 signatureImportLax: function (sig) {
17813 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17814 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17815
17816 var sigObj = der.signatureImportLax(sig)
17817 if (sigObj) return secp256k1.signatureImport(sigObj)
17818
17819 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
17820 },
17821
17822 sign: function (message, privateKey, options) {
17823 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17824 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17825
17826 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17827 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17828
17829 var data = null
17830 var noncefn = null
17831 if (options !== undefined) {
17832 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
17833
17834 if (options.data !== undefined) {
17835 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
17836 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
17837 data = options.data
17838 }
17839
17840 if (options.noncefn !== undefined) {
17841 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
17842 noncefn = options.noncefn
17843 }
17844 }
17845
17846 return secp256k1.sign(message, privateKey, noncefn, data)
17847 },
17848
17849 verify: function (message, signature, publicKey) {
17850 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17851 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17852
17853 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17854 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17855
17856 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17857 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17858
17859 return secp256k1.verify(message, signature, publicKey)
17860 },
17861
17862 recover: function (message, signature, recovery, compressed) {
17863 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
17864 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
17865
17866 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
17867 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
17868
17869 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
17870 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
17871
17872 compressed = initCompressedValue(compressed, true)
17873
17874 return secp256k1.recover(message, signature, recovery, compressed)
17875 },
17876
17877 ecdh: function (publicKey, privateKey) {
17878 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17879 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17880
17881 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17882 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17883
17884 return secp256k1.ecdh(publicKey, privateKey)
17885 },
17886
17887 ecdhUnsafe: function (publicKey, privateKey, compressed) {
17888 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
17889 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
17890
17891 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
17892 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
17893
17894 compressed = initCompressedValue(compressed, true)
17895
17896 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
17897 }
17898 }
17899}
17900
17901},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
17902module.exports={
17903 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
17904 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
17905 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
17906 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
17907 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
17908 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
17909 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
17910 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
17911 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
17912 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
17913 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
17914 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
17915 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
17916 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
17917 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
17918 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
17919 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
17920 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
17921 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
17922 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
17923 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
17924 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
17925 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
17926 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
17927 "MSG32_TYPE_INVALID": "message should be a Buffer",
17928 "MSG32_LENGTH_INVALID": "message length is invalid",
17929 "OPTIONS_TYPE_INVALID": "options should be an Object",
17930 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
17931 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
17932 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
17933 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
17934 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
17935 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
17936 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
17937}
17938
17939},{}],79:[function(require,module,exports){
17940(function (Buffer){
17941// prototype class for hash functions
17942function Hash (blockSize, finalSize) {
17943 this._block = new Buffer(blockSize)
17944 this._finalSize = finalSize
17945 this._blockSize = blockSize
17946 this._len = 0
17947 this._s = 0
17948}
17949
17950Hash.prototype.update = function (data, enc) {
17951 if (typeof data === 'string') {
17952 enc = enc || 'utf8'
17953 data = new Buffer(data, enc)
17954 }
17955
17956 var l = this._len += data.length
17957 var s = this._s || 0
17958 var f = 0
17959 var buffer = this._block
17960
17961 while (s < l) {
17962 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
17963 var ch = (t - f)
17964
17965 for (var i = 0; i < ch; i++) {
17966 buffer[(s % this._blockSize) + i] = data[i + f]
17967 }
17968
17969 s += ch
17970 f += ch
17971
17972 if ((s % this._blockSize) === 0) {
17973 this._update(buffer)
17974 }
17975 }
17976 this._s = s
17977
17978 return this
17979}
17980
17981Hash.prototype.digest = function (enc) {
17982 // Suppose the length of the message M, in bits, is l
17983 var l = this._len * 8
17984
17985 // Append the bit 1 to the end of the message
17986 this._block[this._len % this._blockSize] = 0x80
17987
17988 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
17989 this._block.fill(0, this._len % this._blockSize + 1)
17990
17991 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
17992 this._update(this._block)
17993 this._block.fill(0)
17994 }
17995
17996 // to this append the block which is equal to the number l written in binary
17997 // TODO: handle case where l is > Math.pow(2, 29)
17998 this._block.writeInt32BE(l, this._blockSize - 4)
17999
18000 var hash = this._update(this._block) || this._hash()
18001
18002 return enc ? hash.toString(enc) : hash
18003}
18004
18005Hash.prototype._update = function () {
18006 throw new Error('_update must be implemented by subclass')
18007}
18008
18009module.exports = Hash
18010
18011}).call(this,require("buffer").Buffer)
18012},{"buffer":5}],80:[function(require,module,exports){
18013var exports = module.exports = function SHA (algorithm) {
18014 algorithm = algorithm.toLowerCase()
18015
18016 var Algorithm = exports[algorithm]
18017 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
18018
18019 return new Algorithm()
18020}
18021
18022exports.sha = require('./sha')
18023exports.sha1 = require('./sha1')
18024exports.sha224 = require('./sha224')
18025exports.sha256 = require('./sha256')
18026exports.sha384 = require('./sha384')
18027exports.sha512 = require('./sha512')
18028
18029},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
18030(function (Buffer){
18031/*
18032 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
18033 * in FIPS PUB 180-1
18034 * This source code is derived from sha1.js of the same repository.
18035 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
18036 * operation was added.
18037 */
18038
18039var inherits = require('inherits')
18040var Hash = require('./hash')
18041
18042var K = [
18043 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
18044]
18045
18046var W = new Array(80)
18047
18048function Sha () {
18049 this.init()
18050 this._w = W
18051
18052 Hash.call(this, 64, 56)
18053}
18054
18055inherits(Sha, Hash)
18056
18057Sha.prototype.init = function () {
18058 this._a = 0x67452301
18059 this._b = 0xefcdab89
18060 this._c = 0x98badcfe
18061 this._d = 0x10325476
18062 this._e = 0xc3d2e1f0
18063
18064 return this
18065}
18066
18067function rotl5 (num) {
18068 return (num << 5) | (num >>> 27)
18069}
18070
18071function rotl30 (num) {
18072 return (num << 30) | (num >>> 2)
18073}
18074
18075function ft (s, b, c, d) {
18076 if (s === 0) return (b & c) | ((~b) & d)
18077 if (s === 2) return (b & c) | (b & d) | (c & d)
18078 return b ^ c ^ d
18079}
18080
18081Sha.prototype._update = function (M) {
18082 var W = this._w
18083
18084 var a = this._a | 0
18085 var b = this._b | 0
18086 var c = this._c | 0
18087 var d = this._d | 0
18088 var e = this._e | 0
18089
18090 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18091 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
18092
18093 for (var j = 0; j < 80; ++j) {
18094 var s = ~~(j / 20)
18095 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
18096
18097 e = d
18098 d = c
18099 c = rotl30(b)
18100 b = a
18101 a = t
18102 }
18103
18104 this._a = (a + this._a) | 0
18105 this._b = (b + this._b) | 0
18106 this._c = (c + this._c) | 0
18107 this._d = (d + this._d) | 0
18108 this._e = (e + this._e) | 0
18109}
18110
18111Sha.prototype._hash = function () {
18112 var H = new Buffer(20)
18113
18114 H.writeInt32BE(this._a | 0, 0)
18115 H.writeInt32BE(this._b | 0, 4)
18116 H.writeInt32BE(this._c | 0, 8)
18117 H.writeInt32BE(this._d | 0, 12)
18118 H.writeInt32BE(this._e | 0, 16)
18119
18120 return H
18121}
18122
18123module.exports = Sha
18124
18125}).call(this,require("buffer").Buffer)
18126},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
18127(function (Buffer){
18128/*
18129 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
18130 * in FIPS PUB 180-1
18131 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
18132 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18133 * Distributed under the BSD License
18134 * See http://pajhome.org.uk/crypt/md5 for details.
18135 */
18136
18137var inherits = require('inherits')
18138var Hash = require('./hash')
18139
18140var K = [
18141 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
18142]
18143
18144var W = new Array(80)
18145
18146function Sha1 () {
18147 this.init()
18148 this._w = W
18149
18150 Hash.call(this, 64, 56)
18151}
18152
18153inherits(Sha1, Hash)
18154
18155Sha1.prototype.init = function () {
18156 this._a = 0x67452301
18157 this._b = 0xefcdab89
18158 this._c = 0x98badcfe
18159 this._d = 0x10325476
18160 this._e = 0xc3d2e1f0
18161
18162 return this
18163}
18164
18165function rotl1 (num) {
18166 return (num << 1) | (num >>> 31)
18167}
18168
18169function rotl5 (num) {
18170 return (num << 5) | (num >>> 27)
18171}
18172
18173function rotl30 (num) {
18174 return (num << 30) | (num >>> 2)
18175}
18176
18177function ft (s, b, c, d) {
18178 if (s === 0) return (b & c) | ((~b) & d)
18179 if (s === 2) return (b & c) | (b & d) | (c & d)
18180 return b ^ c ^ d
18181}
18182
18183Sha1.prototype._update = function (M) {
18184 var W = this._w
18185
18186 var a = this._a | 0
18187 var b = this._b | 0
18188 var c = this._c | 0
18189 var d = this._d | 0
18190 var e = this._e | 0
18191
18192 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18193 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
18194
18195 for (var j = 0; j < 80; ++j) {
18196 var s = ~~(j / 20)
18197 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
18198
18199 e = d
18200 d = c
18201 c = rotl30(b)
18202 b = a
18203 a = t
18204 }
18205
18206 this._a = (a + this._a) | 0
18207 this._b = (b + this._b) | 0
18208 this._c = (c + this._c) | 0
18209 this._d = (d + this._d) | 0
18210 this._e = (e + this._e) | 0
18211}
18212
18213Sha1.prototype._hash = function () {
18214 var H = new Buffer(20)
18215
18216 H.writeInt32BE(this._a | 0, 0)
18217 H.writeInt32BE(this._b | 0, 4)
18218 H.writeInt32BE(this._c | 0, 8)
18219 H.writeInt32BE(this._d | 0, 12)
18220 H.writeInt32BE(this._e | 0, 16)
18221
18222 return H
18223}
18224
18225module.exports = Sha1
18226
18227}).call(this,require("buffer").Buffer)
18228},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
18229(function (Buffer){
18230/**
18231 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
18232 * in FIPS 180-2
18233 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
18234 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18235 *
18236 */
18237
18238var inherits = require('inherits')
18239var Sha256 = require('./sha256')
18240var Hash = require('./hash')
18241
18242var W = new Array(64)
18243
18244function Sha224 () {
18245 this.init()
18246
18247 this._w = W // new Array(64)
18248
18249 Hash.call(this, 64, 56)
18250}
18251
18252inherits(Sha224, Sha256)
18253
18254Sha224.prototype.init = function () {
18255 this._a = 0xc1059ed8
18256 this._b = 0x367cd507
18257 this._c = 0x3070dd17
18258 this._d = 0xf70e5939
18259 this._e = 0xffc00b31
18260 this._f = 0x68581511
18261 this._g = 0x64f98fa7
18262 this._h = 0xbefa4fa4
18263
18264 return this
18265}
18266
18267Sha224.prototype._hash = function () {
18268 var H = new Buffer(28)
18269
18270 H.writeInt32BE(this._a, 0)
18271 H.writeInt32BE(this._b, 4)
18272 H.writeInt32BE(this._c, 8)
18273 H.writeInt32BE(this._d, 12)
18274 H.writeInt32BE(this._e, 16)
18275 H.writeInt32BE(this._f, 20)
18276 H.writeInt32BE(this._g, 24)
18277
18278 return H
18279}
18280
18281module.exports = Sha224
18282
18283}).call(this,require("buffer").Buffer)
18284},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
18285(function (Buffer){
18286/**
18287 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
18288 * in FIPS 180-2
18289 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
18290 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
18291 *
18292 */
18293
18294var inherits = require('inherits')
18295var Hash = require('./hash')
18296
18297var K = [
18298 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
18299 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
18300 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
18301 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
18302 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
18303 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
18304 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
18305 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
18306 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
18307 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
18308 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
18309 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
18310 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
18311 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
18312 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
18313 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
18314]
18315
18316var W = new Array(64)
18317
18318function Sha256 () {
18319 this.init()
18320
18321 this._w = W // new Array(64)
18322
18323 Hash.call(this, 64, 56)
18324}
18325
18326inherits(Sha256, Hash)
18327
18328Sha256.prototype.init = function () {
18329 this._a = 0x6a09e667
18330 this._b = 0xbb67ae85
18331 this._c = 0x3c6ef372
18332 this._d = 0xa54ff53a
18333 this._e = 0x510e527f
18334 this._f = 0x9b05688c
18335 this._g = 0x1f83d9ab
18336 this._h = 0x5be0cd19
18337
18338 return this
18339}
18340
18341function ch (x, y, z) {
18342 return z ^ (x & (y ^ z))
18343}
18344
18345function maj (x, y, z) {
18346 return (x & y) | (z & (x | y))
18347}
18348
18349function sigma0 (x) {
18350 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
18351}
18352
18353function sigma1 (x) {
18354 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
18355}
18356
18357function gamma0 (x) {
18358 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
18359}
18360
18361function gamma1 (x) {
18362 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
18363}
18364
18365Sha256.prototype._update = function (M) {
18366 var W = this._w
18367
18368 var a = this._a | 0
18369 var b = this._b | 0
18370 var c = this._c | 0
18371 var d = this._d | 0
18372 var e = this._e | 0
18373 var f = this._f | 0
18374 var g = this._g | 0
18375 var h = this._h | 0
18376
18377 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
18378 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
18379
18380 for (var j = 0; j < 64; ++j) {
18381 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
18382 var T2 = (sigma0(a) + maj(a, b, c)) | 0
18383
18384 h = g
18385 g = f
18386 f = e
18387 e = (d + T1) | 0
18388 d = c
18389 c = b
18390 b = a
18391 a = (T1 + T2) | 0
18392 }
18393
18394 this._a = (a + this._a) | 0
18395 this._b = (b + this._b) | 0
18396 this._c = (c + this._c) | 0
18397 this._d = (d + this._d) | 0
18398 this._e = (e + this._e) | 0
18399 this._f = (f + this._f) | 0
18400 this._g = (g + this._g) | 0
18401 this._h = (h + this._h) | 0
18402}
18403
18404Sha256.prototype._hash = function () {
18405 var H = new Buffer(32)
18406
18407 H.writeInt32BE(this._a, 0)
18408 H.writeInt32BE(this._b, 4)
18409 H.writeInt32BE(this._c, 8)
18410 H.writeInt32BE(this._d, 12)
18411 H.writeInt32BE(this._e, 16)
18412 H.writeInt32BE(this._f, 20)
18413 H.writeInt32BE(this._g, 24)
18414 H.writeInt32BE(this._h, 28)
18415
18416 return H
18417}
18418
18419module.exports = Sha256
18420
18421}).call(this,require("buffer").Buffer)
18422},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
18423(function (Buffer){
18424var inherits = require('inherits')
18425var SHA512 = require('./sha512')
18426var Hash = require('./hash')
18427
18428var W = new Array(160)
18429
18430function Sha384 () {
18431 this.init()
18432 this._w = W
18433
18434 Hash.call(this, 128, 112)
18435}
18436
18437inherits(Sha384, SHA512)
18438
18439Sha384.prototype.init = function () {
18440 this._ah = 0xcbbb9d5d
18441 this._bh = 0x629a292a
18442 this._ch = 0x9159015a
18443 this._dh = 0x152fecd8
18444 this._eh = 0x67332667
18445 this._fh = 0x8eb44a87
18446 this._gh = 0xdb0c2e0d
18447 this._hh = 0x47b5481d
18448
18449 this._al = 0xc1059ed8
18450 this._bl = 0x367cd507
18451 this._cl = 0x3070dd17
18452 this._dl = 0xf70e5939
18453 this._el = 0xffc00b31
18454 this._fl = 0x68581511
18455 this._gl = 0x64f98fa7
18456 this._hl = 0xbefa4fa4
18457
18458 return this
18459}
18460
18461Sha384.prototype._hash = function () {
18462 var H = new Buffer(48)
18463
18464 function writeInt64BE (h, l, offset) {
18465 H.writeInt32BE(h, offset)
18466 H.writeInt32BE(l, offset + 4)
18467 }
18468
18469 writeInt64BE(this._ah, this._al, 0)
18470 writeInt64BE(this._bh, this._bl, 8)
18471 writeInt64BE(this._ch, this._cl, 16)
18472 writeInt64BE(this._dh, this._dl, 24)
18473 writeInt64BE(this._eh, this._el, 32)
18474 writeInt64BE(this._fh, this._fl, 40)
18475
18476 return H
18477}
18478
18479module.exports = Sha384
18480
18481}).call(this,require("buffer").Buffer)
18482},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
18483(function (Buffer){
18484var inherits = require('inherits')
18485var Hash = require('./hash')
18486
18487var K = [
18488 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
18489 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
18490 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
18491 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
18492 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
18493 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
18494 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
18495 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
18496 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
18497 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
18498 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
18499 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
18500 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
18501 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
18502 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
18503 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
18504 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
18505 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
18506 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
18507 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
18508 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
18509 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
18510 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
18511 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
18512 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
18513 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
18514 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
18515 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
18516 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
18517 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
18518 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
18519 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
18520 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
18521 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
18522 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
18523 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
18524 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
18525 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
18526 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
18527 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
18528]
18529
18530var W = new Array(160)
18531
18532function Sha512 () {
18533 this.init()
18534 this._w = W
18535
18536 Hash.call(this, 128, 112)
18537}
18538
18539inherits(Sha512, Hash)
18540
18541Sha512.prototype.init = function () {
18542 this._ah = 0x6a09e667
18543 this._bh = 0xbb67ae85
18544 this._ch = 0x3c6ef372
18545 this._dh = 0xa54ff53a
18546 this._eh = 0x510e527f
18547 this._fh = 0x9b05688c
18548 this._gh = 0x1f83d9ab
18549 this._hh = 0x5be0cd19
18550
18551 this._al = 0xf3bcc908
18552 this._bl = 0x84caa73b
18553 this._cl = 0xfe94f82b
18554 this._dl = 0x5f1d36f1
18555 this._el = 0xade682d1
18556 this._fl = 0x2b3e6c1f
18557 this._gl = 0xfb41bd6b
18558 this._hl = 0x137e2179
18559
18560 return this
18561}
18562
18563function Ch (x, y, z) {
18564 return z ^ (x & (y ^ z))
18565}
18566
18567function maj (x, y, z) {
18568 return (x & y) | (z & (x | y))
18569}
18570
18571function sigma0 (x, xl) {
18572 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
18573}
18574
18575function sigma1 (x, xl) {
18576 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
18577}
18578
18579function Gamma0 (x, xl) {
18580 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
18581}
18582
18583function Gamma0l (x, xl) {
18584 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
18585}
18586
18587function Gamma1 (x, xl) {
18588 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
18589}
18590
18591function Gamma1l (x, xl) {
18592 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
18593}
18594
18595function getCarry (a, b) {
18596 return (a >>> 0) < (b >>> 0) ? 1 : 0
18597}
18598
18599Sha512.prototype._update = function (M) {
18600 var W = this._w
18601
18602 var ah = this._ah | 0
18603 var bh = this._bh | 0
18604 var ch = this._ch | 0
18605 var dh = this._dh | 0
18606 var eh = this._eh | 0
18607 var fh = this._fh | 0
18608 var gh = this._gh | 0
18609 var hh = this._hh | 0
18610
18611 var al = this._al | 0
18612 var bl = this._bl | 0
18613 var cl = this._cl | 0
18614 var dl = this._dl | 0
18615 var el = this._el | 0
18616 var fl = this._fl | 0
18617 var gl = this._gl | 0
18618 var hl = this._hl | 0
18619
18620 for (var i = 0; i < 32; i += 2) {
18621 W[i] = M.readInt32BE(i * 4)
18622 W[i + 1] = M.readInt32BE(i * 4 + 4)
18623 }
18624 for (; i < 160; i += 2) {
18625 var xh = W[i - 15 * 2]
18626 var xl = W[i - 15 * 2 + 1]
18627 var gamma0 = Gamma0(xh, xl)
18628 var gamma0l = Gamma0l(xl, xh)
18629
18630 xh = W[i - 2 * 2]
18631 xl = W[i - 2 * 2 + 1]
18632 var gamma1 = Gamma1(xh, xl)
18633 var gamma1l = Gamma1l(xl, xh)
18634
18635 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
18636 var Wi7h = W[i - 7 * 2]
18637 var Wi7l = W[i - 7 * 2 + 1]
18638
18639 var Wi16h = W[i - 16 * 2]
18640 var Wi16l = W[i - 16 * 2 + 1]
18641
18642 var Wil = (gamma0l + Wi7l) | 0
18643 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
18644 Wil = (Wil + gamma1l) | 0
18645 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
18646 Wil = (Wil + Wi16l) | 0
18647 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
18648
18649 W[i] = Wih
18650 W[i + 1] = Wil
18651 }
18652
18653 for (var j = 0; j < 160; j += 2) {
18654 Wih = W[j]
18655 Wil = W[j + 1]
18656
18657 var majh = maj(ah, bh, ch)
18658 var majl = maj(al, bl, cl)
18659
18660 var sigma0h = sigma0(ah, al)
18661 var sigma0l = sigma0(al, ah)
18662 var sigma1h = sigma1(eh, el)
18663 var sigma1l = sigma1(el, eh)
18664
18665 // t1 = h + sigma1 + ch + K[j] + W[j]
18666 var Kih = K[j]
18667 var Kil = K[j + 1]
18668
18669 var chh = Ch(eh, fh, gh)
18670 var chl = Ch(el, fl, gl)
18671
18672 var t1l = (hl + sigma1l) | 0
18673 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
18674 t1l = (t1l + chl) | 0
18675 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
18676 t1l = (t1l + Kil) | 0
18677 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
18678 t1l = (t1l + Wil) | 0
18679 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
18680
18681 // t2 = sigma0 + maj
18682 var t2l = (sigma0l + majl) | 0
18683 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
18684
18685 hh = gh
18686 hl = gl
18687 gh = fh
18688 gl = fl
18689 fh = eh
18690 fl = el
18691 el = (dl + t1l) | 0
18692 eh = (dh + t1h + getCarry(el, dl)) | 0
18693 dh = ch
18694 dl = cl
18695 ch = bh
18696 cl = bl
18697 bh = ah
18698 bl = al
18699 al = (t1l + t2l) | 0
18700 ah = (t1h + t2h + getCarry(al, t1l)) | 0
18701 }
18702
18703 this._al = (this._al + al) | 0
18704 this._bl = (this._bl + bl) | 0
18705 this._cl = (this._cl + cl) | 0
18706 this._dl = (this._dl + dl) | 0
18707 this._el = (this._el + el) | 0
18708 this._fl = (this._fl + fl) | 0
18709 this._gl = (this._gl + gl) | 0
18710 this._hl = (this._hl + hl) | 0
18711
18712 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
18713 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
18714 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
18715 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
18716 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
18717 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
18718 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
18719 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
18720}
18721
18722Sha512.prototype._hash = function () {
18723 var H = new Buffer(64)
18724
18725 function writeInt64BE (h, l, offset) {
18726 H.writeInt32BE(h, offset)
18727 H.writeInt32BE(l, offset + 4)
18728 }
18729
18730 writeInt64BE(this._ah, this._al, 0)
18731 writeInt64BE(this._bh, this._bl, 8)
18732 writeInt64BE(this._ch, this._cl, 16)
18733 writeInt64BE(this._dh, this._dl, 24)
18734 writeInt64BE(this._eh, this._el, 32)
18735 writeInt64BE(this._fh, this._fl, 40)
18736 writeInt64BE(this._gh, this._gl, 48)
18737 writeInt64BE(this._hh, this._hl, 56)
18738
18739 return H
18740}
18741
18742module.exports = Sha512
18743
18744}).call(this,require("buffer").Buffer)
18745},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
18746var isHexPrefixed = require('is-hex-prefixed');
18747
18748/**
18749 * Removes '0x' from a given `String` is present
18750 * @param {String} str the string value
18751 * @return {String|Optional} a string by pass if necessary
18752 */
18753module.exports = function stripHexPrefix(str) {
18754 if (typeof str !== 'string') {
18755 return str;
18756 }
18757
18758 return isHexPrefixed(str) ? str.slice(2) : str;
18759}
18760
18761},{"is-hex-prefixed":64}]},{},[31])(31)
18762}); \ No newline at end of file
diff --git a/src/js/index.js b/src/js/index.js
index c3c0a4a..c4d99af 100644
--- a/src/js/index.js
+++ b/src/js/index.js
@@ -23,6 +23,7 @@
23 23
24 var DOM = {}; 24 var DOM = {};
25 DOM.network = $(".network"); 25 DOM.network = $(".network");
26 DOM.bip32Client = $("#bip32-client");
26 DOM.phraseNetwork = $("#network-phrase"); 27 DOM.phraseNetwork = $("#network-phrase");
27 DOM.useEntropy = $(".use-entropy"); 28 DOM.useEntropy = $(".use-entropy");
28 DOM.entropyContainer = $(".entropy-container"); 29 DOM.entropyContainer = $(".entropy-container");
@@ -77,6 +78,7 @@
77 function init() { 78 function init() {
78 // Events 79 // Events
79 DOM.network.on("change", networkChanged); 80 DOM.network.on("change", networkChanged);
81 DOM.bip32Client.on("change", bip32ClientChanged);
80 DOM.useEntropy.on("change", setEntropyVisibility); 82 DOM.useEntropy.on("change", setEntropyVisibility);
81 DOM.entropy.on("input", delayedEntropyChanged); 83 DOM.entropy.on("input", delayedEntropyChanged);
82 DOM.entropyMnemonicLength.on("change", entropyChanged); 84 DOM.entropyMnemonicLength.on("change", entropyChanged);
@@ -102,6 +104,7 @@
102 hidePending(); 104 hidePending();
103 hideValidationError(); 105 hideValidationError();
104 populateNetworkSelect(); 106 populateNetworkSelect();
107 populateClientSelect();
105 } 108 }
106 109
107 // Event handlers 110 // Event handlers
@@ -117,6 +120,23 @@
117 } 120 }
118 } 121 }
119 122
123 function bip32ClientChanged(e) {
124 var clientIndex = DOM.bip32Client.val();
125 if (clientIndex == "custom") {
126 DOM.bip32path.prop("readonly", false);
127 }
128 else {
129 DOM.bip32path.prop("readonly", true);
130 clients[clientIndex].onSelect();
131 if (seed != null) {
132 phraseChanged();
133 }
134 else {
135 rootKeyChanged();
136 }
137 }
138 }
139
120 function setEntropyVisibility() { 140 function setEntropyVisibility() {
121 if (isUsingOwnEntropy()) { 141 if (isUsingOwnEntropy()) {
122 DOM.entropyContainer.removeClass("hidden"); 142 DOM.entropyContainer.removeClass("hidden");
@@ -564,6 +584,20 @@
564 if (useHardenedAddresses) { 584 if (useHardenedAddresses) {
565 indexText = indexText + "'"; 585 indexText = indexText + "'";
566 } 586 }
587 // Ethereum values are different
588 if (networks[DOM.network.val()].name == "Ethereum") {
589 var privKeyBuffer = key.privKey.d.toBuffer();
590 privkey = privKeyBuffer.toString('hex');
591 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
592 var hexAddress = addressBuffer.toString('hex');
593 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
594 address = ethUtil.addHexPrefix(checksumAddress);
595 }
596 // Ripple values are different
597 if (networks[DOM.network.val()].name == "Ripple") {
598 privkey = convertRipplePriv(privkey);
599 address = convertRippleAdrr(address);
600 }
567 addAddressToList(indexText, address, pubkey, privkey); 601 addAddressToList(indexText, address, pubkey, privkey);
568 }, 50) 602 }, 50)
569 } 603 }
@@ -702,6 +736,16 @@
702 } 736 }
703 } 737 }
704 738
739 function populateClientSelect() {
740 for (var i=0; i<clients.length; i++) {
741 var client = clients[i];
742 var option = $("<option>");
743 option.attr("value", i);
744 option.text(client.name);
745 DOM.bip32Client.append(option);
746 }
747 }
748
705 function getLanguage() { 749 function getLanguage() {
706 var defaultLanguage = "english"; 750 var defaultLanguage = "english";
707 // Try to get from existing phrase 751 // Try to get from existing phrase
@@ -1047,10 +1091,10 @@
1047 }, 1091 },
1048 }, 1092 },
1049 { 1093 {
1050 name: "Litecoin", 1094 name: "CLAM",
1051 onSelect: function() { 1095 onSelect: function() {
1052 network = bitcoin.networks.litecoin; 1096 network = bitcoin.networks.clam;
1053 DOM.bip44coin.val(2); 1097 DOM.bip44coin.val(23);
1054 }, 1098 },
1055 }, 1099 },
1056 { 1100 {
@@ -1061,6 +1105,62 @@
1061 }, 1105 },
1062 }, 1106 },
1063 { 1107 {
1108 name: "DASH",
1109 onSelect: function() {
1110 network = bitcoin.networks.dash;
1111 DOM.bip44coin.val(5);
1112 },
1113 },
1114 {
1115 name: "Ethereum",
1116 onSelect: function() {
1117 network = bitcoin.networks.bitcoin;
1118 DOM.bip44coin.val(60);
1119 },
1120 },
1121 {
1122 name: "GAME",
1123 onSelect: function() {
1124 network = bitcoin.networks.game;
1125 DOM.bip44coin.val(101);
1126 },
1127 },
1128 {
1129 name: "Jumbucks",
1130 onSelect: function() {
1131 network = bitcoin.networks.jumbucks;
1132 DOM.bip44coin.val(26);
1133 },
1134 },
1135 {
1136 name: "Litecoin",
1137 onSelect: function() {
1138 network = bitcoin.networks.litecoin;
1139 DOM.bip44coin.val(2);
1140 },
1141 },
1142 {
1143 name: "Namecoin",
1144 onSelect: function() {
1145 network = bitcoin.networks.namecoin;
1146 DOM.bip44coin.val(7);
1147 },
1148 },
1149 {
1150 name: "Peercoin",
1151 onSelect: function() {
1152 network = bitcoin.networks.peercoin;
1153 DOM.bip44coin.val(6);
1154 },
1155 },
1156 {
1157 name: "Ripple",
1158 onSelect: function() {
1159 network = bitcoin.networks.bitcoin;
1160 DOM.bip44coin.val(144);
1161 },
1162 },
1163 {
1064 name: "ShadowCash", 1164 name: "ShadowCash",
1065 onSelect: function() { 1165 onSelect: function() {
1066 network = bitcoin.networks.shadow; 1166 network = bitcoin.networks.shadow;
@@ -1088,41 +1188,30 @@
1088 DOM.bip44coin.val(1); 1188 DOM.bip44coin.val(1);
1089 }, 1189 },
1090 }, 1190 },
1191 ]
1192
1193 var clients = [
1091 { 1194 {
1092 name: "Jumbucks", 1195 name: "Bitcoin Core",
1093 onSelect: function() {
1094 network = bitcoin.networks.jumbucks;
1095 DOM.bip44coin.val(26);
1096 },
1097 },
1098 {
1099 name: "CLAM",
1100 onSelect: function() {
1101 network = bitcoin.networks.clam;
1102 DOM.bip44coin.val(23);
1103 },
1104 },
1105 {
1106 name: "DASH",
1107 onSelect: function() { 1196 onSelect: function() {
1108 network = bitcoin.networks.dash; 1197 DOM.bip32path.val("m/0'/0'");
1109 DOM.bip44coin.val(5); 1198 DOM.hardenedAddresses.prop('checked', true);
1110 }, 1199 },
1111 }, 1200 },
1112 { 1201 {
1113 name: "Namecoin", 1202 name: "blockchain.info",
1114 onSelect: function() { 1203 onSelect: function() {
1115 network = bitcoin.networks.namecoin; 1204 DOM.bip32path.val("m/44'/0'/0'");
1116 DOM.bip44coin.val(7); 1205 DOM.hardenedAddresses.prop('checked', false);
1117 }, 1206 },
1118 }, 1207 },
1119 { 1208 {
1120 name: "Peercoin", 1209 name: "MultiBit HD",
1121 onSelect: function() { 1210 onSelect: function() {
1122 network = bitcoin.networks.peercoin; 1211 DOM.bip32path.val("m/0'/0");
1123 DOM.bip44coin.val(6); 1212 DOM.hardenedAddresses.prop('checked', false);
1124 }, 1213 },
1125 }, 1214 }
1126 ] 1215 ]
1127 1216
1128 init(); 1217 init();
diff --git a/src/js/jsbip39.js b/src/js/jsbip39.js
index 67ba5a7..025f625 100644
--- a/src/js/jsbip39.js
+++ b/src/js/jsbip39.js
@@ -130,10 +130,11 @@ var Mnemonic = function(language) {
130 130
131 self.toSeed = function(mnemonic, passphrase) { 131 self.toSeed = function(mnemonic, passphrase) {
132 passphrase = passphrase || ''; 132 passphrase = passphrase || '';
133 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks 133 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
134 var mnemonicNormalized = self.normalizeString(mnemonic);
134 passphrase = self.normalizeString(passphrase) 135 passphrase = self.normalizeString(passphrase)
135 passphrase = "mnemonic" + passphrase; 136 passphrase = "mnemonic" + passphrase;
136 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic); 137 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
137 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase); 138 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
138 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512); 139 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
139 var hashHex = sjcl.codec.hex.fromBits(result); 140 var hashHex = sjcl.codec.hex.fromBits(result);
diff --git a/src/js/polyfill.es6.js b/src/js/polyfill.es6.js
new file mode 100644
index 0000000..be05249
--- /dev/null
+++ b/src/js/polyfill.es6.js
@@ -0,0 +1,3793 @@
1// From
2// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
3// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
4// but is not required in any modern browsers.
5// For more information, see
6// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7
8//----------------------------------------------------------------------
9//
10// ECMAScript 2015 Polyfills
11//
12//----------------------------------------------------------------------
13
14(function (global) {
15 "use strict";
16
17 // Set this to always override native implementations, for testing
18 // the polyfill in browsers with partial/full ES2015 support.
19 var OVERRIDE_NATIVE_FOR_TESTING = false;
20
21 var undefined = (void 0); // Paranoia
22
23 // Helpers
24
25 function strict(o) {
26 return o === global ? undefined : o;
27 }
28
29 function hook(o, p, f) {
30 var op = o[p];
31 console.assert(typeof op === 'function', 'Hooking a non-function');
32 o[p] = function() {
33 var o = strict(this);
34 var r = f.apply(o, arguments);
35 return r !== undefined ? r : op.apply(o, arguments);
36 };
37 }
38
39 function isSymbol(s) {
40 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
41 }
42
43 function getPropertyDescriptor(target, name) {
44 var desc = Object.getOwnPropertyDescriptor(target, name);
45 var proto = Object.getPrototypeOf(target);
46 while (!desc && proto) {
47 desc = Object.getOwnPropertyDescriptor(proto, name);
48 proto = Object.getPrototypeOf(proto);
49 }
50 return desc;
51 }
52
53 var enqueue = (function(nativePromise, nativeSetImmediate) {
54 if (nativePromise)
55 return function(job) { nativePromise.resolve().then(function() { job(); }); };
56 if (nativeSetImmediate)
57 return function(job) { nativeSetImmediate(job); };
58 return function(job) { setTimeout(job, 0); };
59 }(global['Promise'], global['setImmediate']));
60
61 function define(o, p, v, override) {
62 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
63 return;
64
65 if (typeof v === 'function') {
66 // Sanity check that functions are appropriately named (where possible)
67 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
68 Object.defineProperty(o, p, {
69 value: v,
70 configurable: true,
71 enumerable: false,
72 writable: true
73 });
74 } else {
75 Object.defineProperty(o, p, {
76 value: v,
77 configurable: false,
78 enumerable: false,
79 writable: false
80 });
81 }
82 }
83
84 function set_internal(o, p, v) {
85 Object.defineProperty(o, p, {
86 value: v,
87 configurable: false,
88 enumerable: false,
89 writable: true
90 });
91 }
92
93 // Snapshot intrinsic functions
94 var $isNaN = global.isNaN,
95 $parseInt = global.parseInt,
96 $parseFloat = global.parseFloat;
97
98 var E = Math.E,
99 LOG10E = Math.LOG10E,
100 LOG2E = Math.LOG2E,
101 abs = Math.abs,
102 ceil = Math.ceil,
103 exp = Math.exp,
104 floor = Math.floor,
105 log = Math.log,
106 max = Math.max,
107 min = Math.min,
108 pow = Math.pow,
109 random = Math.random,
110 sqrt = Math.sqrt;
111
112 var orig_match = String.prototype.match,
113 orig_replace = String.prototype.replace,
114 orig_search = String.prototype.search,
115 orig_split = String.prototype.split;
116
117 // These are used for implementing the polyfills, but not exported.
118
119 // Inspired by https://gist.github.com/1638059
120 /** @constructor */
121 function EphemeronTable() {
122 var secretKey = ObjectCreate(null);
123
124 function conceal(o) {
125 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
126 Object.defineProperty(o, 'valueOf', {
127 value: (function(secretKey) {
128 return function (k) {
129 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
130 };
131 }(secretKey)),
132 configurable: true,
133 writeable: true,
134 enumerable: false
135 });
136 return secrets;
137 }
138
139 function reveal(o) {
140 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
141 return v === o ? null : v;
142 }
143
144 return {
145 clear: function() {
146 secretKey = ObjectCreate(null);
147 },
148 remove: function(key) {
149 var secrets = reveal(key);
150 if (secrets && HasOwnProperty(secrets, 'value')) {
151 delete secrets.value;
152 return true;
153 }
154 return false;
155 },
156 get: function(key, defaultValue) {
157 var secrets = reveal(key);
158 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
159 },
160 has: function(key) {
161 var secrets = reveal(key);
162 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
163 },
164 set: function(key, value) {
165 var secrets = reveal(key) || conceal(key);
166 secrets.value = value;
167 }
168 };
169 }
170
171 var empty = Object.create(null);
172
173 //----------------------------------------------------------------------
174 //
175 // ECMAScript 2015
176 // http://www.ecma-international.org/ecma-262/6.0/
177 //
178 //----------------------------------------------------------------------
179
180 // ---------------------------------------
181 // 19.4 Symbol Objects
182 // ---------------------------------------
183
184 // NOTE: Symbols are defined here - out of spec order - since we need the
185 // properties and prototype to be populated for other polyfills.
186
187 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
188
189 var symbolForKey;
190 (function() {
191 var secret = Object.create(null);
192 var symbolMap = {};
193 symbolForKey = function(k) {
194 return symbolMap[k];
195 };
196
197 var GlobalSymbolRegistry = [];
198
199 function unique(bits) {
200 return Array(bits + 1).join('x').replace(/x/g, function() {
201 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
202 });
203 }
204
205 // 19.4.1 The Symbol Constructor
206 // 19.4.1.1 Symbol ( description=undefined )
207 function Symbol(description) {
208 if (!(this instanceof Symbol)) return new Symbol(description, secret);
209 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
210
211 var descString = description === undefined ? undefined : String(description);
212
213 set_internal(this, '[[SymbolData]]', unique(128));
214 set_internal(this, '[[Description]]', descString);
215
216 symbolMap[this] = this;
217 return this;
218 }
219
220 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
221 global.Symbol = Symbol;
222
223 // 19.4.2 Properties of the Symbol Constructor
224
225 // 19.4.2.1 Symbol.for (key)
226 define(Symbol, 'for', function for_(key) {
227 var stringKey = String(key);
228 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
229 var e = GlobalSymbolRegistry[i];
230 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
231 }
232 var newSymbol = Symbol(key);
233 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
234 return newSymbol;
235 });
236
237 // 19.4.2.2 Symbol.hasInstance
238 // 19.4.2.3 Symbol.isConcatSpreadable
239
240 // 19.4.2.4 Symbol.iterator
241 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
242
243 // 19.4.2.5 Symbol.keyFor (sym)
244 define(Symbol, 'keyFor', function keyFor(sym) {
245 if (!(sym instanceof Symbol)) throw TypeError();
246 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
247 var e = GlobalSymbolRegistry[i];
248 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
249 }
250 return undefined;
251 });
252
253 // 19.4.2.6 Symbol.match
254 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
255
256 // 19.4.2.7 Symbol.prototype
257
258 // 19.4.2.8 Symbol.replace
259 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
260
261 // 19.4.2.9 Symbol.search
262 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
263
264 // 19.4.2.10 Symbol.species
265
266 // 19.4.2.11 Symbol.search
267 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
268
269 // 19.4.2.12 Symbol.toPrimitive
270
271 // 19.4.2.13 Symbol.toStringTag
272 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
273
274 // 19.4.2.14 Symbol.unscopables
275
276 // 19.4.3 Properties of the Symbol Prototype Object
277 // 19.4.3.1 Symbol.prototype.constructor
278
279 // 19.4.3.2 Symbol.prototype.toString ( )
280 Object.defineProperty(Symbol.prototype, 'toString', {
281 value: function toString() {
282 var s = strict(this);
283 var desc = s['[[Description]]'];
284 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
285 },
286 configurable: true, writeable: true, enumerable: false });
287
288 // 19.4.3.3 Symbol.prototype.valueOf ( )
289 Object.defineProperty(Symbol.prototype, 'valueOf', {
290 value: function valueOf() {
291 // To prevent automatic string conversion:
292 throw TypeError();
293
294 // Spec has approximately the following:
295 //var s = strict(this);
296 //if (Type(s) === 'symbol') return s;
297 //if (Type(s) !== 'object') throw TypeError();
298 //if (!('[[SymbolData]]' in s)) throw TypeError();
299 //return s['[[SymbolData]]'];
300 },
301 configurable: true, writeable: true, enumerable: false });
302
303 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
304 // (Done later to polyfill partial implementations)
305
306 // 19.4.4 Properties of Symbol Instances
307 }());
308
309 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
310
311 // Defined here so that other prototypes can reference it
312 // 25.1.2 The %IteratorPrototype% Object
313 var $IteratorPrototype$ = {};
314
315 //----------------------------------------
316 // 6 ECMAScript Data Types and Values
317 //----------------------------------------
318
319 // 6.1 ECMAScript Language Types
320
321 // "Type(x)" is used as shorthand for "the type of x"...
322 function Type(v) {
323 switch (typeof v) {
324 case 'undefined': return 'undefined';
325 case 'boolean': return 'boolean';
326 case 'number': return 'number';
327 case 'string': return 'string';
328 case 'symbol': return 'symbol';
329 default:
330 if (v === null) return 'null';
331 if (v instanceof global.Symbol) return 'symbol';
332 return 'object';
333 }
334 }
335
336 // 6.1.5.1 Well-Known Symbols
337 var $$iterator = global.Symbol.iterator,
338 $$match = global.Symbol.match,
339 $$replace = global.Symbol.replace,
340 $$search = global.Symbol.search,
341 $$split = global.Symbol.split,
342 $$toStringTag = global.Symbol.toStringTag;
343
344 //----------------------------------------
345 // 7 Abstract Operations
346 //----------------------------------------
347
348 //----------------------------------------
349 // 7.1 Type Conversion
350 //----------------------------------------
351
352 // 7.1.1 ToPrimitive ( input [, PreferredType] )
353 // just use valueOf()
354
355 // 7.1.2 ToBoolean ( argument )
356 // just use Boolean()
357
358 // 7.1.3 ToNumber ( argument )
359 // just use Number()
360
361 // 7.1.4 ToInteger ( argument )
362 function ToInteger(n) {
363 n = Number(n);
364 if ($isNaN(n)) return 0;
365 if (n === 0 || n === Infinity || n === -Infinity) return n;
366 return ((n < 0) ? -1 : 1) * floor(abs(n));
367 }
368
369 // 7.1.5 ToInt32 ( argument )
370 function ToInt32(v) { return v >> 0; }
371
372 // 7.1.6 ToUint32 ( argument )
373 function ToUint32(v) { return v >>> 0; }
374
375 // 7.1.7 ToInt16 ( argument )
376 function ToInt16(v) { return (v << 16) >> 16; }
377
378 // 7.1.8 ToUint16 ( argument )
379 function ToUint16(v) { return v & 0xFFFF; }
380
381 // 7.1.9 ToInt8 ( argument )
382 function ToInt8(v) { return (v << 24) >> 24; }
383
384 // 7.1.10 ToUint8 ( argument )
385 function ToUint8(v) { return v & 0xFF; }
386
387 // 7.1.11 ToUint8Clamp ( argument )
388 function ToUint8Clamp(argument) {
389 var number = Number(argument);
390 if ($isNaN(number)) return 0;
391 if (number <= 0) return 0;
392 if (number >= 255) return 255;
393 var f = floor(number);
394 if ((f + 0.5) < number) return f + 1;
395 if (number < (f + 0.5)) return f;
396 if (f % 2) return f + 1;
397 return f;
398 }
399
400 // 7.1.12 ToString ( argument )
401 // just use String()
402
403 // 7.1.13 ToObject ( argument )
404 function ToObject(v) {
405 if (v === null || v === undefined) throw TypeError();
406 return Object(v);
407 }
408
409 // 7.1.14 ToPropertyKey ( argument )
410 function ToPropertyKey(v) {
411 return String(v);
412 }
413
414 // 7.1.15 ToLength ( argument )
415 function ToLength(v) {
416 var len = ToInteger(v);
417 if (len <= 0) return 0;
418 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
419 return min(len, 0x20000000000000 - 1); // 2^53-1
420 }
421
422 // 7.1.16 CanonicalNumericIndexString ( argument )
423
424 //----------------------------------------
425 // 7.2 Testing and Comparison Operations
426 //----------------------------------------
427
428 // 7.2.1 RequireObjectCoercible ( argument )
429 // 7.2.2 IsArray ( argument )
430
431 // 7.2.3 IsCallable ( argument )
432 function IsCallable(o) { return typeof o === 'function'; }
433
434 // 7.2.4 IsConstructor ( argument )
435 function IsConstructor(o) {
436 // Hacks for Safari 7 TypedArray XXXConstructor objects
437 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
438 if (/Function/.test(Object.prototype.toString.call(o))) return true;
439 // TODO: Can this be improved on?
440 return typeof o === 'function';
441 }
442
443 // 7.2.5 IsExtensible (O)
444 // 7.2.6 IsInteger ( argument )
445
446 // 7.2.7 IsPropertyKey ( argument )
447 function IsPropertyKey(argument) {
448 if (Type(argument) === 'string') return true;
449 if (Type(argument) === 'symbol') return true;
450 return false;
451 }
452
453 // 7.2.8 IsRegExp ( argument )
454 // 7.2.5 IsConstructor ( argument )
455
456 // 7.2.9 SameValue(x, y)
457 function SameValue(x, y) {
458 if (typeof x !== typeof y) return false;
459 switch (typeof x) {
460 case 'undefined':
461 return true;
462 case 'number':
463 if (x !== x && y !== y) return true;
464 if (x === 0 && y === 0) return 1/x === 1/y;
465 return x === y;
466 case 'boolean':
467 case 'string':
468 case 'object':
469 default:
470 return x === y;
471 }
472 }
473
474 // 7.2.10 SameValueZero(x, y)
475 function SameValueZero(x, y) {
476 if (typeof x !== typeof y) return false;
477 switch (typeof x) {
478 case 'undefined':
479 return true;
480 case 'number':
481 if (x !== x && y !== y) return true;
482 return x === y;
483 case 'boolean':
484 case 'string':
485 case 'object':
486 default:
487 return x === y;
488 }
489 }
490
491 //----------------------------------------
492 // 7.3 Operations on Objects
493 //----------------------------------------
494
495 // 7.3.1 Get (O, P)
496 // - just use o.p or o[p]
497
498 // 7.3.2 GetV (V, P)
499 function GetV(v, p) {
500 var o = ToObject(v);
501 return o[p];
502 }
503
504 // 7.3.3 Set (O, P, V, Throw)
505 // - just use o.p = v or o[p] = v
506
507
508
509
510 // 7.3.9 GetMethod (O, P)
511 function GetMethod(o, p) {
512 var func = GetV(o, p);
513 if (func === undefined || func === null) return undefined;
514 if (!IsCallable(func)) throw TypeError();
515 return func;
516 }
517
518 // 7.3.10 HasProperty (O, P)
519 function HasProperty(o, p) {
520 while (o) {
521 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
522 if (Type(o) !== 'object') return false;
523 o = Object.getPrototypeOf(o);
524 }
525 return false;
526 }
527
528 // 7.3.11 HasOwnProperty (O, P)
529 function HasOwnProperty(o, p) {
530 return Object.prototype.hasOwnProperty.call(o, p);
531 }
532
533 //----------------------------------------
534 // 7.4 Operations on Iterator Objects
535 //----------------------------------------
536
537 // 7.4.1 GetIterator ( obj, method )
538 function GetIterator(obj, method) {
539 if (arguments.length < 2)
540 method = GetMethod(obj, $$iterator);
541 var iterator = method.call(obj);
542 if (Type(iterator) !== 'object') throw TypeError();
543 return iterator;
544 }
545
546 // 7.4.2 IteratorNext ( iterator, value )
547 function IteratorNext(iterator, value) {
548 if (arguments.length < 2)
549 var result = iterator.next();
550 else
551 result = iterator.next(value);
552 if (Type(result) !== 'object') throw TypeError();
553 return result;
554 }
555
556 // 7.4.3 IteratorComplete ( iterResult )
557 function IteratorComplete(iterResult) {
558 console.assert(Type(iterResult) === 'object');
559 return Boolean(iterResult.done);
560 }
561
562 // 7.4.4 IteratorValue ( iterResult )
563 function IteratorValue(iterResult) {
564 console.assert(Type(iterResult) === 'object');
565 return iterResult.value;
566 }
567
568 // 7.4.5 IteratorStep ( iterator )
569 function IteratorStep( iterator, value ) {
570 var result = IteratorNext(iterator, value);
571 var done = result['done'];
572 if (Boolean(done) === true) return false;
573 return result;
574 }
575
576 // 7.4.6 IteratorClose( iterator, completion )
577 function IteratorClose( iterator, completion ) {
578 console.assert(Type(iterator) === 'object');
579 var _return = GetMethod(iterator, 'return');
580 if (_return === undefined) return completion;
581 try {
582 var innerResult = _return[iterator]();
583 } catch (result) {
584 // TODO: If completion.[[type]] is throw, return completion
585 return result;
586 }
587 if (Type(innerResult) !== 'object') throw TypeError();
588 return completion;
589 }
590
591 // 7.4.7 CreateIterResultObject (value, done)
592 function CreateIterResultObject(value, done) {
593 console.assert(Type(done) === 'boolean');
594 var obj = {};
595 obj["value"] = value;
596 obj["done"] = done;
597 return obj;
598 }
599
600 // 7.4.8 CreateListIterator (list)
601 // 7.4.8.1 ListIterator next( )
602 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
603 // 7.4.9.1 CompoundIterator next( )
604
605 //----------------------------------------
606 // 8 Executable Code and Execution Contexts
607 //----------------------------------------
608
609 //----------------------------------------
610 // 8.4 Jobs and Job Queues
611 //----------------------------------------
612
613 // 8.4.1 EnqueueJob ( queueName, job, arguments)
614 function EnqueueJob(queueName, job, args) {
615 var fn = function() { job.apply(undefined, args); };
616 enqueue(fn);
617 }
618
619 // 8.4.2 NextJob result
620 function NextJob(result) {
621 // no-op
622 }
623
624 //----------------------------------------
625 // 9 Ordinary and Exotic Objects Behaviors
626 //----------------------------------------
627
628 // 9.1.11 [[Enumerate]] ()
629 function Enumerate(obj) {
630 var e = [];
631 if (Object(obj) !== obj) return e;
632 var visited = new Set;
633 while (obj !== null) {
634 Object.getOwnPropertyNames(obj).forEach(function(name) {
635 if (!visited.has(name)) {
636 var desc = Object.getOwnPropertyDescriptor(obj, name);
637 if (desc) {
638 visited.add(name);
639 if (desc.enumerable) e.push(name);
640 }
641 }
642 });
643 obj = Object.getPrototypeOf(obj);
644 }
645 return e[$$iterator]();
646 }
647
648 // 9.1.12 [[OwnPropertyKeys]] ( )
649 function OwnPropertyKeys(o) {
650 return Object.getOwnPropertyNames(o);
651 }
652
653 // 9.1.13 ObjectCreate(proto, internalSlotsList)
654 function ObjectCreate(proto, internalSlotsList) {
655 return Object.create(proto, internalSlotsList);
656 }
657
658 // ---------------------------------------
659 // 19 Fundamental Objects
660 // ---------------------------------------
661
662 // ---------------------------------------
663 // 19.1 Object Objects
664 // ---------------------------------------
665
666 // 19.1.1 The Object Constructor
667 // 19.1.1.1 Object ( [ value ] )
668 // 19.1.2 Properties of the Object Constructor
669 // 19.1.2.1 Object.assign ( target, ...sources )
670 define(
671 Object, 'assign',
672 function assign(target, /*...*/sources) {
673 var to = ToObject(target);
674 if (arguments.length < 2) return to;
675
676 var sourcesIndex = 1;
677 while (sourcesIndex < arguments.length) {
678 var nextSource = arguments[sourcesIndex++];
679 if (nextSource === undefined || nextSource === null) {
680 var keys = [];
681 } else {
682 var from = ToObject(nextSource);
683 keys = OwnPropertyKeys(from);
684 }
685 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
686 var nextKey = keys[keysIndex];
687 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
688 if (desc !== undefined && desc.enumerable) {
689 var propValue = from[nextKey];
690 to[nextKey] = propValue;
691 }
692 }
693 }
694 return to;
695 });
696
697 // 19.1.2.2 Object.create ( O [ , Properties ] )
698 // 19.1.2.3 Object.defineProperties ( O, Properties )
699 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
700 // 19.1.2.5 Object.freeze ( O )
701 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
702
703 (function() {
704 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
705 $getOwnPropertyNames = Object.getOwnPropertyNames,
706 $keys = Object.keys,
707 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
708
709 function isStringKey(k) { return !symbolForKey(k); }
710
711 // 19.1.2.7 Object.getOwnPropertyNames ( O )
712 define(
713 Object, 'getOwnPropertyNames',
714 function getOwnPropertyNames(o) {
715 if (Object.prototype.toString.call(o) === '[object Window]') {
716 // Workaround for cross-realm calling by IE itself.
717 // https://github.com/inexorabletash/polyfill/issues/96
718 try {
719 return $getOwnPropertyNames(o).filter(isStringKey);
720 } catch (_) {
721 return $window_names.slice();
722 }
723 }
724 return $getOwnPropertyNames(o).filter(isStringKey);
725 }, !nativeSymbols);
726
727 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
728 define(
729 Object, 'getOwnPropertySymbols',
730 function getOwnPropertySymbols(o) {
731 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
732 }, !nativeSymbols);
733
734 // 19.1.2.14 Object.keys ( O )
735 define(
736 Object, 'keys',
737 function keys(o) {
738 return $keys(o).filter(isStringKey);
739 }, !nativeSymbols);
740 }());
741
742 // 19.1.2.9 Object.getPrototypeOf ( O )
743 // 19.1.2.10 Object.is ( value1, value2 )
744 define(
745 Object, 'is',
746 function is(value1, value2) {
747 return SameValue(value1, value2);
748 });
749
750 // 19.1.2.11 Object.isExtensible ( O )
751 // 19.1.2.12 Object.isFrozen ( O )
752 // 19.1.2.13 Object.isSealed ( O )
753
754 // 19.1.2.14 Object.keys ( O )
755 // see above
756
757 // 19.1.2.15 Object.preventExtensions ( O )
758 // 19.1.2.16 Object.prototype
759 // 19.1.2.17 Object.seal ( O )
760
761 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
762 define(
763 Object, 'setPrototypeOf',
764 function setPrototypeOf(o, proto) {
765 if (Type(o) !== 'object') throw TypeError();
766 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
767 o.__proto__ = proto;
768 return o;
769 }
770 );
771
772 // 19.1.3 Properties of the Object Prototype Object
773 // 19.1.3.1 Object.prototype.constructor
774 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
775 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
776 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
777 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
778 // 19.1.3.6 Object.prototype.toString ( )
779 hook(Object.prototype, 'toString',
780 function() {
781 var o = strict(this);
782 if (o === Object(o) && $$toStringTag in o) {
783 return '[object ' + o[$$toStringTag] + ']';
784 }
785 return undefined;
786 });
787
788 // 19.1.3.7 Object.prototype.valueOf ( )
789 // 19.1.4 Properties of Object Instances
790
791 // ---------------------------------------
792 // 19.2 Function Objects
793 // ---------------------------------------
794
795 // 19.2.1 The Function Constructor
796 // 19.2.1.1 Function ( p1, p2, … , pn, body )
797 // 19.2.2 Properties of the Function Constructor
798 // 19.2.2.1 Function.length
799 // 19.2.2.2 Function.prototype
800 // 19.2.3 Properties of the Function Prototype Object
801 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
802 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
803 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
804 // 19.2.3.4 Function.prototype.constructor
805 // 19.2.3.5 Function.prototype.toString ( )
806 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
807 // 19.2.4 Function Instances
808 // 19.2.4.1 length
809 // 19.2.4.2 name
810 // 19.2.4.3 prototype
811
812 // (No polyfillable changes from ES5)
813
814 // ---------------------------------------
815 // 19.3 Boolean Objects
816 // ---------------------------------------
817
818 // 19.3.1 The Boolean Constructor
819 // 19.3.1.1 Boolean ( value )
820 // 19.3.2 Properties of the Boolean Constructor
821 // 19.3.2.1 Boolean.prototype
822 // 19.3.3 Properties of the Boolean Prototype Object
823 // 19.3.3.1 Boolean.prototype.constructor
824 // 19.3.3.2 Boolean.prototype.toString ( )
825 // 19.3.3.3 Boolean.prototype.valueOf ( )
826 // 19.3.4 Properties of Boolean Instances
827
828 // (No polyfillable changes from ES5)
829
830 // ---------------------------------------
831 // 19.4 Symbol Objects
832 // ---------------------------------------
833
834 // Moved earlier in this script, so that other polyfills can depend on them.
835
836 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
837 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
838
839 // ---------------------------------------
840 // 19.5 Error Objects
841 // ---------------------------------------
842
843 // 19.5.1 The Error Constructor
844 // 19.5.1.1 Error ( message )
845 // 19.5.1.2 new Error( ...argumentsList )
846 // 19.5.2 Properties of the Error Constructor
847 // 19.5.2.1 Error.prototype
848 // 19.5.3 Properties of the Error Prototype Object
849 // 19.5.3.1 Error.prototype.constructor
850 // 19.5.3.2 Error.prototype.message
851 // 19.5.3.3 Error.prototype.name
852 // 19.5.3.4 Error.prototype.toString ( )
853 // 19.5.4 Properties of Error Instances
854 // 19.5.5 Native Error Types Used in This Standard
855 // 19.5.5.1 EvalError
856 // 19.5.5.2 RangeError
857 // 19.5.5.3 ReferenceError
858 // 19.5.5.4 SyntaxError
859 // 19.5.5.5 TypeError
860 // 19.5.5.6 URIError
861 // 19.5.6 NativeError Object Structure
862 // 19.5.6.1 NativeError Constructors
863 // 19.5.6.1.1 NativeError ( message )
864 // 19.5.6.1.2 new NativeError ( ...argumentsList )
865 // 19.5.6.2 Properties of the NativeError Constructors
866 // 19.5.6.2.1 NativeError.prototype
867 // 19.5.6.3 Properties of the NativeError Prototype Objects
868 // 19.5.6.4 Properties of NativeError Instances
869
870 // (No polyfillable changes from ES5)
871
872 // ---------------------------------------
873 // 20 Numbers and Dates
874 // ---------------------------------------
875
876 // ---------------------------------------
877 // 20.1 Number Objects
878 // ---------------------------------------
879
880 // 20.1.1 The Number Constructor
881 // 20.1.1.1 Number ( [ value ] )
882 // 20.1.1.2 new Number ( ...argumentsList )
883 // 20.1.2 Properties of the Number Constructor
884
885 // 20.1.2.1 Number.EPSILON
886 define(
887 Number, 'EPSILON',
888 (function () {
889 var next, result;
890 for (next = 1; 1 + next !== 1; next = next / 2)
891 result = next;
892 return result;
893 }()));
894
895 // 20.1.2.2 Number.isFinite ( number )
896 define(
897 Number, 'isFinite',
898 function isFinite(number) {
899 if (Type(number) !== 'number') return false;
900 if (number !== number || number === +Infinity || number === -Infinity) return false;
901 return true;
902 });
903
904 // 20.1.2.3 Number.isInteger ( number )
905 define(
906 Number, 'isInteger',
907 function isInteger(number) {
908 if (Type(number) !== 'number') return false;
909 if (number !== number || number === +Infinity || number === -Infinity) return false;
910 var integer = ToInteger(number);
911 if (integer !== number) return false;
912 return true;
913 });
914
915 // 20.1.2.4 Number.isNaN ( number )
916 define(
917 Number, 'isNaN',
918 function isNaN(number) {
919 if (Type(number) !== 'number') return false;
920 if (number !== number) return true;
921 return false;
922 });
923
924 // 20.1.2.5 Number.isSafeInteger ( number )
925 define(
926 Number, 'isSafeInteger',
927 function isSafeInteger(number) {
928 if (Type(number) !== 'number') return false;
929 if (number !== number || number === +Infinity || number === -Infinity) return false;
930 var integer = ToInteger(number);
931 if (integer !== number) return false;
932 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
933 return true;
934 return false;
935 });
936
937 // 20.1.2.6 Number.MAX_SAFE_INTEGER
938 define(
939 Number, 'MAX_SAFE_INTEGER',
940 9007199254740991); // 2^53-1
941
942 // 20.1.2.7 Number.MAX_VALUE
943
944 // 20.1.2.8 Number.MIN_SAFE_INTEGER
945 define(
946 Number, 'MIN_SAFE_INTEGER',
947 -9007199254740991); // -2^53+1
948
949 // 20.1.2.9 Number.MIN_VALUE
950 // 20.1.2.10 Number.NaN
951 // 20.1.2.11 Number.NEGATIVE_INFINITY
952
953 // 20.1.2.12 Number.parseFloat ( string )
954 define(Number, 'parseFloat', $parseFloat);
955
956 // 20.1.2.13 Number.parseInt ( string, radix )
957 define(Number, 'parseInt', $parseInt);
958
959 // 20.1.2.14 Number.POSITIVE_INFINITY
960 // 20.1.2.15 Number.prototype
961
962 // 20.1.3 Properties of the Number Prototype Object
963 // 20.1.3.1 Number.prototype.constructor
964 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
965 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
966 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
967 // 20.1.3.5 Number.prototype.toPrecision ( precision )
968 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
969 // 20.1.3.7 Number.prototype.valueOf ( )
970 // 20.1.4 Properties of Number Instances
971
972 // ---------------------------------------
973 // 20.2 The Math Object
974 // ---------------------------------------
975
976 // 20.2.1 Value Properties of the Math Object
977 // 20.2.1.1 Math.E
978 // 20.2.1.2 Math.LN10
979 // 20.2.1.3 Math.LN2
980 // 20.2.1.4 Math.LOG10E
981 // 20.2.1.5 Math.LOG2E
982 // 20.2.1.6 Math.PI
983 // 20.2.1.7 Math.SQRT1_2
984 // 20.2.1.8 Math.SQRT2
985
986 // 20.2.1.9 Math [ @@toStringTag ]
987 define(Math, $$toStringTag, 'Math');
988
989 // 20.2.2 Function Properties of the Math Object
990 // 20.2.2.1 Math.abs ( x )
991 // 20.2.2.2 Math.acos ( x )
992
993 // 20.2.2.3 Math.acosh(x)
994 define(
995 Math, 'acosh',
996 function acosh(x) {
997 x = Number(x);
998 return log(x + sqrt(x * x - 1));
999 });
1000
1001 // 20.2.2.4 Math.asin ( x )
1002
1003 // 20.2.2.5 Math.asinh( x )
1004 define(
1005 Math, 'asinh',
1006 function asinh(x) {
1007 x = Number(x);
1008 if (SameValue(x, -0)) {
1009 return x;
1010 }
1011 var s = sqrt(x * x + 1);
1012 return (s === -x) ? log(0) : log(x + s);
1013 });
1014
1015 // 20.2.2.6 Math.atan ( x )
1016
1017 // 20.2.2.7 Math.atanh( x )
1018 define(
1019 Math, 'atanh',
1020 function atanh(x) {
1021 x = Number(x);
1022 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1023 });
1024
1025 // 20.2.2.8 Math.atan2 ( y, x )
1026
1027 // 20.2.2.9 Math.cbrt ( x )
1028 define(
1029 Math, 'cbrt',
1030 function cbrt(x) {
1031 x = Number(x);
1032 if ($isNaN(x/x)) {
1033 return x;
1034 }
1035 var r = pow(abs(x), 1/3);
1036 var t = x/r/r;
1037 return r + (r * (t-r) / (2*r + t));
1038 });
1039
1040 // 20.2.2.10 Math.ceil ( x )
1041
1042 // 20.2.2.11 Math.clz32 ( x )
1043 define(
1044 Math, 'clz32',
1045 function clz32(x) {
1046 function clz8(x) {
1047 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1048 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1049 }
1050 x = ToUint32(x);
1051 return x & 0xff000000 ? clz8(x >> 24) :
1052 x & 0xff0000 ? clz8(x >> 16) + 8 :
1053 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1054 });
1055
1056
1057
1058 // 20.2.2.12 Math.cos ( x )
1059
1060 // 20.2.2.13 Math.cosh ( x )
1061 define(
1062 Math, 'cosh',
1063 function cosh(x) {
1064 x = Number(x);
1065 return (pow(E, x) + pow(E, -x)) / 2;
1066 });
1067
1068 // 20.2.2.14 Math.exp ( x )
1069
1070 // 20.2.2.15 Math.expm1 ( x )
1071 define(
1072 Math, 'expm1',
1073 function expm1(x) {
1074 x = Number(x);
1075 // from: http://www.johndcook.com/cpp_log1p.html
1076 if (SameValue(x, -0)) {
1077 return -0;
1078 } else if (abs(x) < 1e-5) {
1079 return x + 0.5 * x * x; // two terms of Taylor expansion
1080 } else {
1081 return exp(x) - 1;
1082 }
1083 });
1084
1085 // 20.2.2.16 Math.floor ( x )
1086
1087 // 20.2.2.17 Math.fround ( x )
1088 define(
1089 Math, 'fround',
1090 function fround(x) {
1091 if ($isNaN(x)) {
1092 return NaN;
1093 }
1094 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1095 return x;
1096 }
1097 return (new Float32Array([x]))[0];
1098 });
1099
1100 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1101 define(
1102 Math, 'hypot',
1103 function hypot() {
1104 var values = [];
1105 var m = 0, sawNaN = false;
1106 for (var i = 0; i < arguments.length; ++i) {
1107 var n = abs(Number(arguments[i]));
1108 if (n === Infinity) return n;
1109 if (n !== n) sawNaN = true;
1110 if (n > m) m = n;
1111 values[i] = n;
1112 }
1113 if (sawNaN) return NaN;
1114 if (m === 0) return +0;
1115 var sum = +0;
1116 for (i = 0; i < values.length; ++i) {
1117 var r = values[i] / m;
1118 sum = sum + r * r;
1119 }
1120 return m * sqrt(sum);
1121 });
1122
1123 // 20.2.2.19 Math.imul ( x, y )
1124 define(
1125 Math, 'imul',
1126 function imul(x, y) {
1127 var a = ToUint32(x);
1128 var b = ToUint32(y);
1129 // (slow but accurate)
1130 var ah = (a >>> 16) & 0xffff;
1131 var al = a & 0xffff;
1132 var bh = (b >>> 16) & 0xffff;
1133 var bl = b & 0xffff;
1134 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1135 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1136 );
1137
1138 // 20.2.2.20 Math.log ( x )
1139
1140 // 20.2.2.21 Math.log1p ( x )
1141 define(
1142 Math, 'log1p',
1143 function log1p(x) {
1144 x = Number(x);
1145 // from: http://www.johndcook.com/cpp_expm1.html
1146 if (x < -1) {
1147 return NaN;
1148 } else if (SameValue(x, -0)) {
1149 return -0;
1150 } else if (abs(x) > 1e-4) {
1151 return log(1 + x);
1152 } else {
1153 return (-0.5 * x + 1) * x;
1154 }
1155 });
1156
1157 // 20.2.2.22 Math.log10 ( x )
1158 define(
1159 Math, 'log10',
1160 function log10(x) {
1161 x = Number(x);
1162 return log(x) * LOG10E;
1163 });
1164
1165 // 20.2.2.23 Math.log2 ( x )
1166 define(
1167 Math, 'log2',
1168 function log2(x) {
1169 x = Number(x);
1170 return log(x) * LOG2E;
1171 });
1172
1173 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1174 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1175 // 20.2.2.26 Math.pow ( x, y )
1176 // 20.2.2.27 Math.random ( )
1177 // 20.2.2.28 Math.round ( x )
1178
1179 // 20.2.2.29 Math.sign(x)
1180 define(
1181 Math, 'sign',
1182 function sign(x) {
1183 x = Number(x);
1184 return x < 0 ? -1 : x > 0 ? 1 : x;
1185 });
1186
1187 // 20.2.2.30 Math.sin ( x )
1188
1189 // 20.2.2.31 Math.sinh( x )
1190 define(
1191 Math, 'sinh',
1192 function sinh(x) {
1193 x = Number(x);
1194 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1195 });
1196
1197 // 20.2.2.32 Math.sqrt ( x )
1198 // 20.2.2.33 Math.tan ( x )
1199
1200 // 20.2.2.34 Math.tanh ( x )
1201 define(
1202 Math, 'tanh',
1203 function tanh(x) {
1204 x = Number(x);
1205 var n = pow(E, 2 * x) - 1,
1206 d = pow(E, 2 * x) + 1;
1207 if (SameValue(x, -0))
1208 return x;
1209 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1210 });
1211
1212 // 20.2.2.35 Math.trunc ( x )
1213 define(
1214 Math, 'trunc',
1215 function trunc(x) {
1216 x = Number(x);
1217 return $isNaN(x) ? NaN :
1218 x < 0 ? ceil(x) : floor(x);
1219 });
1220
1221 // ---------------------------------------
1222 // 20.3 Date Objects
1223 // ---------------------------------------
1224
1225 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1226 // 20.3.1.1 Time Values and Time Range
1227 // 20.3.1.2 Day Number and Time within Day
1228 // 20.3.1.3 Year Number
1229 // 20.3.1.4 Month Number
1230 // 20.3.1.5 Date Number
1231 // 20.3.1.6 Week Day
1232 // 20.3.1.7 Local Time Zone Adjustment
1233 // 20.3.1.8 Daylight Saving Time Adjustment
1234 // 20.3.1.9 Local Time
1235 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1236 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1237 // 20.3.1.12 MakeDay (year, month, date)
1238 // 20.3.1.13 MakeDate (day, time)
1239 // 20.3.1.14 TimeClip (time)
1240 // 20.3.1.15 Date Time String Format
1241 // 20.3.1.15.1 Extended years
1242 // 20.3.2 The Date Constructor
1243 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1244 // 20.3.2.2 Date ( value )
1245 // 20.3.2.3 Date ( )
1246 // 20.3.3 Properties of the Date Constructor
1247 // 20.3.3.1 Date.now ( )
1248 // 20.3.3.2 Date.parse (string)
1249 // 20.3.3.3 Date.prototype
1250 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1251 // 20.3.4 Properties of the Date Prototype Object
1252 // 20.3.4.1 Date.prototype.constructor
1253 // 20.3.4.2 Date.prototype.getDate ( )
1254 // 20.3.4.3 Date.prototype.getDay ( )
1255 // 20.3.4.4 Date.prototype.getFullYear ( )
1256 // 20.3.4.5 Date.prototype.getHours ( )
1257 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1258 // 20.3.4.7 Date.prototype.getMinutes ( )
1259 // 20.3.4.8 Date.prototype.getMonth ( )
1260 // 20.3.4.9 Date.prototype.getSeconds ( )
1261 // 20.3.4.10 Date.prototype.getTime ( )
1262 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1263 // 20.3.4.12 Date.prototype.getUTCDate ( )
1264 // 20.3.4.13 Date.prototype.getUTCDay ( )
1265 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1266 // 20.3.4.15 Date.prototype.getUTCHours ( )
1267 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1268 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1269 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1270 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1271 // 20.3.4.20 Date.prototype.setDate ( date )
1272 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1273 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1274 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1275 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1276 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1277 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1278 // 20.3.4.27 Date.prototype.setTime ( time )
1279 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1280 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1281 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1282 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1283 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1284 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1285 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1286 // 20.3.4.35 Date.prototype.toDateString ( )
1287 // 20.3.4.36 Date.prototype.toISOString ( )
1288 // 20.3.4.37 Date.prototype.toJSON ( key )
1289 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1290 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1291 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1292 // 20.3.4.41 Date.prototype.toString ( )
1293 // 20.3.4.42 Date.prototype.toTimeString ( )
1294 // 20.3.4.43 Date.prototype.toUTCString ( )
1295 // 20.3.4.44 Date.prototype.valueOf ( )
1296 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1297 // 20.3.5 Properties of Date Instances
1298
1299 // (No polyfillable changes from ES5)
1300
1301 // ---------------------------------------
1302 // 21 Text Processing
1303 // ---------------------------------------
1304
1305 var string_regexp_dispatch = (function() {
1306 var faux = {}, secret = Symbol();
1307 faux[Symbol.match] = function() { return secret; };
1308 return ("").match(faux) === secret;
1309 }());
1310
1311 // 21.1 String Objects
1312 // 21.1.1 The String Constructor
1313 // 21.1.1.1 String ( value )
1314 // 21.1.2 Properties of the String Constructor
1315 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1316
1317 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1318 define(
1319 String, 'fromCodePoint',
1320 function fromCodePoint(/*...codePoints*/) {
1321 var codePoints = arguments,
1322 length = codePoints.length,
1323 elements = [],
1324 nextIndex = 0;
1325 while (nextIndex < length) {
1326 var next = codePoints[nextIndex];
1327 var nextCP = Number(next);
1328 if (!SameValue(nextCP, ToInteger(nextCP)) ||
1329 nextCP < 0 || nextCP > 0x10FFFF) {
1330 throw RangeError('Invalid code point ' + nextCP);
1331 }
1332 if (nextCP < 0x10000) {
1333 elements.push(String.fromCharCode(nextCP));
1334 } else {
1335 nextCP -= 0x10000;
1336 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
1337 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
1338 }
1339 nextIndex += 1;
1340 }
1341 return elements.join('');
1342 });
1343
1344 // 21.1.2.3 String.prototype
1345
1346 // 21.1.2.4 String.raw ( template , ...substitutions )
1347 define(
1348 String, 'raw',
1349 function raw(template /*, ...substitutions*/) {
1350 var substitutions = [].slice.call(arguments, 1);
1351
1352 var cooked = Object(template);
1353 var rawValue = cooked['raw'];
1354 var raw = Object(rawValue);
1355 var len = raw['length'];
1356 var literalSegments = ToLength(len);
1357 if (literalSegments <= 0) return '';
1358 var stringElements = [];
1359 var nextIndex = 0;
1360 while (true) {
1361 var next = raw[nextIndex];
1362 var nextSeg = String(next);
1363 stringElements.push(nextSeg);
1364 if (nextIndex + 1 === literalSegments)
1365 return stringElements.join('');
1366 next = substitutions[nextIndex];
1367 var nextSub = String(next);
1368 stringElements.push(nextSub);
1369 nextIndex = nextIndex + 1;
1370 }
1371 });
1372
1373 // See https://githib.com/inexorabletash/uate for a more useful version.
1374
1375 // 21.1.3 Properties of the String Prototype Object
1376 // 21.1.3.1 String.prototype.charAt ( pos )
1377 // 21.1.3.2 String.prototype.charCodeAt ( pos )
1378
1379 // 21.1.3.3 String.prototype.codePointAt ( pos )
1380 define(
1381 String.prototype, 'codePointAt',
1382 function codePointAt(pos) {
1383 var o = strict(this);
1384 var s = String(o);
1385 var position = ToInteger(pos);
1386 var size = s.length;
1387 if (position < 0 || position >= size) return undefined;
1388 var first = s.charCodeAt(position);
1389 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
1390 var second = s.charCodeAt(position + 1);
1391 if (second < 0xDC00 || second > 0xDFFF) return first;
1392 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
1393 });
1394
1395 // 21.1.3.4 String.prototype.concat ( ...args )
1396 // 21.1.3.5 String.prototype.constructor
1397
1398 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
1399 define(
1400 String.prototype, 'endsWith',
1401 function endsWith(searchString) {
1402 var endPosition = arguments[1];
1403
1404 var o = strict(this);
1405 var s = String(o);
1406 var searchStr = String(searchString);
1407 var len = s.length;
1408 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
1409 var end = min(max(pos, 0), len);
1410 var searchLength = searchStr.length;
1411 var start = end - searchLength;
1412 if (start < 0) return false;
1413 if (s.substring(start, start + searchLength) === searchStr) return true;
1414 return false;
1415 });
1416
1417 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
1418 define(
1419 String.prototype, 'includes',
1420 function includes(searchString) {
1421 var position = arguments[1];
1422
1423 var o = strict(this);
1424 var s = String(o);
1425 var searchStr = String(searchString);
1426 var pos = ToInteger(position);
1427 var len = s.length;
1428 var start = min(max(pos, 0), len);
1429 return s.indexOf(searchStr, start) !== -1;
1430 });
1431
1432 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
1433 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
1434 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
1435 // 21.1.3.11 String.prototype.match ( regexp )
1436 define(
1437 String.prototype, 'match',
1438 function match(regexp) {
1439 var o = strict(this);
1440 var s = String(o);
1441 if (HasProperty(regexp, $$match)) var rx = regexp;
1442 else rx = new RegExp(regexp);
1443 return rx[$$match](s);
1444 }, !string_regexp_dispatch);
1445
1446 // 21.1.3.12 String.prototype.normalize ( [ form ] )
1447
1448 // Not practical due to table sizes; if needed, pull in:
1449 // https://github.com/walling/unorm/
1450
1451 // 21.1.3.13 String.prototype.repeat ( count )
1452 define(
1453 String.prototype, 'repeat',
1454 function repeat(count) {
1455 var o = strict(this);
1456 var s = String(o);
1457 var n = ToInteger(count);
1458 if (n < 0) throw RangeError();
1459 if (n === Infinity) throw RangeError();
1460 var t = new Array(n + 1).join(s);
1461 return t;
1462 });
1463
1464 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
1465 define(
1466 String.prototype, 'replace',
1467 function replace(searchValue, replaceValue) {
1468 var o = strict(this);
1469 if (HasProperty(searchValue, $$replace))
1470 return searchValue[$$replace](o, replaceValue);
1471 return orig_replace.call(o, searchValue, replaceValue);
1472 }, !string_regexp_dispatch);
1473
1474 // 21.1.3.15 String.prototype.search ( regexp )
1475 define(
1476 String.prototype, 'search',
1477 function search(regexp) {
1478 var o = strict(this);
1479 var string = String(o);
1480 if (HasProperty(regexp, $$search)) var rx = regexp;
1481 else rx = new RegExp(regexp);
1482 return rx[$$search](string);
1483 }, !string_regexp_dispatch);
1484
1485 // 21.1.3.16 String.prototype.slice ( start, end )
1486 // 21.1.3.17 String.prototype.split ( separator, limit )
1487 define(
1488 String.prototype, 'split',
1489 function split(separator, limit) {
1490 var o = strict(this);
1491 if (HasProperty(separator, $$split))
1492 return separator[$$split](o, limit);
1493 return orig_split.call(o, separator, limit);
1494 }, !string_regexp_dispatch);
1495
1496 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
1497 define(
1498 String.prototype, 'startsWith',
1499 function startsWith(searchString) {
1500 var position = arguments[1];
1501
1502 var o = strict(this);
1503 var s = String(o);
1504 var searchStr = String(searchString);
1505 var pos = ToInteger(position);
1506 var len = s.length;
1507 var start = min(max(pos, 0), len);
1508 var searchLength = searchStr.length;
1509 if (searchLength + start > len) return false;
1510 if (s.substring(start, start + searchLength) === searchStr) return true;
1511 return false;
1512 });
1513
1514 // 21.1.3.19 String.prototype.substring ( start, end )
1515 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
1516 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
1517 // 21.1.3.22 String.prototype.toLowerCase ( )
1518 // 21.1.3.23 String.prototype.toString ( )
1519 // 21.1.3.24 String.prototype.toUpperCase ( )
1520 // 21.1.3.25 String.prototype.trim ( )
1521 // 21.1.3.26 String.prototype.valueOf ( )
1522
1523 // 21.1.3.27 String.prototype [ @@iterator ]( )
1524 define(
1525 String.prototype, $$iterator,
1526 function entries() {
1527 return CreateStringIterator(this, 'value');
1528 });
1529
1530 // 21.1.4 Properties of String Instances
1531 // 21.1.4.1 length
1532
1533 // 21.1.5 String Iterator Objects
1534 /** @constructor */
1535 function StringIterator() {}
1536
1537 // 21.1.5.1 CreateStringIterator Abstract Operation
1538 function CreateStringIterator(string, kind) {
1539 var s = String(string);
1540 var iterator = new StringIterator;
1541 set_internal(iterator, '[[IteratedString]]', s);
1542 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
1543 set_internal(iterator, '[[StringIterationKind]]', kind);
1544 return iterator;
1545 }
1546
1547 // 21.1.5.2 The %StringIteratorPrototype% Object
1548 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
1549 StringIterator.prototype = $StringIteratorPrototype$;
1550
1551 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
1552 define(
1553 $StringIteratorPrototype$, 'next',
1554 function next() {
1555 var o = ToObject(this);
1556 var s = String(o['[[IteratedString]]']),
1557 index = o['[[StringIteratorNextIndex]]'],
1558 len = s.length;
1559 if (index >= len) {
1560 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
1561 return CreateIterResultObject(undefined, true);
1562 }
1563 var cp = s.codePointAt(index);
1564 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
1565 return CreateIterResultObject(String.fromCodePoint(cp), false);
1566 });
1567
1568 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
1569 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
1570
1571 // 21.1.5.3 Properties of String Iterator Instances
1572
1573 // ---------------------------------------
1574 // 21.2 RegExp (Regular Expression) Objects
1575 // ---------------------------------------
1576
1577 // 21.2.1 Patterns
1578 // 21.2.2 Pattern Semantics
1579 // 21.2.2.1 Notation
1580 // 21.2.2.2 Pattern
1581 // 21.2.2.3 Disjunction
1582 // 21.2.2.4 Alternative
1583 // 21.2.2.5 Term
1584 // 21.2.2.6 Assertion
1585 // 21.2.2.7 Quantifier
1586 // 21.2.2.8 Atom
1587 // 21.2.2.9 AtomEscape
1588 // 21.2.2.10 CharacterEscape
1589 // 21.2.2.11 DecimalEscape
1590 // 21.2.2.12 CharacterClassEscape
1591 // 21.2.2.13 CharacterClass
1592 // 21.2.2.14 ClassRanges
1593 // 21.2.2.15 NonemptyClassRanges
1594 // 21.2.2.16 NonemptyClassRangesNoDash
1595 // 21.2.2.17 ClassAtom
1596 // 21.2.2.18 ClassAtomNoDash
1597 // 21.2.2.19 ClassEscape
1598 // 21.2.3 The RegExp Constructor
1599 // 21.2.3.1 RegExp ( pattern, flags )
1600 // 21.2.3.2 new RegExp( ...argumentsList )
1601 // 21.2.3.3 Abstract Operations for the RegExp Constructor
1602 // 21.2.4 Properties of the RegExp Constructor
1603 // 21.2.4.1 RegExp.prototype
1604 // 21.2.5 Properties of the RegExp Prototype Object
1605 // 21.2.5.1 RegExp.prototype.constructor
1606 // 21.2.5.2 RegExp.prototype.exec ( string )
1607
1608 // 21.2.5.3 get RegExp.prototype.flags
1609 if (!('flags' in RegExp.prototype)) {
1610 Object.defineProperty(
1611 RegExp.prototype, 'flags', {
1612 get: function() {
1613 var s = String(this);
1614 return s.substring(s.lastIndexOf('/') + 1);
1615 }
1616 });
1617 }
1618
1619 // 21.2.5.4 get RegExp.prototype.global
1620 // 21.2.5.5 get RegExp.prototype.ignoreCase
1621
1622 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
1623 define(RegExp.prototype, $$match, function(string) {
1624 var o = strict(this);
1625 return orig_match.call(string, o);
1626 });
1627
1628 // 21.2.5.7 get RegExp.prototype.multiline
1629
1630 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
1631 define(RegExp.prototype, $$replace, function(string, replaceValue) {
1632 var o = strict(this);
1633 return orig_replace.call(string, o, replaceValue);
1634 });
1635
1636 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
1637 define(RegExp.prototype, $$search, function(string) {
1638 var o = strict(this);
1639 return orig_search.call(string, o);
1640 });
1641
1642 // 21.2.5.10 get RegExp.prototype.source
1643
1644 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
1645 define(RegExp.prototype, $$split, function(string, limit) {
1646 var o = strict(this);
1647 return orig_split.call(string, o, limit);
1648 });
1649
1650 // 21.2.5.12 get RegExp.prototype.sticky
1651 // 21.2.5.13 RegExp.prototype.test( S )
1652 // 21.2.5.14 RegExp.prototype.toString ( )
1653 // 21.2.5.15 get RegExp.prototype.unicode
1654
1655 // 21.2.6 Properties of RegExp Instances
1656 // 21.2.6.1 lastIndex
1657
1658 // (No polyfillable changes from ES5)
1659
1660 // ---------------------------------------
1661 // 22 Indexed Collections
1662 // ---------------------------------------
1663
1664 // ---------------------------------------
1665 // 22.1 Array Objects
1666 // ---------------------------------------
1667
1668 // 22.1.1 The Array Constructor
1669 // 22.1.1.1 Array ( )
1670 // 22.1.1.2 Array (len)
1671 // 22.1.1.3 Array (...items )
1672
1673 // 22.1.2 Properties of the Array Constructor
1674
1675 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
1676 define(
1677 Array, 'from',
1678 function from(items) {
1679 var mapfn = arguments[1];
1680 var thisArg = arguments[2];
1681
1682 var c = strict(this);
1683 if (mapfn === undefined) {
1684 var mapping = false;
1685 } else {
1686 if (!IsCallable(mapfn)) throw TypeError();
1687 var t = thisArg;
1688 mapping = true;
1689 }
1690 var usingIterator = GetMethod(items, $$iterator);
1691 if (usingIterator !== undefined) {
1692 if (IsConstructor(c)) {
1693 var a = new c();
1694 } else {
1695 a = new Array(0);
1696 }
1697 var iterator = GetIterator(items, usingIterator);
1698 var k = 0;
1699 while (true) {
1700 var next = IteratorStep(iterator);
1701 if (next === false) {
1702 a.length = k;
1703 return a;
1704 }
1705 var nextValue = IteratorValue(next);
1706 if (mapping)
1707 var mappedValue = mapfn.call(t, nextValue);
1708 else
1709 mappedValue = nextValue;
1710 a[k] = mappedValue;
1711 k += 1;
1712 }
1713 }
1714 var arrayLike = ToObject(items);
1715 var lenValue = arrayLike.length;
1716 var len = ToLength(lenValue);
1717 if (IsConstructor(c)) {
1718 a = new c(len);
1719 } else {
1720 a = new Array(len);
1721 }
1722 k = 0;
1723 while (k < len) {
1724 var kValue = arrayLike[k];
1725 if (mapping)
1726 mappedValue = mapfn.call(t, kValue, k);
1727 else
1728 mappedValue = kValue;
1729 a[k] = mappedValue;
1730 k += 1;
1731 }
1732 a.length = len;
1733 return a;
1734 });
1735
1736 // 22.1.2.2 Array.isArray ( arg )
1737
1738 // 22.1.2.3 Array.of ( ...items )
1739 define(
1740 Array, 'of',
1741 function of() {
1742 var items = arguments;
1743
1744 var lenValue = items.length;
1745 var len = ToUint32(lenValue);
1746 var c = strict(this), a;
1747 if (IsConstructor(c)) {
1748 a = new c(len);
1749 a = ToObject(a);
1750 } else {
1751 a = new Array(len);
1752 }
1753 var k = 0;
1754 while (k < len) {
1755 a[k] = items[k];
1756 k += 1;
1757 }
1758 a.length = len;
1759 return a;
1760 });
1761
1762 // 22.1.2.4 Array.prototype
1763 // 22.1.2.5 get Array [ @@species ]
1764 // 22.1.3 Properties of the Array Prototype Object
1765 // 22.1.3.1 Array.prototype.concat ( ...arguments )
1766 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
1767 // 22.1.3.2 Array.prototype.constructor
1768 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
1769 define(
1770 Array.prototype, 'copyWithin',
1771 function copyWithin(target, start/*, end*/) {
1772 var end = arguments[2];
1773
1774 var o = ToObject(this);
1775 var lenVal = o.length;
1776 var len = ToLength(lenVal);
1777 len = max(len, 0);
1778 var relativeTarget = ToInteger(target);
1779 var to;
1780 if (relativeTarget < 0)
1781 to = max(len + relativeTarget, 0);
1782 else
1783 to = min(relativeTarget, len);
1784 var relativeStart = ToInteger(start);
1785 var from;
1786 if (relativeStart < 0)
1787 from = max(len + relativeStart, 0);
1788 else
1789 from = min(relativeStart, len);
1790 var relativeEnd;
1791 if (end === undefined)
1792 relativeEnd = len;
1793 else
1794 relativeEnd = ToInteger(end);
1795 var final;
1796 if (relativeEnd < 0)
1797 final = max(len + relativeEnd, 0);
1798 else
1799 final = min(relativeEnd, len);
1800 var count = min(final - from, len - to);
1801 var direction;
1802 if (from < to && to < from + count) {
1803 direction = -1;
1804 from = from + count - 1;
1805 to = to + count - 1;
1806 } else {
1807 direction = 1;
1808 }
1809 while (count > 0) {
1810 var fromKey = String(from);
1811 var toKey = String(to);
1812 var fromPresent = HasProperty(o, fromKey);
1813 if (fromPresent) {
1814 var fromVal = o[fromKey];
1815 o[toKey] = fromVal;
1816 } else {
1817 delete o[toKey];
1818 }
1819 from = from + direction;
1820 to = to + direction;
1821 count = count - 1;
1822 }
1823 return o;
1824 });
1825
1826 // 22.1.3.4 Array.prototype.entries ( )
1827 var nativeArrayIteratorMethods =
1828 ('entries' in Array.prototype && 'next' in [].entries());
1829
1830 define(
1831 Array.prototype, 'entries',
1832 function entries() {
1833 return CreateArrayIterator(this, 'key+value');
1834 }, !nativeArrayIteratorMethods);
1835
1836 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
1837
1838 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
1839 define(
1840 Array.prototype, 'fill',
1841 function fill(value/*, start, end*/) {
1842 var start = arguments[1],
1843 end = arguments[2];
1844
1845 var o = ToObject(this);
1846 var lenVal = o.length;
1847 var len = ToLength(lenVal);
1848 len = max(len, 0);
1849 var relativeStart = ToInteger(start);
1850 var k;
1851 if (relativeStart < 0)
1852 k = max((len + relativeStart), 0);
1853 else
1854 k = min(relativeStart, len);
1855 var relativeEnd;
1856 if (end === undefined)
1857 relativeEnd = len;
1858 else
1859 relativeEnd = ToInteger(end);
1860 var final;
1861 if (relativeEnd < 0)
1862 final = max((len + relativeEnd), 0);
1863 else
1864 final = min(relativeEnd, len);
1865 while (k < final) {
1866 var pk = String(k);
1867 o[pk] = value;
1868 k += 1;
1869 }
1870 return o;
1871 });
1872
1873 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
1874
1875 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
1876 define(
1877 Array.prototype, 'find',
1878 function find(predicate) {
1879 var o = ToObject(this);
1880 var lenValue = o.length;
1881 var len = ToInteger(lenValue);
1882 if (!IsCallable(predicate)) throw TypeError();
1883 var t = arguments.length > 1 ? arguments[1] : undefined;
1884 var k = 0;
1885 while (k < len) {
1886 var pk = String(k);
1887 var kPresent = HasProperty(o, pk);
1888 if (kPresent) {
1889 var kValue = o[pk];
1890 var testResult = predicate.call(t, kValue, k, o);
1891 if (Boolean(testResult)) {
1892 return kValue;
1893 }
1894 }
1895 ++k;
1896 }
1897 return undefined;
1898 });
1899
1900 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
1901 define(
1902 Array.prototype, 'findIndex',
1903 function findIndex(predicate) {
1904 var o = ToObject(this);
1905 var lenValue = o.length;
1906 var len = ToLength(lenValue);
1907 if (!IsCallable(predicate)) throw TypeError();
1908 var t = arguments.length > 1 ? arguments[1] : undefined;
1909 var k = 0;
1910 while (k < len) {
1911 var pk = String(k);
1912 var kPresent = HasProperty(o, pk);
1913 if (kPresent) {
1914 var kValue = o[pk];
1915 var testResult = predicate.call(t, kValue, k, o);
1916 if (Boolean(testResult)) {
1917 return k;
1918 }
1919 }
1920 ++k;
1921 }
1922 return -1;
1923 });
1924
1925 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
1926 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
1927 // 22.1.3.12 Array.prototype.join (separator)
1928
1929 // 22.1.3.13 Array.prototype.keys ( )
1930 define(
1931 Array.prototype, 'keys',
1932 function keys() {
1933 return CreateArrayIterator(this, 'key');
1934 }, !nativeArrayIteratorMethods);
1935
1936 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
1937 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
1938 // 22.1.3.16 Array.prototype.pop ( )
1939 // 22.1.3.17 Array.prototype.push ( ...items )
1940 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
1941 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
1942 // 22.1.3.20 Array.prototype.reverse ( )
1943 // 22.1.3.21 Array.prototype.shift ( )
1944 // 22.1.3.22 Array.prototype.slice (start, end)
1945 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
1946 // 22.1.3.24 Array.prototype.sort (comparefn)
1947 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
1948 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1949 // 22.1.3.27 Array.prototype.toString ( )
1950 // 22.1.3.28 Array.prototype.unshift ( ...items )
1951
1952 // 22.1.3.29 Array.prototype.values ( )
1953 define(
1954 Array.prototype, 'values',
1955 function values() {
1956 return CreateArrayIterator(this, 'value');
1957 }, !nativeArrayIteratorMethods);
1958
1959 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
1960 define(
1961 Array.prototype, $$iterator,
1962 Array.prototype.values
1963 );
1964
1965 // 22.1.3.31 Array.prototype [ @@unscopables ]
1966 // 22.1.4 Properties of Array Instances
1967 // 22.1.4.1 length
1968
1969 // 22.1.5 Array Iterator Objects
1970 function ArrayIterator() {}
1971
1972 // 22.1.5.1 CreateArrayIterator Abstract Operation
1973 function CreateArrayIterator(array, kind) {
1974 var o = ToObject(array);
1975 var iterator = new ArrayIterator;
1976 set_internal(iterator, '[[IteratedObject]]', o);
1977 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
1978 set_internal(iterator, '[[ArrayIterationKind]]', kind);
1979 return iterator;
1980 }
1981
1982 // 22.1.5.2 The %ArrayIteratorPrototype% Object
1983 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
1984 ArrayIterator.prototype = $ArrayIteratorPrototype$;
1985
1986 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
1987 define(
1988 $ArrayIteratorPrototype$, 'next',
1989 function next() {
1990 var o = strict(this);
1991 if (Type(o) !== 'object') throw TypeError();
1992 var a = o['[[IteratedObject]]'],
1993 index = o['[[ArrayIteratorNextIndex]]'],
1994 itemKind = o['[[ArrayIterationKind]]'],
1995 lenValue = a.length,
1996 len = ToUint32(lenValue),
1997 elementKey,
1998 elementValue;
1999 if (itemKind.indexOf('sparse') !== -1) {
2000 var found = false;
2001 while (!found && index < len) {
2002 elementKey = String(index);
2003 found = HasProperty(a, elementKey);
2004 if (!found) {
2005 index += 1;
2006 }
2007 }
2008 }
2009 if (index >= len) {
2010 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2011 return CreateIterResultObject(undefined, true);
2012 }
2013 elementKey = index;
2014 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2015 if (itemKind.indexOf('value') !== -1)
2016 elementValue = a[elementKey];
2017 if (itemKind.indexOf('key+value') !== -1)
2018 return CreateIterResultObject([elementKey, elementValue], false);
2019 if (itemKind.indexOf('key') !== -1)
2020 return CreateIterResultObject(elementKey, false);
2021 if (itemKind === 'value')
2022 return CreateIterResultObject(elementValue, false);
2023 throw Error('Internal error');
2024 });
2025
2026 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2027 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2028
2029 // 22.1.5.3 Properties of Array Iterator Instances
2030
2031
2032 // ---------------------------------------
2033 // 22.2 TypedArray Objects
2034 // ---------------------------------------
2035
2036 // See typedarray.js for TypedArray polyfill
2037
2038 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2039 'Int16Array', 'Uint16Array',
2040 'Int32Array', 'Uint32Array',
2041 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2042 if (!($TypedArrayName$ in global))
2043 return;
2044 var $TypedArray$ = global[$TypedArrayName$];
2045
2046 // 22.2.1 The %TypedArray% Intrinsic Object
2047 // 22.2.1.1 %TypedArray% ( length )
2048 // 22.2.1.2 %TypedArray% ( typedArray )
2049 // 22.2.1.3 %TypedArray% ( object )
2050 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2051 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2052 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2053
2054 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2055 define(
2056 $TypedArray$, 'from',
2057 function from(source) {
2058 var mapfn = arguments[1];
2059 var thisArg = arguments[2];
2060
2061 var c = strict(this);
2062 if (!IsConstructor(c)) throw TypeError();
2063 if (mapfn === undefined) {
2064 var mapping = false;
2065 } else {
2066 if (IsCallable(mapfn)) throw TypeError();
2067 var t = thisArg;
2068 mapping = true;
2069 }
2070 var usingIterator = GetMethod(source, $$iterator);
2071 if (usingIterator !== undefined) {
2072 var iterator = GetIterator(source, usingIterator);
2073 var values = [];
2074 var next = true;
2075 while (next !== false) {
2076 next = IteratorStep(iterator);
2077 if (next !== false) {
2078 var nextValue = IteratorValue(next);
2079 values.push(nextValue);
2080 }
2081 }
2082 var len = values.length;
2083 var newObj = new c(len);
2084 var k = 0;
2085 while (k < len) {
2086 var kValue = values.shift();
2087 if (mapping) {
2088 var mappedValue = mapfn.call(t, kValue);
2089 } else {
2090 mappedValue = kValue;
2091 }
2092 newObj[k] = mappedValue;
2093 ++k;
2094 }
2095 console.assert(values.length === 0);
2096 return newObj;
2097 }
2098 var arrayLike = ToObject(source);
2099 var lenValue = arrayLike.length;
2100 len = ToLength(lenValue);
2101 newObj = new c(len);
2102 k = 0;
2103 while (k < len) {
2104 kValue = arrayLike[k];
2105 if (mapping) {
2106 mappedValue = mapfn.call(t, kValue, k);
2107 } else {
2108 mappedValue = kValue;
2109 }
2110 newObj[k] = mappedValue;
2111 ++k;
2112 }
2113 return newObj;
2114 });
2115
2116 // 22.2.2.2 %TypedArray%.of ( ...items )
2117 define(
2118 $TypedArray$, 'of',
2119 function of() {
2120 var items = arguments;
2121
2122 var len = items.length;
2123 var c = strict(this);
2124 var newObj = new c(len);
2125 var k = 0;
2126 while (k < len) {
2127 newObj[k] = items[k];
2128 ++k;
2129 }
2130 return newObj;
2131 });
2132
2133 // 22.2.2.3 %TypedArray%.prototype
2134 // 22.2.2.4 get %TypedArray% [ @@species ]
2135 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2136 // 22.2.3.1 get %TypedArray%.prototype.buffer
2137 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2138 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2139 // 22.2.3.4 %TypedArray%.prototype.constructor
2140
2141 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2142 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2143
2144 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2145 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2146
2147 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2148 define($TypedArray$.prototype, 'every', Array.prototype.every);
2149
2150 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2151 define(
2152 $TypedArray$.prototype, 'fill',
2153 //Array.prototype.fill // Doesn't work in Safari 7
2154 function fill(value/*, start, end*/) {
2155 var start = arguments[1],
2156 end = arguments[2];
2157
2158 var o = ToObject(this);
2159 var lenVal = o.length;
2160 var len = ToLength(lenVal);
2161 len = max(len, 0);
2162 var relativeStart = ToInteger(start);
2163 var k;
2164 if (relativeStart < 0) k = max((len + relativeStart), 0);
2165 else k = min(relativeStart, len);
2166 var relativeEnd;
2167 if (end === undefined) relativeEnd = len;
2168 else relativeEnd = ToInteger(end);
2169 var final;
2170 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2171 else final = min(relativeEnd, len);
2172 while (k < final) {
2173 var pk = String(k);
2174 o[pk] = value;
2175 k += 1;
2176 }
2177 return o;
2178 });
2179
2180 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2181 define(
2182 $TypedArray$.prototype, 'filter',
2183 function filter(callbackfn) {
2184 var thisArg = arguments[1];
2185
2186 var o = ToObject(this);
2187 var lenVal = o.length;
2188 var len = ToLength(lenVal);
2189 if (!IsCallable(callbackfn)) throw TypeError();
2190 var t = thisArg;
2191 var c = o.constructor;
2192 var kept = [];
2193 var k = 0;
2194 var captured = 0;
2195 while (k < len) {
2196 var kValue = o[k];
2197 var selected = callbackfn.call(t, kValue, k, o);
2198 if (selected) {
2199 kept.push(kValue);
2200 ++captured;
2201 }
2202 ++k;
2203 }
2204 var a = new c(captured);
2205 var n = 0;
2206 for (var i = 0; i < kept.length; ++i) {
2207 var e = kept[i];
2208 a[n] = e;
2209 ++n;
2210 }
2211 return a;
2212 });
2213
2214 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2215 define($TypedArray$.prototype, 'find', Array.prototype.find);
2216
2217 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2218 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2219
2220 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2221 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2222
2223 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2224 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2225
2226 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2227 define($TypedArray$.prototype, 'join', Array.prototype.join);
2228
2229 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2230 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2231
2232 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2233 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2234
2235 // 22.2.3.17 get %TypedArray%.prototype.length
2236
2237 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2238 define(
2239 $TypedArray$.prototype, 'map',
2240 function map(callbackfn) {
2241 var thisArg = arguments[1];
2242
2243 var o = ToObject(this);
2244 var lenValue = o.length;
2245 var len = ToLength(lenValue);
2246 if (!IsCallable(callbackfn)) throw TypeError();
2247 var t = thisArg;
2248 var a = undefined;
2249 var c = o.constructor;
2250 if (IsConstructor(c))
2251 a = new c(len);
2252 if (a === undefined)
2253 a = new Array(len);
2254 var k = 0;
2255 while (k < len) {
2256 var kPresent = HasProperty(o, k);
2257 if (kPresent) {
2258 var kValue = o[k];
2259 var mappedValue = callbackfn.call(t, kValue, k, o);
2260 a[k] = mappedValue;
2261 }
2262 ++k;
2263 }
2264 return a;
2265 });
2266
2267 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2268 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2269
2270 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2271 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2272
2273 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2274 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2275
2276 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2277 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2278 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2279
2280 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2281 define(
2282 $TypedArray$.prototype, 'slice',
2283 function slice(start, end) {
2284 var o = ToObject(this);
2285 var lenVal = o.length;
2286 var len = ToLength(lenVal);
2287 var relativeStart = ToInteger(start);
2288 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2289 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2290 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2291 var count = final - k;
2292 var c = o.constructor;
2293 if (IsConstructor(c)) {
2294 var a = new c(count);
2295 } else {
2296 throw TypeError();
2297 }
2298 var n = 0;
2299 while (k < final) {
2300 var kValue = o[k];
2301 a[n] = kValue;
2302 ++k;
2303 ++n;
2304 }
2305 return a;
2306 });
2307
2308 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2309 define($TypedArray$.prototype, 'some', Array.prototype.some);
2310
2311 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2312 define(
2313 $TypedArray$.prototype, 'sort',
2314 function sort() {
2315 var comparefn = arguments[0];
2316
2317 function sortCompare(x, y) {
2318 console.assert(Type(x) === 'number' && Type(y) === 'number');
2319 if (x !== x && y !== y) return +0;
2320 if (x !== x) return 1;
2321 if (y !== y) return -1;
2322 if (comparefn !== undefined) {
2323 return comparefn(x, y);
2324 }
2325 if (x < y) return -1;
2326 if (x > y) return 1;
2327 return +0;
2328 }
2329 return Array.prototype.sort.call(this, sortCompare);
2330 });
2331
2332 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
2333 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
2334 // 22.2.3.28 %TypedArray%.prototype.toString ( )
2335
2336 // 22.2.3.29 %TypedArray%.prototype.values ( )
2337 define($TypedArray$.prototype, 'values', Array.prototype.values);
2338
2339 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
2340 define(
2341 $TypedArray$.prototype, $$iterator,
2342 $TypedArray$.prototype.values
2343 );
2344
2345 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
2346 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
2347
2348 // 22.2.4 The TypedArray Constructors
2349 // 22.2.4.1TypedArray( ... argumentsList)
2350 // 22.2.5 Properties of the TypedArray Constructors
2351 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
2352 // 22.2.5.2 TypedArray.prototype
2353 // 22.2.6 Properties of TypedArray Prototype Objects
2354 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
2355 // 22.2.6.2 TypedArray.prototype.constructor
2356 // 22.2.7 Properties of TypedArray Instances
2357 });
2358
2359 // ---------------------------------------
2360 // 23 Keyed Collection
2361 // ---------------------------------------
2362
2363 // ---------------------------------------
2364 // 23.1 Map Objects
2365 // ---------------------------------------
2366
2367 (function() {
2368 // 23.1.1 The Map Constructor
2369
2370 // 23.1.1.1 Map ( [ iterable ] )
2371 /** @constructor */
2372 function Map(/*iterable*/) {
2373 var map = strict(this);
2374 var iterable = arguments[0];
2375
2376 if (Type(map) !== 'object') throw TypeError();
2377 if ('[[MapData]]' in map) throw TypeError();
2378
2379 if (iterable !== undefined) {
2380 var adder = map['set'];
2381 if (!IsCallable(adder)) throw TypeError();
2382 var iter = GetIterator(ToObject(iterable));
2383 }
2384 set_internal(map, '[[MapData]]', { keys: [], values: [] });
2385 if (iter === undefined) return map;
2386 while (true) {
2387 var next = IteratorStep(iter);
2388 if (next === false)
2389 return map;
2390 var nextItem = IteratorValue(next);
2391 if (Type(nextItem) !== 'object') throw TypeError();
2392 var k = nextItem[0];
2393 var v = nextItem[1];
2394 adder.call(map, k, v);
2395 }
2396
2397 return map;
2398 }
2399
2400 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
2401 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
2402 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
2403 (new global.Map([['a', 1]]).size !== 1))
2404 global.Map = Map;
2405
2406
2407 function MapDataIndexOf(mapData, key) {
2408 var i;
2409 if (key === key) return mapData.keys.indexOf(key);
2410 // Slow case for NaN
2411 for (i = 0; i < mapData.keys.length; i += 1)
2412 if (SameValueZero(mapData.keys[i], key)) return i;
2413 return -1;
2414 }
2415
2416 // 23.1.1.2 new Map ( ... argumentsList )
2417 // 23.1.2 Properties of the Map Constructor
2418 // 23.1.2.1 Map.prototype
2419 var $MapPrototype$ = {};
2420 Map.prototype = $MapPrototype$;
2421
2422 // 23.1.2.2 get Map [ @@species ]
2423
2424 // 23.1.3 Properties of the Map Prototype Object
2425 // 23.1.3.1 Map.prototype.clear ()
2426 define(
2427 Map.prototype, 'clear',
2428 function clear() {
2429 var m = strict(this);
2430 if (Type(m) !== 'object') throw TypeError();
2431 if (!('[[MapData]]' in m)) throw TypeError();
2432 if (m['[[MapData]]'] === undefined) throw TypeError();
2433 var entries = m['[[MapData]]'];
2434 entries.keys.length = 0;
2435 entries.values.length = 0;
2436 return undefined;
2437 });
2438
2439 // 23.1.3.2 Map.prototype.constructor
2440
2441 // 23.1.3.3 Map.prototype.delete ( key )
2442 define(
2443 Map.prototype, 'delete',
2444 function delete_(key) {
2445 var m = strict(this);
2446 if (Type(m) !== 'object') throw TypeError();
2447 if (!('[[MapData]]' in m)) throw TypeError();
2448 if (m['[[MapData]]'] === undefined) throw TypeError();
2449 var entries = m['[[MapData]]'];
2450 var i = MapDataIndexOf(entries, key);
2451 if (i < 0) return false;
2452 entries.keys[i] = empty;
2453 entries.values[i] = empty;
2454 return true;
2455 });
2456
2457 // 23.1.3.4 Map.prototype.entries ( )
2458 define(
2459 Map.prototype, 'entries',
2460 function entries() {
2461 var m = strict(this);
2462 if (Type(m) !== 'object') throw TypeError();
2463 return CreateMapIterator(m, 'key+value');
2464 });
2465
2466 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
2467 define(
2468 Map.prototype, 'forEach',
2469 function forEach(callbackfn /*, thisArg*/) {
2470 var thisArg = arguments[1];
2471
2472 var m = strict(this);
2473 if (Type(m) !== 'object') throw TypeError();
2474 if (!('[[MapData]]' in m)) throw TypeError();
2475 if (m['[[MapData]]'] === undefined) throw TypeError();
2476 var entries = m['[[MapData]]'];
2477
2478 if (!IsCallable(callbackfn)) {
2479 throw TypeError('First argument to forEach is not callable.');
2480 }
2481 for (var i = 0; i < entries.keys.length; ++i) {
2482 if (entries.keys[i] !== empty) {
2483 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
2484 }
2485 }
2486 return undefined;
2487 });
2488
2489 // 23.1.3.6 Map.prototype.get ( key )
2490 define(
2491 Map.prototype, 'get',
2492 function get(key) {
2493 var m = strict(this);
2494 if (Type(m) !== 'object') throw TypeError();
2495 if (!('[[MapData]]' in m)) throw TypeError();
2496 if (m['[[MapData]]'] === undefined) throw TypeError();
2497 var entries = m['[[MapData]]'];
2498 var i = MapDataIndexOf(entries, key);
2499 if (i >= 0) return entries.values[i];
2500 return undefined;
2501 });
2502
2503 // 23.1.3.7 Map.prototype.has ( key )
2504 define(
2505 Map.prototype, 'has',
2506 function has(key) {
2507 var m = strict(this);
2508 if (Type(m) !== 'object') throw TypeError();
2509 if (!('[[MapData]]' in m)) throw TypeError();
2510 if (m['[[MapData]]'] === undefined) throw TypeError();
2511 var entries = m['[[MapData]]'];
2512 if (MapDataIndexOf(entries, key) >= 0) return true;
2513 return false;
2514 });
2515
2516 // 23.1.3.8 Map.prototype.keys ( )
2517 define(
2518 Map.prototype, 'keys',
2519 function keys() {
2520 var m = strict(this);
2521 if (Type(m) !== 'object') throw TypeError();
2522 return CreateMapIterator(m, 'key');
2523 });
2524
2525 // 23.1.3.9 Map.prototype.set ( key , value )
2526 define(
2527 Map.prototype, 'set',
2528 function set(key, value) {
2529 var m = strict(this);
2530 if (Type(m) !== 'object') throw TypeError();
2531 if (!('[[MapData]]' in m)) throw TypeError();
2532 if (m['[[MapData]]'] === undefined) throw TypeError();
2533 var entries = m['[[MapData]]'];
2534 var i = MapDataIndexOf(entries, key);
2535 if (i < 0) i = entries.keys.length;
2536 if (SameValue(key, -0)) key = 0;
2537 entries.keys[i] = key;
2538 entries.values[i] = value;
2539 return m;
2540 });
2541
2542 // 23.1.3.10 get Map.prototype.size
2543 Object.defineProperty(
2544 Map.prototype, 'size', {
2545 get: function() {
2546 var m = strict(this);
2547 if (Type(m) !== 'object') throw TypeError();
2548 if (!('[[MapData]]' in m)) throw TypeError();
2549 if (m['[[MapData]]'] === undefined) throw TypeError();
2550 var entries = m['[[MapData]]'];
2551 var count = 0;
2552 for (var i = 0; i < entries.keys.length; ++i) {
2553 if (entries.keys[i] !== empty)
2554 count = count + 1;
2555 }
2556 return count;
2557 }
2558 });
2559
2560 // 23.1.3.11 Map.prototype.values ( )
2561 define(
2562 Map.prototype, 'values',
2563 function values() {
2564 var m = strict(this);
2565 if (Type(m) !== 'object') throw TypeError();
2566 return CreateMapIterator(m, 'value');
2567 });
2568
2569 // 23.1.3.12 Map.prototype [ @@iterator ]( )
2570 define(
2571 Map.prototype, $$iterator,
2572 function() {
2573 var m = strict(this);
2574 if (Type(m) !== 'object') throw TypeError();
2575 return CreateMapIterator(m, 'key+value');
2576 });
2577
2578 // 23.1.3.13 Map.prototype [ @@toStringTag ]
2579 define(global.Map.prototype, $$toStringTag, 'Map');
2580
2581 // 23.1.4 Properties of Map Instances
2582 // 23.1.5 Map Iterator Objects
2583
2584 /** @constructor */
2585 function MapIterator() {}
2586
2587 // 23.1.5.1 CreateMapIterator Abstract Operation
2588 function CreateMapIterator(map, kind) {
2589 if (Type(map) !== 'object') throw TypeError();
2590 if (!('[[MapData]]' in map)) throw TypeError();
2591 if (map['[[MapData]]'] === undefined) throw TypeError();
2592 var iterator = new MapIterator;
2593 set_internal(iterator, '[[Map]]', map);
2594 set_internal(iterator, '[[MapNextIndex]]', 0);
2595 set_internal(iterator, '[[MapIterationKind]]', kind);
2596 return iterator;
2597 }
2598
2599 // 23.1.5.2 The %MapIteratorPrototype% Object
2600 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
2601 MapIterator.prototype = $MapIteratorPrototype$;
2602
2603 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
2604 define(
2605 $MapIteratorPrototype$, 'next',
2606 function next() {
2607 var o = strict(this);
2608 if (Type(o) !== 'object') throw TypeError();
2609 var m = o['[[Map]]'],
2610 index = o['[[MapNextIndex]]'],
2611 itemKind = o['[[MapIterationKind]]'],
2612 entries = m['[[MapData]]'];
2613 while (index < entries.keys.length) {
2614 var e = {key: entries.keys[index], value: entries.values[index]};
2615 index = index += 1;
2616 set_internal(o, '[[MapNextIndex]]', index);
2617 if (e.key !== empty) {
2618 if (itemKind === 'key') {
2619 return CreateIterResultObject(e.key, false);
2620 } else if (itemKind === 'value') {
2621 return CreateIterResultObject(e.value, false);
2622 } else {
2623 return CreateIterResultObject([e.key, e.value], false);
2624 }
2625 }
2626 }
2627 return CreateIterResultObject(undefined, true);
2628 });
2629
2630 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
2631 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
2632
2633 // 23.1.5.3 Properties of Map Iterator Instances
2634 }());
2635
2636 // ---------------------------------------
2637 // 23.2 Set Objects
2638 // ---------------------------------------
2639
2640 (function() {
2641 // 23.2.1 The Set Constructor
2642 // 23.2.1.1 Set ( [ iterable ] )
2643
2644 /** @constructor */
2645 function Set(/*iterable*/) {
2646 var set = strict(this);
2647 var iterable = arguments[0];
2648
2649 if (Type(set) !== 'object') throw TypeError();
2650 if ('[[SetData]]' in set) throw TypeError();
2651
2652 if (iterable !== undefined) {
2653 var adder = set['add'];
2654 if (!IsCallable(adder)) throw TypeError();
2655 var iter = GetIterator(ToObject(iterable));
2656 }
2657 set_internal(set, '[[SetData]]', []);
2658 if (iter === undefined) return set;
2659 while (true) {
2660 var next = IteratorStep(iter);
2661 if (next === false)
2662 return set;
2663 var nextValue = IteratorValue(next);
2664 adder.call(set, nextValue);
2665 }
2666
2667 return set;
2668 }
2669
2670 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
2671 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
2672 (new global.Set([1]).size !== 1))
2673 global.Set = Set;
2674
2675 function SetDataIndexOf(setData, key) {
2676 var i;
2677 if (key === key)
2678 return setData.indexOf(key);
2679 // Slow case for NaN
2680 for (i = 0; i < setData.length; i += 1)
2681 if (SameValueZero(setData[i], key)) return i;
2682 return -1;
2683 }
2684
2685 // 23.2.1.2 new Set ( ...argumentsList )
2686 // 23.2.2 Properties of the Set Constructor
2687
2688 // 23.2.2.1 Set.prototype
2689 var $SetPrototype$ = {};
2690 Set.prototype = $SetPrototype$;
2691
2692 // 23.2.2.2 get Set [ @@species ]
2693 // 23.2.3 Properties of the Set Prototype Object
2694
2695 // 23.2.3.1 Set.prototype.add (value )
2696 define(
2697 Set.prototype, 'add',
2698 function add(value) {
2699 var s = strict(this);
2700 if (Type(s) !== 'object') throw TypeError();
2701 if (!('[[SetData]]' in s)) throw TypeError();
2702 if (s['[[SetData]]'] === undefined) throw TypeError();
2703 if (SameValue(value, -0)) value = 0;
2704 var entries = s['[[SetData]]'];
2705 var i = SetDataIndexOf(entries, value);
2706 if (i < 0) i = s['[[SetData]]'].length;
2707 s['[[SetData]]'][i] = value;
2708
2709 return s;
2710 });
2711
2712 // 23.2.3.2 Set.prototype.clear ()
2713 define(
2714 Set.prototype, 'clear',
2715 function clear() {
2716 var s = strict(this);
2717 if (Type(s) !== 'object') throw TypeError();
2718 if (!('[[SetData]]' in s)) throw TypeError();
2719 if (s['[[SetData]]'] === undefined) throw TypeError();
2720 var entries = s['[[SetData]]'];
2721 entries.length = 0;
2722 return undefined;
2723 });
2724
2725 // 23.2.3.3 Set.prototype.constructor
2726 // 23.2.3.4 Set.prototype.delete ( value )
2727 define(
2728 Set.prototype, 'delete',
2729 function delete_(value) {
2730 var s = strict(this);
2731 if (Type(s) !== 'object') throw TypeError();
2732 if (!('[[SetData]]' in s)) throw TypeError();
2733 if (s['[[SetData]]'] === undefined) throw TypeError();
2734 var entries = s['[[SetData]]'];
2735 var i = SetDataIndexOf(entries, value);
2736 if (i < 0) return false;
2737 entries[i] = empty;
2738 return true;
2739 });
2740
2741 // 23.2.3.5 Set.prototype.entries ( )
2742 define(
2743 Set.prototype, 'entries',
2744 function entries() {
2745 var s = strict(this);
2746 if (Type(s) !== 'object') throw TypeError();
2747 return CreateSetIterator(s, 'key+value');
2748 });
2749
2750 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
2751 define(
2752 Set.prototype, 'forEach',
2753 function forEach(callbackfn/*, thisArg*/) {
2754 var thisArg = arguments[1];
2755
2756 var s = strict(this);
2757 if (Type(s) !== 'object') throw TypeError();
2758 if (!('[[SetData]]' in s)) throw TypeError();
2759 if (s['[[SetData]]'] === undefined) throw TypeError();
2760 var entries = s['[[SetData]]'];
2761
2762 if (!IsCallable(callbackfn)) {
2763 throw TypeError('First argument to forEach is not callable.');
2764 }
2765 for (var i = 0; i < entries.length; ++i) {
2766 if (entries[i] !== empty) {
2767 callbackfn.call(thisArg, entries[i], entries[i], s);
2768 }
2769 }
2770 });
2771
2772 // 23.2.3.7 Set.prototype.has ( value )
2773 define(
2774 Set.prototype, 'has',
2775 function has(key) {
2776 var s = strict(this);
2777 if (Type(s) !== 'object') throw TypeError();
2778 if (!('[[SetData]]' in s)) throw TypeError();
2779 if (s['[[SetData]]'] === undefined) throw TypeError();
2780 var entries = s['[[SetData]]'];
2781 return SetDataIndexOf(entries, key) !== -1;
2782 });
2783
2784 // 23.2.3.8 Set.prototype.keys ( )
2785 // See Set.prototype.values
2786
2787 // 23.2.3.9 get Set.prototype.size
2788 Object.defineProperty(
2789 Set.prototype, 'size', {
2790 get: function() {
2791 var s = strict(this);
2792 if (Type(s) !== 'object') throw TypeError();
2793 if (!('[[SetData]]' in s)) throw TypeError();
2794 if (s['[[SetData]]'] === undefined) throw TypeError();
2795 var entries = s['[[SetData]]'];
2796 var count = 0;
2797 for (var i = 0; i < entries.length; ++i) {
2798 if (entries[i] !== empty)
2799 count = count + 1;
2800 }
2801 return count;
2802 }
2803 });
2804
2805 // 23.2.3.10 Set.prototype.values ( )
2806 define(
2807 Set.prototype, 'values',
2808 function values() {
2809 var s = strict(this);
2810 if (Type(s) !== 'object') throw TypeError();
2811 return CreateSetIterator(s, 'value');
2812 });
2813 // NOTE: function name is still 'values':
2814 Set.prototype.keys = Set.prototype.values;
2815
2816 // 23.2.3.11 Set.prototype [@@iterator ] ( )
2817 define(
2818 Set.prototype, $$iterator,
2819 function() {
2820 var s = strict(this);
2821 if (Type(s) !== 'object') throw TypeError();
2822 return CreateSetIterator(s);
2823 });
2824
2825 // 23.2.3.12 Set.prototype [ @@toStringTag ]
2826 define(global.Set.prototype, $$toStringTag, 'Set');
2827
2828 // 23.2.4 Properties of Set Instances
2829 // 23.2.5 Set Iterator Objects
2830 /** @constructor */
2831 function SetIterator() {}
2832
2833 // 23.2.5.1 CreateSetIterator Abstract Operation
2834 function CreateSetIterator(set, kind) {
2835 if (Type(set) !== 'object') throw TypeError();
2836 if (!('[[SetData]]' in set)) throw TypeError();
2837 if (set['[[SetData]]'] === undefined) throw TypeError();
2838 var iterator = new SetIterator;
2839 set_internal(iterator, '[[IteratedSet]]', set);
2840 set_internal(iterator, '[[SetNextIndex]]', 0);
2841 set_internal(iterator, '[[SetIterationKind]]', kind);
2842 return iterator;
2843 }
2844
2845 // 23.2.5.2 The %SetIteratorPrototype% Object
2846 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
2847 SetIterator.prototype = $SetIteratorPrototype$;
2848
2849 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
2850 define(
2851 $SetIteratorPrototype$, 'next',
2852 function next() {
2853 var o = strict(this);
2854 if (Type(o) !== 'object') throw TypeError();
2855 var s = o['[[IteratedSet]]'],
2856 index = o['[[SetNextIndex]]'],
2857 itemKind = o['[[SetIterationKind]]'],
2858 entries = s['[[SetData]]'];
2859 while (index < entries.length) {
2860 var e = entries[index];
2861 index = index += 1;
2862 set_internal(o, '[[SetNextIndex]]', index);
2863 if (e !== empty) {
2864 if (itemKind === 'key+value')
2865 return CreateIterResultObject([e, e], false);
2866 return CreateIterResultObject(e, false);
2867 }
2868 }
2869 return CreateIterResultObject(undefined, true);
2870 });
2871
2872 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
2873 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
2874
2875 // 23.2.5.3 Properties of Set Iterator Instances
2876
2877 }());
2878
2879 // ---------------------------------------
2880 // 23.3 WeakMap Objects
2881 // ---------------------------------------
2882
2883 (function() {
2884 // 23.3.1 The WeakMap Constructor
2885 // 23.3.1.1 WeakMap ( [ iterable ] )
2886 /** @constructor */
2887 function WeakMap(/*iterable*/) {
2888 var map = strict(this);
2889 var iterable = arguments[0];
2890
2891 if (Type(map) !== 'object') throw TypeError();
2892 if ('[[WeakMapData]]' in map) throw TypeError();
2893
2894 if (iterable !== undefined) {
2895 var adder = map['set'];
2896 if (!IsCallable(adder)) throw TypeError();
2897 var iter = GetIterator(ToObject(iterable));
2898 }
2899 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
2900 if (iter === undefined) return map;
2901 while (true) {
2902 var next = IteratorStep(iter);
2903 if (next === false)
2904 return map;
2905 var nextValue = IteratorValue(next);
2906 if (Type(nextValue) !== 'object') throw TypeError();
2907 var k = nextValue[0];
2908 var v = nextValue[1];
2909 adder.call(map, k, v);
2910 }
2911
2912 return map;
2913 }
2914
2915 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
2916 global.WeakMap = WeakMap;
2917
2918 // 23.3.2 Properties of the WeakMap Constructor
2919 // 23.3.2.1 WeakMap.prototype
2920 var $WeakMapPrototype$ = {};
2921 WeakMap.prototype = $WeakMapPrototype$;
2922
2923
2924
2925 // 23.3.2.2 WeakMap[ @@create ] ( )
2926 // 23.3.3 Properties of the WeakMap Prototype Object
2927
2928 // 23.3.3.1 WeakMap.prototype.constructor
2929
2930 // 23.3.3.2 WeakMap.prototype.delete ( key )
2931 define(
2932 WeakMap.prototype, 'delete',
2933 function delete_(key) {
2934 var M = strict(this);
2935 if (Type(M) !== 'object') throw TypeError();
2936 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2937 if (Type(key) !== 'object') throw TypeError('Expected object');
2938 return M['[[WeakMapData]]'].remove(key);
2939 });
2940
2941 // 23.3.3.3 WeakMap.prototype.get ( key )
2942 define(
2943 WeakMap.prototype, 'get',
2944 function get(key, defaultValue) {
2945 var M = strict(this);
2946 if (Type(M) !== 'object') throw TypeError();
2947 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2948 if (Type(key) !== 'object') throw TypeError('Expected object');
2949 return M['[[WeakMapData]]'].get(key, defaultValue);
2950 });
2951
2952 // 23.3.3.4 WeakMap.prototype.has ( key )
2953 define(
2954 WeakMap.prototype, 'has',
2955 function has(key) {
2956 var M = strict(this);
2957 if (Type(M) !== 'object') throw TypeError();
2958 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2959 if (Type(key) !== 'object') throw TypeError('Expected object');
2960 return M['[[WeakMapData]]'].has(key);
2961 });
2962
2963 // 23.3.3.5 WeakMap.prototype.set ( key , value )
2964 define(
2965 WeakMap.prototype, 'set',
2966 function set(key, value) {
2967 var M = strict(this);
2968 if (Type(M) !== 'object') throw TypeError();
2969 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
2970 if (Type(key) !== 'object') throw TypeError('Expected object');
2971 M['[[WeakMapData]]'].set(key, value);
2972 return M;
2973 });
2974
2975 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
2976 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
2977
2978 // 23.3.4 Properties of WeakMap Instances
2979
2980 // Polyfills for incomplete native implementations:
2981 (function() {
2982 var wm = new global.WeakMap();
2983 var orig = global.WeakMap.prototype.set;
2984 define(global.WeakMap.prototype, 'set', function set() {
2985 orig.apply(this, arguments);
2986 return this;
2987 }, wm.set({}, 0) !== wm);
2988 }());
2989 }());
2990
2991 // ---------------------------------------
2992 // 23.4 WeakSet Objects
2993 // ---------------------------------------
2994
2995 (function() {
2996 // 23.4.1 The WeakSet Constructor
2997 // 23.4.1.1 WeakSet ( [ iterable ] )
2998 /** @constructor */
2999 function WeakSet(/*iterable*/) {
3000 var set = strict(this);
3001 var iterable = arguments[0];
3002
3003 if (Type(set) !== 'object') throw TypeError();
3004 if ('[[WeakSetData]]' in set) throw TypeError();
3005
3006 if (iterable !== undefined) {
3007 var adder = set['add'];
3008 if (!IsCallable(adder)) throw TypeError();
3009 var iter = GetIterator(ToObject(iterable));
3010 }
3011 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3012 if (iter === undefined) return set;
3013 while (true) {
3014 var next = IteratorStep(iter);
3015 if (next === false)
3016 return set;
3017 var nextValue = IteratorValue(next);
3018 adder.call(set, nextValue);
3019 }
3020
3021 return set;
3022 }
3023
3024 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3025 global.WeakSet = WeakSet;
3026
3027 // 23.4.2 Properties of the WeakSet Constructor
3028 // 23.4.2.1 WeakSet.prototype
3029 var $WeakSetPrototype$ = {};
3030 WeakSet.prototype = $WeakSetPrototype$;
3031
3032 // 23.4.3 Properties of the WeakSet Prototype Object
3033 // 23.4.3.1 WeakSet.prototype.add (value )
3034 define(
3035 WeakSet.prototype, 'add',
3036 function add(value) {
3037 var S = strict(this);
3038 if (Type(S) !== 'object') throw TypeError();
3039 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3040 if (Type(value) !== 'object') throw TypeError('Expected object');
3041 S['[[WeakSetData]]'].set(value, true);
3042 return S;
3043 });
3044
3045 // 23.4.3.2 WeakSet.prototype.constructor
3046 // 23.4.3.3 WeakSet.prototype.delete ( value )
3047 define(
3048 WeakSet.prototype, 'delete',
3049 function delete_(value) {
3050 var S = strict(this);
3051 if (Type(S) !== 'object') throw TypeError();
3052 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3053 if (Type(value) !== 'object') throw TypeError('Expected object');
3054 return S['[[WeakSetData]]'].remove(value);
3055 });
3056
3057 // 23.4.3.4 WeakSet.prototype.has ( value )
3058 define(
3059 WeakSet.prototype, 'has',
3060 function has(key) {
3061 var S = strict(this);
3062 if (Type(S) !== 'object') throw TypeError();
3063 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3064 if (Type(key) !== 'object') throw TypeError('Expected object');
3065 return S['[[WeakSetData]]'].has(key);
3066 });
3067
3068 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3069 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3070
3071 // 23.4.4 Properties of WeakSet Instances
3072
3073 // Polyfills for incomplete native implementations:
3074 (function() {
3075 var ws = new global.WeakSet();
3076 var orig = global.WeakSet.prototype.add;
3077 define(global.WeakSet.prototype, 'add', function add() {
3078 orig.apply(this, arguments);
3079 return this;
3080 }, ws.add({}) !== ws);
3081 }());
3082 }());
3083
3084 // ---------------------------------------
3085 // 24 Structured Data
3086 // ---------------------------------------
3087
3088 // ---------------------------------------
3089 // 24.1 ArrayBuffer Objects
3090 // ---------------------------------------
3091
3092 // See typedarray.js for TypedArray polyfill
3093
3094 (function() {
3095 if (!('ArrayBuffer' in global))
3096 return;
3097
3098 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3099 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3100 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3101 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3102 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3103 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3104 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3105 // 24.1.2 The ArrayBuffer Constructor
3106 // 24.1.2.1 ArrayBuffer( length )
3107 // 24.1.3 Properties of the ArrayBuffer Constructor
3108
3109 // 24.1.3.1 ArrayBuffer.isView ( arg )
3110 define(
3111 ArrayBuffer, 'isView',
3112 function isView(arg) {
3113 if (Type(arg) !== 'object') return false;
3114 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3115 return false;
3116 });
3117
3118 // 24.1.3.2 ArrayBuffer.prototype
3119 // 24.1.3.3 get ArrayBuffer [ @@species ]
3120 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3121 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3122 // 24.1.4.2 ArrayBuffer.prototype.constructor
3123 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3124
3125 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3126 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3127
3128 // 24.1.5 Properties of the ArrayBuffer Instances
3129 }());
3130
3131 // ---------------------------------------
3132 // 24.2 DataView Objects
3133 // ---------------------------------------
3134
3135 // See typedarray.js for TypedArray polyfill
3136
3137 (function() {
3138 if (!('DataView' in global))
3139 return;
3140
3141 // 24.2.1 Abstract Operations For DataView Objects
3142 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3143 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3144 // 24.2.2 The DataView Constructor
3145 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3146 // 24.2.3 Properties of the DataView Constructor
3147 // 24.2.3.1 DataView.prototype
3148 // 24.2.4 Properties of the DataView Prototype Object
3149 // 24.2.4.1 get DataView.prototype.buffer
3150 // 24.2.4.2 get DataView.prototype.byteLength
3151 // 24.2.4.3 get DataView.prototype.byteOffset
3152 // 24.2.4.4 DataView.prototype.constructor
3153 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3154 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3155 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3156 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3157 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3158 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3159 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3160 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3161 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3162 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3163 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3164 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3165 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3166 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3167 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3168 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3169
3170 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3171 define(DataView.prototype, $$toStringTag, 'DataView');
3172
3173 // 24.2.5 Properties of DataView Instances
3174 }());
3175
3176 // ---------------------------------------
3177 // 24.3 The JSON Object
3178 // ---------------------------------------
3179
3180 // 24.3.1 JSON.parse ( text [ , reviver ] )
3181 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3182 // 24.3.3 JSON [ @@toStringTag ]
3183 define(JSON, $$toStringTag, 'JSON');
3184
3185 // ---------------------------------------
3186 // 25.1 Iteration
3187 // ---------------------------------------
3188
3189 // 25.1.1 Common Iteration Interfaces
3190 // 25.1.1.1 The Iterable Interface
3191 // 25.1.1.2 The Iterator Interface
3192 // 25.1.1.3 The IteratorResult Interface
3193
3194 // 25.1.2 The %IteratorPrototype% Object
3195 // Defined earlier, so other prototypes can reference it.
3196 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3197 define($IteratorPrototype$, $$iterator, function() {
3198 return this;
3199 });
3200
3201
3202 // ---------------------------------------
3203 // 25.4 Promise Objects
3204 // ---------------------------------------
3205
3206 (function() {
3207 // 25.4 Promise Objects
3208
3209 // 25.4.1 Promise Abstract Operations
3210
3211 // 25.4.1.1 PromiseCapability Records
3212 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3213
3214 function IfAbruptRejectPromise(value, capability) {
3215 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3216 return capability['[[Promise]]'];
3217 }
3218
3219 // 25.4.1.2 PromiseReaction Records
3220
3221 // 25.4.1.3 CreateResolvingFunctions ( promise )
3222
3223 function CreateResolvingFunctions(promise) {
3224 var alreadyResolved = {'[[value]]': false};
3225 var resolve = PromiseResolveFunction();
3226 set_internal(resolve, '[[Promise]]', promise);
3227 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3228 var reject = PromiseRejectFunction();
3229 set_internal(reject, '[[Promise]]', promise);
3230 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3231 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3232 }
3233
3234 // 25.4.1.3.1 Promise Reject Functions
3235
3236 function PromiseRejectFunction() {
3237 var F = function(reason) {
3238 console.assert(Type(F['[[Promise]]']) === 'object');
3239 var promise = F['[[Promise]]'];
3240 var alreadyResolved = F['[[AlreadyResolved]]'];
3241 if (alreadyResolved['[[value]]']) return undefined;
3242 set_internal(alreadyResolved, '[[value]]', true);
3243 return RejectPromise(promise, reason);
3244 };
3245 return F;
3246 }
3247
3248 // 25.4.1.3.2 Promise Resolve Functions
3249
3250 function PromiseResolveFunction() {
3251 var F = function(resolution) {
3252 console.assert(Type(F['[[Promise]]']) === 'object');
3253 var promise = F['[[Promise]]'];
3254 var alreadyResolved = F['[[AlreadyResolved]]'];
3255 if (alreadyResolved['[[value]]']) return undefined;
3256 set_internal(alreadyResolved, '[[value]]', true);
3257
3258 if (SameValue(resolution, promise)) {
3259 var selfResolutionError = TypeError();
3260 return RejectPromise(promise, selfResolutionError);
3261 }
3262 if (Type(resolution) !== 'object')
3263 return FulfillPromise(promise, resolution);
3264 try {
3265 var then = resolution['then'];
3266 } catch(then) {
3267 return RejectPromise(promise, then);
3268 }
3269 if (!IsCallable(then))
3270 return FulfillPromise(promise, resolution);
3271 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3272 return undefined;
3273 };
3274 return F;
3275 }
3276
3277 // 25.4.1.4 FulfillPromise ( promise, value )
3278
3279 function FulfillPromise(promise, value) {
3280 console.assert(promise['[[PromiseState]]'] === 'pending');
3281 var reactions = promise['[[PromiseFulfillReactions]]'];
3282 set_internal(promise, '[[PromiseResult]]', value);
3283 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3284 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3285 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3286 return TriggerPromiseReactions(reactions, value);
3287 }
3288
3289 // 25.4.1.5 NewPromiseCapability ( C )
3290
3291 function NewPromiseCapability(c) {
3292 // To keep Promise hermetic, this doesn't look much like the spec.
3293 return CreatePromiseCapabilityRecord(undefined, c);
3294 }
3295
3296 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3297
3298 function CreatePromiseCapabilityRecord(promise, constructor) {
3299 // To keep Promise hermetic, this doesn't look much like the spec.
3300 console.assert(IsConstructor(constructor));
3301 var promiseCapability = {};
3302 set_internal(promiseCapability, '[[Promise]]', promise);
3303 set_internal(promiseCapability, '[[Resolve]]', undefined);
3304 set_internal(promiseCapability, '[[Reject]]', undefined);
3305 var executor = GetCapabilitiesExecutor();
3306 set_internal(executor, '[[Capability]]', promiseCapability);
3307
3308 // NOTE: Differs from spec; object is constructed here
3309 var constructorResult = promise = new constructor(executor);
3310 set_internal(promiseCapability, '[[Promise]]', promise);
3311
3312 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3313 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3314 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3315 return promiseCapability;
3316 }
3317
3318 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3319
3320 function GetCapabilitiesExecutor() {
3321 var F = function(resolve, reject) {
3322 console.assert(F['[[Capability]]']);
3323 var promiseCapability = F['[[Capability]]'];
3324 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
3325 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
3326 set_internal(promiseCapability, '[[Resolve]]', resolve);
3327 set_internal(promiseCapability, '[[Reject]]', reject);
3328 return undefined;
3329 };
3330 return F;
3331 }
3332
3333 // 25.4.1.6 IsPromise ( x )
3334
3335 function IsPromise(x) {
3336 if (Type(x) !== 'object') return false;
3337 if (!('[[PromiseState]]' in x)) return false;
3338 if (x['[[PromiseState]]'] === undefined) return false;
3339 return true;
3340 }
3341
3342 // 25.4.1.7 RejectPromise ( promise, reason )
3343
3344 function RejectPromise(promise, reason) {
3345 console.assert(promise['[[PromiseState]]'] === 'pending');
3346 var reactions = promise['[[PromiseRejectReactions]]'];
3347 set_internal(promise, '[[PromiseResult]]', reason);
3348 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3349 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3350 set_internal(promise, '[[PromiseState]]', 'rejected');
3351 return TriggerPromiseReactions(reactions, reason);
3352 }
3353
3354 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
3355
3356 function TriggerPromiseReactions(reactions, argument) {
3357 for (var i = 0, len = reactions.length; i < len; ++i)
3358 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
3359 return undefined;
3360 }
3361
3362 // 25.4.2 Promise Jobs
3363
3364 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
3365
3366 function PromiseReactionJob(reaction, argument) {
3367 var promiseCapability = reaction['[[Capabilities]]'];
3368 var handler = reaction['[[Handler]]'];
3369 var handlerResult, status;
3370 try {
3371 if (handler === 'Identity') handlerResult = argument;
3372 else if (handler === 'Thrower') throw argument;
3373 else handlerResult = handler.call(undefined, argument);
3374 } catch (handlerResult) {
3375 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
3376 NextJob(status); return;
3377 }
3378 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
3379 NextJob(status);
3380 }
3381
3382 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
3383
3384 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
3385 // SPEC BUG: promise vs. promiseToResolve
3386 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
3387 try {
3388 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
3389 resolvingFunctions['[[Reject]]']);
3390 } catch (thenCallResult) {
3391 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
3392 NextJob(status); return;
3393 }
3394 NextJob(thenCallResult);
3395 }
3396
3397 // 25.4.3 The Promise Constructor
3398
3399 // 25.4.3.1 Promise ( executor )
3400
3401 function Promise(executor) {
3402 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
3403 Object.defineProperty(this, '[[PromiseState]]', config);
3404 Object.defineProperty(this, '[[PromiseConstructor]]', config);
3405 Object.defineProperty(this, '[[PromiseResult]]', config);
3406 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
3407 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
3408
3409 var promise = this;
3410 if (Type(promise) !== 'object') throw new TypeError();
3411 if (!('[[PromiseState]]' in promise)) throw TypeError();
3412 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
3413 if (!IsCallable(executor)) throw TypeError();
3414
3415 set_internal(promise, '[[PromiseConstructor]]', Promise);
3416
3417 return InitializePromise(promise, executor);
3418 }
3419
3420 // 25.4.3.1.1 InitializePromise ( promise, executor )
3421
3422 function InitializePromise(promise, executor) {
3423 console.assert('[[PromiseState]]' in promise);
3424 console.assert(IsCallable(executor));
3425 set_internal(promise, '[[PromiseState]]', 'pending');
3426 set_internal(promise, '[[PromiseFulfillReactions]]', []);
3427 set_internal(promise, '[[PromiseRejectReactions]]', []);
3428 var resolvingFunctions = CreateResolvingFunctions(promise);
3429 try {
3430 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
3431 resolvingFunctions['[[Reject]]']);
3432 } catch (completion) {
3433 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
3434 }
3435 return promise;
3436 }
3437
3438 // 25.4.4 Properties of the Promise Constructor
3439 // 25.4.4.1 Promise.all ( iterable )
3440
3441 define(Promise, 'all', function all(iterable) {
3442 var c = strict(this);
3443 var promiseCapability = NewPromiseCapability(c);
3444 try {
3445 var iterator = GetIterator(iterable);
3446 } catch (value) {
3447 promiseCapability['[[Reject]]'].call(undefined, value);
3448 return promiseCapability['[[Promise]]'];
3449 }
3450 var values = [];
3451 var remainingElementsCount = { value: 1 };
3452 var index = 0;
3453 while (true) {
3454 try {
3455 var next = IteratorStep(iterator);
3456 } catch (value) {
3457 promiseCapability['[[Reject]]'].call(undefined, value);
3458 return promiseCapability['[[Promise]]'];
3459 }
3460 if (!next) {
3461 remainingElementsCount.value -= 1;
3462 if (remainingElementsCount.value === 0) {
3463 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
3464
3465
3466 }
3467 return promiseCapability['[[Promise]]'];
3468 }
3469 try {
3470 var nextValue = IteratorValue(next);
3471 } catch (value) {
3472 promiseCapability['[[Reject]]'].call(undefined, value);
3473 return promiseCapability['[[Promise]]'];
3474 }
3475 try {
3476 var nextPromise = c.resolve(nextValue);
3477 } catch (value) {
3478 promiseCapability['[[Reject]]'].call(undefined, value);
3479 return promiseCapability['[[Promise]]'];
3480 }
3481 var resolveElement = PromiseAllResolveElementFunction();
3482 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
3483 set_internal(resolveElement, '[[Index]]', index);
3484 set_internal(resolveElement, '[[Values]]', values);
3485 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
3486 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
3487 remainingElementsCount.value += 1;
3488 try {
3489 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
3490 } catch (value) {
3491 promiseCapability['[[Reject]]'].call(undefined, value);
3492 return promiseCapability['[[Promise]]'];
3493 }
3494 index += 1;
3495 }
3496 });
3497
3498 // 25.4.4.1.1 Promise.all Resolve Element Functions
3499
3500 function PromiseAllResolveElementFunction() {
3501 var F = function(x) {
3502 var alreadyCalled = F['[[AlreadyCalled]]'];
3503 if (alreadyCalled.value) return undefined;
3504 alreadyCalled.value = true;
3505 var index = F['[[Index]]'];
3506 var values = F['[[Values]]'];
3507 var promiseCapability = F['[[Capabilities]]'];
3508 var remainingElementsCount = F['[[RemainingElements]]'];
3509 try {
3510 values[index] = x;
3511 } catch (result) {
3512 promiseCapability['[[Reject]]'].call(undefined, result);
3513 return promiseCapability['[[Promise]]'];
3514 }
3515 remainingElementsCount.value -= 1;
3516 if (remainingElementsCount.value === 0)
3517 return promiseCapability['[[Resolve]]'].call(undefined, values);
3518 return undefined;
3519 };
3520 return F;
3521 }
3522
3523 // 25.4.4.2 Promise.prototype
3524
3525 Promise.prototype = {};
3526
3527 // 25.4.4.3 Promise.race ( iterable )
3528
3529 define(Promise, 'race', function race(iterable) {
3530 var c = strict(this);
3531 var promiseCapability = NewPromiseCapability(c);
3532 try {
3533 var iterator = GetIterator(iterable);
3534 } catch (value) {
3535 promiseCapability['[[Reject]]'].call(undefined, value);
3536 return promiseCapability['[[Promise]]'];
3537 }
3538 while (true) {
3539 try {
3540 var next = IteratorStep(iterator);
3541 } catch (value) {
3542 promiseCapability['[[Reject]]'].call(undefined, value);
3543 return promiseCapability['[[Promise]]'];
3544 }
3545 if (!next) return promiseCapability['[[Promise]]'];
3546 try {
3547 var nextValue = IteratorValue(next);
3548 } catch (value) {
3549 promiseCapability['[[Reject]]'].call(undefined, value);
3550 return promiseCapability['[[Promise]]'];
3551 }
3552 try {
3553 var nextPromise = c.resolve(nextValue);
3554 } catch (value) {
3555 promiseCapability['[[Reject]]'].call(undefined, value);
3556 return promiseCapability['[[Promise]]'];
3557 }
3558 try {
3559 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
3560 } catch (value) {
3561 promiseCapability['[[Reject]]'].call(undefined, value);
3562 return promiseCapability['[[Promise]]'];
3563 }
3564 }
3565 });
3566
3567 // 25.4.4.4 Promise.reject ( r )
3568
3569 define(Promise, 'reject', function reject(r) {
3570 var c = strict(this);
3571 var promiseCapability = NewPromiseCapability(c);
3572 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
3573 return promiseCapability['[[Promise]]'];
3574 });
3575
3576 // 25.4.4.5 Promise.resolve ( x )
3577
3578 define(Promise, 'resolve', function resolve(x) {
3579 var c = strict(this);
3580 if (IsPromise(x)) {
3581 var constructor = x['[[PromiseConstructor]]'];
3582 if (SameValue(constructor, c)) return x;
3583 }
3584 var promiseCapability = NewPromiseCapability(c);
3585 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
3586 return promiseCapability['[[Promise]]'];
3587 });
3588
3589 // 25.4.4.6 Promise [ @@create ] ( )
3590 // 25.4.4.6.1 AllocatePromise ( constructor )
3591 // 25.4.5 Properties of the Promise Prototype Object
3592 // 25.4.5.1 Promise.prototype.catch ( onRejected )
3593
3594 define(Promise.prototype, 'catch', function catch_(onRejected) {
3595 var promise = this;
3596 return promise.then(undefined, onRejected);
3597 });
3598
3599 // 25.4.5.2 Promise.prototype.constructor
3600
3601 Promise.prototype.constructor = Promise;
3602
3603 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
3604
3605 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
3606 var promise = this;
3607 if (!IsPromise(promise)) throw TypeError();
3608 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
3609 if (!IsCallable(onRejected)) onRejected = 'Thrower';
3610 var c = promise.constructor;
3611 var promiseCapability = NewPromiseCapability(c);
3612 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
3613 '[[Handler]]': onFulfilled };
3614 var rejectReaction = { '[[Capabilities]]': promiseCapability,
3615 '[[Handler]]': onRejected };
3616 if (promise['[[PromiseState]]'] === 'pending') {
3617 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
3618 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
3619 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
3620 var value = promise['[[PromiseResult]]'];
3621 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
3622 } else if (promise['[[PromiseState]]'] === 'rejected') {
3623 var reason = promise['[[PromiseResult]]'];
3624 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
3625 }
3626 return promiseCapability['[[Promise]]'];
3627 });
3628
3629 // 25.4.6 Properties of Promise Instances
3630
3631 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3632 global.Promise = Promise;
3633
3634 // Patch early Promise.cast vs. Promise.resolve implementations
3635 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
3636 }());
3637
3638 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
3639 define(Promise.prototype, $$toStringTag, 'Promise');
3640
3641 // ---------------------------------------
3642 // 26 Reflection
3643 // ---------------------------------------
3644
3645 (function() {
3646 // 26.1 The Reflect Object
3647 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3648 global.Reflect = {};
3649
3650 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
3651 define(
3652 Reflect, 'apply',
3653 function apply(target, thisArgument, argumentsList) {
3654 if (!IsCallable(target)) throw TypeError();
3655 return Function.prototype.apply.call(target, thisArgument, argumentsList);
3656 });
3657
3658 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
3659 define(
3660 Reflect, 'construct',
3661 function construct(target, argumentsList) {
3662 return __cons(target, argumentsList);
3663 });
3664
3665 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
3666 define(
3667 Reflect, 'defineProperty',
3668 function defineProperty(target, propertyKey, attributes) {
3669 try {
3670 Object.defineProperty(target, propertyKey, attributes);
3671 return true;
3672 } catch (_) {
3673 return false;
3674 }
3675 });
3676
3677 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
3678 define(
3679 Reflect, 'deleteProperty',
3680 function deleteProperty(target,name) {
3681 try {
3682 delete target[name];
3683 return !HasOwnProperty(target, name);
3684 } catch (_) {
3685 return false;
3686 }
3687 });
3688
3689 // 26.1.5 Reflect.enumerate ( target )
3690 define(
3691 Reflect, 'enumerate',
3692 function enumerate(target) {
3693 target = ToObject(target);
3694 var iterator = Enumerate(target);
3695 return iterator;
3696 });
3697
3698 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
3699 define(
3700 Reflect, 'get',
3701 function get(target, name, receiver) {
3702 target = ToObject(target);
3703 name = String(name);
3704 receiver = (receiver === undefined) ? target : ToObject(receiver);
3705 var desc = getPropertyDescriptor(target, name);
3706 if (desc && 'get' in desc)
3707 return Function.prototype.call.call(desc['get'], receiver);
3708 return target[name];
3709 });
3710
3711 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
3712 define(
3713 Reflect, 'getOwnPropertyDescriptor',
3714 Object.getOwnPropertyDescriptor);
3715
3716 // 26.1.8 Reflect.getPrototypeOf ( target )
3717 define(
3718 Reflect, 'getPrototypeOf',
3719 Object.getPrototypeOf);
3720
3721 // 26.1.9 Reflect.has ( target, propertyKey )
3722 define(
3723 Reflect, 'has',
3724 function has(target,name) {
3725 return String(name) in ToObject(target);
3726 });
3727
3728 // 26.1.10 Reflect.isExtensible (target)
3729 define(
3730 Reflect, 'isExtensible',
3731 Object.isExtensible);
3732
3733 // 26.1.11 Reflect.ownKeys ( target )
3734 define(
3735 Reflect, 'ownKeys',
3736 function ownKeys(target) {
3737 var obj = ToObject(target);
3738 return Object.getOwnPropertyNames(obj);
3739 });
3740
3741 // 26.1.12 Reflect.preventExtensions ( target )
3742 define(
3743 Reflect, 'preventExtensions',
3744 function preventExtensions(target) {
3745 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
3746 });
3747
3748 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
3749 define(
3750 Reflect, 'set',
3751 function set(target, name, value, receiver) {
3752 target = ToObject(target);
3753 name = String(name);
3754 receiver = (receiver === undefined) ? target : ToObject(receiver);
3755 var desc = getPropertyDescriptor(target, name);
3756 try {
3757 if (desc && 'set' in desc)
3758 Function.prototype.call.call(desc['set'], receiver, value);
3759 else
3760 target[name] = value;
3761 return true;
3762 } catch (_) {
3763 return false;
3764 }
3765 });
3766
3767 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
3768 define(
3769 Reflect, 'setPrototypeOf',
3770 function setPrototypeOf(target, proto) {
3771 try {
3772 target.__proto__ = proto;
3773 return Reflect.getPrototypeOf(target) === proto;
3774 } catch(_) {
3775 return false;
3776 }
3777 });
3778
3779 }());
3780
3781 // ---------------------------------------
3782 // 26.2 Proxy Objects
3783 // ---------------------------------------
3784
3785 // Not polyfillable.
3786
3787}(self));
3788
3789// This helper is defined outside the main scope so that the use of
3790// 'eval' does not taint the scope for minifiers.
3791function __cons(t, a) {
3792 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
3793}
diff --git a/src/js/ripple-util.js b/src/js/ripple-util.js
new file mode 100644
index 0000000..8b287fb
--- /dev/null
+++ b/src/js/ripple-util.js
@@ -0,0 +1,10 @@
1function convertRippleAdrr(address) {
2 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
3 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
4 )
5 }
6
7function convertRipplePriv(priv) {
8 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2)
9}
10
diff --git a/src/js/unorm.js b/src/js/unorm.js
new file mode 100644
index 0000000..92d3699
--- /dev/null
+++ b/src/js/unorm.js
@@ -0,0 +1,442 @@
1(function (root) {
2 "use strict";
3
4/***** unorm.js *****/
5
6/*
7 * UnicodeNormalizer 1.0.0
8 * Copyright (c) 2008 Matsuza
9 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
10 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
11 * $Rev: 13309 $
12 */
13
14 var DEFAULT_FEATURE = [null, 0, {}];
15 var CACHE_THRESHOLD = 10;
16 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
17 var NCount = VCount * TCount; // 588
18 var SCount = LCount * NCount; // 11172
19
20 var UChar = function(cp, feature){
21 this.codepoint = cp;
22 this.feature = feature;
23 };
24
25 // Strategies
26 var cache = {};
27 var cacheCounter = [];
28 for (var i = 0; i <= 0xFF; ++i){
29 cacheCounter[i] = 0;
30 }
31
32 function fromCache(next, cp, needFeature){
33 var ret = cache[cp];
34 if(!ret){
35 ret = next(cp, needFeature);
36 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
37 cache[cp] = ret;
38 }
39 }
40 return ret;
41 }
42
43 function fromData(next, cp, needFeature){
44 var hash = cp & 0xFF00;
45 var dunit = UChar.udata[hash] || {};
46 var f = dunit[cp];
47 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
48 }
49 function fromCpOnly(next, cp, needFeature){
50 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
51 }
52 function fromRuleBasedJamo(next, cp, needFeature){
53 var j;
54 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
55 return next(cp, needFeature);
56 }
57 if(LBase <= cp && cp < LBase + LCount){
58 var c = {};
59 var base = (cp - LBase) * VCount;
60 for (j = 0; j < VCount; ++j){
61 c[VBase + j] = SBase + TCount * (j + base);
62 }
63 return new UChar(cp, [,,c]);
64 }
65
66 var SIndex = cp - SBase;
67 var TIndex = SIndex % TCount;
68 var feature = [];
69 if(TIndex !== 0){
70 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
71 } else {
72 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
73 feature[2] = {};
74 for (j = 1; j < TCount; ++j){
75 feature[2][TBase + j] = cp + j;
76 }
77 }
78 return new UChar(cp, feature);
79 }
80 function fromCpFilter(next, cp, needFeature){
81 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
82 }
83
84 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
85
86 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
87 return function (cp, needFeature) {
88 return strategy(next, cp, needFeature);
89 };
90 }, null);
91
92 UChar.isHighSurrogate = function(cp){
93 return cp >= 0xD800 && cp <= 0xDBFF;
94 };
95 UChar.isLowSurrogate = function(cp){
96 return cp >= 0xDC00 && cp <= 0xDFFF;
97 };
98
99 UChar.prototype.prepFeature = function(){
100 if(!this.feature){
101 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
102 }
103 };
104
105 UChar.prototype.toString = function(){
106 if(this.codepoint < 0x10000){
107 return String.fromCharCode(this.codepoint);
108 } else {
109 var x = this.codepoint - 0x10000;
110 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
111 }
112 };
113
114 UChar.prototype.getDecomp = function(){
115 this.prepFeature();
116 return this.feature[0] || null;
117 };
118
119 UChar.prototype.isCompatibility = function(){
120 this.prepFeature();
121 return !!this.feature[1] && (this.feature[1] & (1 << 8));
122 };
123 UChar.prototype.isExclude = function(){
124 this.prepFeature();
125 return !!this.feature[1] && (this.feature[1] & (1 << 9));
126 };
127 UChar.prototype.getCanonicalClass = function(){
128 this.prepFeature();
129 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
130 };
131 UChar.prototype.getComposite = function(following){
132 this.prepFeature();
133 if(!this.feature[2]){
134 return null;
135 }
136 var cp = this.feature[2][following.codepoint];
137 return cp ? UChar.fromCharCode(cp) : null;
138 };
139
140 var UCharIterator = function(str){
141 this.str = str;
142 this.cursor = 0;
143 };
144 UCharIterator.prototype.next = function(){
145 if(!!this.str && this.cursor < this.str.length){
146 var cp = this.str.charCodeAt(this.cursor++);
147 var d;
148 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
149 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
150 ++this.cursor;
151 }
152 return UChar.fromCharCode(cp);
153 } else {
154 this.str = null;
155 return null;
156 }
157 };
158
159 var RecursDecompIterator = function(it, cano){
160 this.it = it;
161 this.canonical = cano;
162 this.resBuf = [];
163 };
164
165 RecursDecompIterator.prototype.next = function(){
166 function recursiveDecomp(cano, uchar){
167 var decomp = uchar.getDecomp();
168 if(!!decomp && !(cano && uchar.isCompatibility())){
169 var ret = [];
170 for(var i = 0; i < decomp.length; ++i){
171 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
172 ret = ret.concat(a);
173 }
174 return ret;
175 } else {
176 return [uchar];
177 }
178 }
179 if(this.resBuf.length === 0){
180 var uchar = this.it.next();
181 if(!uchar){
182 return null;
183 }
184 this.resBuf = recursiveDecomp(this.canonical, uchar);
185 }
186 return this.resBuf.shift();
187 };
188
189 var DecompIterator = function(it){
190 this.it = it;
191 this.resBuf = [];
192 };
193
194 DecompIterator.prototype.next = function(){
195 var cc;
196 if(this.resBuf.length === 0){
197 do{
198 var uchar = this.it.next();
199 if(!uchar){
200 break;
201 }
202 cc = uchar.getCanonicalClass();
203 var inspt = this.resBuf.length;
204 if(cc !== 0){
205 for(; inspt > 0; --inspt){
206 var uchar2 = this.resBuf[inspt - 1];
207 var cc2 = uchar2.getCanonicalClass();
208 if(cc2 <= cc){
209 break;
210 }
211 }
212 }
213 this.resBuf.splice(inspt, 0, uchar);
214 } while(cc !== 0);
215 }
216 return this.resBuf.shift();
217 };
218
219 var CompIterator = function(it){
220 this.it = it;
221 this.procBuf = [];
222 this.resBuf = [];
223 this.lastClass = null;
224 };
225
226 CompIterator.prototype.next = function(){
227 while(this.resBuf.length === 0){
228 var uchar = this.it.next();
229 if(!uchar){
230 this.resBuf = this.procBuf;
231 this.procBuf = [];
232 break;
233 }
234 if(this.procBuf.length === 0){
235 this.lastClass = uchar.getCanonicalClass();
236 this.procBuf.push(uchar);
237 } else {
238 var starter = this.procBuf[0];
239 var composite = starter.getComposite(uchar);
240 var cc = uchar.getCanonicalClass();
241 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
242 this.procBuf[0] = composite;
243 } else {
244 if(cc === 0){
245 this.resBuf = this.procBuf;
246 this.procBuf = [];
247 }
248 this.lastClass = cc;
249 this.procBuf.push(uchar);
250 }
251 }
252 }
253 return this.resBuf.shift();
254 };
255
256 var createIterator = function(mode, str){
257 switch(mode){
258 case "NFD":
259 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
260 case "NFKD":
261 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
262 case "NFC":
263 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
264 case "NFKC":
265 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
266 }
267 throw mode + " is invalid";
268 };
269 var normalize = function(mode, str){
270 var it = createIterator(mode, str);
271 var ret = "";
272 var uchar;
273 while(!!(uchar = it.next())){
274 ret += uchar.toString();
275 }
276 return ret;
277 };
278
279 /* API functions */
280 function nfd(str){
281 return normalize("NFD", str);
282 }
283
284 function nfkd(str){
285 return normalize("NFKD", str);
286 }
287
288 function nfc(str){
289 return normalize("NFC", str);
290 }
291
292 function nfkc(str){
293 return normalize("NFKC", str);
294 }
295
296/* Unicode data */
297UChar.udata={
2980:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
299256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
300512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
301768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
3021024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
3031280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
3041536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
3051792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
3062048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
3072304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
3082560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
3092816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
3103072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
3113328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
3123584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
3133840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
3144096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
3154352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
3164608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
3174864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
3185120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
3195376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
3205632:{71231:[,9],71350:[,9],71351:[,7]},
3215888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
3226144:{6313:[,228]},
3236400:{6457:[,222],6458:[,230],6459:[,220]},
3246656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
3256912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
3267168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
3277424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
3287680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
3297936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
3308192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
3318448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
3328704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
3338960:{9001:[[12296]],9002:[[12297]]},
3349216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
33510752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
33611264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
33711520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
33811776:{11935:[[27597],256],12019:[[40863],256]},
33912032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
34012288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
34112544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
34212800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
34313056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
34427136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
34527392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
34642496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
34742752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
34843008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
34943264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
35043520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
35143776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
35248128:{113822:[,1]},
35353504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
35453760:{119362:[,230],119363:[,230],119364:[,230]},
35554272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
35654528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
35754784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
35855040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
35959392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
36060928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
36161696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
36261952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
36363488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
36463744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
36564000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
36664256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
36764512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
36864768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
36965024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
37065280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
371
372};
373
374 /***** Module to export */
375 var unorm = {
376 nfc: nfc,
377 nfd: nfd,
378 nfkc: nfkc,
379 nfkd: nfkd
380 };
381
382 /*globals module:true,define:true*/
383
384 // CommonJS
385 if (typeof module === "object") {
386 module.exports = unorm;
387
388 // AMD
389 } else if (typeof define === "function" && define.amd) {
390 define("unorm", function () {
391 return unorm;
392 });
393
394 // Global
395 } else {
396 root.unorm = unorm;
397 }
398
399 /***** Export as shim for String::normalize method *****/
400 /*
401 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
402
403 21.1.3.12 String.prototype.normalize(form="NFC")
404 When the normalize method is called with one argument form, the following steps are taken:
405
406 1. Let O be CheckObjectCoercible(this value).
407 2. Let S be ToString(O).
408 3. ReturnIfAbrupt(S).
409 4. If form is not provided or undefined let form be "NFC".
410 5. Let f be ToString(form).
411 6. ReturnIfAbrupt(f).
412 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
413 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
414 9. Return ns.
415
416 The length property of the normalize method is 0.
417
418 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
419 */
420 unorm.shimApplied = false;
421
422 if (!String.prototype.normalize) {
423 String.prototype.normalize = function(form) {
424 var str = "" + this;
425 form = form === undefined ? "NFC" : form;
426
427 if (form === "NFC") {
428 return unorm.nfc(str);
429 } else if (form === "NFD") {
430 return unorm.nfd(str);
431 } else if (form === "NFKC") {
432 return unorm.nfkc(str);
433 } else if (form === "NFKD") {
434 return unorm.nfkd(str);
435 } else {
436 throw new RangeError("Invalid normalization form: " + form);
437 }
438 };
439
440 unorm.shimApplied = true;
441 }
442}(this));
diff --git a/tests.js b/tests.js
index a3c3f57..49d42c3 100644
--- a/tests.js
+++ b/tests.js
@@ -4,7 +4,7 @@
4 4
5var page = require('webpage').create(); 5var page = require('webpage').create();
6var url = 'src/index.html'; 6var url = 'src/index.html';
7var testMaxTime = 10000; 7var testMaxTime = 20000;
8 8
9page.viewportSize = { 9page.viewportSize = {
10 width: 1024, 10 width: 1024,
@@ -280,7 +280,9 @@ page.open(url, function(status) {
280 $(".phrase").val("abandon abandon ability"); 280 $(".phrase").val("abandon abandon ability");
281 $(".phrase").trigger("input"); 281 $(".phrase").trigger("input");
282 $(".network option[selected]").removeAttr("selected"); 282 $(".network option[selected]").removeAttr("selected");
283 $(".network option[value=1]").prop("selected", true); 283 $(".network option").filter(function() {
284 return $(this).html() == "Bitcoin Testnet";
285 }).prop("selected", true);
284 $(".network").trigger("change"); 286 $(".network").trigger("change");
285 }); 287 });
286 // check the address is generated correctly 288 // check the address is generated correctly
@@ -308,7 +310,9 @@ page.open(url, function(status) {
308 $(".phrase").val("abandon abandon ability"); 310 $(".phrase").val("abandon abandon ability");
309 $(".phrase").trigger("input"); 311 $(".phrase").trigger("input");
310 $(".network option[selected]").removeAttr("selected"); 312 $(".network option[selected]").removeAttr("selected");
311 $(".network option[value=2]").prop("selected", true); 313 $(".network option").filter(function() {
314 return $(this).html() == "Litecoin";
315 }).prop("selected", true);
312 $(".network").trigger("change"); 316 $(".network").trigger("change");
313 }); 317 });
314 // check the address is generated correctly 318 // check the address is generated correctly
@@ -336,7 +340,9 @@ page.open(url, function(status) {
336 $(".phrase").val("abandon abandon ability"); 340 $(".phrase").val("abandon abandon ability");
337 $(".phrase").trigger("input"); 341 $(".phrase").trigger("input");
338 $(".network option[selected]").removeAttr("selected"); 342 $(".network option[selected]").removeAttr("selected");
339 $(".network option[value=3]").prop("selected", true); 343 $(".network option").filter(function() {
344 return $(this).html() == "Dogecoin";
345 }).prop("selected", true);
340 $(".network").trigger("change"); 346 $(".network").trigger("change");
341 }); 347 });
342 // check the address is generated correctly 348 // check the address is generated correctly
@@ -364,7 +370,9 @@ page.open(url, function(status) {
364 $(".phrase").val("abandon abandon ability"); 370 $(".phrase").val("abandon abandon ability");
365 $(".phrase").trigger("input"); 371 $(".phrase").trigger("input");
366 $(".network option[selected]").removeAttr("selected"); 372 $(".network option[selected]").removeAttr("selected");
367 $(".network option[value=4]").prop("selected", true); 373 $(".network option").filter(function() {
374 return $(this).html() == "ShadowCash";
375 }).prop("selected", true);
368 $(".network").trigger("change"); 376 $(".network").trigger("change");
369 }); 377 });
370 // check the address is generated correctly 378 // check the address is generated correctly
@@ -392,7 +400,9 @@ page.open(url, function(status) {
392 $(".phrase").val("abandon abandon ability"); 400 $(".phrase").val("abandon abandon ability");
393 $(".phrase").trigger("input"); 401 $(".phrase").trigger("input");
394 $(".network option[selected]").removeAttr("selected"); 402 $(".network option[selected]").removeAttr("selected");
395 $(".network option[value=5]").prop("selected", true); 403 $(".network option").filter(function() {
404 return $(this).html() == "ShadowCash Testnet";
405 }).prop("selected", true);
396 $(".network").trigger("change"); 406 $(".network").trigger("change");
397 }); 407 });
398 // check the address is generated correctly 408 // check the address is generated correctly
@@ -420,7 +430,9 @@ page.open(url, function(status) {
420 $(".phrase").val("abandon abandon ability"); 430 $(".phrase").val("abandon abandon ability");
421 $(".phrase").trigger("input"); 431 $(".phrase").trigger("input");
422 $(".network option[selected]").removeAttr("selected"); 432 $(".network option[selected]").removeAttr("selected");
423 $(".network option[value=6]").prop("selected", true); 433 $(".network option").filter(function() {
434 return $(this).html() == "Viacoin";
435 }).prop("selected", true);
424 $(".network").trigger("change"); 436 $(".network").trigger("change");
425 }); 437 });
426 // check the address is generated correctly 438 // check the address is generated correctly
@@ -448,7 +460,9 @@ page.open(url, function(status) {
448 $(".phrase").val("abandon abandon ability"); 460 $(".phrase").val("abandon abandon ability");
449 $(".phrase").trigger("input"); 461 $(".phrase").trigger("input");
450 $(".network option[selected]").removeAttr("selected"); 462 $(".network option[selected]").removeAttr("selected");
451 $(".network option[value=7]").prop("selected", true); 463 $(".network option").filter(function() {
464 return $(this).html() == "Viacoin Testnet";
465 }).prop("selected", true);
452 $(".network").trigger("change"); 466 $(".network").trigger("change");
453 }); 467 });
454 // check the address is generated correctly 468 // check the address is generated correctly
@@ -476,7 +490,9 @@ page.open(url, function(status) {
476 $(".phrase").val("abandon abandon ability"); 490 $(".phrase").val("abandon abandon ability");
477 $(".phrase").trigger("input"); 491 $(".phrase").trigger("input");
478 $(".network option[selected]").removeAttr("selected"); 492 $(".network option[selected]").removeAttr("selected");
479 $(".network option[value=8]").prop("selected", true); 493 $(".network option").filter(function() {
494 return $(this).html() == "Jumbucks";
495 }).prop("selected", true);
480 $(".network").trigger("change"); 496 $(".network").trigger("change");
481 }); 497 });
482 // check the address is generated correctly 498 // check the address is generated correctly
@@ -504,7 +520,9 @@ page.open(url, function(status) {
504 $(".phrase").val("abandon abandon ability"); 520 $(".phrase").val("abandon abandon ability");
505 $(".phrase").trigger("input"); 521 $(".phrase").trigger("input");
506 $(".network option[selected]").removeAttr("selected"); 522 $(".network option[selected]").removeAttr("selected");
507 $(".network option[value=9]").prop("selected", true); 523 $(".network option").filter(function() {
524 return $(this).html() == "CLAM";
525 }).prop("selected", true);
508 $(".network").trigger("change"); 526 $(".network").trigger("change");
509 }); 527 });
510 // check the address is generated correctly 528 // check the address is generated correctly
@@ -532,7 +550,9 @@ page.open(url, function(status) {
532 $(".phrase").val("abandon abandon ability"); 550 $(".phrase").val("abandon abandon ability");
533 $(".phrase").trigger("input"); 551 $(".phrase").trigger("input");
534 $(".network option[selected]").removeAttr("selected"); 552 $(".network option[selected]").removeAttr("selected");
535 $(".network option[value=10]").prop("selected", true); 553 $(".network option").filter(function() {
554 return $(this).html() == "DASH";
555 }).prop("selected", true);
536 $(".network").trigger("change"); 556 $(".network").trigger("change");
537 }); 557 });
538 // check the address is generated correctly 558 // check the address is generated correctly
@@ -551,6 +571,36 @@ page.open(url, function(status) {
551}); 571});
552}, 572},
553 573
574// Network can be set to game
575function() {
576page.open(url, function(status) {
577 // set the phrase and coin
578 var expected = "GSMY9bAp36cMR4zyT4uGVS7GFjpdXbao5Q";
579 page.evaluate(function() {
580 $(".phrase").val("abandon abandon ability");
581 $(".phrase").trigger("input");
582 $(".network option[selected]").removeAttr("selected");
583 $(".network option").filter(function() {
584 return $(this).html() == "GAME";
585 }).prop("selected", true);
586 $(".network").trigger("change");
587 });
588 // check the address is generated correctly
589 waitForGenerate(function() {
590 var actual = page.evaluate(function() {
591 return $(".address:first").text();
592 });
593 if (actual != expected) {
594 console.log("GAME address is incorrect");
595 console.log("Expected: " + expected);
596 console.log("Actual: " + actual);
597 fail();
598 }
599 next();
600 });
601});
602},
603
554// Network can be set to namecoin 604// Network can be set to namecoin
555function() { 605function() {
556page.open(url, function(status) { 606page.open(url, function(status) {
@@ -560,7 +610,9 @@ page.open(url, function(status) {
560 $(".phrase").val("abandon abandon ability"); 610 $(".phrase").val("abandon abandon ability");
561 $(".phrase").trigger("input"); 611 $(".phrase").trigger("input");
562 $(".network option[selected]").removeAttr("selected"); 612 $(".network option[selected]").removeAttr("selected");
563 $(".network option[value=11]").prop("selected", true); 613 $(".network option").filter(function() {
614 return $(this).html() == "Namecoin";
615 }).prop("selected", true);
564 $(".network").trigger("change"); 616 $(".network").trigger("change");
565 }); 617 });
566 // check the address is generated correctly 618 // check the address is generated correctly
@@ -588,7 +640,9 @@ page.open(url, function(status) {
588 $(".phrase").val("abandon abandon ability"); 640 $(".phrase").val("abandon abandon ability");
589 $(".phrase").trigger("input"); 641 $(".phrase").trigger("input");
590 $(".network option[selected]").removeAttr("selected"); 642 $(".network option[selected]").removeAttr("selected");
591 $(".network option[value=12]").prop("selected", true); 643 $(".network option").filter(function() {
644 return $(this).html() == "Peercoin";
645 }).prop("selected", true);
592 $(".network").trigger("change"); 646 $(".network").trigger("change");
593 }); 647 });
594 // check the address is generated correctly 648 // check the address is generated correctly
@@ -607,6 +661,68 @@ page.open(url, function(status) {
607}); 661});
608}, 662},
609 663
664// Network can be set to ethereum
665function() {
666
667page.open(url, function(status) {
668
669 // set the phrase and coin
670 page.evaluate(function() {
671 $(".phrase").val("abandon abandon ability");
672 $(".phrase").trigger("input");
673 $(".network option[selected]").removeAttr("selected");
674 $(".network option").filter(function() {
675 return $(this).html() == "Ethereum";
676 }).prop("selected", true);
677 $(".network").trigger("change");
678 });
679 waitForGenerate(function() {
680 // check the address is generated correctly
681 // this value comes from
682 // https://www.myetherwallet.com/#view-wallet-info
683 // Unusual capitalization is due to checksum
684 var expected = "0xe5815d5902Ad612d49283DEdEc02100Bd44C2772";
685 var actual = page.evaluate(function() {
686 return $(".address:first").text();
687 });
688 if (actual != expected) {
689 console.log("Ethereum address is incorrect");
690 console.log("Expected: " + expected);
691 console.log("Actual: " + actual);
692 fail();
693 }
694 // check the private key is correct
695 // this private key can be imported into
696 // https://www.myetherwallet.com/#view-wallet-info
697 // and it should correlate to the address above
698 var expected = "8f253078b73d7498302bb78c171b23ce7a8fb511987d2b2702b731638a4a15e7";
699 var actual = page.evaluate(function() {
700 return $(".privkey:first").text();
701 });
702 if (actual != expected) {
703 console.log("Ethereum privkey is incorrect");
704 console.log("Expected: " + expected);
705 console.log("Actual: " + actual);
706 fail();
707 }
708 // check the public key is correct
709 // TODO
710 // don't have any third-party source to generate the expected value
711 //var expected = "?";
712 //var actual = page.evaluate(function() {
713 // return $(".pubkey:first").text();
714 //});
715 //if (actual != expected) {
716 // console.log("Ethereum privkey is incorrect");
717 // console.log("Expected: " + expected);
718 // console.log("Actual: " + actual);
719 // fail();
720 //}
721 next();
722 });
723});
724},
725
610// BIP39 seed is set from phrase 726// BIP39 seed is set from phrase
611function() { 727function() {
612page.open(url, function(status) { 728page.open(url, function(status) {
@@ -1778,7 +1894,10 @@ page.open(url, function(status) {
1778 waitForGenerate(function() { 1894 waitForGenerate(function() {
1779 // 4) switch from bitcoin to litecoin 1895 // 4) switch from bitcoin to litecoin
1780 page.evaluate(function() { 1896 page.evaluate(function() {
1781 $(".network").val("2").trigger("change"); 1897 $(".network option").filter(function() {
1898 return $(this).html() == "Litecoin";
1899 }).prop("selected", true);
1900 $(".network").trigger("change");
1782 }); 1901 });
1783 waitForGenerate(function() { 1902 waitForGenerate(function() {
1784 // 5) Check derivation path is displayed correctly 1903 // 5) Check derivation path is displayed correctly
@@ -1821,7 +1940,10 @@ page.open(url, function(status) {
1821 waitForGenerate(function() { 1940 waitForGenerate(function() {
1822 // switch from bitcoin to clam 1941 // switch from bitcoin to clam
1823 page.evaluate(function() { 1942 page.evaluate(function() {
1824 $(".network").val("9").trigger("change"); 1943 $(".network option").filter(function() {
1944 return $(this).html() == "CLAM";
1945 }).prop("selected", true);
1946 $(".network").trigger("change");
1825 }); 1947 });
1826 waitForGenerate(function() { 1948 waitForGenerate(function() {
1827 // check derivation path is displayed correctly 1949 // check derivation path is displayed correctly
@@ -1852,7 +1974,10 @@ page.open(url, function(status) {
1852 waitForGenerate(function() { 1974 waitForGenerate(function() {
1853 // 4) switch from bitcoin to viacoin 1975 // 4) switch from bitcoin to viacoin
1854 page.evaluate(function() { 1976 page.evaluate(function() {
1855 $(".network").val("6").trigger("change"); 1977 $(".network option").filter(function() {
1978 return $(this).html() == "Viacoin";
1979 }).prop("selected", true);
1980 $(".network").trigger("change");
1856 }); 1981 });
1857 waitForGenerate(function() { 1982 waitForGenerate(function() {
1858 // 5) ensure the derived address is correct 1983 // 5) ensure the derived address is correct
@@ -2268,7 +2393,6 @@ page.open(url, function(status) {
2268 // use entropy 2393 // use entropy
2269 page.evaluate(function() { 2394 page.evaluate(function() {
2270 $(".use-entropy").prop("checked", true).trigger("change"); 2395 $(".use-entropy").prop("checked", true).trigger("change");
2271 $(".mnemonic-length").val("raw");
2272 $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input"); 2396 $(".entropy").val("00000000 00000000 00000000 00000000").trigger("input");
2273 }); 2397 });
2274 // check the mnemonic is set and address is correct 2398 // check the mnemonic is set and address is correct
@@ -2804,7 +2928,6 @@ page.open(url, function(status) {
2804 // use entropy 2928 // use entropy
2805 page.evaluate(function() { 2929 page.evaluate(function() {
2806 $(".use-entropy").prop("checked", true).trigger("change"); 2930 $(".use-entropy").prop("checked", true).trigger("change");
2807 $(".mnemonic-length").val("raw");
2808 }); 2931 });
2809 var nextTest = function runNextTest(i) { 2932 var nextTest = function runNextTest(i) {
2810 function getFeedbackError(expected, actual) { 2933 function getFeedbackError(expected, actual) {
@@ -2886,7 +3009,6 @@ page.open(url, function(status) {
2886 // use entropy 3009 // use entropy
2887 page.evaluate(function() { 3010 page.evaluate(function() {
2888 $(".use-entropy").prop("checked", true).trigger("change"); 3011 $(".use-entropy").prop("checked", true).trigger("change");
2889 $(".mnemonic-length").val("raw");
2890 var entropy = "00000000 00000000 00000000 00000000"; 3012 var entropy = "00000000 00000000 00000000 00000000";
2891 entropy += "11111111 11111111 11111111 1111"; // Missing last byte 3013 entropy += "11111111 11111111 11111111 1111"; // Missing last byte
2892 $(".entropy").val(entropy).trigger("input"); 3014 $(".entropy").val(entropy).trigger("input");
@@ -2913,7 +3035,6 @@ page.open(url, function(status) {
2913 // use entropy 3035 // use entropy
2914 page.evaluate(function() { 3036 page.evaluate(function() {
2915 $(".use-entropy").prop("checked", true).trigger("change"); 3037 $(".use-entropy").prop("checked", true).trigger("change");
2916 $(".mnemonic-length").val("raw");
2917 var entropy = ""; 3038 var entropy = "";
2918 // Generate a very long entropy string 3039 // Generate a very long entropy string
2919 for (var i=0; i<33; i++) { 3040 for (var i=0; i<33; i++) {
@@ -2947,7 +3068,6 @@ page.open(url, function(status) {
2947 // use entropy 3068 // use entropy
2948 page.evaluate(function() { 3069 page.evaluate(function() {
2949 $(".use-entropy").prop("checked", true).trigger("change"); 3070 $(".use-entropy").prop("checked", true).trigger("change");
2950 $(".mnemonic-length").val("raw");
2951 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543"; 3071 var entropy = "543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543210543";
2952 $(".entropy").val(entropy).trigger("input"); 3072 $(".entropy").val(entropy).trigger("input");
2953 }); 3073 });
@@ -3039,7 +3159,6 @@ page.open(url, function(status) {
3039 // use entropy 3159 // use entropy
3040 page.evaluate(function() { 3160 page.evaluate(function() {
3041 $(".use-entropy").prop("checked", true).trigger("change"); 3161 $(".use-entropy").prop("checked", true).trigger("change");
3042 $(".mnemonic-length").val("raw");
3043 $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D").trigger("input"); 3162 $(".entropy").val("7S 9H 9S QH 8C KS AS 7D 7C QD 4S 4D TC 2D 5S JS 3D 8S 8H 4C 3C AC 3S QC 9C JC 7H AD TD JD 6D KH 5C QS 2S 6S 6H JH KD 9D-6C TS TH 4H KC 5H 2H AH 2C 8D 3H 5D").trigger("input");
3044 }); 3163 });
3045 // get the mnemonic 3164 // get the mnemonic
@@ -3345,6 +3464,7 @@ page.open(url, function(status) {
3345 // use entropy 3464 // use entropy
3346 page.evaluate(function() { 3465 page.evaluate(function() {
3347 $(".use-entropy").prop("checked", true).trigger("change"); 3466 $(".use-entropy").prop("checked", true).trigger("change");
3467 $(".mnemonic-length").val("15");
3348 $(".entropy").val("1111").trigger("input"); 3468 $(".entropy").val("1111").trigger("input");
3349 }); 3469 });
3350 waitForGenerate(function() { 3470 waitForGenerate(function() {
@@ -3364,6 +3484,163 @@ page.open(url, function(status) {
3364}); 3484});
3365}, 3485},
3366 3486
3487// Github pull request 55
3488// https://github.com/iancoleman/bip39/pull/55
3489// Client select
3490function() {
3491page.open(url, function(status) {
3492 // set mnemonic and select bip32 tab
3493 page.evaluate(function() {
3494 $("#bip32-tab a").click();
3495 $(".phrase").val("abandon abandon ability").trigger("input");
3496 });
3497 waitForGenerate(function() {
3498 // BITCOIN CORE
3499 // set bip32 client to bitcoin core
3500 page.evaluate(function() {
3501 var bitcoinCoreIndex = "0";
3502 $("#bip32-client").val(bitcoinCoreIndex).trigger("change");
3503 });
3504 waitForGenerate(function() {
3505 // get the derivation path
3506 var actual = page.evaluate(function() {
3507 return $("#bip32-path").val();
3508 });
3509 // check the derivation path is correct
3510 expected = "m/0'/0'"
3511 if (actual != expected) {
3512 console.log("Selecting Bitcoin Core client does not set correct derivation path");
3513 console.log("Expected: " + expected);
3514 console.log("Actual: " + actual);
3515 fail();
3516 }
3517 // get hardened addresses
3518 var usesHardenedAddresses = page.evaluate(function() {
3519 return $(".hardened-addresses").prop("checked");
3520 });
3521 // check hardened addresses is selected
3522 if(!usesHardenedAddresses) {
3523 console.log("Selecting Bitcoin Core client does not use hardened addresses");
3524 fail();
3525 }
3526 // check input is readonly
3527 var pathIsReadonly = page.evaluate(function() {
3528 return $("#bip32-path").prop("readonly");
3529 });
3530 if (!pathIsReadonly) {
3531 console.log("Selecting Bitcoin Core client does not set derivation path to readonly");
3532 fail();
3533 }
3534 // MULTIBIT
3535 // set bip32 client to multibit
3536 page.evaluate(function() {
3537 var multibitIndex = "2";
3538 $("#bip32-client").val(multibitIndex).trigger("change");
3539 });
3540 waitForGenerate(function() {
3541 // get the derivation path
3542 var actual = page.evaluate(function() {
3543 return $("#bip32-path").val();
3544 });
3545 // check the derivation path is correct
3546 expected = "m/0'/0"
3547 if (actual != expected) {
3548 console.log("Selecting Multibit client does not set correct derivation path");
3549 console.log("Expected: " + expected);
3550 console.log("Actual: " + actual);
3551 fail();
3552 }
3553 // get hardened addresses
3554 var usesHardenedAddresses = page.evaluate(function() {
3555 return $(".hardened-addresses").prop("checked");
3556 });
3557 // check hardened addresses is selected
3558 if(usesHardenedAddresses) {
3559 console.log("Selecting Multibit client does not uncheck hardened addresses");
3560 fail();
3561 }
3562 // CUSTOM DERIVATION PATH
3563 // check input is not readonly
3564 page.evaluate(function() {
3565 $("#bip32-client").val("custom").trigger("change");
3566 });
3567 // do not wait for generate, since there is no change to the
3568 // derivation path there is no new generation performed
3569 var pathIsReadonly = page.evaluate(function() {
3570 return $("#bip32-path").prop("readonly");
3571 });
3572 if (pathIsReadonly) {
3573 console.log("Selecting Custom Derivation Path does not allow derivation path input");
3574 fail();
3575 }
3576 next();
3577 });
3578 });
3579 });
3580});
3581},
3582
3583// github issue 58
3584// https://github.com/iancoleman/bip39/issues/58
3585// bip32 derivation is correct, does not drop leading zeros
3586// see also
3587// https://medium.com/@alexberegszaszi/why-do-my-bip32-wallets-disagree-6f3254cc5846
3588function() {
3589page.open(url, function(status) {
3590 // set the phrase and passphrase
3591 var expected = "17rxURoF96VhmkcEGCj5LNQkmN9HVhWb7F";
3592 // Note that bitcore generates an incorrect address
3593 // 13EuKhffWkBE2KUwcbkbELZb1MpzbimJ3Y
3594 // see the medium.com link above for more details
3595 page.evaluate(function() {
3596 $(".phrase").val("fruit wave dwarf banana earth journey tattoo true farm silk olive fence");
3597 $(".passphrase").val("banana").trigger("input");
3598 });
3599 // check the address is generated correctly
3600 waitForGenerate(function() {
3601 var actual = page.evaluate(function() {
3602 return $(".address:first").text();
3603 });
3604 if (actual != expected) {
3605 console.log("BIP32 derivation is incorrect");
3606 console.log("Expected: " + expected);
3607 console.log("Actual: " + actual);
3608 fail();
3609 }
3610 next();
3611 });
3612});
3613},
3614
3615
3616// github issue 60
3617// Japanese mnemonics generate incorrect bip32 seed
3618// BIP39 seed is set from phrase
3619function() {
3620page.open(url, function(status) {
3621 // set the phrase
3622 var expected = "a262d6fb6122ecf45be09c50492b31f92e9beb7d9a845987a02cefda57a15f9c467a17872029a9e92299b5cbdf306e3a0ee620245cbd508959b6cb7ca637bd55";
3623 page.evaluate(function() {
3624 $(".phrase").val("あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あおぞら");
3625 $("#passphrase").val("メートルガバヴァぱばぐゞちぢ十人十色");
3626 $("#passphrase").trigger("input");
3627 });
3628 // check the seed is generated correctly
3629 waitForGenerate(function() {
3630 var actual = page.evaluate(function() {
3631 return $(".seed").val();
3632 });
3633 if (actual != expected) {
3634 console.log("BIP39 seed is incorrectly generated from Japanese mnemonic");
3635 console.log("Expected: " + expected);
3636 console.log("Actual: " + actual);
3637 fail();
3638 }
3639 next();
3640 });
3641});
3642},
3643
3367// If you wish to add more tests, do so here... 3644// If you wish to add more tests, do so here...
3368 3645
3369// Here is a blank test template 3646// Here is a blank test template