{"version":3,"sources":["webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/brorand/index.js"],"names":["exports","encrypt","self","block","_cipher","encryptBlock","decrypt","decryptBlock","aes","Buffer","Transform","StreamCipher","mode","key","iv","call","this","AES","_prev","from","_cache","allocUnsafe","_secCache","_decrypt","_mode","inherits","prototype","_update","chunk","_final","scrub","module","des","des3","CipherBase","modes","CBC","instantiate","EDE","DES","opts","type","modeName","toLowerCase","isBuffer","concat","slice","_des","create","data","update","final","xor","encryptStart","len","length","out","asUInt32Array","buf","Array","i","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","round","RCON","G","d","j","INV_SBOX","INV_SUB_MIX","x","xi","sx","x2","x4","x8","t","_key","_reset","blockSize","keySize","keyWords","ksRows","k","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","writeUInt32BE","m1","ZEROES","alloc","fromArray","GHASH","h","state","cache","ghash","_multiply","lsbVi","Vi","toArray","Zi","abl","bl","AuthCipher","MODES","ebtk","Decipher","Splitter","_last","_autopadding","createDecipheriv","suite","password","config","TypeError","thing","add","get","push","flush","last","padded","Error","unpad","setAutoPadding","setTo","autoPadding","createDecipher","keys","getBlock","pad","encryptByte","byteParam","bit","value","shiftIn","buffer","incr32","chunkNum","Math","ceil","start","offset","calcIv","ck","_finID","toPad","ivBits","tail","writeUIntBE","_ghash","_alen","_len","_authTag","_called","rump","tag","a","b","min","xorTest","getAuthTag","setAuthTag","setAAD","Cipher","PADDING","createCipheriv","equals","padBuff","writeUInt8","createCipher","aesModes","desModes","keyLen","ivLen","Cipheriv","Decipheriv","listCiphers","getCiphers","Object","assert","val","msg","ctor","superCtor","super_","TempCtor","constructor","BN","number","base","endian","isBN","negative","words","red","_init","wordSize","window","e","parseHex4Bits","string","index","c","charCodeAt","parseHexByte","lowerBound","r","parseBase","str","end","mul","move","dest","src","num","isArray","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","w","off","_strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","copy","_move","clone","_expand","size","_normSign","Symbol","for","inspect","zeros","groupSizes","groupBases","padding","carry","groupSize","groupBase","isZero","modrn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","smallMulTo","lo","ncarry","rword","maxJ","ArrayType","byteLength","reqLength","res","allocate","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","uxor","bytesNeeded","bitsLeft","setn","wbit","iadd","isub","sub","comb10MulTo","mid","o","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","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","y","mulTo","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","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","q","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","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","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","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","randomBytes","blind","priv","getr","blinder","modulus","publicExponent","unblinder","prime1","prime2","crt","blinds","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","item","readUInt8","ciphers","deciphers","Rand","rand","generate","_rand","getBytes","Uint8Array","getByte","crypto","getRandomValues","arr","msCrypto"],"mappings":"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","file":"js/chunk-vendors~5bb1f863.76f1b95f.js","sourcesContent":["exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","(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 ? '';\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","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n"],"sourceRoot":""}