1 line
326 KiB
JSON
1 line
326 KiB
JSON
{"ast":null,"code":"(function (module, exports) {\n 'use strict'; // Utils\n\n function assert(val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n } // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n\n\n function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n\n var TempCtor = function () {};\n\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n } // BN\n\n\n function BN(number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0; // Reduction context\n\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n var Buffer;\n\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {}\n\n BN.isBN = function isBN(num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max(left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min(left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init(number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n\n assert(base === (base | 0) && base >= 2 && base <= 36);\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber(number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n\n this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1];\n this.length = 3;\n }\n\n if (endian !== 'le') return; // Reverse the bytes\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray(number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;\n this.words[j] |= w << off & 0x3ffffff;\n this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n off += 24;\n\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;\n this.words[j] |= w << off & 0x3ffffff;\n this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n off += 24;\n\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n\n return this._strip();\n };\n\n function parseHex4Bits(string, index) {\n var c = string.charCodeAt(index); // '0' - '9'\n\n if (c >= 48 && c <= 57) {\n return c - 48; // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55; // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte(string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex(number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n } // 24-bits chunks\n\n\n var off = 0;\n var j = 0;\n var w;\n\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase(str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n r *= mul; // 'a'\n\n if (c >= 49) {\n b = c - 49 + 0xa; // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa; // '0' - '9'\n } else {\n b = c;\n }\n\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase(number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1; // Find length of limb in base\n\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n\n limbLen--;\n limbPow = limbPow / base | 0;\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n var word = 0;\n\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n this.imuln(limbPow);\n\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy(dest) {\n dest.words = new Array(this.length);\n\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move(dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move(dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone() {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand(size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n\n return this;\n }; // Remove leading `0` from `this`\n\n\n BN.prototype._strip = function strip() {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign() {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n\n return this;\n }; // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n\n\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect() {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n /*\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n */\n\n\n var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000'];\n var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5];\n var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176];\n\n BN.prototype.toString = function toString(base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n var out;\n\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = ((w << off | carry) & 0xffffff).toString(16);\n carry = w >>> 24 - off & 0xffffff;\n\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n\n off += 2;\n\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n\n if (this.negative !== 0) {\n out = '-' + out;\n }\n\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize);\n\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n\n if (this.isZero()) {\n out = '0' + out;\n }\n\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n\n if (this.negative !== 0) {\n out = '-' + out;\n }\n\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber() {\n var ret = this.words[0];\n\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + this.words[1] * 0x4000000;\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n\n return this.negative !== 0 ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON() {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer(endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray(endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate(ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE(res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = this.words[i] << shift | carry;\n res[position++] = word & 0xff;\n\n if (position < res.length) {\n res[position++] = word >> 8 & 0xff;\n }\n\n if (position < res.length) {\n res[position++] = word >> 16 & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = word >> 24 & 0xff;\n }\n\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE(res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = this.words[i] << shift | carry;\n res[position--] = word & 0xff;\n\n if (position >= 0) {\n res[position--] = word >> 8 & 0xff;\n }\n\n if (position >= 0) {\n res[position--] = word >> 16 & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = word >> 24 & 0xff;\n }\n\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits(w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits(w) {\n var t = w;\n var r = 0;\n\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits(w) {\n // Short-cut\n if (w === 0) return 26;\n var t = w;\n var r = 0;\n\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n\n if ((t & 0x1) === 0) {\n r++;\n }\n\n return r;\n }; // Return number of used bits in a BN\n\n\n BN.prototype.bitLength = function bitLength() {\n var w = this.words[this.length - 1];\n\n var hi = this._countBits(w);\n\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray(num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = bit / 26 | 0;\n var wbit = bit % 26;\n w[bit] = num.words[off] >>> wbit & 0x01;\n }\n\n return w;\n } // Number of trailing zero bits\n\n\n BN.prototype.zeroBits = function zeroBits() {\n if (this.isZero()) return 0;\n var r = 0;\n\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n\n r += b;\n if (b !== 26) break;\n }\n\n return r;\n };\n\n BN.prototype.byteLength = function byteLength() {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos(width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos(width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg() {\n return this.negative !== 0;\n }; // Return negative clone of `this`\n\n\n BN.prototype.neg = function neg() {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg() {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n }; // Or `num` with `this` in-place\n\n\n BN.prototype.iuor = function iuor(num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n }; // Or `num` with `this`\n\n\n BN.prototype.or = function or(num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor(num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n }; // And `num` with `this` in-place\n\n\n BN.prototype.iuand = function iuand(num) {\n // b = min-length(num, this)\n var b;\n\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n return this._strip();\n };\n\n BN.prototype.iand = function iand(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n }; // And `num` with `this`\n\n\n BN.prototype.and = function and(num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand(num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n }; // Xor `num` with `this` in-place\n\n\n BN.prototype.iuxor = function iuxor(num) {\n // a.length > b.length\n var a;\n var b;\n\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor(num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n }; // Xor `num` with `this`\n\n\n BN.prototype.xor = function xor(num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor(num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n }; // Not ``this`` with ``width`` bitwidth\n\n\n BN.prototype.inotn = function inotn(width) {\n assert(typeof width === 'number' && width >= 0);\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26; // Extend the buffer with leading zeroes\n\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n } // Handle complete words\n\n\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n } // Handle the residue\n\n\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft;\n } // And remove leading zeroes\n\n\n return this._strip();\n };\n\n BN.prototype.notn = function notn(width) {\n return this.clone().inotn(width);\n }; // Set `bit` of `this`\n\n\n BN.prototype.setn = function setn(bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n var off = bit / 26 | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | 1 << wbit;\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n }; // Add `num` to `this` in-place\n\n\n BN.prototype.iadd = function iadd(num) {\n var r; // negative + positive\n\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign(); // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n } // a.length > b.length\n\n\n var a, b;\n\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++; // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n }; // Add `num` to `this`\n\n\n BN.prototype.add = function add(num) {\n var res;\n\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n return num.clone().iadd(this);\n }; // Subtract `num` from `this` in-place\n\n\n BN.prototype.isub = function isub(num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign(); // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n } // At this point both numbers are positive\n\n\n var cmp = this.cmp(num); // Optimization - zeroify\n\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n } // a > b\n\n\n var a, b;\n\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n } // Copy rest of the words\n\n\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n }; // Subtract `num` from `this`\n\n\n BN.prototype.sub = function sub(num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo(self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = self.length + num.length | 0;\n out.length = len;\n len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity)\n\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n var lo = r & 0x3ffffff;\n var carry = r / 0x4000000 | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += r / 0x4000000 | 0;\n rword = r & 0x3ffffff;\n }\n\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n } // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n\n\n var comb10MulTo = function comb10MulTo(self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = mid + Math.imul(ah0, bl0) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = mid + Math.imul(ah1, bl0) | 0;\n hi = Math.imul(ah1, bh0);\n lo = lo + Math.imul(al0, bl1) | 0;\n mid = mid + Math.imul(al0, bh1) | 0;\n mid = mid + Math.imul(ah0, bl1) | 0;\n hi = hi + Math.imul(ah0, bh1) | 0;\n var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = mid + Math.imul(ah2, bl0) | 0;\n hi = Math.imul(ah2, bh0);\n lo = lo + Math.imul(al1, bl1) | 0;\n mid = mid + Math.imul(al1, bh1) | 0;\n mid = mid + Math.imul(ah1, bl1) | 0;\n hi = hi + Math.imul(ah1, bh1) | 0;\n lo = lo + Math.imul(al0, bl2) | 0;\n mid = mid + Math.imul(al0, bh2) | 0;\n mid = mid + Math.imul(ah0, bl2) | 0;\n hi = hi + Math.imul(ah0, bh2) | 0;\n var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = mid + Math.imul(ah3, bl0) | 0;\n hi = Math.imul(ah3, bh0);\n lo = lo + Math.imul(al2, bl1) | 0;\n mid = mid + Math.imul(al2, bh1) | 0;\n mid = mid + Math.imul(ah2, bl1) | 0;\n hi = hi + Math.imul(ah2, bh1) | 0;\n lo = lo + Math.imul(al1, bl2) | 0;\n mid = mid + Math.imul(al1, bh2) | 0;\n mid = mid + Math.imul(ah1, bl2) | 0;\n hi = hi + Math.imul(ah1, bh2) | 0;\n lo = lo + Math.imul(al0, bl3) | 0;\n mid = mid + Math.imul(al0, bh3) | 0;\n mid = mid + Math.imul(ah0, bl3) | 0;\n hi = hi + Math.imul(ah0, bh3) | 0;\n var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = mid + Math.imul(ah4, bl0) | 0;\n hi = Math.imul(ah4, bh0);\n lo = lo + Math.imul(al3, bl1) | 0;\n mid = mid + Math.imul(al3, bh1) | 0;\n mid = mid + Math.imul(ah3, bl1) | 0;\n hi = hi + Math.imul(ah3, bh1) | 0;\n lo = lo + Math.imul(al2, bl2) | 0;\n mid = mid + Math.imul(al2, bh2) | 0;\n mid = mid + Math.imul(ah2, bl2) | 0;\n hi = hi + Math.imul(ah2, bh2) | 0;\n lo = lo + Math.imul(al1, bl3) | 0;\n mid = mid + Math.imul(al1, bh3) | 0;\n mid = mid + Math.imul(ah1, bl3) | 0;\n hi = hi + Math.imul(ah1, bh3) | 0;\n lo = lo + Math.imul(al0, bl4) | 0;\n mid = mid + Math.imul(al0, bh4) | 0;\n mid = mid + Math.imul(ah0, bl4) | 0;\n hi = hi + Math.imul(ah0, bh4) | 0;\n var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = mid + Math.imul(ah5, bl0) | 0;\n hi = Math.imul(ah5, bh0);\n lo = lo + Math.imul(al4, bl1) | 0;\n mid = mid + Math.imul(al4, bh1) | 0;\n mid = mid + Math.imul(ah4, bl1) | 0;\n hi = hi + Math.imul(ah4, bh1) | 0;\n lo = lo + Math.imul(al3, bl2) | 0;\n mid = mid + Math.imul(al3, bh2) | 0;\n mid = mid + Math.imul(ah3, bl2) | 0;\n hi = hi + Math.imul(ah3, bh2) | 0;\n lo = lo + Math.imul(al2, bl3) | 0;\n mid = mid + Math.imul(al2, bh3) | 0;\n mid = mid + Math.imul(ah2, bl3) | 0;\n hi = hi + Math.imul(ah2, bh3) | 0;\n lo = lo + Math.imul(al1, bl4) | 0;\n mid = mid + Math.imul(al1, bh4) | 0;\n mid = mid + Math.imul(ah1, bl4) | 0;\n hi = hi + Math.imul(ah1, bh4) | 0;\n lo = lo + Math.imul(al0, bl5) | 0;\n mid = mid + Math.imul(al0, bh5) | 0;\n mid = mid + Math.imul(ah0, bl5) | 0;\n hi = hi + Math.imul(ah0, bh5) | 0;\n var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = mid + Math.imul(ah6, bl0) | 0;\n hi = Math.imul(ah6, bh0);\n lo = lo + Math.imul(al5, bl1) | 0;\n mid = mid + Math.imul(al5, bh1) | 0;\n mid = mid + Math.imul(ah5, bl1) | 0;\n hi = hi + Math.imul(ah5, bh1) | 0;\n lo = lo + Math.imul(al4, bl2) | 0;\n mid = mid + Math.imul(al4, bh2) | 0;\n mid = mid + Math.imul(ah4, bl2) | 0;\n hi = hi + Math.imul(ah4, bh2) | 0;\n lo = lo + Math.imul(al3, bl3) | 0;\n mid = mid + Math.imul(al3, bh3) | 0;\n mid = mid + Math.imul(ah3, bl3) | 0;\n hi = hi + Math.imul(ah3, bh3) | 0;\n lo = lo + Math.imul(al2, bl4) | 0;\n mid = mid + Math.imul(al2, bh4) | 0;\n mid = mid + Math.imul(ah2, bl4) | 0;\n hi = hi + Math.imul(ah2, bh4) | 0;\n lo = lo + Math.imul(al1, bl5) | 0;\n mid = mid + Math.imul(al1, bh5) | 0;\n mid = mid + Math.imul(ah1, bl5) | 0;\n hi = hi + Math.imul(ah1, bh5) | 0;\n lo = lo + Math.imul(al0, bl6) | 0;\n mid = mid + Math.imul(al0, bh6) | 0;\n mid = mid + Math.imul(ah0, bl6) | 0;\n hi = hi + Math.imul(ah0, bh6) | 0;\n var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = mid + Math.imul(ah7, bl0) | 0;\n hi = Math.imul(ah7, bh0);\n lo = lo + Math.imul(al6, bl1) | 0;\n mid = mid + Math.imul(al6, bh1) | 0;\n mid = mid + Math.imul(ah6, bl1) | 0;\n hi = hi + Math.imul(ah6, bh1) | 0;\n lo = lo + Math.imul(al5, bl2) | 0;\n mid = mid + Math.imul(al5, bh2) | 0;\n mid = mid + Math.imul(ah5, bl2) | 0;\n hi = hi + Math.imul(ah5, bh2) | 0;\n lo = lo + Math.imul(al4, bl3) | 0;\n mid = mid + Math.imul(al4, bh3) | 0;\n mid = mid + Math.imul(ah4, bl3) | 0;\n hi = hi + Math.imul(ah4, bh3) | 0;\n lo = lo + Math.imul(al3, bl4) | 0;\n mid = mid + Math.imul(al3, bh4) | 0;\n mid = mid + Math.imul(ah3, bl4) | 0;\n hi = hi + Math.imul(ah3, bh4) | 0;\n lo = lo + Math.imul(al2, bl5) | 0;\n mid = mid + Math.imul(al2, bh5) | 0;\n mid = mid + Math.imul(ah2, bl5) | 0;\n hi = hi + Math.imul(ah2, bh5) | 0;\n lo = lo + Math.imul(al1, bl6) | 0;\n mid = mid + Math.imul(al1, bh6) | 0;\n mid = mid + Math.imul(ah1, bl6) | 0;\n hi = hi + Math.imul(ah1, bh6) | 0;\n lo = lo + Math.imul(al0, bl7) | 0;\n mid = mid + Math.imul(al0, bh7) | 0;\n mid = mid + Math.imul(ah0, bl7) | 0;\n hi = hi + Math.imul(ah0, bh7) | 0;\n var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = mid + Math.imul(ah8, bl0) | 0;\n hi = Math.imul(ah8, bh0);\n lo = lo + Math.imul(al7, bl1) | 0;\n mid = mid + Math.imul(al7, bh1) | 0;\n mid = mid + Math.imul(ah7, bl1) | 0;\n hi = hi + Math.imul(ah7, bh1) | 0;\n lo = lo + Math.imul(al6, bl2) | 0;\n mid = mid + Math.imul(al6, bh2) | 0;\n mid = mid + Math.imul(ah6, bl2) | 0;\n hi = hi + Math.imul(ah6, bh2) | 0;\n lo = lo + Math.imul(al5, bl3) | 0;\n mid = mid + Math.imul(al5, bh3) | 0;\n mid = mid + Math.imul(ah5, bl3) | 0;\n hi = hi + Math.imul(ah5, bh3) | 0;\n lo = lo + Math.imul(al4, bl4) | 0;\n mid = mid + Math.imul(al4, bh4) | 0;\n mid = mid + Math.imul(ah4, bl4) | 0;\n hi = hi + Math.imul(ah4, bh4) | 0;\n lo = lo + Math.imul(al3, bl5) | 0;\n mid = mid + Math.imul(al3, bh5) | 0;\n mid = mid + Math.imul(ah3, bl5) | 0;\n hi = hi + Math.imul(ah3, bh5) | 0;\n lo = lo + Math.imul(al2, bl6) | 0;\n mid = mid + Math.imul(al2, bh6) | 0;\n mid = mid + Math.imul(ah2, bl6) | 0;\n hi = hi + Math.imul(ah2, bh6) | 0;\n lo = lo + Math.imul(al1, bl7) | 0;\n mid = mid + Math.imul(al1, bh7) | 0;\n mid = mid + Math.imul(ah1, bl7) | 0;\n hi = hi + Math.imul(ah1, bh7) | 0;\n lo = lo + Math.imul(al0, bl8) | 0;\n mid = mid + Math.imul(al0, bh8) | 0;\n mid = mid + Math.imul(ah0, bl8) | 0;\n hi = hi + Math.imul(ah0, bh8) | 0;\n var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = mid + Math.imul(ah9, bl0) | 0;\n hi = Math.imul(ah9, bh0);\n lo = lo + Math.imul(al8, bl1) | 0;\n mid = mid + Math.imul(al8, bh1) | 0;\n mid = mid + Math.imul(ah8, bl1) | 0;\n hi = hi + Math.imul(ah8, bh1) | 0;\n lo = lo + Math.imul(al7, bl2) | 0;\n mid = mid + Math.imul(al7, bh2) | 0;\n mid = mid + Math.imul(ah7, bl2) | 0;\n hi = hi + Math.imul(ah7, bh2) | 0;\n lo = lo + Math.imul(al6, bl3) | 0;\n mid = mid + Math.imul(al6, bh3) | 0;\n mid = mid + Math.imul(ah6, bl3) | 0;\n hi = hi + Math.imul(ah6, bh3) | 0;\n lo = lo + Math.imul(al5, bl4) | 0;\n mid = mid + Math.imul(al5, bh4) | 0;\n mid = mid + Math.imul(ah5, bl4) | 0;\n hi = hi + Math.imul(ah5, bh4) | 0;\n lo = lo + Math.imul(al4, bl5) | 0;\n mid = mid + Math.imul(al4, bh5) | 0;\n mid = mid + Math.imul(ah4, bl5) | 0;\n hi = hi + Math.imul(ah4, bh5) | 0;\n lo = lo + Math.imul(al3, bl6) | 0;\n mid = mid + Math.imul(al3, bh6) | 0;\n mid = mid + Math.imul(ah3, bl6) | 0;\n hi = hi + Math.imul(ah3, bh6) | 0;\n lo = lo + Math.imul(al2, bl7) | 0;\n mid = mid + Math.imul(al2, bh7) | 0;\n mid = mid + Math.imul(ah2, bl7) | 0;\n hi = hi + Math.imul(ah2, bh7) | 0;\n lo = lo + Math.imul(al1, bl8) | 0;\n mid = mid + Math.imul(al1, bh8) | 0;\n mid = mid + Math.imul(ah1, bl8) | 0;\n hi = hi + Math.imul(ah1, bh8) | 0;\n lo = lo + Math.imul(al0, bl9) | 0;\n mid = mid + Math.imul(al0, bh9) | 0;\n mid = mid + Math.imul(ah0, bl9) | 0;\n hi = hi + Math.imul(ah0, bh9) | 0;\n var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = mid + Math.imul(ah9, bl1) | 0;\n hi = Math.imul(ah9, bh1);\n lo = lo + Math.imul(al8, bl2) | 0;\n mid = mid + Math.imul(al8, bh2) | 0;\n mid = mid + Math.imul(ah8, bl2) | 0;\n hi = hi + Math.imul(ah8, bh2) | 0;\n lo = lo + Math.imul(al7, bl3) | 0;\n mid = mid + Math.imul(al7, bh3) | 0;\n mid = mid + Math.imul(ah7, bl3) | 0;\n hi = hi + Math.imul(ah7, bh3) | 0;\n lo = lo + Math.imul(al6, bl4) | 0;\n mid = mid + Math.imul(al6, bh4) | 0;\n mid = mid + Math.imul(ah6, bl4) | 0;\n hi = hi + Math.imul(ah6, bh4) | 0;\n lo = lo + Math.imul(al5, bl5) | 0;\n mid = mid + Math.imul(al5, bh5) | 0;\n mid = mid + Math.imul(ah5, bl5) | 0;\n hi = hi + Math.imul(ah5, bh5) | 0;\n lo = lo + Math.imul(al4, bl6) | 0;\n mid = mid + Math.imul(al4, bh6) | 0;\n mid = mid + Math.imul(ah4, bl6) | 0;\n hi = hi + Math.imul(ah4, bh6) | 0;\n lo = lo + Math.imul(al3, bl7) | 0;\n mid = mid + Math.imul(al3, bh7) | 0;\n mid = mid + Math.imul(ah3, bl7) | 0;\n hi = hi + Math.imul(ah3, bh7) | 0;\n lo = lo + Math.imul(al2, bl8) | 0;\n mid = mid + Math.imul(al2, bh8) | 0;\n mid = mid + Math.imul(ah2, bl8) | 0;\n hi = hi + Math.imul(ah2, bh8) | 0;\n lo = lo + Math.imul(al1, bl9) | 0;\n mid = mid + Math.imul(al1, bh9) | 0;\n mid = mid + Math.imul(ah1, bl9) | 0;\n hi = hi + Math.imul(ah1, bh9) | 0;\n var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = mid + Math.imul(ah9, bl2) | 0;\n hi = Math.imul(ah9, bh2);\n lo = lo + Math.imul(al8, bl3) | 0;\n mid = mid + Math.imul(al8, bh3) | 0;\n mid = mid + Math.imul(ah8, bl3) | 0;\n hi = hi + Math.imul(ah8, bh3) | 0;\n lo = lo + Math.imul(al7, bl4) | 0;\n mid = mid + Math.imul(al7, bh4) | 0;\n mid = mid + Math.imul(ah7, bl4) | 0;\n hi = hi + Math.imul(ah7, bh4) | 0;\n lo = lo + Math.imul(al6, bl5) | 0;\n mid = mid + Math.imul(al6, bh5) | 0;\n mid = mid + Math.imul(ah6, bl5) | 0;\n hi = hi + Math.imul(ah6, bh5) | 0;\n lo = lo + Math.imul(al5, bl6) | 0;\n mid = mid + Math.imul(al5, bh6) | 0;\n mid = mid + Math.imul(ah5, bl6) | 0;\n hi = hi + Math.imul(ah5, bh6) | 0;\n lo = lo + Math.imul(al4, bl7) | 0;\n mid = mid + Math.imul(al4, bh7) | 0;\n mid = mid + Math.imul(ah4, bl7) | 0;\n hi = hi + Math.imul(ah4, bh7) | 0;\n lo = lo + Math.imul(al3, bl8) | 0;\n mid = mid + Math.imul(al3, bh8) | 0;\n mid = mid + Math.imul(ah3, bl8) | 0;\n hi = hi + Math.imul(ah3, bh8) | 0;\n lo = lo + Math.imul(al2, bl9) | 0;\n mid = mid + Math.imul(al2, bh9) | 0;\n mid = mid + Math.imul(ah2, bl9) | 0;\n hi = hi + Math.imul(ah2, bh9) | 0;\n var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = mid + Math.imul(ah9, bl3) | 0;\n hi = Math.imul(ah9, bh3);\n lo = lo + Math.imul(al8, bl4) | 0;\n mid = mid + Math.imul(al8, bh4) | 0;\n mid = mid + Math.imul(ah8, bl4) | 0;\n hi = hi + Math.imul(ah8, bh4) | 0;\n lo = lo + Math.imul(al7, bl5) | 0;\n mid = mid + Math.imul(al7, bh5) | 0;\n mid = mid + Math.imul(ah7, bl5) | 0;\n hi = hi + Math.imul(ah7, bh5) | 0;\n lo = lo + Math.imul(al6, bl6) | 0;\n mid = mid + Math.imul(al6, bh6) | 0;\n mid = mid + Math.imul(ah6, bl6) | 0;\n hi = hi + Math.imul(ah6, bh6) | 0;\n lo = lo + Math.imul(al5, bl7) | 0;\n mid = mid + Math.imul(al5, bh7) | 0;\n mid = mid + Math.imul(ah5, bl7) | 0;\n hi = hi + Math.imul(ah5, bh7) | 0;\n lo = lo + Math.imul(al4, bl8) | 0;\n mid = mid + Math.imul(al4, bh8) | 0;\n mid = mid + Math.imul(ah4, bl8) | 0;\n hi = hi + Math.imul(ah4, bh8) | 0;\n lo = lo + Math.imul(al3, bl9) | 0;\n mid = mid + Math.imul(al3, bh9) | 0;\n mid = mid + Math.imul(ah3, bl9) | 0;\n hi = hi + Math.imul(ah3, bh9) | 0;\n var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = mid + Math.imul(ah9, bl4) | 0;\n hi = Math.imul(ah9, bh4);\n lo = lo + Math.imul(al8, bl5) | 0;\n mid = mid + Math.imul(al8, bh5) | 0;\n mid = mid + Math.imul(ah8, bl5) | 0;\n hi = hi + Math.imul(ah8, bh5) | 0;\n lo = lo + Math.imul(al7, bl6) | 0;\n mid = mid + Math.imul(al7, bh6) | 0;\n mid = mid + Math.imul(ah7, bl6) | 0;\n hi = hi + Math.imul(ah7, bh6) | 0;\n lo = lo + Math.imul(al6, bl7) | 0;\n mid = mid + Math.imul(al6, bh7) | 0;\n mid = mid + Math.imul(ah6, bl7) | 0;\n hi = hi + Math.imul(ah6, bh7) | 0;\n lo = lo + Math.imul(al5, bl8) | 0;\n mid = mid + Math.imul(al5, bh8) | 0;\n mid = mid + Math.imul(ah5, bl8) | 0;\n hi = hi + Math.imul(ah5, bh8) | 0;\n lo = lo + Math.imul(al4, bl9) | 0;\n mid = mid + Math.imul(al4, bh9) | 0;\n mid = mid + Math.imul(ah4, bl9) | 0;\n hi = hi + Math.imul(ah4, bh9) | 0;\n var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = mid + Math.imul(ah9, bl5) | 0;\n hi = Math.imul(ah9, bh5);\n lo = lo + Math.imul(al8, bl6) | 0;\n mid = mid + Math.imul(al8, bh6) | 0;\n mid = mid + Math.imul(ah8, bl6) | 0;\n hi = hi + Math.imul(ah8, bh6) | 0;\n lo = lo + Math.imul(al7, bl7) | 0;\n mid = mid + Math.imul(al7, bh7) | 0;\n mid = mid + Math.imul(ah7, bl7) | 0;\n hi = hi + Math.imul(ah7, bh7) | 0;\n lo = lo + Math.imul(al6, bl8) | 0;\n mid = mid + Math.imul(al6, bh8) | 0;\n mid = mid + Math.imul(ah6, bl8) | 0;\n hi = hi + Math.imul(ah6, bh8) | 0;\n lo = lo + Math.imul(al5, bl9) | 0;\n mid = mid + Math.imul(al5, bh9) | 0;\n mid = mid + Math.imul(ah5, bl9) | 0;\n hi = hi + Math.imul(ah5, bh9) | 0;\n var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = mid + Math.imul(ah9, bl6) | 0;\n hi = Math.imul(ah9, bh6);\n lo = lo + Math.imul(al8, bl7) | 0;\n mid = mid + Math.imul(al8, bh7) | 0;\n mid = mid + Math.imul(ah8, bl7) | 0;\n hi = hi + Math.imul(ah8, bh7) | 0;\n lo = lo + Math.imul(al7, bl8) | 0;\n mid = mid + Math.imul(al7, bh8) | 0;\n mid = mid + Math.imul(ah7, bl8) | 0;\n hi = hi + Math.imul(ah7, bh8) | 0;\n lo = lo + Math.imul(al6, bl9) | 0;\n mid = mid + Math.imul(al6, bh9) | 0;\n mid = mid + Math.imul(ah6, bl9) | 0;\n hi = hi + Math.imul(ah6, bh9) | 0;\n var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = mid + Math.imul(ah9, bl7) | 0;\n hi = Math.imul(ah9, bh7);\n lo = lo + Math.imul(al8, bl8) | 0;\n mid = mid + Math.imul(al8, bh8) | 0;\n mid = mid + Math.imul(ah8, bl8) | 0;\n hi = hi + Math.imul(ah8, bh8) | 0;\n lo = lo + Math.imul(al7, bl9) | 0;\n mid = mid + Math.imul(al7, bh9) | 0;\n mid = mid + Math.imul(ah7, bl9) | 0;\n hi = hi + Math.imul(ah7, bh9) | 0;\n var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = mid + Math.imul(ah9, bl8) | 0;\n hi = Math.imul(ah9, bh8);\n lo = lo + Math.imul(al8, bl9) | 0;\n mid = mid + Math.imul(al8, bh9) | 0;\n mid = mid + Math.imul(ah8, bl9) | 0;\n hi = hi + Math.imul(ah8, bh9) | 0;\n var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = mid + Math.imul(ah9, bl9) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n\n return out;\n }; // Polyfill comb\n\n\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo(self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n var carry = 0;\n var hncarry = 0;\n\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n var lo = r & 0x3ffffff;\n ncarry = ncarry + (r / 0x4000000 | 0) | 0;\n lo = lo + rword | 0;\n rword = lo & 0x3ffffff;\n ncarry = ncarry + (lo >>> 26) | 0;\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo(self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo(num, out) {\n var res;\n var len = this.length + num.length;\n\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n }; // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n\n function FFTM(x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT(N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n }; // Returns binary-reversed representation of `x`\n\n\n FFTM.prototype.revBin = function revBin(x, l, N) {\n if (x === 0 || x === N - 1) return x;\n var rb = 0;\n\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << l - i - 1;\n x >>= 1;\n }\n\n return rb;\n }; // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n\n\n FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n var rx = rtwdf_ * ro - itwdf_ * io;\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n /* jshint maxdepth : false */\n\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b(n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate(rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n t = iws[i];\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b(ws, N) {\n var carry = 0;\n\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry;\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {\n var carry = 0;\n\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n rws[2 * i] = carry & 0x1fff;\n carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff;\n carry = carry >>> 13;\n } // Pad with zeroes\n\n\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub(N) {\n var ph = new Array(N);\n\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp(x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n var rmws = out.words;\n rmws.length = N;\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n }; // Multiply `this` by `num`\n\n\n BN.prototype.mul = function mul(num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n }; // Multiply employing FFT\n\n\n BN.prototype.mulf = function mulf(num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n }; // In-place Multiplication\n\n\n BN.prototype.imul = function imul(num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln(num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n assert(typeof num === 'number');\n assert(num < 0x4000000); // Carry\n\n var carry = 0;\n\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum\n\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln(num) {\n return this.clone().imuln(num);\n }; // `this` * `this`\n\n\n BN.prototype.sqr = function sqr() {\n return this.mul(this);\n }; // `this` * `this` in-place\n\n\n BN.prototype.isqr = function isqr() {\n return this.imul(this.clone());\n }; // Math.pow(`this`, `num`)\n\n\n BN.prototype.pow = function pow(num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1); // Skip leading zeroes\n\n var res = this;\n\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n res = res.mul(q);\n }\n }\n\n return res;\n }; // Shift-left in-place\n\n\n BN.prototype.iushln = function iushln(bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = 0x3ffffff >>> 26 - r << 26 - r;\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = (this.words[i] | 0) - newCarry << r;\n this.words[i] = c | carry;\n carry = newCarry >>> 26 - r;\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln(bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n }; // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n\n\n BN.prototype.iushrn = function iushrn(bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n\n if (hint) {\n h = (hint - hint % 26) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n var maskedWords = extended;\n h -= s;\n h = Math.max(0, h); // Extended mode, copy masked part\n\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n\n maskedWords.length = s;\n }\n\n if (s === 0) {// No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = carry << 26 - r | word >>> r;\n carry = word & mask;\n } // Push carried bits as a mask\n\n\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn(bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n }; // Shift-left\n\n\n BN.prototype.shln = function shln(bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln(bits) {\n return this.clone().iushln(bits);\n }; // Shift-right\n\n\n BN.prototype.shrn = function shrn(bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn(bits) {\n return this.clone().iushrn(bits);\n }; // Test if n bit is set\n\n\n BN.prototype.testn = function testn(bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n if (this.length <= s) return false; // Check bit and return\n\n var w = this.words[s];\n return !!(w & q);\n }; // Return only lowers bits of number (in-place)\n\n\n BN.prototype.imaskn = function imaskn(bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n }; // Return only lowers bits of number\n\n\n BN.prototype.maskn = function maskn(bits) {\n return this.clone().imaskn(bits);\n }; // Add plain number `num` to `this`\n\n\n BN.prototype.iaddn = function iaddn(num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num); // Possible sign change\n\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n } // Add without checks\n\n\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn(num) {\n this.words[0] += num; // Carry\n\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n\n this.length = Math.max(this.length, i + 1);\n return this;\n }; // Subtract plain number `num` from `this`\n\n\n BN.prototype.isubn = function isubn(num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn(num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn(num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs() {\n this.negative = 0;\n return this;\n };\n\n BN.prototype.abs = function abs() {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - (right / 0x4000000 | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip(); // Subtraction overflow\n\n assert(carry === -1);\n carry = 0;\n\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n\n this.negative = 1;\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv(num, mode) {\n var shift = this.length - num.length;\n var a = this.clone();\n var b = num; // Normalize\n\n var bhi = b.words[b.length - 1] | 0;\n\n var bhiBits = this._countBits(bhi);\n\n shift = 26 - bhiBits;\n\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n } // Initialize quotient\n\n\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n\n if (diff.negative === 0) {\n a = diff;\n\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n\n qj = Math.min(qj / bhi | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n\n a._ishlnsubmul(b, 1, j);\n\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n\n if (q) {\n q.words[j] = qj;\n }\n }\n\n if (q) {\n q._strip();\n }\n\n a._strip(); // Denormalize\n\n\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n }; // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n\n\n BN.prototype.divmod = function divmod(num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n } // Both numbers are positive at this point\n // Strip both numbers to approximate shift value\n\n\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n } // Very short reduction\n\n\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n }; // Find `this` / `num`\n\n\n BN.prototype.div = function div(num) {\n return this.divmod(num, 'div', false).div;\n }; // Find `this` % `num`\n\n\n BN.prototype.mod = function mod(num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod(num) {\n return this.divmod(num, 'mod', true).mod;\n }; // Find Round(`this` / `num`)\n\n\n BN.prototype.divRound = function divRound(num) {\n var dm = this.divmod(num); // Fast case - exact division\n\n if (dm.mod.isZero()) return dm.div;\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half); // Round down\n\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up\n\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn(num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n var acc = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n }; // WARNING: DEPRECATED\n\n\n BN.prototype.modn = function modn(num) {\n return this.modrn(num);\n }; // In-place division by number\n\n\n BN.prototype.idivn = function idivn(num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n assert(num <= 0x3ffffff);\n var carry = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = w / num | 0;\n carry = w % num;\n }\n\n this._strip();\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn(num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd(p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n } // A * x + B * y = x\n\n\n var A = new BN(1);\n var B = new BN(0); // C * x + D * y = y\n\n var C = new BN(0);\n var D = new BN(1);\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n\n if (i > 0) {\n x.iushrn(i);\n\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n\n if (j > 0) {\n y.iushrn(j);\n\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n }; // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n\n\n BN.prototype._invmp = function _invmp(p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n\n if (i > 0) {\n a.iushrn(i);\n\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n\n if (j > 0) {\n b.iushrn(j);\n\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd(num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0; // Remove common factor of two\n\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n }; // Invert number in the field F(num)\n\n\n BN.prototype.invm = function invm(num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven() {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd() {\n return (this.words[0] & 1) === 1;\n }; // And first word and num\n\n\n BN.prototype.andln = function andln(num) {\n return this.words[0] & num;\n }; // Increment at the bit position in-line\n\n\n BN.prototype.bincn = function bincn(bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n if (this.length <= s) {\n this._expand(s + 1);\n\n this.words[s] |= q;\n return this;\n } // Add bit and propagate, if needed\n\n\n var carry = q;\n\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.isZero = function isZero() {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn(num) {\n var negative = num < 0;\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n\n if (this.negative !== 0) return -res | 0;\n return res;\n }; // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n\n\n BN.prototype.cmp = function cmp(num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n }; // Unsigned comparison\n\n\n BN.prototype.ucmp = function ucmp(num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n var res = 0;\n\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n if (a === b) continue;\n\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n\n break;\n }\n\n return res;\n };\n\n BN.prototype.gtn = function gtn(num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt(num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten(num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte(num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn(num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt(num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten(num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte(num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn(num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq(num) {\n return this.cmp(num) === 0;\n }; //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n\n\n BN.red = function red(num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed(ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed() {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed(ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed(ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd(num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd(num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub(num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub(num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl(num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul(num) {\n assert(this.red, 'redMul works only with red numbers');\n\n this.red._verify2(this, num);\n\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul(num) {\n assert(this.red, 'redMul works only with red numbers');\n\n this.red._verify2(this, num);\n\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr() {\n assert(this.red, 'redSqr works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr() {\n assert(this.red, 'redISqr works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.isqr(this);\n }; // Square root over p\n\n\n BN.prototype.redSqrt = function redSqrt() {\n assert(this.red, 'redSqrt works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm() {\n assert(this.red, 'redInvm works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.invm(this);\n }; // Return negative clone of `this` % `red modulo`\n\n\n BN.prototype.redNeg = function redNeg() {\n assert(this.red, 'redNeg works only with red numbers');\n\n this.red._verify1(this);\n\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow(num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n\n this.red._verify1(this);\n\n return this.red.pow(this, num);\n }; // Prime numbers with efficient reduction\n\n\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n }; // Pseudo-Mersenne prime\n\n function MPrime(name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp() {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce(num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split(input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK(num) {\n return num.imul(this.k);\n };\n\n function K256() {\n MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n\n inherits(K256, MPrime);\n\n K256.prototype.split = function split(input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n var outLen = Math.min(input.length, 9);\n\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n } // Shift by 9 limbs\n\n\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = (next & mask) << 4 | prev >>> 22;\n prev = next;\n }\n\n prev >>>= 22;\n input.words[i - 10] = prev;\n\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK(num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n\n var lo = 0;\n\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + (lo / 0x4000000 | 0);\n } // Fast length reduction\n\n\n if (num.words[num.length - 1] === 0) {\n num.length--;\n\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n\n return num;\n };\n\n function P224() {\n MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n\n inherits(P224, MPrime);\n\n function P192() {\n MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n\n inherits(P192, MPrime);\n\n function P25519() {\n // 2 ^ 255 - 19\n MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK(num) {\n // K = 0x13\n var carry = 0;\n\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n num.words[i] = lo;\n carry = hi;\n }\n\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n\n return num;\n }; // Exported mostly for testing purposes, use plain name instead\n\n\n BN._prime = function prime(name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n var prime;\n\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n\n primes[name] = prime;\n return prime;\n }; //\n // Base reduction engine\n //\n\n\n function Red(m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1(a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2(a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red, 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod(a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg(a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add(a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd(a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n\n return res;\n };\n\n Red.prototype.sub = function sub(a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub(a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n\n return res;\n };\n\n Red.prototype.shl = function shl(a, num) {\n this._verify1(a);\n\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul(a, b) {\n this._verify2(a, b);\n\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul(a, b) {\n this._verify2(a, b);\n\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr(a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr(a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt(a) {\n if (a.isZero()) return a.clone();\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1); // Fast case\n\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n } // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n\n\n var q = this.m.subn(1);\n var s = 0;\n\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n\n assert(!q.isZero());\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg(); // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n\n while (t.cmp(one) !== 0) {\n var tmp = t;\n\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm(a) {\n var inv = a._invmp(this.m);\n\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow(a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n\n for (var j = start - 1; j >= 0; j--) {\n var bit = word >> j & 1;\n\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo(num) {\n var r = num.umod(this.m);\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom(num) {\n var res = num.clone();\n res.red = null;\n return res;\n }; //\n // Montgomery method engine\n //\n\n\n BN.mont = function mont(num) {\n return new Mont(num);\n };\n\n function Mont(m) {\n Red.call(this, m);\n this.shift = this.m.bitLength();\n\n if (this.shift % 26 !== 0) {\n this.shift += 26 - this.shift % 26;\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo(num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom(num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul(a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul(a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm(a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/bn.js/lib/bn.js"],"names":["module","exports","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","negative","words","length","red","_init","wordSize","Buffer","window","require","e","num","Array","isArray","max","left","right","cmp","min","init","_initNumber","_initArray","toString","replace","start","_parseHex","_parseBase","toArray","Math","ceil","i","j","w","off","_strip","parseHex4Bits","string","index","c","charCodeAt","parseHexByte","lowerBound","r","parseLength","parseBase","str","end","mul","b","len","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","dest","move","src","_move","clone","_expand","size","strip","_normSign","Symbol","for","inspect","zeros","groupSizes","groupBases","padding","out","carry","groupSize","groupBase","isZero","modrn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","allocate","ArrayType","allocUnsafe","byteLength","reqLength","res","postfix","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","t","_zeroBits","bitLength","hi","toBitArray","bit","wbit","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","a","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","add","sub","smallMulTo","self","lo","k","ncarry","rword","maxJ","comb10MulTo","o","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","mulTo","FFTM","x","y","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","q","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","bhiBits","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","andln","acc","modn","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","ireduce","rlen","split","imulK","undefined","input","K256","call","output","outLen","prev","next","P224","P192","P25519","_prime","prime","imod","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","mont","Mont","rinv","minv","u"],"mappings":"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","sourcesContent":["(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n"]},"metadata":{},"sourceType":"script"} |